diff --git a/.idea/dictionaries/exodus4d.xml b/.idea/dictionaries/exodus4d.xml index 1e7f7978..7003a0d0 100644 --- a/.idea/dictionaries/exodus4d.xml +++ b/.idea/dictionaries/exodus4d.xml @@ -4,12 +4,14 @@ addclass bootbox contextmenu + crosshairs cytaclysmic dashstyle datatables deps fontawesome jqueryui + jumpbridge killboard killmail mouseover diff --git a/config.rb b/config.rb index fc55a7c7..dd80b554 100644 --- a/config.rb +++ b/config.rb @@ -11,13 +11,14 @@ sass_dir = "sass" images_dir = "img" generated_images_path = "img_cache" javascripts_dir = "javascripts" +fonts_dir = "fonts" # You can select your preferred output style here (can be overridden via the command line): # output_style = :expanded or :nested or :compact or :compressed output_style = :compressed # To enable relative paths to assets via compass helper functions. Uncomment: -# relative_assets = true +relative_assets = true # To disable debugging comments that display the original location of your selectors. Uncomment: line_comments = false diff --git a/fonts/Oxygen-Bold.ttf b/fonts/Oxygen-Bold.ttf deleted file mode 100644 index 835ab053..00000000 Binary files a/fonts/Oxygen-Bold.ttf and /dev/null differ diff --git a/fonts/Oxygen-Light.ttf b/fonts/Oxygen-Light.ttf deleted file mode 100644 index 08b9fec3..00000000 Binary files a/fonts/Oxygen-Light.ttf and /dev/null differ diff --git a/fonts/Oxygen-Regular.ttf b/fonts/Oxygen-Regular.ttf deleted file mode 100644 index a66ddf1c..00000000 Binary files a/fonts/Oxygen-Regular.ttf and /dev/null differ diff --git a/fonts/oxygen-bold-webfont.eot b/fonts/oxygen-bold-webfont.eot new file mode 100644 index 00000000..b2715890 Binary files /dev/null and b/fonts/oxygen-bold-webfont.eot differ diff --git a/fonts/oxygen-bold-webfont.ttf b/fonts/oxygen-bold-webfont.ttf new file mode 100644 index 00000000..37214009 Binary files /dev/null and b/fonts/oxygen-bold-webfont.ttf differ diff --git a/fonts/oxygen-bold-webfont.woff b/fonts/oxygen-bold-webfont.woff new file mode 100644 index 00000000..9c0f4bba Binary files /dev/null and b/fonts/oxygen-bold-webfont.woff differ diff --git a/fonts/oxygen-light-webfont.eot b/fonts/oxygen-light-webfont.eot new file mode 100644 index 00000000..b718ec0e Binary files /dev/null and b/fonts/oxygen-light-webfont.eot differ diff --git a/fonts/oxygen-light-webfont.ttf b/fonts/oxygen-light-webfont.ttf new file mode 100644 index 00000000..1d0f5fcd Binary files /dev/null and b/fonts/oxygen-light-webfont.ttf differ diff --git a/fonts/oxygen-light-webfont.woff b/fonts/oxygen-light-webfont.woff new file mode 100644 index 00000000..337d0e7c Binary files /dev/null and b/fonts/oxygen-light-webfont.woff differ diff --git a/fonts/oxygen-regular-webfont.eot b/fonts/oxygen-regular-webfont.eot new file mode 100644 index 00000000..c1a197b1 Binary files /dev/null and b/fonts/oxygen-regular-webfont.eot differ diff --git a/fonts/oxygen-regular-webfont.ttf b/fonts/oxygen-regular-webfont.ttf new file mode 100644 index 00000000..2ad32f62 Binary files /dev/null and b/fonts/oxygen-regular-webfont.ttf differ diff --git a/fonts/oxygen-regular-webfont.woff b/fonts/oxygen-regular-webfont.woff new file mode 100644 index 00000000..337867e0 Binary files /dev/null and b/fonts/oxygen-regular-webfont.woff differ diff --git a/index.htm b/index.htm index 5eba9c35..1e226b8e 100644 --- a/index.htm +++ b/index.htm @@ -5,6 +5,11 @@ + + diff --git a/js/app/init.js b/js/app/init.js index b97c33ce..2a318e55 100644 --- a/js/app/init.js +++ b/js/app/init.js @@ -15,6 +15,24 @@ define(['jquery'], function($) { eveCentral: 'http://api.eve-central.com/api/' // jump rout api }, classes: { + // map types + mapTypes: { + global: { + class: 'pf-map-type-global', + classTab: 'pf-map-type-tab-global', + label: 'Global' + }, + alliance: { + class: 'pf-map-type-alliance', + classTab: 'pf-map-type-tab-alliance', + label: 'Alliance' + }, + private: { + class: 'pf-map-type-private', + classTab: 'pf-map-type-tab-private', + label: 'Private' + } + }, // system effects systemEffects: { @@ -156,6 +174,63 @@ define(['jquery'], function($) { pieChartMapCounterClass: 'pf-pie-chart-map-timer' // class for timer chart } }, + // map scopes + defaultMapScope: 'wh', // default scope for connection + mapScopes: { // available scopes for a connection + wh: { + label: 'wormhole' + }, + stargate: { + label: 'stargate' + }, + jumpbridge: { + label: 'jumpbridge' + } + }, + // map connection types + connectionTypes: { + jumpbridge: { + cssClass: 'pf-map-connection-jumpbridge' + }, + stargate: { + cssClass: 'pf-map-connection-stargate' + }, + wh: { + cssClass: 'pf-map-connection-wh' + }, + wh_eol: { + cssClass: 'pf-map-connection-wh-eol' + }, + wh_reduced: { + cssClass: 'pf-map-connection-wh-reduced' + }, + wh_critical: { + cssClass: 'pf-map-connection-wh-critical' + }, + frigate: { + cssClass: 'pf-map-connection-frig', + paintStyle: { + dashstyle: '0.9' + }, + overlays:[ + [ 'Label', + { + label: 'frig', + cssClass: ['pf-map-connection-overlay', 'frig'].join(' ') + } ] + ] + }, + preserve_mass: { + cssClass: 'pf-map-connection-preserve-mass', + overlays:[ + [ 'Label', + { + label: ' save mass', + cssClass: ['pf-map-connection-overlay', 'mass'].join(' ') + } ] + ] + } + }, // system effects systemEffects:{ wh: { diff --git a/js/app/main.js b/js/app/main.js index cb258044..234f8a85 100644 --- a/js/app/main.js +++ b/js/app/main.js @@ -42,6 +42,7 @@ define([ effect: 'magnetar', type: 'wh', security: 'C6', + trueSec: -1, status: 'friendly', locked: '1', rally: '0', @@ -132,17 +133,27 @@ define([ { source: 3, target: 4, - type: 'wh' + scope: 'stargate', + type: [ + 'stargate' + ] }, { source: 4, target: 30002979, - type: 'wh' + type: [ + 'wh', + 'wh_critical' + ] }, { source: 4, target: 30000142, - type: 'wh' + type: [ + 'wh', + 'wh_eol', + 'wh_reduced' + ] } ] } @@ -185,7 +196,9 @@ define([ connections: [{ source: 50, target: 51, - type: 'wh' + type: [ + 'wh' + ] }] } }, diff --git a/js/app/map/contextmenu.js b/js/app/map/contextmenu.js index 756fbcd2..16bcc5d3 100644 --- a/js/app/map/contextmenu.js +++ b/js/app/map/contextmenu.js @@ -7,15 +7,36 @@ define(["jquery"], function($) { return this.each(function () { // Open context menu - $(this).on("pf:openContextMenu", function (e, originalEvent, component) { + $(this).on("pf:openContextMenu", function (e, originalEvent, component, hiddenOptions, activeOptions) { + // hide all other open context menus + // $('.dropdown-menu').hide(); + var contextMenu = $(settings.menuSelector); + + var menuLiElements = contextMenu.find('li'); + + // show all menu entries + menuLiElements.show(); + + // disable specific menu entries + for(var i = 0; i < hiddenOptions.length; i++){ + contextMenu.find('li[data-action="' + hiddenOptions[i] + '"]').hide(); + } + + // un activate all menu entries + menuLiElements.removeClass('active'); + + //set active specific menu entries + for(var j = 0; j < activeOptions.length; j++){ + contextMenu.find('li[data-action="' + activeOptions[j] + '"]').addClass('active'); + } //open menu - $(settings.menuSelector) + contextMenu .show() .css({ - position: "absolute", + position: 'absolute', left: getLeftLocation(originalEvent), top: getTopLocation(originalEvent) }) diff --git a/js/app/map/map.js b/js/app/map/map.js index dd57c6cc..4c0faf40 100644 --- a/js/app/map/map.js +++ b/js/app/map/map.js @@ -85,7 +85,7 @@ define([ source: { filter: '.' + config.systemHeadNameClass, anchor: 'Continuous', - connector: [ 'Bezier', { curviness: 40, cssClass: 'pf-map-connection-wh' } ], + connector: [ 'Bezier', { curviness: 40, cssClass: 'pf-map-connection-wh'} ], maxConnections: 20, allowLoopback:false, cssClass: config.endpointSourceClass, @@ -129,44 +129,10 @@ define([ return true; } }, - connectionTypes: { - wh: { - cssClass: 'pf-map-connection-wh' - }, - eol: { - cssClass: 'pf-map-connection-wh-eol' - }, - wh_reduced: { - cssClass: 'pf-map-connection-wh-reduced' - }, - wh_critical: { - cssClass: 'pf-map-connection-wh-critical' - }, - frigate: { - cssClass: 'pf-map-connection-frig', - paintStyle: { - dashstyle: '0.9' - }, - overlays:[ - [ 'Label', - { - label: 'frig', - cssClass: ['pf-map-connection-overlay', 'frig'].join(' ') - } ] - ] - }, - preserve_mass: { - overlays:[ - [ 'Label', - { - label: ' save mass', - cssClass: ['pf-map-connection-overlay', 'mass'].join(' ') - } ] - ] - } - } + connectionTypes: Init.connectionTypes }; + /** * get status class for a user * @param status @@ -198,20 +164,27 @@ define([ // find expand arrow var systemHeadExpand = $( $(system).find('.' + config.systemHeadExpandClass) ); + system = $(system); // remove tooltip - $(system).removeAttr('title'); + system.removeAttr('title'); // remove all content systemBody.empty(); var userCounter = 0; + system.data('currentUser', false); + // if current user is in THIS system trigger event if(currentUserData){ + /* not used jet var tabContentElement = getTabContentElementByMapElement(system); $(tabContentElement).trigger('pf:highlightTab', [{system: system}]); + */ + + system.data('currentUser', true); } // add user information @@ -249,7 +222,7 @@ define([ } - $(system).removeAttr('title'); + system.removeAttr('title'); if(userCounter === 0){ // hide expand arrow @@ -351,7 +324,10 @@ define([ ).data('name', data.name).css({ "left": data.position.x + "px", 'top': data.position.y + 'px' }); system.data('id', data.id); + system.data('name', data.name); system.data('status', statusLabel); + system.data('effect', data.effect); + system.data('trueSec', data.trueSec); system.attr('data-mapid', mapContainer.data('id')); // locked system @@ -394,6 +370,7 @@ define([ // add additional information mapContainer.data('id', mapConfig.config.id); mapContainer.data('name', mapConfig.config.name); + mapContainer.data('type', mapConfig.config.type); mapWrapper.append(mapContainer); @@ -424,7 +401,8 @@ define([ // get scope from map defaults var sourceConfig = globalMapConfig.source; - sourceConfig.scope = map.Defaults.Scope; + //sourceConfig.scope = map.Defaults.Scope; + sourceConfig.scope = 'wh'; // set all allowed connections for this scopes map.makeSource(systems, sourceConfig); }; @@ -438,7 +416,8 @@ define([ // get scope from map defaults var targetConfig = globalMapConfig.target; - targetConfig.scope = map.Defaults.Scope; + //targetConfig.scope = map.Defaults.Scope; + targetConfig.scope = 'wh'; // set all allowed connections for this scopes map.makeTarget(systems, targetConfig); }; @@ -516,7 +495,7 @@ define([ var connectionData = { source: $(connectSystem).data('id'), target: $(newSystem).data('id'), - type: 'wh' + type: ['wh'] }; drawConnection(map, connectionData); }); @@ -693,20 +672,26 @@ define([ }; /** - * get all connections of multiple systems + * get all connections of multiple systems * @param map - * @param systems Array of Systems objectts - * @returns {Array} of all connections + * @param systems + * @returns {Array} */ var getConnections = function(map, systems){ var connections = []; + var withBackConnection = false; + $.each(systems, function(i, system){ // get connections where system is source connections = connections.concat( map.getConnections({source: system}) ); - // get connections where system is target - connections = connections.concat( map.getConnections({target: system}) ); + + if(withBackConnection === true){ + // get connections where system is target + connections = connections.concat( map.getConnections({target: system}) ); + } + }); return connections; @@ -724,7 +709,7 @@ define([ var connections = []; connections = connections.concat( map.getConnections({source: systemA, target: systemB}) ); - // getconnections where system is target + // get connections where system is target connections = connections.concat( map.getConnections({source: systemB, target: systemA}) ); return connections; @@ -738,20 +723,33 @@ define([ */ var drawConnection = function(map, connectionData){ + // connection have the default map Scope scope + var scope = map.Defaults.Scope; + if(connectionData.scope){ + scope = connectionData.scope; + } + var connection = map.connect({ source: config.systemIdPrefix + connectionData.source, target: config.systemIdPrefix + connectionData.target, - type: connectionData.type - + scope: scope /* experimental (straight connections) anchors: [ [ "Perimeter", { shape: 'Rectangle' }], [ "Perimeter", { shape: 'Rectangle' }] ] */ - }); + // add connection types + if(connectionData.type){ + for(var i = 0; i < connectionData.type.length; i++){ + connection.addType(connectionData.type[i]); + } + } + + + // set Observer for new Connection setConnectionObserver(map, connection); @@ -773,7 +771,12 @@ define([ items: [ {icon: 'fa-plus', action: 'add_system', text: 'add system'}, {icon: 'fa-info', action: 'info', text: 'info'}, - {divider: true}, + {icon: 'fa-filter', action: 'filter_scope', text: 'filter scope', subitems: [ + {subIcon: '', subAction: 'filter_wh', subText: 'wormhole'}, + {subIcon: '', subAction: 'filter_stargate', subText: 'stargate'}, + {subIcon: '', subAction: 'filter_jumpbridge', subText: 'jumpbridge'} + ]}, + {divider: true, action: 'delete_systems'}, {icon: 'fa-eraser', action: 'delete_systems', text: 'delete systems'} ] }; @@ -797,16 +800,22 @@ define([ {icon: 'fa-info', action: 'info', text: 'info'}, {icon: 'fa-plane', action: 'frigate', text: 'frigate hole'}, {icon: 'fa-warning', action: 'preserve_mass', text: 'preserve mass'}, - {icon: 'fa-reply fa-rotate-180', text: 'change status', subitems: [ - {subIcon: 'fa-clock-o', subAction: 'eol', subText: 'toggle EOL'}, + {icon: 'fa-reply fa-rotate-180', action: 'change_status', text: 'change status', subitems: [ + {subIcon: 'fa-clock-o', subAction: 'wh_eol', subText: 'toggle EOL'}, {subDivider: true}, {subIcon: 'fa-circle', subAction: 'status_fresh', subText: 'stage 0 (fresh)'}, {subIcon: 'fa-adjust', subAction: 'status_reduced', subText: 'stage 1 (reduced)'}, {subIcon: 'fa-circle-o', subAction: 'status_critical', subText: 'stage 2 (critical)'} ]}, - {divider: true}, - {icon: 'fa-eraser', action: 'delete', text: 'delete'} + {icon: 'fa-crosshairs', action: 'change_scope', text: 'change scope', subitems: [ + {subIcon: '', subAction: 'scope_wh', subText: 'wormhole'}, + {subIcon: '', subAction: 'scope_stargate', subText: 'stargate'}, + {subIcon: '', subAction: 'scope_jumpbridge', subText: 'jumpbridge'} + + ]}, + {divider: true, action: 'delete_connection'}, + {icon: 'fa-eraser', action: 'delete_connection', text: 'delete'} ] }; @@ -842,7 +851,7 @@ define([ {icon: 'fa-lock', action: 'lock_system', text: 'lock system'}, {icon: 'fa-users', action: 'set_rally', text: 'set rally point'}, {icon: 'fa-reply fa-rotate-180', text: 'change status', subitems: systemStatus}, - {divider: true}, + {divider: true, action: 'delete_system'}, {icon: 'fa-eraser', action: 'delete_system', text: 'delete system'} ] }; @@ -934,9 +943,14 @@ define([ // trigger context menu system.on('contextmenu', function(e){ - // hide all map tooltips + var systemElement = $(this); - $(e.target).trigger('pf:openContextMenu', [e, this]); + // hide all map tooltips + var hideOptions = getHiddenContextMenuOptions(systemElement); + + var activeOptions = getActiveContextMenuOptions(systemElement); + + $(e.target).trigger('pf:openContextMenu', [e, this, hideOptions, activeOptions]); e.preventDefault(); return false; }); @@ -953,7 +967,7 @@ define([ var currentSystem = $(params.component); // system name - var currentSystemName = currentSystem.getSystemInfo( ['name'] ); + var currentSystemName = currentSystem.getSystemInfo( ['alias'] ); switch(action){ case 'add_system': @@ -1037,7 +1051,7 @@ define([ $(currentSystem).getMapOverlay().startMapUpdateCounter(); - var systemName = currentSystem.getSystemInfo(['name']); + var systemName = currentSystem.getSystemInfo(['alias']); deleteSystem(map, currentSystem); Util.showNotify({title: 'System deleted', text: systemName, type: 'success'}); @@ -1108,7 +1122,7 @@ define([ } }else{ - var systemName = system.getSystemInfo( ['name'] ); + var systemName = system.getSystemInfo( ['alias'] ); Util.showNotify({title: 'System is locked', text: systemName, type: 'error'}); } @@ -1149,7 +1163,7 @@ define([ hideCounter = true; } - var systemName = system.getSystemInfo( ['name'] ); + var systemName = system.getSystemInfo( ['alias'] ); if( system.data( 'locked' ) === true ){ system.data('locked', false); @@ -1213,7 +1227,7 @@ define([ system.data( 'rally', true ); if(! hideNotification){ - var systemName = system.getSystemInfo( ['name'] ); + var systemName = system.getSystemInfo( ['alias'] ); var notificationOptions = { title: 'New rally Point', @@ -1265,7 +1279,14 @@ define([ var container = map.getContainer(); $(container).on('contextmenu', function(e){ - $(e.target).trigger('pf:openContextMenu', [e, this]); + + var mapElement = $(this); + + var hideOptions = getHiddenContextMenuOptions(mapElement); + + var activeOptions = getActiveContextMenuOptions(mapElement); + + $(e.target).trigger('pf:openContextMenu', [e, mapElement, hideOptions, activeOptions]); e.preventDefault(); e.stopPropagation(); return false; @@ -1293,6 +1314,33 @@ define([ case 'add_system': // add new system dialog showNewSystemDialog(currentMap, {position: position}); + break; + case 'filter_wh': + case 'filter_stargate': + case 'filter_jumpbridge': + // filter (show/hide) + var filterScope = action.split('_')[1]; + + // scope label + var filterScopeLabel = Util.getScopeInfoForMap(filterScope, 'label'); + + var showScope = true; + if(currentMapElement.data('filter_scope_' + filterScope) !== true){ + showScope = false; + } + currentMapElement.data('filter_scope_' + filterScope, ! showScope); + + + $.each(currentMap.getConnections(filterScope), function(idx, tempConnection) { + var tempEndpoints = tempConnection.endpoints; + + for(var i = 0; i < tempEndpoints.length; i++){ + tempEndpoints[i].setVisible( showScope ); + } + }); + + Util.showNotify({title: 'Scope filter changed', text: filterScopeLabel, type: 'success'}); + break; case 'delete_systems': // delete all selected systems with its connections @@ -1314,6 +1362,10 @@ define([ } break; + case 'info': + // open map info dialog + $(document).triggerMenuEvent('ShowMapInfo'); + break; } @@ -1342,6 +1394,7 @@ define([ }, onShow: function(){ + $(document).trigger('pf:closeMenu', [{}]); }, onRefresh: function(){ } @@ -1370,8 +1423,100 @@ define([ Util.showNotify({title: 'Grid snapping', text: notificationText, type: 'info'}); }); + }; + /** + * get hidden menu entry options for a context menu + * @param component + * @returns {Array} + */ + var getHiddenContextMenuOptions = function(component){ + var hiddenOptions = []; + + if(component instanceof jsPlumb.Connection){ + // disable connection menu entries + + var scope = component.scope; + + if(scope === 'stargate'){ + hiddenOptions.push('frigate'); + hiddenOptions.push('preserve_mass'); + hiddenOptions.push('change_status'); + + hiddenOptions.push('scope_stargate'); + }else if(scope === 'jumpbridge'){ + hiddenOptions.push('frigate'); + hiddenOptions.push('change_status'); + hiddenOptions.push('scope_jumpbridge'); + }else if(scope === 'wh'){ + hiddenOptions.push('scope_wh'); + } + + }else if( component.hasClass(config.systemClass) ){ + // disable system menu entries + if(component.data('locked') === true){ + hiddenOptions.push('delete_system'); + } + } + + return hiddenOptions; + }; + + /** + * get active menu entry options for a context menu + * @param component + * @returns {Array} + */ + var getActiveContextMenuOptions = function(component){ + + var activeOptions = []; + + if(component instanceof jsPlumb.Connection){ + var scope = component.scope; + + if(component.hasType('wh_eol') === true){ + activeOptions.push('wh_eol'); + } + + if(component.hasType('frigate') === true){ + activeOptions.push('frigate'); + } + if(component.hasType('preserve_mass') === true){ + activeOptions.push('preserve_mass'); + } + if(component.hasType('wh_reduced') === true){ + activeOptions.push('status_reduced'); + }else if(component.hasType('wh_critical') === true){ + activeOptions.push('status_critical'); + }else{ + // not reduced is default + activeOptions.push('status_fresh'); + + } + + }else if( component.hasClass(config.mapClass) ){ + // active map menu entries + if(component.data('filter_scope_wh') === true){ + activeOptions.push('filter_wh'); + } + if(component.data('filter_scope_stargate') === true){ + activeOptions.push('filter_stargate'); + } + if(component.data('filter_scope_jumpbridge') === true){ + activeOptions.push('filter_jumpbridge'); + } + }else if( component.hasClass(config.systemClass) ){ + // active system menu entries + if(component.data('locked') === true){ + activeOptions.push('lock_system'); + } + if(component.data('rally') === true){ + activeOptions.push('set_rally'); + } + } + + return activeOptions; }; /** @@ -1381,9 +1526,18 @@ define([ */ var setConnectionObserver = function(map, connection){ + // get map container + var mapElement = $( map.getContainer() ); + connection.bind('contextmenu', function(component, e) { // trigger menu "open - $(e.target).trigger('pf:openContextMenu', [e, component]); + + // get invisible menu entries + var hideOptions = getHiddenContextMenuOptions(component); + + var activeOptions = getActiveContextMenuOptions(component); + + $(e.target).trigger('pf:openContextMenu', [e, component, hideOptions, activeOptions]); e.preventDefault(); e.stopPropagation(); return false; @@ -1394,45 +1548,92 @@ define([ * must be triggered manually on demand */ - $('path').contextMenu({ + $(connection.canvas).contextMenu({ menuSelector: "#" + config.connectionContextMenuId, menuSelected: function (params){ var action = params.selectedMenu.attr('data-action'); var activeConnection = params.component; + var activeScope = activeConnection.scope; + var activeScopeName = Util.getScopeInfoForMap(activeScope, 'label'); switch(action){ - case 'delete': + case 'delete_connection': // delete a single connection // confirm dialog bootbox.confirm('Is this connection really gone?', function(result) { if(result){ + mapElement.getMapOverlay().startMapUpdateCounter(); + map.detach(params.component); } }); break; case 'frigate': // set as frigate hole case 'preserve_mass': // set "preserve mass - case 'eol': // set "end of life" + case 'wh_eol': // set "end of life" + + mapElement.getMapOverlay().startMapUpdateCounter(); + activeConnection.toggleType( action ); // for some reason a new observer is needed ?! setConnectionObserver(map, activeConnection); break; case 'status_fresh': + + mapElement.getMapOverlay().startMapUpdateCounter(); + activeConnection.removeType('wh_reduced'); activeConnection.removeType('wh_critical'); setConnectionObserver(map, activeConnection); break; case 'status_reduced': + + mapElement.getMapOverlay().startMapUpdateCounter(); + activeConnection.removeType('wh_critical'); activeConnection.addType('wh_reduced'); setConnectionObserver(map, activeConnection); break; case 'status_critical': + + mapElement.getMapOverlay().startMapUpdateCounter(); + activeConnection.removeType('wh_reduced'); activeConnection.addType('wh_critical'); setConnectionObserver(map, activeConnection); + break; + case 'scope_wh': + case 'scope_stargate': + case 'scope_jumpbridge': + + var newScope = action.split('_')[1]; + var newScopeName = Util.getScopeInfoForMap( newScope, 'label'); + + bootbox.confirm('Change scope from ' + activeScopeName + ' to ' + newScopeName + '?', function(result) { + if(result){ + + mapElement.getMapOverlay().startMapUpdateCounter(); + + // remove all connection types + activeConnection.clearTypes(); + + // set new new connection type + activeConnection.addType(newScope); + + // change scope + activeConnection.scope = newScope; + + var scopeLabel = Util.getScopeInfoForMap(newScope, 'label'); + + setConnectionObserver(map, activeConnection); + + Util.showNotify({title: 'Connection scope changed', text: 'New scope: ' + scopeLabel, type: 'success'}); + + } + }); + break; case 'info': console.log('info'); @@ -1441,6 +1642,7 @@ define([ } }); + }; /** @@ -1470,8 +1672,8 @@ define([ for(var i = 0; i < info.length; i++){ switch(info[i]){ - case 'name': - // get current system name/alias + case 'alias': + // get current system alias systemInfo.push( $(this).find('.' + config.systemHeadNameClass).text() ); break; default: @@ -1497,6 +1699,8 @@ define([ */ var showNewSystemDialog = function(map, options){ + var mapContainer = $(map.getContainer()); + // format system status for form select var systemStatus = {}; @@ -1533,7 +1737,7 @@ define([ className: 'btn-primary', callback: function () { - $(options.sourceSystem).getMapOverlay().startMapUpdateCounter(); + mapContainer.getMapOverlay().startMapUpdateCounter(); // get form Values var form = $('#' + config.systemDialogId).find('form'); @@ -1606,17 +1810,17 @@ define([ if(typeof activeInstances[mapId] !== 'object'){ // create new instance activeInstances[mapId] = jsPlumb.getInstance({ - Container: null, // will be set as soon as container is connected to DOM + Container: null, // will be set as soon as container is connected to DOM PaintStyle:{ - lineWidth: 4, // width of a Connector's line. An integer. - strokeStyle: 'red', // color for a Connector - outlineColor: 'red', // color of the outline for an Endpoint or Connector. see fillStyle examples. - outlineWidth: 2 // width of the outline for an Endpoint or Connector. An integer. + lineWidth: 4, // width of a Connector's line. An integer. + strokeStyle: 'red', // color for a Connector + outlineColor: 'red', // color of the outline for an Endpoint or Connector. see fillStyle examples. + outlineWidth: 2 // width of the outline for an Endpoint or Connector. An integer. }, Connector:[ 'Bezier', { curviness: 40, cssClass: 'pf-map-connection-wh' } ], - Endpoint : ['Dot', {radius: 6}] + Endpoint : ['Dot', {radius: 6}], // Endpoint: 'Blank', // does not work... :( - // Scope: mapConfig.config.scope + Scope: Init.defaultMapScope // default map scope for connections }); console.log('new jsPlumbInstance: ' + mapId); @@ -1680,6 +1884,8 @@ define([ var mapElement = $(this); + var map = getMapInstance( mapElement.data('id') ); + var mapData = {}; // check if there is an active map counter that prevents collecting map data @@ -1688,30 +1894,38 @@ define([ var interval = counterChart.data('interval'); + if(! interval){ // map config --------------------------------- var mapConfig = {}; mapConfig.id = mapElement.data('id'); mapConfig.name = mapElement.data('name'); + mapConfig.type = mapElement.data('type'); mapData.config = mapConfig; // map data ----------------------------------- var data = {}; - // systems ------------------------------------ + var systemsData = []; var systems = mapElement.find('.' + config.systemClass); for(var i = 0; i < systems.length; i++){ + // systems data ------------------------------------ + var tempSystem = $(systems[i]); var systemData = {}; systemData.id = tempSystem.data('id'); - systemData.alias = tempSystem.find('.' + config.systemHeadNameClass).editable('getValue', true); + systemData.name = tempSystem.data('name'); + systemData.alias = tempSystem.getSystemInfo(['alias']); systemData.status = tempSystem.data('status'); + systemData.effect = tempSystem.data('effect'); + systemData.trueSec = tempSystem.data('trueSec'); systemData.locked = tempSystem.data('locked'); systemData.rally = tempSystem.data('rally'); + systemData.currentUser = tempSystem.data('currentUser'); // position ------------------------------- var positionData = {}; @@ -1731,9 +1945,27 @@ define([ data.systems = systemsData; // connections -------------------------------- - var connections = []; + var connections = map.getAllConnections(); + var connectionsFormatted = []; + // format connections + for(var j = 0; j < connections.length; j++){ - data.connections = connections; + var source = $(connections[j].source); + var target = $(connections[j].target); + + var connection = { + source: source.data('id'), + sourceName: source.data('name'), + target: target.data('id'), + targetName: target.data('name'), + scope: connections[j].scope, + type: connections[j].getType() + }; + + connectionsFormatted.push(connection); + } + + data.connections = connectionsFormatted; mapData.data = data; }else{ @@ -2037,10 +2269,6 @@ define([ return this.each(function () { - // remove previous dragging capability - $(this).destroySystemDraggable(); - - $(this).draggable(options, { start: function (e, ui) { // drag start diff --git a/js/app/module_map.js b/js/app/module_map.js index c9a96622..cd75ee01 100644 --- a/js/app/module_map.js +++ b/js/app/module_map.js @@ -61,14 +61,6 @@ define([ sigTableEditSigNameSelect: 'pf-sig-table-edit-name-select', // class for editable fields (select) sigTableCounterClass: 'pf-sig-table-counter', // class for signature table counter - // map types - mapTypes: [ - {type: 'default', label: 'default', class: 'pf-map-type-default'}, - {type: 'global', label: 'global', class: 'pf-map-type-global'}, - {type: 'alliance', label: 'alliance', class: 'pf-map-type-alliance'}, - {type: 'private', label: 'private', class: 'pf-map-type-private'} - ], - // map scopes mapScopes: [ {scope: 'wormhole', label: 'W-Space'} @@ -83,9 +75,6 @@ define([ {class: 'fa-rocket', label: 'rocket'} ] - - - }; var cache = { @@ -93,24 +82,6 @@ define([ systemKillsGraphData: {} // data for system kills info graph }; - /** - * get map type class for a type - * @param type - * @returns {string} - */ - var getMapTypeClassForType = function(type){ - - var typeClass= ''; - - $.each(config.mapTypes, function(i, typeData){ - if(typeData.type === type){ - typeClass = typeData.class; - } - }); - - return typeClass; - }; - /** * shows the add new map dialog */ @@ -155,7 +126,7 @@ define([ id: config.newMapDialogId, title: 'Add new map', scope: config.mapScopes, - type: config.mapTypes, + type: Util.getMapTypes(), icon: config.mapIcons }; @@ -230,12 +201,11 @@ define([ drawSystemInfoElement($( e.target ), systemInfoData); }); - // highlite a mapTab + // highlight a mapTab $(this).on('pf:highlightTab', function(e, data){ // update Tab Content with system data information - // not used jet - // highlightTab(e.target, data); + highlightTab(e.target, data); }); @@ -1975,7 +1945,7 @@ define([ index: i, name: data.config.name, icon: data.config.icon, - tabClass: [config.mapTabClass, getMapTypeClassForType( data.config.type) ].join(' '), + tabClass: [config.mapTabClass, Util.getInfoForMap( data.config.type, 'classTab') ].join(' '), contentClass: config.mapTabContentClass, active: active }); @@ -1987,7 +1957,7 @@ define([ index: -1, name: 'add', icon: 'fa-plus', - tabClass: [config.mapTabClass, getMapTypeClassForType('default')].join(' '), + tabClass: [config.mapTabClass, Util.getInfoForMap( 'default', 'classTab') ].join(' '), contentClass: config.mapTabContentClass, pullRight: true }); diff --git a/js/app/page.js b/js/app/page.js index fac56b3f..be391206 100644 --- a/js/app/page.js +++ b/js/app/page.js @@ -44,10 +44,15 @@ define([ // 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 + // map manual dialog + mapManualScrollspyId: 'pf-manual-scrollspy', // id for map manual scrollspy + mapManualScrollspyNavClass: 'pf-manual-scrollspy-nav', // class for map manual scrollspy navigation + mapManualNavigationListItemClass: 'pf-manual-navigation-list-item', // class for map manual li main navigation elements + + // map info dialog + mapInfoSystemsId: 'pf-map-info-systems', // id for map info systems box + mapInfoConnectionsId: 'pf-map-info-connections', // id for map info connections box + mapInfoTableClass: 'pf-map-info-table', // class for data // helper element dynamicElementWrapperId: 'pf-dialog-wrapper' @@ -126,6 +131,17 @@ define([ class: 'fa fa-home fa-fw' }) ) + ).append( + $('', { + class: 'list-group-item', + href: '#' + }).html('  Manual').prepend( + $('',{ + class: 'fa fa-info fa-fw' + }) + ).on('click', function(){ + $(document).triggerMenuEvent('Manual', {button: this}); + }) ).append( $('', { class: 'list-group-item', @@ -180,6 +196,17 @@ define([ $('
', { class: 'list-group' }).append( + $('', { + class: 'list-group-item', + href: '#' + }).html('  Info').prepend( + $('',{ + class: 'fa fa-info fa-fw' + }) + ).on('click', function(){ + $(document).triggerMenuEvent('ShowMapInfo'); + }) + ).append( $('', { class: 'list-group-item', href: '#' @@ -190,17 +217,6 @@ define([ ).on('click', function(){ $('#' + config.mapModuleId).getActiveMap().triggerMenuEvent('Grid', {button: this}); }) - ).append( - $('', { - class: 'list-group-item', - href: '#' - }).html('  Legend').prepend( - $('',{ - class: 'fa fa-info fa-fw' - }) - ).on('click', function(){ - $(document).triggerMenuEvent('Legend', {button: this}); - }) ) ); }; @@ -239,6 +255,12 @@ define([ $('.' + config.headMapClass).on('click', function() { slideMenu.slidebars.toggle('right'); }); + + $(document).on('pf:closeMenu', function(e){ + // close all menus + slideMenu.slidebars.close(); + }); + } } }; @@ -296,34 +318,305 @@ define([ notificationTest(); }); - $(document).on('pf:menuLegend', function(e){ - // show map legend - showMaplegend(); + $(document).on('pf:menuManual', function(e){ + // show map manual + showMapManual(); + }); + + $(document).on('pf:menuShowMapInfo', function(e){ + // show map information dialog + showMapInfoDialog(); }); - showMaplegend(); }; /** - * shows the map legend modal dialog + * shows the map information modal dialog + * @param mapData */ - var showMaplegend = function(){ + var showMapInfoDialog = function(){ - requirejs(['text!templates/modules/map_legend_dialog.html', 'lib/mustache'], function(template, Mustache) { + var mapData = $('#' + config.mapModuleId).getActiveMap().getMapData(); + requirejs(['text!templates/modules/map_info_dialog.html', 'lib/mustache'], function(template, Mustache) { + + console.log(mapData) var data = { - scrollspyId: config.mapLegendScrollspyId, - scrollspyNavClass: config.mapLegendScrollspyNavClass, - scrollspyNavLiClass: config.mapLegendNavigationListItemClass, - pieChartClass : Init.classes.pieChart.pieChartMapCounterClass, - mapCounterClass : Init.classes.pieChart.pieChartMapCounterClass + mapInfoSystemsId: config.mapInfoSystemsId, + mapInfoConnectionsId: config.mapInfoConnectionsId, + mapDataConfig: mapData.config, + mapName: mapData.config.name, + mapTypeClass: Util.getInfoForMap( mapData.config.type, 'class'), + mapTypeLabel: Util.getInfoForMap( mapData.config.type, 'label') }; var content = Mustache.render(template, data); + var mapInfoDialog = bootbox.dialog({ + title: 'Map information', + message: content, + buttons: { + success: { + label: 'close', + className: 'btn-primary', + callback: function() { + $(mapInfoDialog).modal('hide'); + } + } + } + }); + + mapInfoDialog.on('shown.bs.modal', function(e) { + // modal on open + + var systemsElement = $('#' + config.mapInfoSystemsId); + var connectionsElement = $('#' + config.mapInfoConnectionsId); + + var loadingOptions = { + icon: { + size: 'fa-2x' + } + }; + + + var systemTable = $('', { + class: ['compact', 'stripe', 'order-column', 'row-border', config.mapInfoTableClass].join(' ') + }); + systemsElement.append(systemTable); + + systemsElement.showLoadingAnimation(loadingOptions); + + var connectionTable = $('
', { + class: ['compact', 'stripe', 'order-column', 'row-border', config.mapInfoTableClass].join(' ') + }); + connectionsElement.append(connectionTable); + + connectionsElement.showLoadingAnimation(loadingOptions); + + // systems table ================================================== + + // prepare data for dataTables + var systemsData = []; + for(var i = 0; i < mapData.data.systems.length; i++){ + var tempSystemData = mapData.data.systems[i]; + + var tempData = []; + + // current position + if(tempSystemData.currentUser === true){ + tempData.push( '' ); + }else{ + tempData.push( '' ); + } + + tempData.push( tempSystemData.name ); + + if( tempSystemData.name !== tempSystemData.alias){ + tempData.push( tempSystemData.alias ); + }else{ + tempData.push( '' ); + } + + // status + var systemStatusClass = Util.getStatusInfoForSystem(tempSystemData.status, 'class'); + if(systemStatusClass !== ''){ + tempData.push( '' ); + }else{ + tempData.push( '' ); + } + + // effect + var systemEffectClass = Util.getEffectInfoForSystem(tempSystemData.effect, 'class'); + if(systemEffectClass !== ''){ + tempData.push( '' ); + }else{ + tempData.push( '' ); + } + + // trueSec + var systemTrueSecClass = Util.getTrueSecClassForSystem(tempSystemData.trueSec); + if(systemTrueSecClass !== ''){ + tempData.push( '' + tempSystemData.trueSec.toFixed(1) + '' ); + }else{ + tempData.push( '' ); + } + + // locked + if(tempSystemData.locked === true){ + tempData.push( '' ); + }else{ + tempData.push( '' ); + } + + // rally point + if(tempSystemData.rally === true){ + tempData.push( '' ); + }else{ + tempData.push( '' ); + } + + systemsData.push(tempData); + } + + var systemsDataTable = systemTable.dataTable( { + paging: false, + ordering: true, + order: [ 0, 'desc' ], + autoWidth: false, + hover: false, + data: systemsData, + columnDefs: [], + language: { + emptyTable: 'Map is empty', + zeroRecords: 'No systems found', + lengthMenu: 'Show _MENU_ systems', + info: 'Showing _START_ to _END_ of _TOTAL_ systems' + }, + columns: [ + { + title: '', + width: '15px', + searchable: false + },{ + title: 'system', + width: '50px' + },{ + title: 'alias' + },{ + title: 'status', + width: '30px', + class: 'text-center', + orderable: false, + searchable: false + },{ + title: 'effect', + width: '30px', + class: 'text-center', + orderable: false, + searchable: false + },{ + title: 'sec.', + width: '20px', + class: 'text-center', + orderable: false, + searchable: false + },{ + title: '', + width: '30px', + class: 'text-center', + searchable: false + },{ + title: '', + width: '30px', + className: 'text-center', + searchable: false + } + ] + }); + + systemsElement.hideLoadingAnimation(); + + // connections table ================================================== + + // prepare data for dataTables + var connectionData = []; + for(var j = 0; j < mapData.data.connections.length; j++){ + var tempConnectionData = mapData.data.connections[j]; + + var tempConData = []; + + tempConData.push( Util.getScopeInfoForMap( tempConnectionData.scope, 'label') ); + + // source system name + tempConData.push( tempConnectionData.sourceName ); + + // connection + var connectionClasses = []; + for(var k = 0; k < tempConnectionData.type.length; k++){ + connectionClasses.push( Util.getConnectionInfo( tempConnectionData.type[k], 'cssClass') ); + + } + + connectionClasses = connectionClasses.join(' '); + + tempConData.push( '
' ); + + + tempConData.push( tempConnectionData.targetName ); + + connectionData.push(tempConData); + } + + var connectionDataTable = connectionTable.dataTable( { + paging: false, + ordering: true, + order: [ 0, 'desc' ], + autoWidth: false, + hover: false, + data: connectionData, + columnDefs: [], + language: { + emptyTable: 'No connections', + zeroRecords: 'No connections found', + lengthMenu: 'Show _MENU_ connections', + info: 'Showing _START_ to _END_ of _TOTAL_ connections' + }, + columns: [ + { + title: 'scope', + width: '50px', + orderable: false + },{ + title: 'source system' + },{ + title: 'connection', + width: '80px', + class: 'text-center', + orderable: false, + searchable: false + },{ + title: 'target system' + } + ] + }); + + + connectionsElement.hideLoadingAnimation(); + + + }); + + }); + + }; + + /** + * shows the map manual modal dialog + */ + var showMapManual = function(){ + + requirejs(['text!templates/modules/map_manual_dialog.html', 'lib/mustache'], function(template, Mustache) { + + var data = { + scrollspyId: config.mapManualScrollspyId, + scrollspyNavClass: config.mapManualScrollspyNavClass, + scrollspyNavLiClass: config.mapManualNavigationListItemClass, + pieChartClass : Init.classes.pieChart.pieChartMapCounterClass, + mapCounterClass : Init.classes.pieChart.pieChartMapCounterClass, + + mapTypeGlobalClass: Util.getInfoForMap( 'global', 'class'), + mapTypeGlobalLabel: Util.getInfoForMap( 'global', 'label'), + mapTypeAllianceClass: Util.getInfoForMap( 'alliance', 'class'), + mapTypeAllianceLabel: Util.getInfoForMap( 'alliance', 'label'), + mapTypePrivateClass: Util.getInfoForMap( 'private', 'class'), + mapTypePrivateLabel: Util.getInfoForMap( 'private', 'label') + }; + + + var content = Mustache.render(template, data); // show dialog - var mapLegendDialog = bootbox.dialog({ - title: 'Map legend', + var mapManualDialog = bootbox.dialog({ + title: 'Pathfinder manual', message: content, className: 'medium', buttons: { @@ -331,20 +624,55 @@ define([ label: 'close', className: "btn-primary", callback: function() { - $(mapLegendDialog).modal('hide'); + $(mapManualDialog).modal('hide'); } } }, show: false }); - mapLegendDialog.modal('show'); + mapManualDialog.modal('show'); - mapLegendDialog.on('shown.bs.modal', function(e) { - // modal os open + // modal offset top + var modalOffsetTop = 200; + + // disable on scroll event + var disableOnScrollEvent = false; + + // scroll breakpoints + var scrolLBreakpointElements = null; + // scroll navigation links + var scrollNavLiElements = null; + + mapManualDialog.on('shown.bs.modal', function(e) { + // modal on open + scrolLBreakpointElements = $('.pf-manual-scroll-break'); + scrollNavLiElements = $('.' + config.mapManualNavigationListItemClass); }); - var scrollspyElement = $('#' + config.mapLegendScrollspyId); + var scrollspyElement = $('#' + config.mapManualScrollspyId); + + var whileScrolling = function(){ + + if(disableOnScrollEvent === false){ + for(var i = 0; i < scrolLBreakpointElements.length; i++){ + var offset = $(scrolLBreakpointElements[i]).offset().top; + + if( (offset - modalOffsetTop) > 0){ + + if(! $( scrollNavLiElements[i]).hasClass('active')){ + // remove all active classes + scrollNavLiElements.removeClass('active'); + // remove focus on links + scrollNavLiElements.find('a').blur(); + + $( scrollNavLiElements[i]).addClass('active'); + } + break; + } + } + } + }; // init scrollbar scrollspyElement.mCustomScrollbar({ @@ -366,7 +694,7 @@ define([ scrollspyElement.find('.' + data.mapCounterClass).initMapUpdateCounter(); // set navigation button observer - var mainNavigationLinks = $('.' + config.mapLegendScrollspyNavClass).find('a'); + var mainNavigationLinks = $('.' + config.mapManualScrollspyNavClass).find('a'); // text anchor links var subNavigationLinks = scrollspyElement.find('a[data-target]'); @@ -375,15 +703,21 @@ define([ navigationLinks.on('click', function(e){ e.preventDefault(); + disableOnScrollEvent = true; + // scroll to anchor scrollspyElement.mCustomScrollbar("scrollTo", $(this).attr('data-target')); - var mainNavigationLiElement = $(this).parent('.' + config.mapLegendNavigationListItemClass); + var mainNavigationLiElement = $(this).parent('.' + config.mapManualNavigationListItemClass); + + + whileScrolling(); // 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'); + scrollNavLiElements.removeClass('active'); // set new active class $(this).parent().addClass('active'); @@ -391,7 +725,13 @@ define([ }); - } + }, + onScroll: function(){ + disableOnScrollEvent = false; + + whileScrolling(); + }, + whileScrolling: whileScrolling }, mouseWheel:{ enable: true, @@ -403,8 +743,6 @@ define([ autoDraggerLength: true }); - - }); }; @@ -413,7 +751,14 @@ define([ * shows a test notification for desktop messages */ var notificationTest = function(){ - Util.showNotify({title: 'Test Notification', text: 'Accept browser security question'}, {desktop: true, stack: 'barBottom'}); + Util.showNotify({ + title: 'Test Notification', + text: 'Accept browser security question'}, + { + desktop: true, + stack: 'barBottom' + } + ); }; /** diff --git a/js/app/util.js b/js/app/util.js index d310b2a8..de6e0b22 100644 --- a/js/app/util.js +++ b/js/app/util.js @@ -21,7 +21,19 @@ define([ /** * displays a loading indicator on an element */ - $.fn.showLoadingAnimation = function(){ + $.fn.showLoadingAnimation = function(options){ + + var iconSize = 'fa-lg'; + + if(options){ + if(options.icon){ + if(options.icon.size){ + iconSize = options.icon.size; + } + } + + } + var overlay = $('
', { class: config.ajaxOverlayClass }).append( @@ -29,7 +41,7 @@ define([ class: [config.ajaxOverlayWrapperClass].join(' ') }).append( $('', { - class: ['fa', 'fa-lg', 'fa-circle-o-notch', 'fa-spin'].join(' ') + class: ['fa', iconSize, 'fa-circle-o-notch', 'fa-spin'].join(' ') }) ) ); @@ -152,6 +164,74 @@ define([ }; + /** + * get all available map Types + * @returns {Array} + */ + var getMapTypes = function(){ + + var mapTypes = []; + + $.each(Init.classes.mapTypes, function(prop, data){ + var tempData = { + type: prop, + label: data.label + }; + + mapTypes.push(tempData); + }); + + return mapTypes; + }; + + /** + * get map info + * @param mapType + * @param option + * @returns {string} + */ + var getInfoForMap = function(mapType, option){ + + var mapInfo = ''; + + if(Init.classes.mapTypes.hasOwnProperty(mapType)){ + mapInfo = Init.classes.mapTypes[mapType][option]; + } + + return mapInfo; + }; + + /** + * get all available scopes for a map + * @returns {Array} + */ + var getMapScopes = function(){ + + var scopes = []; + $.each(Init.mapScopes, function(prop, data){ + scopes.push(prop); + }); + + return scopes; + }; + + /** + * get some scope info for a given info string + * @param info + * @param option + * @returns {string} + */ + var getScopeInfoForMap = function(info, option){ + + var scopeInfo = ''; + + if(Init.mapScopes.hasOwnProperty(info)){ + scopeInfo = Init.mapScopes[info][option]; + } + + return scopeInfo; + }; + /** * get some system info for a given info string (e.g. rally class) * @param info @@ -259,14 +339,22 @@ define([ var getTrueSecClassForSystem = function(trueSec){ var trueSecClass = ''; - if(trueSec < 0){ - trueSec = 0; - } + trueSec = parseFloat(trueSec); - trueSec = trueSec.toFixed(1).toString(); + // check for valid decimal number + if( + !isNaN( trueSec ) && + isFinite( trueSec ) + ){ + if(trueSec < 0){ + trueSec = 0; + } - if( Init.classes.trueSec.hasOwnProperty(trueSec) ){ - trueSecClass = Init.classes.trueSec[trueSec]['class']; + trueSec = trueSec.toFixed(1).toString(); + + if( Init.classes.trueSec.hasOwnProperty(trueSec) ){ + trueSecClass = Init.classes.trueSec[trueSec]['class']; + } } return trueSecClass; @@ -289,6 +377,22 @@ define([ return statusInfo; }; + /** + * get Connection Info by option + * @param connectionTyp + * @param option + * @returns {string} + */ + var getConnectionInfo = function(connectionTyp, option){ + + var connectionInfo = ''; + if(Init.connectionTypes.hasOwnProperty(connectionTyp)){ + connectionInfo = Init.connectionTypes[connectionTyp][option]; + } + + return connectionInfo; + }; + var getSignatureGroupInfo = function(option){ @@ -395,6 +499,10 @@ define([ return { showNotify: showNotify, + getMapTypes: getMapTypes, + getInfoForMap: getInfoForMap, + getMapScopes: getMapScopes, + getScopeInfoForMap: getScopeInfoForMap, getInfoForSystem: getInfoForSystem, getEffectInfoForSystem: getEffectInfoForSystem, getSystemEffectData: getSystemEffectData, @@ -402,6 +510,7 @@ define([ getSecurityClassForSystem: getSecurityClassForSystem, getTrueSecClassForSystem: getTrueSecClassForSystem, getStatusInfoForSystem: getStatusInfoForSystem, + getConnectionInfo: getConnectionInfo, getSignatureGroupInfo: getSignatureGroupInfo, getAllSignatureNames: getAllSignatureNames, getSignatureTypeIdByName: getSignatureTypeIdByName, diff --git a/sass/_bootstrap.scss b/sass/_bootstrap.scss index 176b5670..3658d01e 100644 --- a/sass/_bootstrap.scss +++ b/sass/_bootstrap.scss @@ -17,6 +17,7 @@ // @import "bootstrap/normalize"; // @import "bootstrap/print"; + // Core CSS @import "bootstrap/scaffolding"; @import "bootstrap/type"; diff --git a/sass/_variables.scss b/sass/_variables.scss index ccdfe6cd..9f5fb734 100644 --- a/sass/_variables.scss +++ b/sass/_variables.scss @@ -17,7 +17,7 @@ $bootstrap-sass-asset-helper: (twbs-font-path("") != unquote('twbs-font-path("") //** Background color for ``. $body-bg: $gray-dark; //** Global text color on ``. -$text-color: $gray-dark; +$text-color: $gray-light; //** Global textual link color. $link-color: $brand-primary; @@ -31,10 +31,68 @@ $link-hover-color: darken($link-color, 15%); $pf-font-path: "../fonts" !default; -$font-family-sans-serif: 'Oxygen Light', "Helvetica Neue", Helvetica, Arial, sans-serif !default; +@font-face { + font-family: 'Oxygen'; + src: url('#{$pf-font-path}/oxygen-regular-webfont.eot'); + src: url('#{$pf-font-path}/oxygen-regular-webfont.eot') format('embedded-opentype'), + url('#{$pf-font-path}/oxygen-regular-webfont.woff') format('woff'), + url('#{$pf-font-path}/oxygen-regular-webfont.ttf') format('truetype'); + font-weight: 400; + font-style: normal; +} +/* +@include font-face( + 'Oxygen', + font-files( + 'oxygen-regular-webfont.woff', woff, + 'oxygen-regular-webfont.ttf', truetype + ), + 'oxygen-regular-webfont.eot', + 400 +); +*/ +/* not used jet +@include font-face( + 'Oxygen Light', + font-files( + 'oxygen-light-webfont.woff', woff, + 'oxygen-light-webfont.ttf', truetype + ), + 'oxygen-light-webfont.eot', + 300 +); +*/ +/* +@include font-face( + 'Oxygen Bold', + font-files( + 'oxygen-bold-webfont.woff', woff, + 'oxygen-bold-webfont.ttf', truetype + ), + 'oxygen-bold-webfont.eot', + 700 +); +*/ +@font-face { + font-family: 'Oxygen Bold'; + src: url('#{$pf-font-path}/oxygen-bold-webfont.eot'); + src: url('#{$pf-font-path}/oxygen-bold-webfont.eot') format('embedded-opentype'), + url('#{$pf-font-path}/oxygen-bold-webfont.woff') format('woff'), + url('#{$pf-font-path}/oxygen-bold-webfont.ttf') format('truetype'); + font-weight: 700; + font-style: normal; +} + + + + +$font-family-sans-serif: 'Oxygen', "Helvetica Neue", Helvetica, Arial, sans-serif !default; $font-family-serif: 'Oxygen Regular' Georgia, "Times New Roman", Times, serif !default; $font-family-monospace: Monaco, Menlo, Consolas, "Courier New", monospace; +$font-family-bold: 'Oxygen Bold', "Helvetica Neue", Helvetica, Arial, sans-serif !default; $font-family-base: $font-family-sans-serif; +$font-style-base: normal; +$font-weight-base: 400; $font-size-base: 12px; $font-size-large: ceil(($font-size-base * 1.24)); // ~16px @@ -47,34 +105,19 @@ $font-size-h4: $font-size-base; //ceil(($font-size-base * 1.32)); // $font-size-h5: ceil(($font-size-base * 1.24)); // ~16px $font-size-h6: ceil(($font-size-base * 1.08)); // ~14px -$line-height-base: 1.428571429; // 20/14 -$line-height-computed: floor(($font-size-base * $line-height-base)); // ~20px +//$line-height-base: 1.428571429; // 20/14 +$line-height-base: 1.5; // 18/12 +$line-height-computed: floor(($font-size-base * $line-height-base)); // ~18px $headings-font-family: $font-family-base; -$headings-font-weight: 500; +$headings-font-weight: 700; $headings-line-height: 1.1; $headings-color: inherit; -@font-face { - font-family: 'Oxygen Regular'; - src: url('#{$pf-font-path}/Oxygen-Regular.ttf'); - font-style: normal; - font-weight: 400; -} -@font-face { - font-family: 'Oxygen Bold'; - src: url('#{$pf-font-path}/Oxygen-Bold.ttf'); - font-style: normal; - font-weight: 700; -} -@font-face { - font-family: 'Oxygen Light'; - src: url('#{$pf-font-path}/Oxygen-Light.ttf'); - font-style: normal; - font-weight: 300; -} + + //-- Iconography // @@ -203,7 +246,7 @@ $dropdown-divider-bg: $gray-light; $dropdown-link-color: $gray-dark; $dropdown-link-hover-color: $gray-darkest; $dropdown-link-hover-bg: $gray-light; -$dropdown-link-active-color: #fff; +$dropdown-link-active-color: $gray-lighter; $dropdown-link-active-bg: $component-active-bg; $dropdown-link-disabled-color: $gray-light; @@ -504,7 +547,7 @@ $label-info-bg: $brand-info; $label-warning-bg: $brand-warning; $label-danger-bg: $brand-danger; -$label-color: #fff; +$label-color: $gray-darkest; $label-link-hover-color: #fff; diff --git a/sass/bootstrap/_bootstrap.scss b/sass/bootstrap/_bootstrap.scss deleted file mode 100644 index cb5147d3..00000000 --- a/sass/bootstrap/_bootstrap.scss +++ /dev/null @@ -1,49 +0,0 @@ -// Core variables and mixins -@import "variables"; -@import "mixins"; - -// Reset -@import "normalize"; -@import "print"; - -// Core CSS -@import "scaffolding"; -@import "type"; -@import "code"; -@import "grid"; -@import "tables"; -@import "forms"; -@import "buttons"; - -// Components -@import "component-animations"; -@import "glyphicons"; -@import "dropdowns"; -@import "button-groups"; -@import "input-groups"; -@import "navs"; -@import "navbar"; -@import "breadcrumbs"; -@import "pagination"; -@import "pager"; -@import "labels"; -@import "badges"; -@import "jumbotron"; -@import "thumbnails"; -@import "alerts"; -@import "progress-bars"; -@import "media"; -@import "list-group"; -@import "panels"; -@import "wells"; -@import "close"; - -// Components w/ JavaScript -@import "modals"; -@import "tooltip"; -@import "popovers"; -@import "carousel"; - -// Utility classes -@import "utilities"; -@import "responsive-utilities"; diff --git a/sass/bootstrap/_labels.scss b/sass/bootstrap/_labels.scss index 8353eb1a..d738ac4d 100644 --- a/sass/bootstrap/_labels.scss +++ b/sass/bootstrap/_labels.scss @@ -4,7 +4,7 @@ .label { display: inline; - padding: .2em .6em .3em; + padding: 2px 5px; font-size: 75%; font-weight: bold; line-height: 1; @@ -12,7 +12,7 @@ text-align: center; white-space: nowrap; vertical-align: baseline; - border-radius: .25em; + border-radius: 3px; // Add hover effects, but only for links &[href] { diff --git a/sass/bootstrap/_list-group.scss b/sass/bootstrap/_list-group.scss index 4a2918dd..a2284e92 100644 --- a/sass/bootstrap/_list-group.scss +++ b/sass/bootstrap/_list-group.scss @@ -21,9 +21,10 @@ .list-group-item { position: relative; display: block; - padding: 7px 8px; + padding: 6px 8px; background-color: $list-group-bg; border-bottom: 1px solid $list-group-border; + font-family: $font-family-bold; // Round the first and last items &:first-child { diff --git a/sass/bootstrap/_navbar.scss b/sass/bootstrap/_navbar.scss index 053777a3..ed6e4783 100644 --- a/sass/bootstrap/_navbar.scss +++ b/sass/bootstrap/_navbar.scss @@ -155,6 +155,7 @@ font-size: $font-size-large; line-height: $line-height-computed; height: $navbar-height; + font-family: $font-family-bold; &:hover, &:focus { @@ -364,6 +365,7 @@ .navbar-text { @include navbar-vertical-align($line-height-computed); + font-family: $font-family-bold; //@media (min-width: $grid-float-breakpoint) { float: left; diff --git a/sass/bootstrap/_scaffolding.scss b/sass/bootstrap/_scaffolding.scss index 3215b447..b07e2bfc 100644 --- a/sass/bootstrap/_scaffolding.scss +++ b/sass/bootstrap/_scaffolding.scss @@ -26,6 +26,8 @@ html { body { font-family: $font-family-base; + font-style: $font-style-base; + font-weight: $font-weight-base; font-size: $font-size-base; line-height: $line-height-base; color: $text-color; diff --git a/sass/bootstrap/_wells.scss b/sass/bootstrap/_wells.scss index a662f439..85a3cecc 100644 --- a/sass/bootstrap/_wells.scss +++ b/sass/bootstrap/_wells.scss @@ -12,6 +12,7 @@ border: 1px solid $well-border; @include border-radius(5px); color: $gray-darker; + font-family: $font-family-bold; blockquote { border-color: #ddd; border-color: rgba(0,0,0,.15); diff --git a/sass/layout/_all.scss b/sass/layout/_all.scss index 63e50be4..52b8471d 100644 --- a/sass/layout/_all.scss +++ b/sass/layout/_all.scss @@ -2,4 +2,5 @@ @import "map"; @import "system-info"; @import "_forms"; -@import "_images"; \ No newline at end of file +@import "_images"; +@import "_dialogs"; \ No newline at end of file diff --git a/sass/layout/_dialogs.scss b/sass/layout/_dialogs.scss new file mode 100644 index 00000000..dbe5e04d --- /dev/null +++ b/sass/layout/_dialogs.scss @@ -0,0 +1,23 @@ + +// map manual dialog ====================================== +#pf-manual-scrollspy{ + position: relative; + height: 500px; + overflow: auto; +} + +// map info dialog ======================================== +#pf-map-info-systems, #pf-map-info-connections{ + padding: 10px; + min-height: 130px; + position: relative; + background-color: $gray-dark; + overflow: hidden; + @include border-radius(5px); + + // data tables + .pf-map-info-table{ + font-size: 10px; + font-family: $font-family-bold; + } +} \ No newline at end of file diff --git a/sass/layout/_forms.scss b/sass/layout/_forms.scss index 88188a07..268f9e44 100644 --- a/sass/layout/_forms.scss +++ b/sass/layout/_forms.scss @@ -1,7 +1,10 @@ -.tab-content{ - input, select{ - background-color: $gray-dark; - color: $gray-lighter; - border: 1px solid $gray-light; +input, select{ + background-color: $gray-dark; + color: $gray-lighter; + border: 1px solid $gray-light; + font-family: $font-family-bold; + + &:focus{ + border-color: $teal; } } \ No newline at end of file diff --git a/sass/layout/_main.scss b/sass/layout/_main.scss index 34a62bd4..1a09d73e 100644 --- a/sass/layout/_main.scss +++ b/sass/layout/_main.scss @@ -1,20 +1,17 @@ -@import "compass/css3/border-radius"; - -body{ - font-family: 'Oxygen Bold'; - color: $gray-light; -} a{ color: $teal-dark; &:hover{ - color: $teal; + color: $teal-light; } } // emphasized text em{ + + font-style: italic; + &.pf-brand{ text-transform: uppercase; } @@ -35,8 +32,8 @@ em{ .pf-loading-overlay-wrapper{ - width: 20px; - height: 20px; + width: 25px; + height: 25px; margin: auto; text-align: center; position: absolute; @@ -51,7 +48,7 @@ em{ opacity: 0.5; } -// page menu ================================================ +// page menu ===================================================== .sb-left{ .list-group-item{ @include box-shadow(inset -10px 0px 5px -5px rgba(0,0,0,0.4)); @@ -64,6 +61,18 @@ em{ } } +// map types ===================================================== +.pf-map-type-global{ + color: $teal; +} + +.pf-map-type-alliance{ + color: $blue; +} + +.pf-map-type-private{ + color: $green; +} // maps module =================================================== #pf-map-module{ @@ -72,19 +81,19 @@ em{ // Tabs (colored) #pf-map-tabs { - .pf-map-type-default{ + .pf-map-type-tab-default{ border-top: 2px solid transparent; } - .pf-map-type-global{ + .pf-map-type-tab-global{ border-top: 2px solid $green; } - .pf-map-type-alliance{ + .pf-map-type-tab-alliance{ border-top: 2px solid $blue; } - .pf-map-type-private{ + .pf-map-type-tab-private{ border-top: 2px solid $teal; } } @@ -98,11 +107,12 @@ em{ // alle Module innerhalb einer row .pf-module{ - @include border-radius(5px); + font-family: $font-family-bold; background: rgba($gray, 0.3); padding: 10px; width: 100%; margin-bottom: 10px; + @include border-radius(5px); } } @@ -277,32 +287,69 @@ em{ } } -// "fake connection" classes for the map legend -.pf-connection{ +// "fake connection" classes for the map manual +.pf-fake-connection{ box-sizing: content-box; display: inline-block; - width: 30px; + width: 70px; height: 4px; margin-right: 5px; border-top: 2px solid $gray-light; border-bottom: 2px solid $gray-light; background-color: #3c3f41; + position: relative; + font-family: $font-family-sans-serif; - &.pf-connection-eol{ + &.pf-map-connection-stargate{ + background-color: $gray-light; + border-color: $gray-light; + } + + &.pf-map-connection-jumpbridge{ + background-color: $teal-light; + border-color: $teal-light; + } + + &.pf-map-connection-wh-eol{ border-color: $pink-dark; } - &.pf-connection-reduced{ + &.pf-map-connection-wh-reduced{ background-color: $orange; } - &.pf-connection-critical{ + &.pf-map-connection-wh-critical{ background-color: $red-darker; } - &.pf-connection-frig{ + + &.pf-map-connection-frig{ border-style: dashed; border-left: none; border-right: none; + + &:after{ + content: 'frig'; + background-color: $orange; + color: $gray-darkest; + padding: 0px 3px; + position: absolute; + left: 25px; + top: -6px; + @include border-radius(3px); + } + } + + &.pf-map-connection-preserve-mass{ + &:after{ + content: 'save mass'; + background-color: $red-darker; + color: $gray-lightest; + padding: 0px 3px; + position: absolute; + left: 9px; + top: -6px; + @include border-radius(3px); + } } } @@ -312,7 +359,7 @@ em{ .tooltip-inner{ color: $green; background-color: $gray; - font-family: 'Oxygen Bold'; + font-family: $font-family-bold; padding: 5px 5px; @include border-radius(3px); @include box-shadow(0 6px 12px rgba(0,0,0,.4)); @@ -382,16 +429,3 @@ Animate the stripes -// TODO move in seperate file!!! ==================================== - -#pf-legend-scrollspy{ - position: relative; - height: 500px; - overflow: auto; -} - - - - - - diff --git a/sass/layout/_map.scss b/sass/layout/_map.scss index c9aafe71..e02394fc 100644 --- a/sass/layout/_map.scss +++ b/sass/layout/_map.scss @@ -71,12 +71,14 @@ width: 2000px; height: 500px; position: relative; + font-family: $font-family-bold; .pf-system{ position: absolute; min-width: 80px; height: auto; background-color: $gray-dark; + font-family: $font-family-bold; z-index: 100; //@include bounce-up-down; @@ -89,7 +91,7 @@ } .pf-system-head{ - padding: 0px 3px 2px 3px; + padding: 0px 3px 0px 3px; cursor: pointer; .pf-system-head-name{ @@ -254,6 +256,39 @@ } } + svg.pf-map-connection-stargate { + + path:first-child{ + stroke: $gray-light; + } + + path:not(first-child){ + stroke: $gray-light; + } + + &:hover{ + path:first-child{ + stroke: $gray-lightest; + } + } + } + + svg.pf-map-connection-jumpbridge { + + path:first-child{ + stroke: $teal-light; + } + + path:not(first-child){ + stroke: $teal-light; + } + + &:hover{ + path:first-child{ + stroke: $gray-lightest; + } + } + } svg.pf-map-connection-wh { // special wh-connection style ( @@ -290,7 +325,9 @@ .pf-map-connection-overlay{ padding: 1px 4px; font-size: 10.4px; + z-index: 1020; @include border-radius(3px); + @include box-shadow(0 6px 12px rgba(0,0,0,.4)); } .frig{ @@ -315,6 +352,7 @@ // context menu ================================================== .dropdown-menu{ + font-family: $font-family-bold; z-index: 1020; // over tooltips i{ diff --git a/sass/layout/_system-info.scss b/sass/layout/_system-info.scss index 2d0b1659..e3dbf8e3 100644 --- a/sass/layout/_system-info.scss +++ b/sass/layout/_system-info.scss @@ -2,6 +2,9 @@ // breadcrumb ============================================================ .breadcrumb{ + + font-family: $font-family-bold; + li{ text-transform: capitalize; } @@ -10,6 +13,7 @@ // system info table ===================================================== .pf-system-info-table{ padding-right: 7px; + font-family: $font-family-bold; } // system effects popover ================================================ diff --git a/sass/library/data-tables/_dataTables-bootstrap.scss b/sass/library/data-tables/_dataTables-bootstrap.scss index affa7ece..60272c9b 100644 --- a/sass/library/data-tables/_dataTables-bootstrap.scss +++ b/sass/library/data-tables/_dataTables-bootstrap.scss @@ -44,6 +44,7 @@ table.dataTable { margin-top: 6px !important; margin-bottom: 6px !important; max-width: none !important; + font-family: $font-family-bold; } table.dataTable thead .sorting, diff --git a/sass/library/data-tables/_dataTables-fontAwesome.scss b/sass/library/data-tables/_dataTables-fontAwesome.scss index f44f13bb..72277a62 100644 --- a/sass/library/data-tables/_dataTables-fontAwesome.scss +++ b/sass/library/data-tables/_dataTables-fontAwesome.scss @@ -71,7 +71,7 @@ div.dataTables_paginate a.paginate_button.last { div.dataTables_paginate a.first:before, div.dataTables_paginate a.previous:before { position: absolute; - top: 5px; + top: 4px; left: 10px; display: block; font-family: FontAwesome; @@ -80,7 +80,7 @@ div.dataTables_paginate a.previous:before { div.dataTables_paginate a.next:after, div.dataTables_paginate a.last:after { position: absolute; - top: 5px; + top: 4px; right: 10px; display: block; font-family: FontAwesome; diff --git a/sass/library/data-tables/_dataTables.scss b/sass/library/data-tables/_dataTables.scss index 88afe6f5..cc794b9a 100644 --- a/sass/library/data-tables/_dataTables.scss +++ b/sass/library/data-tables/_dataTables.scss @@ -21,7 +21,7 @@ table.dataTable tfoot th { table.dataTable thead th, table.dataTable thead td { padding: 10px 18px; - border-bottom: 1px solid #111111; + border-bottom: 1px solid $gray; } table.dataTable thead th:active, table.dataTable thead td:active { @@ -30,7 +30,7 @@ table.dataTable thead td:active { table.dataTable tfoot th, table.dataTable tfoot td { padding: 10px 18px 6px 18px; - border-top: 1px solid #111111; + border-top: 1px solid $gray; } table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, @@ -206,7 +206,7 @@ table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 { background-color: #a4b2cb; } table.dataTable.no-footer { - border-bottom: 1px solid #111111; + border-bottom: 1px solid $gray; } table.dataTable.nowrap th, table.dataTable.nowrap td { white-space: nowrap; @@ -433,7 +433,7 @@ table.dataTable td { .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { - color: #333333; + color: $gray-light; } .dataTables_wrapper .dataTables_scroll { clear: both; diff --git a/sass/library/fontawesome/_path.scss b/sass/library/fontawesome/_path.scss index fd21c351..4d6591aa 100644 --- a/sass/library/fontawesome/_path.scss +++ b/sass/library/fontawesome/_path.scss @@ -12,3 +12,14 @@ font-weight: normal; font-style: normal; } + +/* +@include font-face( + 'FontAwesome', + font-files( + 'fontawesome-webfont.woff', woff, + 'fontawesome-webfont.ttf', truetype + ), + 'fontawesome-webfont.eot' +); +*/ \ No newline at end of file diff --git a/sass/library/fontawesome/_variables.scss b/sass/library/fontawesome/_variables.scss index 669c307f..3472a31b 100644 --- a/sass/library/fontawesome/_variables.scss +++ b/sass/library/fontawesome/_variables.scss @@ -7,7 +7,7 @@ $fa-css-prefix: fa !default; $fa-version: "4.2.0" !default; $fa-border-color: #eee !default; $fa-inverse: #fff !default; -$fa-li-width: (30em / 14) !default; +$fa-li-width: (30em / 12) !default; $fa-var-adjust: "\f042"; $fa-var-adn: "\f170"; diff --git a/sass/pathfinder.scss b/sass/pathfinder.scss index 6d39e320..096b1b34 100644 --- a/sass/pathfinder.scss +++ b/sass/pathfinder.scss @@ -9,9 +9,9 @@ * */ +@import "compass/reset"; @import "compass/css3"; -@import "compass/css3/border-radius"; -@import "compass/css3/box-shadow"; + // Core variables and mixins @import "colors"; @@ -24,8 +24,8 @@ @import "font-awesome"; // Libraries (Remove if not needed) -@import "library/animation/animation-engine"; -@import "library/jqueryui/jquery-ui-1.10.3.custom"; +//@import "library/animation/animation-engine"; +//@import "library/jqueryui/jquery-ui-1.10.3.custom"; @import "library/custom-scrollbar/_mCustomScrollbar"; // malihu-custom-scrollbar-plugin @import "library/data-tables/_dataTables"; // DataTables 1.10.3 @import "library/data-tables/_dataTables-bootstrap"; // DataTables 1.10.3 bootsrap integration diff --git a/sass/smartadmin/_main.scss b/sass/smartadmin/_main.scss index debe811a..195ed673 100644 --- a/sass/smartadmin/_main.scss +++ b/sass/smartadmin/_main.scss @@ -19,10 +19,6 @@ 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 { @@ -31,8 +27,7 @@ a:hover, a:active, a:focus, button, button:active, button:focus, object, embed, h1,h3,h4 { margin:0; - font-family: "Oxygen Bold"; - font-weight:300; + font-family: $font-family-bold; } .page-title { @@ -1047,6 +1042,7 @@ input[type="text"]:focus + .input-group-addon { .nav-tabs>li>a { color: $gray-lighter; + font-family: $font-family-bold; &:hover{ color: $gray-darkest; @@ -1304,6 +1300,7 @@ input[type="text"]:focus + .input-group-addon { } .btn { + font-family: $font-family-bold; border-radius:2px; -webkit-border-radius: 2px; -moz-border-radius: 2px; diff --git a/templates/modules/contextmenu.html b/templates/modules/contextmenu.html index fde914ca..6556ac69 100644 --- a/templates/modules/contextmenu.html +++ b/templates/modules/contextmenu.html @@ -1,12 +1,12 @@