| @ -0,0 +1 @@ | |||||
| .idea/ | |||||
| @ -0,0 +1,2 @@ | |||||
| # bridge | |||||
| bridgeDemo | |||||
| @ -0,0 +1,219 @@ | |||||
| <!DOCTYPE html> | |||||
| <html> | |||||
| <head lang="en"> | |||||
| <meta charset="UTF-8"> | |||||
| <title></title> | |||||
| <script src="./js/hammer.js"></script> | |||||
| <script src="./js/es6-shim.min.js"></script> | |||||
| <script src="./js/eve.js"></script> | |||||
| <script src="./js/inputAgent.js"></script> | |||||
| <script src="./js/jquery.min.js"></script> | |||||
| <script src="./js/bootstrap.min.js"></script> | |||||
| <script language="JavaScript"> | |||||
| var inputProxy; | |||||
| </script> | |||||
| <script src="./js/init.js"></script> | |||||
| <script language="JavaScript"> | |||||
| // to run this, also have webHttp.js running in node. | |||||
| eve.system.init({ | |||||
| transports: [ | |||||
| { | |||||
| type: 'ws', | |||||
| url: 'ws://agents/:id' | |||||
| }, | |||||
| { | |||||
| type: 'http' | |||||
| } | |||||
| ] | |||||
| }); | |||||
| var proxyAddress = 'ws://afternoon-beyond-2302.herokuapp.com/agents/proxy'; | |||||
| var proxyAddressHTTP = 'https://afternoon-beyond-2302.herokuapp.com/agents/proxy'; | |||||
| // proxyAddress = 'ws://127.0.0.1:5000/agents/proxy'; | |||||
| // proxyAddressHTTP = 'http://127.0.0.1:5000/agents/proxy'; | |||||
| inputProxy = new inputAgent('inputAgent', proxyAddress); | |||||
| inputProxy.wakeProxy(proxyAddressHTTP); | |||||
| inputProxy.connectToProxy(); | |||||
| inputProxy.getEventTypes().then(function (reply) { | |||||
| initButtons(reply); | |||||
| }).catch(function (err) { | |||||
| console.error(err); | |||||
| }); | |||||
| inputProxy.getTimelineEvents().then(function (reply) { | |||||
| console.log(reply); | |||||
| }).catch(function (err) { | |||||
| console.error(err); | |||||
| }); | |||||
| </script> | |||||
| <link rel="stylesheet" href="./css/bootstrap.min.css"> | |||||
| <style> | |||||
| div.newEvent { | |||||
| position: relative; | |||||
| margin: 10px; | |||||
| padding: 10px; | |||||
| width: 300px; | |||||
| border: 1px solid #dddddd; | |||||
| border-radius: 5px; | |||||
| height: 200px; | |||||
| background-color: #ffffff; | |||||
| } | |||||
| div.timelineEvent { | |||||
| position: relative; | |||||
| margin: 10px; | |||||
| padding: 10px; | |||||
| width: 300px; | |||||
| border: 1px solid #dddddd; | |||||
| border-radius: 5px; | |||||
| height: 140px; | |||||
| background-color: #ffffff; | |||||
| } | |||||
| div.resetEvents { | |||||
| margin: -210px 10px 10px 320px; | |||||
| padding: 10px; | |||||
| width: 160px; | |||||
| border: 1px solid #dddddd; | |||||
| border-radius: 5px; | |||||
| height: 200px; | |||||
| } | |||||
| p.alabel { | |||||
| display: inline-block; | |||||
| width: 90px; | |||||
| } | |||||
| div.content { | |||||
| margin: 10px; | |||||
| } | |||||
| button { | |||||
| margin: 5px; | |||||
| } | |||||
| #buttonBunch { | |||||
| } | |||||
| h3 { | |||||
| margin-left: 10px; | |||||
| } | |||||
| div.overlay { | |||||
| position: absolute; | |||||
| top: 0px; | |||||
| left: 0px; | |||||
| display: none; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| background-color: rgba(0, 0, 0, 0.5); | |||||
| z-index: 12; | |||||
| } | |||||
| html, body { | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| } | |||||
| h1 { | |||||
| color: #ffffff; | |||||
| } | |||||
| div.colors { | |||||
| display: inline-block; | |||||
| width: 30px; | |||||
| height: 20px; | |||||
| border: 0px solid #dddddd; | |||||
| border-radius: 3px; | |||||
| } | |||||
| div.colors.red {background-color: #ff0000;} | |||||
| div.colors.white {border-width:1px; background-color: #ffffff;} | |||||
| div.colors.magenta {background-color: #ff21cb;} | |||||
| div.colors.orange {background-color: #ffa42a;} | |||||
| div.colors.green {background-color: #00ce34;} | |||||
| button.red {background-color: #ff0000;} | |||||
| button.white {color:#aaaaaa;border-width:1px; background-color: #ffffff;} | |||||
| button.magenta {background-color: #ff21cb;} | |||||
| button.orange {background-color: #ffa42a;} | |||||
| button.green {background-color: #00ce34;} | |||||
| div.colors.selected { | |||||
| box-shadow: 0px 0px 5px #0bd1ff; | |||||
| } | |||||
| </style> | |||||
| </head> | |||||
| <body> | |||||
| <div class="overlay" id="overlayNC"> | |||||
| <h1>Connection has been lost. Please refresh the page.</h1> | |||||
| </div> | |||||
| <div class="overlay" id="overlay"> | |||||
| <div class="timelineEvent" id="newTimelineEvent"> | |||||
| <h4>When does the event start?</h4> | |||||
| Start event: <select id="delaySelect"> | |||||
| <option value="0">Now</option> | |||||
| <option value="5">5 minutes</option> | |||||
| <option value="15">15 minutes</option> | |||||
| <option value="30">30 minutes</option> | |||||
| <option value="45">45 minutes</option> | |||||
| <option value="60">1 hour</option> | |||||
| <option value="120">2 hours</option> | |||||
| <option value="180">3 hours</option> | |||||
| </select> | |||||
| <br/> | |||||
| <br/> | |||||
| <button type="button" class="btn btn-danger pull-left" onclick="hideOverlay()"> | |||||
| cancel | |||||
| </button> | |||||
| <button type="button" class="btn btn-primary pull-right" onclick="newTimelineEvent()"> | |||||
| create Event | |||||
| </button> | |||||
| </div> | |||||
| </div> | |||||
| <div class="newEvent"> | |||||
| <h4>create new event type:</h4> | |||||
| <p class="alabel">Name:</p><input id="newEvent"><br/> | |||||
| <p class="alabel">Color:</p> | |||||
| <div class="colors red" onclick="selectColor('red','colorRed');" id="colorRed"></div> | |||||
| <div class="colors white selected" onclick="selectColor('white','colorWhite');" id="colorWhite"></div> | |||||
| <div class="colors green" onclick="selectColor('green','colorGreen');" id="colorGreen"></div> | |||||
| <div class="colors orange" onclick="selectColor('orange','colorOrange');" id="colorOrange"></div> | |||||
| <div class="colors magenta" onclick="selectColor('magenta','colorMagenta');" id="colorMagenta"></div> | |||||
| <br/> | |||||
| <!--<p class="alabel">range:</p><input type="checkbox" id="range"><br />--> | |||||
| <button type="button" class="btn btn-primary pull-right" onclick="newEvent()"> | |||||
| create | |||||
| </button> | |||||
| </div> | |||||
| <div class="resetEvents"> | |||||
| <button type="button" class="btn btn-danger" onclick="resetEvents()"> | |||||
| Reset all events | |||||
| </button> | |||||
| <br/> | |||||
| <br/> | |||||
| <button type="button" class="btn btn-danger" onclick="resetTimelineData()"> | |||||
| Remove data | |||||
| </button> | |||||
| </div> | |||||
| <h3>cick one of the buttons to create a new event on the timeline</h3> | |||||
| <div class='content' id="buttonBunch"> | |||||
| </div> | |||||
| </body> | |||||
| </html> | |||||
| @ -1,68 +1,83 @@ | |||||
| <!DOCTYPE HTML> | |||||
| <html> | <html> | ||||
| <head> | <head> | ||||
| <title>Timeline | Basic demo</title> | |||||
| <title>Timeline | Bridge</title> | |||||
| <style type="text/css"> | |||||
| body, html { | |||||
| font-family: sans-serif; | |||||
| } | |||||
| </style> | |||||
| <script src="js/vis/vis.js"></script> | |||||
| <script src="js/eve.js"></script> | |||||
| <script src="js/timelineAgent.js"></script> | |||||
| <link href="js/vis/vis.css" rel="stylesheet" type="text/css" /> | |||||
| <link href="style.css" rel="stylesheet" type="text/css" /> | |||||
| <script src="./js/vis.js"></script> | |||||
| <link href="./css/vis.css" rel="stylesheet" type="text/css" /> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| <span id="status">Loading data...</span> | |||||
| <div id="visualization"></div> | |||||
| <p>This page demonstrates the Timeline with custom css classes for individual items.</p> | |||||
| <div id="mytimeline"></div> | |||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||
| var connected = false; | |||||
| // create data | |||||
| // note that months are zero-based in the JavaScript Date object | |||||
| var data = new vis.DataSet(); | |||||
| // called from agent | |||||
| function addToDataset(item) { | |||||
| data.add(item); | |||||
| } | |||||
| // called from agent | |||||
| function clearDataset() { | |||||
| data.clear(); | |||||
| } | |||||
| function sessionClosed() { | |||||
| if (connected === true) { | |||||
| document.getElementById("overlayNC").style.display = 'block'; | |||||
| } | |||||
| } | |||||
| // specify options | |||||
| var options = { | |||||
| editable: true | |||||
| }; | |||||
| // to run this, also have webHttp.js running in node. | |||||
| eve.system.init({ | |||||
| transports: [ | |||||
| { | |||||
| type: 'ws', | |||||
| url: 'ws://agents/:id' | |||||
| }, | |||||
| { | |||||
| type: 'http' | |||||
| } | |||||
| ] | |||||
| }); | |||||
| var proxyAddress = 'ws://afternoon-beyond-2302.herokuapp.com/agents/proxy'; | |||||
| var proxyAddressHTTP = 'https://afternoon-beyond-2302.herokuapp.com/agents/proxy'; | |||||
| // proxyAddress = 'ws://127.0.0.1:5000/agents/proxy'; | |||||
| // proxyAddressHTTP = 'http://127.0.0.1:5000/agents/proxy'; | |||||
| timelineProxy = new timelineAgent('timelineAgent', proxyAddress); | |||||
| timelineProxy.wakeProxy(proxyAddressHTTP); | |||||
| timelineProxy.connectToProxy(); | |||||
| timelineProxy.getTimelineEvents().then(function (reply) { | |||||
| addToDataset(reply); | |||||
| }).catch(function (err) { | |||||
| console.error(err); | |||||
| }); | |||||
| function loadJSON(path, success, error) { | |||||
| selectedFile = path; | |||||
| var xhr = new XMLHttpRequest(); | |||||
| xhr.onreadystatechange = function() { | |||||
| if (xhr.readyState === 4) { | |||||
| if (xhr.status === 200) { | |||||
| success(JSON.parse(xhr.responseText), path); | |||||
| } | |||||
| else { | |||||
| if (error === undefined) { | |||||
| console.error("ERROR:", path) | |||||
| } | |||||
| else { | |||||
| error(); | |||||
| } | |||||
| } | |||||
| } | |||||
| }; | |||||
| xhr.open("GET", path, true); | |||||
| xhr.send(); | |||||
| } | |||||
| function draw(data) { | |||||
| document.getElementById("status").innerHTML = ""; | |||||
| // Create a DataSet (allows two way data-binding) | |||||
| var items = new vis.DataSet(data.data); | |||||
| var groups = new vis.DataSet(data.groups); | |||||
| // create visualization | |||||
| var container = document.getElementById('visualization'); | |||||
| var options = { | |||||
| stack:false, | |||||
| groupOrder: 'content' // groupOrder can be a property name or a sorting function | |||||
| }; | |||||
| var timeline = new vis.Timeline(container); | |||||
| timeline.setOptions(options); | |||||
| timeline.setGroups(groups); | |||||
| timeline.setItems(items); | |||||
| } | |||||
| setTimeout(function () {loadJSON("./timeline.json",draw);}, 50); | |||||
| // create the timeline | |||||
| var container = document.getElementById('mytimeline'); | |||||
| timeline = new vis.Timeline(container, data, options); | |||||
| </script> | </script> | ||||
| </body> | </body> | ||||
| </html> | |||||
| </html> | |||||
| @ -0,0 +1,106 @@ | |||||
| /** | |||||
| * Created by Alex on 3/5/2015. | |||||
| */ | |||||
| var eventTypes = {}; | |||||
| var buttonHammers = []; | |||||
| var createType = undefined; | |||||
| var connected = false; | |||||
| var selectedColor = 'white'; | |||||
| function initButtons(data) { | |||||
| console.log(data) | |||||
| eventTypes = data; | |||||
| var keys = Object.keys(data); | |||||
| for (var i = 0; i < keys.length; i++) { | |||||
| createButton(keys[i]) | |||||
| } | |||||
| } | |||||
| function selectColor(color,id) { | |||||
| selectedColor = color; | |||||
| var colors = ['colorRed','colorWhite','colorGreen','colorOrange','colorMagenta']; | |||||
| for (var i = 0; i < colors.length; i++) { | |||||
| var classname = document.getElementById(colors[i]).className.replace("selected",""); | |||||
| document.getElementById(colors[i]).className = classname; | |||||
| } | |||||
| document.getElementById(id).className = document.getElementById(id).className += " selected"; | |||||
| } | |||||
| function createButton(name) { | |||||
| var container = document.getElementById("buttonBunch"); | |||||
| var button = document.createElement("button"); | |||||
| button.type = "button"; | |||||
| button.className = "btn btn-primary " + eventTypes[name].class; | |||||
| button.innerHTML = name; | |||||
| container.appendChild(button); | |||||
| var hammer = Hammer(button, {prevent_default: true}); | |||||
| hammer.on('tap', showOverlay.bind(this,name)); | |||||
| buttonHammers.push(hammer); | |||||
| } | |||||
| function showOverlay(name,event) { | |||||
| createType = name; | |||||
| document.getElementById("overlay").style.display = 'block'; | |||||
| var optionsWindow = document.getElementById("newTimelineEvent"); | |||||
| optionsWindow.style.top = event.pointers[0].pageY -100 + 'px'; | |||||
| optionsWindow.style.left = event.pointers[0].pageX + 10 + 'px'; | |||||
| } | |||||
| function newTimelineEvent() { | |||||
| var minutesDelay = document.getElementById("delaySelect").value; | |||||
| var date = new Date().valueOf() + 60 * minutesDelay * 1000; | |||||
| var item = {content: createType, className:eventTypes[createType].class, start:date}; | |||||
| inputProxy.addTimelineEvent(item); | |||||
| hideOverlay(); | |||||
| } | |||||
| function sessionClosed() { | |||||
| if (connected === true) { | |||||
| document.getElementById("overlayNC").style.display = 'block'; | |||||
| } | |||||
| } | |||||
| function hideOverlay() { | |||||
| document.getElementById("overlay").style.display = 'none'; | |||||
| } | |||||
| function newEvent() { | |||||
| var name = document.getElementById('newEvent').value; | |||||
| var range = false;//document.getElementById('range').checked; | |||||
| if (name !== "") { | |||||
| var data = {name: name, class: selectedColor, range: range}; | |||||
| eventTypes[name] = data; | |||||
| createButton(name); | |||||
| inputProxy.addEventType(data); | |||||
| } | |||||
| else { | |||||
| alert("Name is required"); | |||||
| } | |||||
| document.getElementById('newEvent').value = ""; | |||||
| //document.getElementById('range').checked = false; | |||||
| } | |||||
| function resetEvents() { | |||||
| var r = confirm("Really delete all event types? (buttons below)"); | |||||
| if (r == true) { | |||||
| inputProxy.resetEventTypes(); | |||||
| document.getElementById("buttonBunch").innerHTML = ""; | |||||
| } | |||||
| for (var i = 0; i < buttonHammers.length; i++) { | |||||
| buttonHammers[i].dispose(); | |||||
| } | |||||
| buttonHammers = []; | |||||
| } | |||||
| function resetTimelineData() { | |||||
| var r = confirm("Really delete all data on the timeline?"); | |||||
| if (r == true) { | |||||
| inputProxy.resetTimelineEvents(); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,77 @@ | |||||
| function inputAgent(id, proxyAddress) { | |||||
| // execute super constructor | |||||
| eve.Agent.call(this, id); | |||||
| this.proxyAddress = proxyAddress; | |||||
| this.eventTypes = {}; | |||||
| this.timelineEvents = []; | |||||
| this.timelineClient = undefined; | |||||
| this.inputClient = undefined; | |||||
| // extend the agent with RPC functionality | |||||
| this.rpc = this.loadModule('rpc', this.rpcFunctions, {timeout:2000}); // option 1 | |||||
| // connect to all transports provided by the system | |||||
| this.connect(eve.system.transports.getAll()); | |||||
| } | |||||
| // extend the eve.Agent prototype | |||||
| inputAgent.prototype = Object.create(eve.Agent.prototype); | |||||
| inputAgent.prototype.constructor = inputAgent; | |||||
| inputAgent.prototype.rpcFunctions = {}; | |||||
| inputAgent.prototype.rpcFunctions.close = function() { | |||||
| sessionClosed(); | |||||
| }; | |||||
| inputAgent.prototype.connectToProxy = function() { | |||||
| this.rpc.request(this.proxyAddress, {method:'setInputClient',params:{}}).done(function () { | |||||
| connected = true; | |||||
| }); | |||||
| }; | |||||
| inputAgent.prototype.addEventType = function(data) { | |||||
| this.rpc.request(this.proxyAddress, {method:'addEventType',params:data}).done(); | |||||
| }; | |||||
| inputAgent.prototype.addTimelineEvent = function(item) { | |||||
| this.rpc.request(this.proxyAddress, {method:'addTimelineEvent',params:{item:item}}).done(); | |||||
| }; | |||||
| inputAgent.prototype.wakeProxy = function(httpAddress) { | |||||
| this.rpc.request(httpAddress, {method:'wakeUp',params:{}}).done(); | |||||
| }; | |||||
| inputAgent.prototype.resetEventTypes = function(data) { | |||||
| this.rpc.request(this.proxyAddress, {method:'resetEventTypes',params:data}).done(); | |||||
| }; | |||||
| inputAgent.prototype.resetTimelineEvents = function(data) { | |||||
| this.rpc.request(this.proxyAddress, {method:'resetTimelineEvents',params:data}).done(); | |||||
| }; | |||||
| inputAgent.prototype.getEventTypes = function (params, sender) { | |||||
| var me = this; | |||||
| return new Promise(function(resolve,reject) { | |||||
| me.rpc.request(me.proxyAddress, {method: 'getEventTypes', params: {}}) | |||||
| .then(function (reply) { | |||||
| resolve(reply); | |||||
| }) | |||||
| .catch(function(err) {reject(err);}); | |||||
| }) | |||||
| }; | |||||
| inputAgent.prototype.getTimelineEvents = function (params, sender) { | |||||
| var me = this; | |||||
| return new Promise(function(resolve,reject) { | |||||
| me.rpc.request(me.proxyAddress, {method: 'getTimelineEvents', params: {}}) | |||||
| .then(function (reply) { | |||||
| resolve(reply); | |||||
| }) | |||||
| .catch(function(err) {reject(err);}); | |||||
| }) | |||||
| }; | |||||
| @ -0,0 +1,61 @@ | |||||
| function timelineAgent(id, proxyAddress) { | |||||
| // execute super constructor | |||||
| eve.Agent.call(this, id); | |||||
| this.proxyAddress = proxyAddress; | |||||
| this.eventTypes = {}; | |||||
| this.timelineEvents = []; | |||||
| this.timelineClient = undefined; | |||||
| this.inputClient = undefined; | |||||
| // extend the agent with RPC functionality | |||||
| this.rpc = this.loadModule('rpc', this.rpcFunctions, {timeout:2000}); // option 1 | |||||
| // connect to all transports provided by the system | |||||
| this.connect(eve.system.transports.getAll()); | |||||
| } | |||||
| // extend the eve.Agent prototype | |||||
| timelineAgent.prototype = Object.create(eve.Agent.prototype); | |||||
| timelineAgent.prototype.constructor = timelineAgent; | |||||
| timelineAgent.prototype.rpcFunctions = {}; | |||||
| timelineAgent.prototype.rpcFunctions.close = function() { | |||||
| sessionClosed(); | |||||
| }; | |||||
| timelineAgent.prototype.connectToProxy = function() { | |||||
| this.rpc.request(this.proxyAddress, {method:'setTimelineClient',params:{}}).done(function () { | |||||
| connected = true; | |||||
| }); | |||||
| }; | |||||
| timelineAgent.prototype.rpcFunctions.addTimelineEvent = function(params,sender) { | |||||
| addToDataset(params.item); | |||||
| }; | |||||
| timelineAgent.prototype.rpcFunctions.resetTimelineEvents = function(params,sender) { | |||||
| clearDataset(); | |||||
| }; | |||||
| timelineAgent.prototype.wakeProxy = function(httpAddress) { | |||||
| this.rpc.request(httpAddress, {method:'wakeUp',params:{}}).done(); | |||||
| }; | |||||
| timelineAgent.prototype.getTimelineEvents = function (params, sender) { | |||||
| var me = this; | |||||
| return new Promise(function(resolve,reject) { | |||||
| me.rpc.request(me.proxyAddress, {method: 'getTimelineEvents', params: {}}) | |||||
| .then(function (reply) { | |||||
| resolve(reply); | |||||
| }) | |||||
| .catch(function(err) {reject(err);}); | |||||
| }) | |||||
| }; | |||||
| @ -0,0 +1,810 @@ | |||||
| .vis .overlay { | |||||
| position: absolute; | |||||
| top: 0; | |||||
| left: 0; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| /* Must be displayed above for example selected Timeline items */ | |||||
| z-index: 10; | |||||
| } | |||||
| .vis-active { | |||||
| box-shadow: 0 0 10px #86d5f8; | |||||
| } | |||||
| /* override some bootstrap styles screwing up the timelines css */ | |||||
| .vis [class*="span"] { | |||||
| min-height: 0; | |||||
| width: auto; | |||||
| } | |||||
| .vis.timeline { | |||||
| } | |||||
| .vis.timeline.root { | |||||
| position: relative; | |||||
| border: 1px solid #bfbfbf; | |||||
| overflow: hidden; | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .vis.timeline .vispanel { | |||||
| position: absolute; | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .vis.timeline .vispanel.center, | |||||
| .vis.timeline .vispanel.left, | |||||
| .vis.timeline .vispanel.right, | |||||
| .vis.timeline .vispanel.top, | |||||
| .vis.timeline .vispanel.bottom { | |||||
| border: 1px #bfbfbf; | |||||
| } | |||||
| .vis.timeline .vispanel.center, | |||||
| .vis.timeline .vispanel.left, | |||||
| .vis.timeline .vispanel.right { | |||||
| border-top-style: solid; | |||||
| border-bottom-style: solid; | |||||
| overflow: hidden; | |||||
| } | |||||
| .vis.timeline .vispanel.center, | |||||
| .vis.timeline .vispanel.top, | |||||
| .vis.timeline .vispanel.bottom { | |||||
| border-left-style: solid; | |||||
| border-right-style: solid; | |||||
| } | |||||
| .vis.timeline .background { | |||||
| overflow: hidden; | |||||
| } | |||||
| .vis.timeline .vispanel > .content { | |||||
| position: relative; | |||||
| } | |||||
| .vis.timeline .vispanel .shadow { | |||||
| position: absolute; | |||||
| width: 100%; | |||||
| height: 1px; | |||||
| box-shadow: 0 0 10px rgba(0,0,0,0.8); | |||||
| /* TODO: find a nice way to ensure shadows are drawn on top of items | |||||
| z-index: 1; | |||||
| */ | |||||
| } | |||||
| .vis.timeline .vispanel .shadow.top { | |||||
| top: -1px; | |||||
| left: 0; | |||||
| } | |||||
| .vis.timeline .vispanel .shadow.bottom { | |||||
| bottom: -1px; | |||||
| left: 0; | |||||
| } | |||||
| .vis.timeline .labelset { | |||||
| position: relative; | |||||
| overflow: hidden; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .vis.timeline .labelset .vlabel { | |||||
| position: relative; | |||||
| left: 0; | |||||
| top: 0; | |||||
| width: 100%; | |||||
| color: #4d4d4d; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .vis.timeline .labelset .vlabel { | |||||
| border-bottom: 1px solid #bfbfbf; | |||||
| } | |||||
| .vis.timeline .labelset .vlabel:last-child { | |||||
| border-bottom: none; | |||||
| } | |||||
| .vis.timeline .labelset .vlabel .inner { | |||||
| display: inline-block; | |||||
| padding: 5px; | |||||
| } | |||||
| .vis.timeline .labelset .vlabel .inner.hidden { | |||||
| padding: 0; | |||||
| } | |||||
| .vis.timeline .itemset { | |||||
| position: relative; | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .vis.timeline .itemset .background, | |||||
| .vis.timeline .itemset .foreground { | |||||
| position: absolute; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| overflow: visible; | |||||
| } | |||||
| .vis.timeline .axis { | |||||
| position: absolute; | |||||
| width: 100%; | |||||
| height: 0; | |||||
| left: 0; | |||||
| z-index: 1; | |||||
| } | |||||
| .vis.timeline .foreground .group { | |||||
| position: relative; | |||||
| box-sizing: border-box; | |||||
| border-bottom: 1px solid #bfbfbf; | |||||
| } | |||||
| .vis.timeline .foreground .group:last-child { | |||||
| border-bottom: none; | |||||
| } | |||||
| .vis.timeline .item { | |||||
| position: absolute; | |||||
| color: #1A1A1A; | |||||
| border-color: #97B0F8; | |||||
| border-width: 1px; | |||||
| background-color: #D5DDF6; | |||||
| display: inline-block; | |||||
| padding: 5px; | |||||
| } | |||||
| .vis.timeline .item.selected { | |||||
| border-color: #FFC200; | |||||
| background-color: #FFF785; | |||||
| /* z-index must be higher than the z-index of custom time bar and current time bar */ | |||||
| z-index: 2; | |||||
| } | |||||
| .vis.timeline .editable .item.selected { | |||||
| cursor: move; | |||||
| } | |||||
| .vis.timeline .item.point.selected { | |||||
| background-color: #FFF785; | |||||
| } | |||||
| .vis.timeline .item.box { | |||||
| text-align: center; | |||||
| border-style: solid; | |||||
| border-radius: 2px; | |||||
| } | |||||
| .vis.timeline .item.point { | |||||
| background: none; | |||||
| } | |||||
| .vis.timeline .item.dot { | |||||
| position: absolute; | |||||
| padding: 0; | |||||
| border-width: 4px; | |||||
| border-style: solid; | |||||
| border-radius: 4px; | |||||
| } | |||||
| .vis.timeline .item.range { | |||||
| border-style: solid; | |||||
| border-radius: 2px; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| .vis.timeline .item.background { | |||||
| overflow: hidden; | |||||
| border: none; | |||||
| background-color: rgba(213, 221, 246, 0.4); | |||||
| box-sizing: border-box; | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| } | |||||
| .vis.timeline .item.range .content { | |||||
| position: relative; | |||||
| display: inline-block; | |||||
| max-width: 100%; | |||||
| overflow: hidden; | |||||
| } | |||||
| .vis.timeline .item.background .content { | |||||
| position: absolute; | |||||
| display: inline-block; | |||||
| overflow: hidden; | |||||
| max-width: 100%; | |||||
| margin: 5px; | |||||
| } | |||||
| .vis.timeline .item.line { | |||||
| padding: 0; | |||||
| position: absolute; | |||||
| width: 0; | |||||
| border-left-width: 1px; | |||||
| border-left-style: solid; | |||||
| } | |||||
| .vis.timeline .item .content { | |||||
| white-space: nowrap; | |||||
| overflow: hidden; | |||||
| } | |||||
| .vis.timeline .item .delete { | |||||
| background: url('img/timeline/delete.png') no-repeat top center; | |||||
| position: absolute; | |||||
| width: 24px; | |||||
| height: 24px; | |||||
| top: 0; | |||||
| right: -24px; | |||||
| cursor: pointer; | |||||
| } | |||||
| .vis.timeline .item.range .drag-left { | |||||
| position: absolute; | |||||
| width: 24px; | |||||
| max-width: 20%; | |||||
| height: 100%; | |||||
| top: 0; | |||||
| left: -4px; | |||||
| cursor: w-resize; | |||||
| } | |||||
| .vis.timeline .item.range .drag-right { | |||||
| position: absolute; | |||||
| width: 24px; | |||||
| max-width: 20%; | |||||
| height: 100%; | |||||
| top: 0; | |||||
| right: -4px; | |||||
| cursor: e-resize; | |||||
| } | |||||
| .vis.timeline .timeaxis { | |||||
| position: relative; | |||||
| overflow: hidden; | |||||
| } | |||||
| .vis.timeline .timeaxis.foreground { | |||||
| top: 0; | |||||
| left: 0; | |||||
| width: 100%; | |||||
| } | |||||
| .vis.timeline .timeaxis.background { | |||||
| position: absolute; | |||||
| top: 0; | |||||
| left: 0; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| } | |||||
| .vis.timeline .timeaxis .text { | |||||
| position: absolute; | |||||
| color: #4d4d4d; | |||||
| padding: 3px; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .vis.timeline .timeaxis .text.measure { | |||||
| position: absolute; | |||||
| padding-left: 0; | |||||
| padding-right: 0; | |||||
| margin-left: 0; | |||||
| margin-right: 0; | |||||
| visibility: hidden; | |||||
| } | |||||
| .vis.timeline .timeaxis .grid.vertical { | |||||
| position: absolute; | |||||
| border-left: 1px solid; | |||||
| } | |||||
| .vis.timeline .timeaxis .grid.minor { | |||||
| border-color: #e5e5e5; | |||||
| } | |||||
| .vis.timeline .timeaxis .grid.major { | |||||
| border-color: #bfbfbf; | |||||
| } | |||||
| .vis.timeline .currenttime { | |||||
| background-color: #FF7F6E; | |||||
| width: 2px; | |||||
| z-index: 1; | |||||
| } | |||||
| .vis.timeline .customtime { | |||||
| background-color: #6E94FF; | |||||
| width: 2px; | |||||
| cursor: move; | |||||
| z-index: 1; | |||||
| } | |||||
| .vis.timeline.root { | |||||
| /* | |||||
| -webkit-transition: height .4s ease-in-out; | |||||
| transition: height .4s ease-in-out; | |||||
| */ | |||||
| } | |||||
| .vis.timeline .vispanel { | |||||
| /* | |||||
| -webkit-transition: height .4s ease-in-out, top .4s ease-in-out; | |||||
| transition: height .4s ease-in-out, top .4s ease-in-out; | |||||
| */ | |||||
| } | |||||
| .vis.timeline .axis { | |||||
| /* | |||||
| -webkit-transition: top .4s ease-in-out; | |||||
| transition: top .4s ease-in-out; | |||||
| */ | |||||
| } | |||||
| /* TODO: get animation working nicely | |||||
| .vis.timeline .item { | |||||
| -webkit-transition: top .4s ease-in-out; | |||||
| transition: top .4s ease-in-out; | |||||
| } | |||||
| .vis.timeline .item.line { | |||||
| -webkit-transition: height .4s ease-in-out, top .4s ease-in-out; | |||||
| transition: height .4s ease-in-out, top .4s ease-in-out; | |||||
| } | |||||
| /**/ | |||||
| .vis.timeline .vispanel.background.horizontal .grid.horizontal { | |||||
| position: absolute; | |||||
| width: 100%; | |||||
| height: 0; | |||||
| border-bottom: 1px solid; | |||||
| } | |||||
| .vis.timeline .vispanel.background.horizontal .grid.minor { | |||||
| border-color: #e5e5e5; | |||||
| } | |||||
| .vis.timeline .vispanel.background.horizontal .grid.major { | |||||
| border-color: #bfbfbf; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.major { | |||||
| width: 100%; | |||||
| position: absolute; | |||||
| color: #4d4d4d; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.major.measure{ | |||||
| padding: 0px 0px 0px 0px; | |||||
| margin: 0px 0px 0px 0px; | |||||
| border: 0px; | |||||
| visibility: hidden; | |||||
| width: auto; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.minor{ | |||||
| position: absolute; | |||||
| width: 100%; | |||||
| color: #bebebe; | |||||
| white-space: nowrap; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.minor.measure{ | |||||
| padding: 0px 0px 0px 0px; | |||||
| margin: 0px 0px 0px 0px; | |||||
| border: 0px; | |||||
| visibility: hidden; | |||||
| width: auto; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.title{ | |||||
| position: absolute; | |||||
| color: #4d4d4d; | |||||
| white-space: nowrap; | |||||
| bottom: 20px; | |||||
| text-align: center; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.title.measure{ | |||||
| padding: 0px 0px 0px 0px; | |||||
| margin: 0px 0px 0px 0px; | |||||
| visibility: hidden; | |||||
| width: auto; | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.title.left { | |||||
| bottom: 0px; | |||||
| -webkit-transform-origin: left top; | |||||
| -moz-transform-origin: left top; | |||||
| -ms-transform-origin: left top; | |||||
| -o-transform-origin: left top; | |||||
| transform-origin: left bottom; | |||||
| -webkit-transform: rotate(-90deg); | |||||
| -moz-transform: rotate(-90deg); | |||||
| -ms-transform: rotate(-90deg); | |||||
| -o-transform: rotate(-90deg); | |||||
| transform: rotate(-90deg); | |||||
| } | |||||
| .vis.timeline .dataaxis .yAxis.title.right { | |||||
| bottom: 0px; | |||||
| -webkit-transform-origin: right bottom; | |||||
| -moz-transform-origin: right bottom; | |||||
| -ms-transform-origin: right bottom; | |||||
| -o-transform-origin: right bottom; | |||||
| transform-origin: right bottom; | |||||
| -webkit-transform: rotate(90deg); | |||||
| -moz-transform: rotate(90deg); | |||||
| -ms-transform: rotate(90deg); | |||||
| -o-transform: rotate(90deg); | |||||
| transform: rotate(90deg); | |||||
| } | |||||
| .vis.timeline .legend { | |||||
| background-color: rgba(247, 252, 255, 0.65); | |||||
| padding: 5px; | |||||
| border-color: #b3b3b3; | |||||
| border-style:solid; | |||||
| border-width: 1px; | |||||
| box-shadow: 2px 2px 10px rgba(154, 154, 154, 0.55); | |||||
| } | |||||
| .vis.timeline .legendText { | |||||
| /*font-size: 10px;*/ | |||||
| white-space: nowrap; | |||||
| display: inline-block | |||||
| } | |||||
| .vis.timeline .graphGroup0 { | |||||
| fill:#4f81bd; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #4f81bd; | |||||
| } | |||||
| .vis.timeline .graphGroup1 { | |||||
| fill:#f79646; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #f79646; | |||||
| } | |||||
| .vis.timeline .graphGroup2 { | |||||
| fill: #8c51cf; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #8c51cf; | |||||
| } | |||||
| .vis.timeline .graphGroup3 { | |||||
| fill: #75c841; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #75c841; | |||||
| } | |||||
| .vis.timeline .graphGroup4 { | |||||
| fill: #ff0100; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #ff0100; | |||||
| } | |||||
| .vis.timeline .graphGroup5 { | |||||
| fill: #37d8e6; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #37d8e6; | |||||
| } | |||||
| .vis.timeline .graphGroup6 { | |||||
| fill: #042662; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #042662; | |||||
| } | |||||
| .vis.timeline .graphGroup7 { | |||||
| fill:#00ff26; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #00ff26; | |||||
| } | |||||
| .vis.timeline .graphGroup8 { | |||||
| fill:#ff00ff; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #ff00ff; | |||||
| } | |||||
| .vis.timeline .graphGroup9 { | |||||
| fill: #8f3938; | |||||
| fill-opacity:0; | |||||
| stroke-width:2px; | |||||
| stroke: #8f3938; | |||||
| } | |||||
| .vis.timeline .fill { | |||||
| fill-opacity:0.1; | |||||
| stroke: none; | |||||
| } | |||||
| .vis.timeline .bar { | |||||
| fill-opacity:0.5; | |||||
| stroke-width:1px; | |||||
| } | |||||
| .vis.timeline .point { | |||||
| stroke-width:2px; | |||||
| fill-opacity:1.0; | |||||
| } | |||||
| .vis.timeline .legendBackground { | |||||
| stroke-width:1px; | |||||
| fill-opacity:0.9; | |||||
| fill: #ffffff; | |||||
| stroke: #c2c2c2; | |||||
| } | |||||
| .vis.timeline .outline { | |||||
| stroke-width:1px; | |||||
| fill-opacity:1; | |||||
| fill: #ffffff; | |||||
| stroke: #e5e5e5; | |||||
| } | |||||
| .vis.timeline .iconFill { | |||||
| fill-opacity:0.3; | |||||
| stroke: none; | |||||
| } | |||||
| div.network-manipulationDiv { | |||||
| border-width: 0; | |||||
| border-bottom: 1px; | |||||
| border-style:solid; | |||||
| border-color: #d6d9d8; | |||||
| background: #ffffff; /* Old browsers */ | |||||
| background: -moz-linear-gradient(top, #ffffff 0%, #fcfcfc 48%, #fafafa 50%, #fcfcfc 100%); /* FF3.6+ */ | |||||
| background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(48%,#fcfcfc), color-stop(50%,#fafafa), color-stop(100%,#fcfcfc)); /* Chrome,Safari4+ */ | |||||
| background: -webkit-linear-gradient(top, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* Chrome10+,Safari5.1+ */ | |||||
| background: -o-linear-gradient(top, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* Opera 11.10+ */ | |||||
| background: -ms-linear-gradient(top, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* IE10+ */ | |||||
| background: linear-gradient(to bottom, #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* W3C */ | |||||
| filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fcfcfc',GradientType=0 ); /* IE6-9 */ | |||||
| position: absolute; | |||||
| left: 0; | |||||
| top: 0; | |||||
| width: 100%; | |||||
| height: 30px; | |||||
| } | |||||
| div.network-manipulation-editMode { | |||||
| position:absolute; | |||||
| left: 0; | |||||
| top: 15px; | |||||
| height: 30px; | |||||
| } | |||||
| div.network-manipulation-closeDiv { | |||||
| position:absolute; | |||||
| right: 0; | |||||
| top: 0; | |||||
| width: 30px; | |||||
| height: 30px; | |||||
| background-position: 20px 3px; | |||||
| background-repeat: no-repeat; | |||||
| background-image: url("img/network/cross.png"); | |||||
| cursor: pointer; | |||||
| -webkit-touch-callout: none; | |||||
| -webkit-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| -moz-user-select: none; | |||||
| -ms-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| div.network-manipulation-closeDiv:hover { | |||||
| opacity: 0.6; | |||||
| } | |||||
| div.network-manipulationUI { | |||||
| position:relative; | |||||
| top:-7px; | |||||
| font-family: verdana; | |||||
| font-size: 12px; | |||||
| -moz-border-radius: 15px; | |||||
| border-radius: 15px; | |||||
| display:inline-block; | |||||
| background-position: 0px 0px; | |||||
| background-repeat:no-repeat; | |||||
| height:24px; | |||||
| margin: 0px 0px 0px 10px; | |||||
| vertical-align:middle; | |||||
| cursor: pointer; | |||||
| padding: 0px 8px 0px 8px; | |||||
| -webkit-touch-callout: none; | |||||
| -webkit-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| -moz-user-select: none; | |||||
| -ms-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| div.network-manipulationUI:hover { | |||||
| box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.20); | |||||
| } | |||||
| div.network-manipulationUI:active { | |||||
| box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.50); | |||||
| } | |||||
| div.network-manipulationUI.back { | |||||
| background-image: url("img/network/backIcon.png"); | |||||
| } | |||||
| div.network-manipulationUI.none:hover { | |||||
| box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.0); | |||||
| cursor: default; | |||||
| } | |||||
| div.network-manipulationUI.none:active { | |||||
| box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.0); | |||||
| } | |||||
| div.network-manipulationUI.none { | |||||
| padding: 0; | |||||
| } | |||||
| div.network-manipulationUI.notification{ | |||||
| margin: 2px; | |||||
| font-weight: bold; | |||||
| } | |||||
| div.network-manipulationUI.add { | |||||
| background-image: url("img/network/addNodeIcon.png"); | |||||
| } | |||||
| div.network-manipulationUI.edit { | |||||
| background-image: url("img/network/editIcon.png"); | |||||
| } | |||||
| div.network-manipulationUI.edit.editmode { | |||||
| background-color: #fcfcfc; | |||||
| border-style:solid; | |||||
| border-width:1px; | |||||
| border-color: #cccccc; | |||||
| } | |||||
| div.network-manipulationUI.connect { | |||||
| background-image: url("img/network/connectIcon.png"); | |||||
| } | |||||
| div.network-manipulationUI.delete { | |||||
| background-image: url("img/network/deleteIcon.png"); | |||||
| } | |||||
| /* top right bottom left */ | |||||
| div.network-manipulationLabel { | |||||
| margin: 0px 0px 0px 23px; | |||||
| line-height: 25px; | |||||
| } | |||||
| div.network-seperatorLine { | |||||
| display:inline-block; | |||||
| width:1px; | |||||
| height:20px; | |||||
| background-color: #bdbdbd; | |||||
| margin: 5px 7px 0px 15px; | |||||
| } | |||||
| div.network-navigation_wrapper { | |||||
| position: absolute; | |||||
| left: 0; | |||||
| top: 0; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| } | |||||
| div.network-navigation { | |||||
| width:34px; | |||||
| height:34px; | |||||
| -moz-border-radius: 17px; | |||||
| border-radius: 17px; | |||||
| position:absolute; | |||||
| display:inline-block; | |||||
| background-position: 2px 2px; | |||||
| background-repeat:no-repeat; | |||||
| cursor: pointer; | |||||
| -webkit-touch-callout: none; | |||||
| -webkit-user-select: none; | |||||
| -khtml-user-select: none; | |||||
| -moz-user-select: none; | |||||
| -ms-user-select: none; | |||||
| user-select: none; | |||||
| } | |||||
| div.network-navigation:hover { | |||||
| box-shadow: 0px 0px 3px 3px rgba(56, 207, 21, 0.30); | |||||
| } | |||||
| div.network-navigation:active { | |||||
| box-shadow: 0px 0px 1px 3px rgba(56, 207, 21, 0.95); | |||||
| } | |||||
| div.network-navigation.up { | |||||
| background-image: url("img/network/upArrow.png"); | |||||
| bottom:50px; | |||||
| left:55px; | |||||
| } | |||||
| div.network-navigation.down { | |||||
| background-image: url("img/network/downArrow.png"); | |||||
| bottom:10px; | |||||
| left:55px; | |||||
| } | |||||
| div.network-navigation.left { | |||||
| background-image: url("img/network/leftArrow.png"); | |||||
| bottom:10px; | |||||
| left:15px; | |||||
| } | |||||
| div.network-navigation.right { | |||||
| background-image: url("img/network/rightArrow.png"); | |||||
| bottom:10px; | |||||
| left:95px; | |||||
| } | |||||
| div.network-navigation.zoomIn { | |||||
| background-image: url("img/network/plus.png"); | |||||
| bottom:10px; | |||||
| right:15px; | |||||
| } | |||||
| div.network-navigation.zoomOut { | |||||
| background-image: url("img/network/minus.png"); | |||||
| bottom:10px; | |||||
| right:55px; | |||||
| } | |||||
| div.network-navigation.zoomExtends { | |||||
| background-image: url("img/network/zoomExtends.png"); | |||||
| bottom:50px; | |||||
| right:15px; | |||||
| } | |||||
| div.network-tooltip { | |||||
| position: absolute; | |||||
| visibility: hidden; | |||||
| padding: 5px; | |||||
| white-space: nowrap; | |||||
| -moz-border-radius: 3px; | |||||
| -webkit-border-radius: 3px; | |||||
| border-radius: 3px; | |||||
| border: 1px solid; | |||||
| box-shadow: 3px 3px 10px rgba(128, 128, 128, 0.5); | |||||
| } | |||||
| @ -0,0 +1,20 @@ | |||||
| { | |||||
| "name": "BRIDGE", | |||||
| "version": "0.2.0", | |||||
| "description": "Cloud element for BRIDGE demo", | |||||
| "main": "proxy.js", | |||||
| "scripts": { | |||||
| "start": "node proxy.js" | |||||
| }, | |||||
| "dependencies": { | |||||
| "evejs": "0.4.6-test" | |||||
| }, | |||||
| "engines": { | |||||
| "node": "0.10.x" | |||||
| }, | |||||
| "keywords": [ | |||||
| "node", | |||||
| "heroku", | |||||
| "express" | |||||
| ] | |||||
| } | |||||
| @ -0,0 +1,93 @@ | |||||
| body { | |||||
| background: #222; | |||||
| font-family: "Fira Sans","Helvetica Neue",Helvetica,Arial,sans-serif; | |||||
| font-size: 15pt; | |||||
| line-height: 1.42857; | |||||
| color: white; | |||||
| } | |||||
| /* timeline background */ | |||||
| .vis.timeline.root { | |||||
| border: none; | |||||
| background: #3e647e url(timeline/background-moche.png); /* blue2 */ | |||||
| background: #e1953f url(timeline/background-moche.png); /* orange */ | |||||
| background: #422a6c url(timeline/background-moche.png); /* purple */ | |||||
| background: #3145B1 url(timeline/background-moche.png); /* blue */ | |||||
| } | |||||
| /* grid styling */ | |||||
| .vis.timeline .timeaxis .text { | |||||
| color: white; | |||||
| padding-top: 6px; | |||||
| padding-left: 6px; | |||||
| } | |||||
| .vis.timeline .timeaxis .text.major { | |||||
| font-weight: bold; | |||||
| } | |||||
| .vis.timeline .timeaxis .grid.minor { | |||||
| border-width: 1px; | |||||
| border-color: rgba(255,255,255, 0.2); | |||||
| } | |||||
| .vis.timeline .timeaxis .grid.major { | |||||
| border-width: 1px; | |||||
| border-color: rgba(255,255,255, 0.5); | |||||
| } | |||||
| /* default item class */ | |||||
| .vis.timeline .item, | |||||
| .vis.timeline .item.line { | |||||
| border-width: 2px; | |||||
| } | |||||
| .vis.timeline .item.dot { | |||||
| border-width: 6px; | |||||
| border-radius: 6px; | |||||
| } | |||||
| .vis.timeline .item { | |||||
| border-color: lightgray; | |||||
| background-color: white; | |||||
| color: #222; | |||||
| } | |||||
| .vis.timeline .item.selected { | |||||
| border-color: lightgray; | |||||
| background-color: white; | |||||
| box-shadow: 0 0 16px rgba(255,255,255, 0.7); | |||||
| } | |||||
| /* custom item classes */ | |||||
| .vis.timeline .item.green { | |||||
| background-color: #6dd22f; | |||||
| border-color: green; | |||||
| color: white; | |||||
| } | |||||
| .vis.timeline .item.orange { | |||||
| background-color: #ffdb07; | |||||
| border-color: orange; | |||||
| } | |||||
| .vis.timeline .item.red { | |||||
| background-color: #ce0000; | |||||
| border-color: darkred; | |||||
| color: white; | |||||
| } | |||||
| .vis.timeline .item.magenta { | |||||
| background-color: #ff00ff; | |||||
| border-color: darkmagenta; | |||||
| color: white; | |||||
| } | |||||