Merge lp:~rjwills/ensoft-sextant/branding into lp:ensoft-sextant

Proposed by Robert
Status: Merged
Approved by: Patrick Stevens
Approved revision: 20
Merged at revision: 20
Proposed branch: lp:~rjwills/ensoft-sextant/branding
Merge into: lp:ensoft-sextant
Diff against target: 855 lines (+449/-371)
5 files modified
resources/sextant/web/index.html (+14/-28)
resources/sextant/web/interface.html (+87/-103)
resources/sextant/web/queryjavascript.js (+195/-201)
resources/sextant/web/style_sheet.css (+147/-36)
src/sextant/export.py (+6/-3)
To merge this branch: bzr merge lp:~rjwills/ensoft-sextant/branding
Reviewer Review Type Date Requested Status
Robert Approve
Review via email: mp+233326@code.launchpad.net

Commit message

Enhance the Sextant branding.

Description of the change

Enhance the Sextant branding.

To post a comment you must log in.
Revision history for this message
Robert (rjwills) wrote :

Approving for now. HTML and CSS for the whole project may be reviewed at a later date.

review: Approve
Revision history for this message
Patrick Stevens (patrickas) wrote :

You've changed a bunch of file permissions, but I can report that as a bug and fix it later, since it's not particularly vital.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'resources/sextant/web/index.html' (properties changed: -x to +x)
--- resources/sextant/web/index.html 2014-08-13 10:02:58 +0000
+++ resources/sextant/web/index.html 2014-09-04 09:50:20 +0000
@@ -12,34 +12,20 @@
12 <link rel="stylesheet" type="text/css" href="style_sheet.css"/>12 <link rel="stylesheet" type="text/css" href="style_sheet.css"/>
13 <title>Sextant</title>13 <title>Sextant</title>
14</head>14</head>
15<body>15<body style="height:100%" class="titlescreen">
16<table>16 <div class="centered">
17<tr>17 <div id="titlescreen-logo-text">
18 <td>18 Sextant
19 <h1>You have reached the portal to Sextant.</h1>19 </div>
20 </td>20 <div>
21 <td>21 <button class="button" onclick="window.location='interface.html'">Open Sextant Explorer</button>
22 </td>22 <!--<button class="button">View Programs</button>-->
23</tr>23 </div>
24<tr>24 </div>
25 <td>25
26 <!--Sextant image-->26 <div id="titlescreen-bottombar">
27 <img src="sextant.gif" alt = "sextant">27 To add a program to Sextant, use '<b>sextant add-program</b>' from the command line
28 </td>28 </div>
29 <td>
30 <!--link to the Query page-->
31 <form action='/interface.html' method="get">
32 <input type="submit" value="Query Page" class="button2"
33 name="link_query" id="form1_submit" />
34 </form>
35 <!--link to Database Properties page-->
36 <form action='/database_properties' method="get">
37 <input type="submit" value="Database Properties" class="button2"
38 name="link_properties" id="form2_submit" />
39 </form>
40 </td>
41</tr>
42</table>
4329
44</body>30</body>
45</html>31</html>
4632
=== modified file 'resources/sextant/web/interface.html' (properties changed: -x to +x)
--- resources/sextant/web/interface.html 2014-08-26 11:04:04 +0000
+++ resources/sextant/web/interface.html 2014-09-04 09:50:20 +0000
@@ -1,103 +1,87 @@
1<!--1<!--
2 Sextant2 Sextant
3 Copyright 2014, Ensoft Ltd.3 Copyright 2014, Ensoft Ltd.
4 Author: James Harkin4 Author: James Harkin
55
6 Sextant web interface for Queries -->6 Sextant web interface for Queries -->
77
8<!DOCTYPE html>8<!DOCTYPE html>
9<html>9<html>
10<head>10<head>
11<meta charset="utf-8"/>11<meta charset="utf-8"/>
12 <link rel="stylesheet" type="text/css" href="style_sheet.css"/>12 <link rel="stylesheet" type="text/css" href="style_sheet.css"/>
13 <title> Sextant Query </title>13 <title> Sextant Explorer </title>
14</head>14</head>
1515
16<body onload="get_names_for_autocomplete('programs')">16<body onload="get_names_for_autocomplete('programs'); set_arguments('', ''); show_item('welcome')">
17<!-- Create a table with a border to hold the input file query name17 <div class="toolbar">
18 and arguments. table remains fixed while page scrolls-->18 <div>
19<table style="background-color:#FFFFFF; width: 100%;19 Program:
20 border:1px solid black; position: fixed;">20 <input list="program_names" id="program_name" class="textbox"
21<tr style="height:20px">21 onblur="get_names_for_autocomplete('funcs')" style="width: 150px" />
22 <td style="width:250">22 <datalist id="program_names"></datalist>
23 <h2>Input file</h2>23
24 </td>24 <select id="query_list" class="dropdown" onchange="display_when();">
25 <td style="width:350">25 <option value="whole_program">Whole graph</option>
26 <h2>Query</h2>26 <option value="functions_calling">
27 </td>27 All functions calling specific function</option>
28 <td style="width:250">28 <option value="functions_called_by">
29 <h2>Arguments</h2>29 All functions called by a specific function</option>
30 </td>30 <option value="all_call_paths">
31 <td>31 All function call paths between two functions</option>
32 <form>32 <option value="shortest_call_path">
33 <!--checkbox used to supress common nodes-->33 Shortest path between two functions</option>
34 <label>34 <option value="function_names">
35 <input type="checkbox" id="suppress_common" value="True" />35 All function names</option>
36 Suppress common functions?36 </select>
37 </label>37 &nbsp;&nbsp;&nbsp;
38 </form>38 <label>
39 </td>39 <input type="checkbox" id="suppress_common" value="True"></input>
40</tr>40 Suppress common functions?
41<tr style="height:100px">41 </label>
42 <td>42
43 <!-- Autocomplete textbox for program names; populated on upload-->43 <button class="button" style="float:right; margin: 1px 20px -1px 0;" onclick="execute_query()">Run Query</button>
44 <input list="program_names" id="program_name"44 </div>
45 onblur="get_names_for_autocomplete('funcs')" style="size:20">45 <div id="toolbar-row2" style="margin-left: 234px;">
46 <datalist id="program_names">46 <!--list to populate arguments. Updates when program name is specified-->
47 </datalist>47 <datalist id="function_names"></datalist>
48 </td>48
49 <td>49 <span id="argument_1" style="size:20;"></span>
50 <!-- Drop-down box to hold choice of queries-->50 <input list="function_names" id="function_1" class="textbox" style="size:20;"></input>
51 <form name="drop_list_1">51
52 <SELECT id="query_list" onchange="display_when();">52 <span id="argument_2" style="size:20;"></span>
53 <option value="whole_program">Whole graph</option>53 <input list="function_names" id="function_2" class="textbox" style="size:20;"></input>
54 <option value="functions_calling">54 </div>
55 All functions calling specific function</option>55 </div>
56 <option value="functions_called_by">56
57 All functions called by a specific function</option>57
58 <option value="all_call_paths">58
59 All function call paths between two functions</option>59 <!-- Output for image file-->
60 <option value="shortest_call_path">60 <img id=output_image src="sextant.jpg"
61 Shortest path between two functions</option>61 class="pos_img"
62 <option value="function_names">62 style="align: bottom; font-style: italic; color: #C0C0C0; font-size: 15px" />
63 All function names</option>63
64 </SELECT>64 <!-- Paragraph for text output e.g. list of funtion names-->
65 </form>65 <p id="function_names_output" class="pos_functions" style="size:20"></p>
66 <p>66
67 query selected : <input type="text" id="query"67 <div class="centered" id="welcome">
68 value="Whole graph" size="20">68 <div class="title">Welcome to Sextant Explorer</div>
69 </p>69 <div class="subtitle"><b>To begin</b>: enter a program name, choose a query, and click 'Run Query'</div>
70 </td>70 </div>
71 <td>71 </div>
72 <!-- Autocomplete text box for argument72
73 1 Is only visible for relevant queries-->73 <div class="centered" id="please-wait">
74 <div id="argument_1">No arguments required.</div>74 <div class="title">Just a moment</div>
75 <input list="function_names" id="function_1" style="size:20; visibility:hidden">75 <div class="subtitle">Sextant is rendering the result. Large graphs may take a minute.</div>
76 <!--list to populate arguments. Updates when program name is specified-->76 </div>
77 <datalist id="function_names">77 </div>
78 </datalist>78
79 <!-- Autocomplete text box for argument79 <div class="centered" id="error">
80 2 Is only visible for relevant queries-->80 <div class="error-title">Oops!</div>
81 <div id="argument_2"></div>81 <div class="error-subtitle" id="error-msg"></div>
82 <input list="function_names" id="function_2" style="size:20; visibility:hidden">82 </div>
8383 </div>
84 </td>84
85 <td>85 <script src="queryjavascript.js"></script>
8686</body>
87 <!--execute button; submits query-->87</html>
88 <br><input type="submit" value="Execute&#x00A;Query" class="button"
89 onclick="execute_query()"><br>
90 </td>
91</tr>
92</table>
93<!-- Paragraph for text output e.g. list of funtion names-->
94<p id="function_names_output" class="pos_functions" style="size:20; visibility:hidden"></p>
95
96<!-- Output for image file-->
97<img id=output_image src="sextant.jpg" alt="Execute query to display graph."
98 class="pos_img"
99 style="align: bottom; font-style: italic; color: #C0C0C0; font-size: 15px;">
100
101<script src="queryjavascript.js"></script>
102</body>
103</html>
10488
=== modified file 'resources/sextant/web/queryjavascript.js' (properties changed: -x to +x)
--- resources/sextant/web/queryjavascript.js 2014-08-26 11:04:04 +0000
+++ resources/sextant/web/queryjavascript.js 2014-09-04 09:50:20 +0000
@@ -1,201 +1,195 @@
1// Sextant1// Sextant
2// Copyright 2014, Ensoft Ltd.2// Copyright 2014, Ensoft Ltd.
3// Author: James Harkin, Patrick Stevens3// Author: James Harkin, Patrick Stevens
4// 4//
5//Runs query and "GET"s either program names uploaded on the 5//Runs query and "GET"s either program names uploaded on the
6//server or function names from a specific program.6//server or function names from a specific program.
77
88
9function get_names_for_autocomplete(info_needed){9function get_names_for_autocomplete(info_needed){
10 //Function queries to database to create a list 10 //Function queries to database to create a list
11 //which is used to populate the auto-complete text boxes.11 //which is used to populate the auto-complete text boxes.
12 var xmlhttp = new XMLHttpRequest();12 var xmlhttp = new XMLHttpRequest();
13 xmlhttp.onreadystatechange = function(){13 xmlhttp.onreadystatechange = function(){
14 if (xmlhttp.status = 200){14 if (xmlhttp.status = 200){
15 var values_list = xmlhttp.responseText;15 var values_list = xmlhttp.responseText;
16 console.log(values_list)16 if (values_list != "") {
17 values_list = JSON.parse(values_list);17 values_list = JSON.parse(values_list);
18 if (info_needed =='programs'){18 if (info_needed =='programs'){
19 //We need to populate the program names list19 //We need to populate the program names list
20 add_options("program_names", values_list);20 add_options("program_names", values_list);
21 }21 }
22 if (info_needed =='funcs'){22 if (info_needed =='funcs'){
23 //We need to populate the functions list for the arguments23 //We need to populate the functions list for the arguments
24 add_options("function_names", values_list);24 add_options("function_names", values_list);
25 } 25 }
26 }26 }
27 }27 }
28 if (info_needed == 'programs'){28 }
29 var string = "/database_properties?query=" + info_needed + "&program_name=";29 if (info_needed == 'programs'){
30 }30 var string = "/database_properties?query=" + info_needed + "&program_name=";
31 else{31 }
32 var string = "/database_properties?query=" + "functions" + 32 else{
33 "&program_name=" + document.getElementById("program_name").value;33 var string = "/database_properties?query=" + "functions" +
34 if (info_needed == 'programs'){34 "&program_name=" + document.getElementById("program_name").value;
35 var string = "/database_properties?query=" + 35 if (info_needed == 'programs'){
36 info_needed + "&program_name=" + prog_name;36 var string = "/database_properties?query=" +
37 }37 info_needed + "&program_name=" + prog_name;
38 //"GET" information from the specified url (string)38 }
39 xmlhttp.open("GET", string, true);39 //"GET" information from the specified url (string)
40 xmlhttp.send();40 xmlhttp.open("GET", string, true);
41 }41 xmlhttp.send();
42 xmlhttp.open("GET", string, true);42 }
43 xmlhttp.send();43 xmlhttp.open("GET", string, true);
44}44 xmlhttp.send();
4545}
4646
47function add_options(selectedlist, values_list){47
48 //Adds all the options obtained from the list of program 48function add_options(selectedlist, values_list){
49 //names or function names to an auto complete drop-down box49 //Adds all the options obtained from the list of program
50 var options = ''50 //names or function names to an auto complete drop-down box
51 if (values_list.length == 1 || values_list.length ==0){51 var options = ''
52 options += '<option value="'+values_list+'"/>';52 if (values_list.length == 1 || values_list.length ==0){
53 }53 options += '<option value="'+values_list+'"/>';
54 else{54 }
55 for (var i=0; i < values_list.length;++i){55 else{
56 options += '<option value="'+values_list[i]+'"/>';56 for (var i=0; i < values_list.length;++i){
57 }57 options += '<option value="'+values_list[i]+'"/>';
58 }58 }
59 document.getElementById(selectedlist).innerHTML = options;59 }
60}60 document.getElementById(selectedlist).innerHTML = options;
6161}
62 62
63function display_when(){63
64 //For each query specifies when auto-complete text boxes should be made 64function set_argument(number, label) {
65 //visible or invisible and makes them read only65 var argEl = document.getElementById("argument_" + number);
66 var query_list = document.getElementById("query_list");66 var funcEl = document.getElementById("function_" + number);
67 document.getElementById("query").value = 67 if (label == "") {
68 query_list.options[query_list.selectedIndex].text;68 argEl.style.visibility = "hidden";
69 var no_functions = new Array();69 funcEl.style.visibility = "hidden";
70 var prog_name = document.getElementById("program_name").value;70 funcEl.value = null;
71 if (query_list.options[query_list.selectedIndex].value == "functions_calling"){71 } else {
72 document.getElementById("argument_1").innerHTML = "Function being called";72 argEl.innerHTML = label;
73 document.getElementById("argument_2").innerHTML = "";73 argEl.style.visibility = "visible";
74 document.getElementById("function_1").readOnly = false;74 funcEl.style.visibility = "visible";
75 document.getElementById("function_2").readOnly = true;75 }
76 document.getElementById("function_1").style.visibility = "visible";76}
77 document.getElementById("function_2").style.visibility = "hidden";77
78 document.getElementById("function_2").value = null;78
79 }79function set_arguments(label1, label2) {
80 if (query_list.options[query_list.selectedIndex].value == "functions_called_by"){80 set_argument(1, label1);
81 document.getElementById("argument_1").innerHTML = "Function calling";81 set_argument(2, label2);
82 document.getElementById("argument_2").innerHTML = "";82 document.getElementById("toolbar-row2").style.display
83 document.getElementById("function_1").readOnly = false;83 = (label1 == "" && label2 == "") ? "none" : "block";
84 document.getElementById("function_2").readOnly = true;84}
85 document.getElementById("function_1").style.visibility = "visible";85
86 document.getElementById("function_2").style.visibility = "hidden";86
87 document.getElementById("function_2").value = null;87function display_when(){
88 }88 //For each query specifies when auto-complete text boxes should be made
89 if (query_list.options[query_list.selectedIndex].value == "all_call_paths"){89 //visible or invisible and makes them read only
90 document.getElementById("argument_1").innerHTML = "Function calling";90 var query_list = document.getElementById("query_list");
91 document.getElementById("argument_2").innerHTML = "Function being called";91
92 document.getElementById("function_1").readOnly = false;92 var no_functions = new Array();
93 document.getElementById("function_2").readOnly = false;93 var prog_name = document.getElementById("program_name").value;
94 document.getElementById("function_1").style.visibility = "visible";94 if (query_list.options[query_list.selectedIndex].value == "functions_calling"){
95 document.getElementById("function_2").style.visibility = "visible";95 set_arguments("Function being called", "");
96 }96 }
97 if (query_list.options[query_list.selectedIndex].value == "shortest_call_path"){97 if (query_list.options[query_list.selectedIndex].value == "functions_called_by"){
98 document.getElementById("argument_1").innerHTML = "Function calling";98 set_arguments("Function calling", "");
99 document.getElementById("argument_2").innerHTML = "Function being called";99 }
100 document.getElementById("function_1").readOnly = false;100 if (query_list.options[query_list.selectedIndex].value == "all_call_paths"){
101 document.getElementById("function_2").readOnly = false;101 set_arguments("Function calling", "Function being called");
102 document.getElementById("function_1").style.visibility = "visible";102 }
103 document.getElementById("function_2").style.visibility = "visible";103 if (query_list.options[query_list.selectedIndex].value == "shortest_call_path"){
104 }104 set_arguments("Function calling", "Function being called");
105 if (query_list.options[query_list.selectedIndex].value == "whole_program") {105 }
106 document.getElementById("argument_1").innerHTML = "No arguments required.";106 if (query_list.options[query_list.selectedIndex].value == "whole_program") {
107 document.getElementById("argument_2").innerHTML = "";107 set_arguments("", "");
108 document.getElementById("function_1").readOnly = true;108 }
109 document.getElementById("function_2").readOnly = true;109 if (query_list.options[query_list.selectedIndex].value == "function_names"){
110 document.getElementById("function_1").style.visibility = "hidden";110 set_arguments("", "");
111 document.getElementById("function_2").style.visibility = "hidden";111 }
112 document.getElementById("function_1").value = null;112}
113 document.getElementById("function_2").value = null;113
114 }114
115 if (query_list.options[query_list.selectedIndex].value == "function_names"){115
116 document.getElementById("argument_1").innerHTML = "No arguments required.";116function execute_query(){
117 document.getElementById("argument_2").innerHTML = "";117 document.getElementById("output_image").src = "";
118 document.getElementById("function_1").readOnly = true;118
119 document.getElementById("function_2").readOnly = true;119 //Returns error in alert window if query not executed properly,
120 document.getElementById("function_1").style.visibility = "hidden";120 //otherwise performs the query and outputs it
121 document.getElementById("function_2").style.visibility = "hidden";121 show_item("please-wait");
122 document.getElementById("function_1").value = null;122 var query_id = document.getElementById("query_list").value;
123 document.getElementById("function_2").value = null;123 if (query_id == "function_names"){
124 }124 //url for page containing all function names
125}125 var string = "/database_properties?program_name=" +
126126 document.getElementById("program_name").value + "&query=functions";
127127 }
128128 else{
129function execute_query(){129 //If not function names we will want a graph as an output;
130 //Returns error in alert window if query not executed properly, 130 //url returns svg file of graph.
131 //otherwise performs the query and outputs it131 var string = "/output_graph.svg?program_name=" +
132 document.getElementById("output_image").src = "";132 document.getElementById("program_name").value +
133 document.getElementById("output_image").alt = "Please wait loading...";133 "&query=" + query_id + "&func1=";
134 var query_id = document.getElementById("query_list").value;134 string = string + document.getElementById("function_1").value +
135 if (query_id == "function_names"){135 "&func2=" + document.getElementById("function_2").value;
136 //url for page containing all function names136 string = string + "&suppress_common=" +
137 var string = "/database_properties?program_name=" + 137 document.getElementById('suppress_common').checked.toString();
138 document.getElementById("program_name").value + "&query=functions";138
139 }139 }
140 else{140 var xmlhttp = new XMLHttpRequest();
141 //If not function names we will want a graph as an output; 141 xmlhttp.open("GET", string, true);
142 //url returns svg file of graph.142 xmlhttp.send();
143 var string = "/output_graph.svg?program_name=" + 143 xmlhttp.onreadystatechange = function(){
144 document.getElementById("program_name").value + 144 if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
145 "&query=" + query_id + "&func1=";145 //readyState == 4 means query has finished executing.
146 string = string + document.getElementById("function_1").value + 146 //status == 200 means "GET"ing has been successful.
147 "&func2=" + document.getElementById("function_2").value;147 if (query_id == "function_names"){
148 string = string + "&suppress_common=" + 148 //Text output displayed in paragraph.
149 document.getElementById('suppress_common').checked.toString();149 document.getElementById("function_names_output").innerHTML =
150150 xmlhttp.responseText;
151 }151 show_item("function_names_output");
152 var xmlhttp = new XMLHttpRequest();152 }
153 xmlhttp.open("GET", string, true);153 else{
154 xmlhttp.send();154 show_item("output_image");
155 xmlhttp.onreadystatechange = function(){155 document.getElementById("output_image").src = string;
156 if (xmlhttp.readyState == 4 && xmlhttp.status == 200){156 }
157 //readyState == 4 means query has finished executing.157 }
158 //status == 200 means "GET"ing has been successful.158 else if (xmlhttp.readyState == 4 && xmlhttp.status == 400){
159 if (query_id == "function_names"){159 //Error occurred during query; display response.
160 //Text output displayed in paragraph.160 show_error(xmlhttp.responseText);
161 document.getElementById("function_names_output").innerHTML = 161 }
162 xmlhttp.responseText;162 else if(xmlhttp.readyState == 4 && xmlhttp.status == 404){
163 document.getElementById("function_names_output").style.visibility = 163 //Error occurred during query; display response.
164 "visible"164 show_error(xmlhttp.responseText);
165 //Clear current image if one exists.165 }
166 document.getElementById("output_image").alt = "";166 else if(xmlhttp.readyState ==4 && xmlhttp.status == 204){
167 document.getElementById("output_image").src = "";167 //Query executed correctly but graph returned is empty
168 }168 show_error("Graph returned was empty");
169 else{169 }
170 document.getElementById("function_names_output").style.visibility = 170 else if (xmlhttp.readyState == 4 && xmlhttp.status == 502) {
171 "hidden"171 //Error occurs if Neo4j isn't running
172 document.getElementById("output_image").src = string;172 show_error("Bad Gateway received - are you sure the database server is running?");
173 }173 }
174 }174 else if(xmlhttp.readyState ==4){
175 else if (xmlhttp.readyState == 4 && xmlhttp.status == 400){175 //query executed correctly
176 //Error occurred during query; display response.176 show_error("An unknown error occurred");
177 document.getElementById("output_image").alt = "";177 }
178 window.alert(xmlhttp.responseText);178 }
179 }179}
180 else if(xmlhttp.readyState == 4 && xmlhttp.status == 404){180
181 //Error occurred during query; display response.181function show_item(id) {
182 document.getElementById("output_image").alt = "";182 var els = ["output_image", "function_names_output", "welcome", "please-wait", "error"];
183 window.alert(xmlhttp.responseText);183
184 }184 for (var i = 0; i < els.length; i++) {
185 else if(xmlhttp.readyState ==4 && xmlhttp.status == 204){185 document.getElementById(els[i]).style.display = "none";
186 //Query executed correctly but graph returned is empty186 }
187 document.getElementById("output_image").alt = "";187
188 window.alert("Graph returned was empty");188 document.getElementById(id).style.display = "block";
189 }189}
190 else if (xmlhttp.readyState == 4 && xmlhttp.status == 502) {190
191 //Error occurs if Neo4j isn't running191
192 document.getElementById("output_image").alt = "";192function show_error(msg) {
193 window.alert("Bad Gateway received - are you sure the database server is running?");193 show_item("error");
194 }194 document.getElementById("error-msg").innerHTML = msg;
195 else if(xmlhttp.readyState ==4){195}
196 //query executed correctly
197 document.getElementById("output_image").alt = "";
198 window.alert("Error not recognised");
199 }
200 }
201}
202196
=== modified file 'resources/sextant/web/style_sheet.css' (properties changed: -x to +x)
--- resources/sextant/web/style_sheet.css 2014-08-13 10:02:58 +0000
+++ resources/sextant/web/style_sheet.css 2014-09-04 09:50:20 +0000
@@ -1,36 +1,147 @@
1pre {1@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,300,200);
2 color: green;2@import url(http://fonts.googleapis.com/css?family=Poiret+One);
3 background: white;3
4 font-family: monospace;4
5}5pre {
66 color: green;
7body {7 background: white;
8 font-family: Helvetica, sans-serif;8 font-family: monospace;
9}9}
10.button{10
11 display:block; width:100px; height:100px; border-radius:50px; font-size:15px; 11body {
12 color:#fff; line-height:100px; text-align:center; background:#FF000012 font-family: 'Source Sans Pro', sans-serif;
13}13 backround-color: rgb(245, 245, 245);
1414 margin: 0;
15.pos_img{15 padding: 0;
16 position:absolute;16}
17 left:0px;17
18 top:270px;18body.titlescreen {
19 z-index:-119 background-color: rgb(105, 145, 172);
20 20 color: rgb(245, 245, 245);
21}21}
22.pos_functions{22
23 position:absolute;23.pos_img{
24 left:0px;24 position:absolute;
25 top:250px;25 left:0px;
26 26 top:80px;
27}27 z-index:-1
2828
29.button2{29}
30 display:inline-block; width:200px; height:100px; border-radius:50px; 30.pos_functions{
31 font-size:15px; color:#fff; line-height:100px; 31 position:absolute;
32 text-align:center; background:#00000032 left:0px;
33}33 top:250px;
3434
3535}
3636
37.button2{
38 display:inline-block; width:200px; height:100px; border-radius:50px;
39 font-size:15px; color:#fff; line-height:100px;
40 text-align:center; background:#000000
41}
42
43
44
45
46
47div.centered {
48 position: absolute;
49 left: 50%;
50 top: 40%; /* for good design we position nearer the top */
51 transform: translate(-50%, -40%);
52 -webkit-transform: translate(-50%, -40%);
53 -moz-transform: translate(-50%, -40%);
54 -ms-transform: translate(-50%, -40%);
55 text-align: center;
56}
57
58#titlescreen-logo-text {
59 font-size: 80px;
60 font-family: 'Poiret One', sans-serif;
61 letter-spacing: -2px;
62 padding-bottom: 4px;
63}
64
65#titlescreen-bottombar {
66 font-size: 20px;
67 position: absolute;
68 left: 0;
69 bottom: 0;
70 right: 0;
71 height: 80px;
72 font-weight: 300;
73 text-align: center;
74}
75
76.toolbar {
77 background-color: rgb(105, 145, 172);
78 color: rgb(245, 245, 245);
79 position: fixed;
80 padding: 4px 10px 4px 10px;
81 width: 100%;
82}
83
84.button {
85 background-color: rgb(195, 215, 223);
86 color: rgb(103, 114, 122);
87 padding: 4px 10px 4px 10px;
88 margin-left: 3px;
89 margin-right: 3px;
90 border: none;
91}
92
93.textbox {
94 background-color: rgb(245, 245, 245);
95 border: 1px solid rgb(103, 114, 122);
96 color: rgb(103, 114, 122);
97 padding: 2px 4px 2px 4px;
98 margin: 2px;
99}
100
101.dropdown {
102 background-color: rgb(245, 245, 245);
103 border: 1px solid rgb(103, 114, 122);
104 color: rgb(103, 114, 122);
105 padding: 1px 4px 1px 4px;
106 margin: 2px;
107}
108
109.button:hover {
110 background-color: rgb(245, 245, 245);
111}
112
113
114
115
116.title {
117 font-size: 41px;
118 font-family: 'Poiret One', sans-serif;
119 letter-spacing: -1px;
120 padding-bottom: 4px;
121 color: rgb(103, 114, 122);
122}
123
124.subtitle {
125 font-size: 20px;
126 color: rgb(103, 114, 122);
127 font-weight: 300;
128}
129
130.subtitle > b {
131 font-weight: 400;
132}
133
134
135.error-title {
136 font-size: 41px;
137 font-family: 'Poiret One', sans-serif;
138 letter-spacing: -1px;
139 padding-bottom: 4px;
140 color: rgb(215, 92, 55);
141}
142
143.error-subtitle {
144 font-size: 20px;
145 color: rgb(215, 92, 55);
146 font-weight: 300;
147}
37148
=== modified file 'src/sextant/export.py' (properties changed: -x to +x)
--- src/sextant/export.py 2014-08-26 13:43:02 +0000
+++ src/sextant/export.py 2014-09-04 09:50:20 +0000
@@ -55,9 +55,12 @@
55 # node already, DOT lets us add more information about that node55 # node already, DOT lets us add more information about that node
56 # so we can insist on turning that same node into a box-shape56 # so we can insist on turning that same node into a box-shape
57 # and changing its font.57 # and changing its font.
58 output_str += ' "{}" [label="{}", fontname="{}", shape=box]\n'.format(func.name,58 output_str += (
59 ProgramConverter.get_display_name(func, suppress_common_nodes),59 ' "{}" [label="{}", fontname="{}", fontsize="10", ' +
60 font_name)60 'shape=box, penwidth=0.5]\n').format(
61 func.name,
62 ProgramConverter.get_display_name(func, suppress_common_nodes),
63 font_name)
61 if func.is_common:64 if func.is_common:
62 output_str += ' "{}" [fillcolor=lightgreen, style=filled]\n'.format(func.name)65 output_str += ' "{}" [fillcolor=lightgreen, style=filled]\n'.format(func.name)
6366

Subscribers

People subscribed via source and target branches