pho-utensil 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -0
- data/Rakefile +47 -0
- data/bin/utensil +7 -0
- data/lib/utensil-app.rb +159 -0
- data/public/css/blueprint/ie.css +28 -0
- data/public/css/blueprint/plugins/fancy-type/screen.css +71 -0
- data/public/css/blueprint/print.css +30 -0
- data/public/css/blueprint/screen.css +252 -0
- data/public/css/blueprint/src/forms.css +49 -0
- data/public/css/blueprint/src/grid.css +269 -0
- data/public/css/blueprint/src/grid.png +0 -0
- data/public/css/blueprint/src/ie.css +61 -0
- data/public/css/blueprint/src/print.css +85 -0
- data/public/css/blueprint/src/reset.css +38 -0
- data/public/css/blueprint/src/typography.css +105 -0
- data/public/css/impromptu.css +318 -0
- data/public/css/spared.css +99 -0
- data/public/icons/script_delete.png +0 -0
- data/public/icons/script_edit.png +0 -0
- data/public/icons/script_error.png +0 -0
- data/public/icons/script_go.png +0 -0
- data/public/img/purzen_Cartoon_spatula.png +0 -0
- data/public/js/spared-config.js +126 -0
- data/public/js/spared-examples.js +13 -0
- data/public/js/spared-prefixes.js +85 -0
- data/public/js/spared-templates.js +9 -0
- data/public/js/spared.js +190 -0
- data/public/lib/jquery-1.2.6.js +3549 -0
- data/public/lib/jquery-impromptu.1.5.js +133 -0
- data/public/lib/jquery.ui.all.js +9639 -0
- data/public/rq/list-properties-of-type.rq +9 -0
- data/public/rq/list-properties.rq +7 -0
- data/public/rq/list-types.rq +7 -0
- data/views/admin.erb +37 -0
- data/views/configure.erb +4 -0
- data/views/enrich.erb +35 -0
- data/views/explore.erb +1 -0
- data/views/index.erb +33 -0
- data/views/layout.erb +53 -0
- data/views/spared.erb +66 -0
- data/views/update.erb +28 -0
- data/views/upload.erb +35 -0
- metadata +117 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
/* BUTTONS */
|
2
|
+
/* http://particletree.com/features/rediscovering-the-button-element/ */
|
3
|
+
.buttons a, .buttons button{
|
4
|
+
display:block;
|
5
|
+
float:left;
|
6
|
+
margin:0 7px 0 0;
|
7
|
+
background-color:#f5f5f5;
|
8
|
+
border:1px solid #dedede;
|
9
|
+
border-top:1px solid #eee;
|
10
|
+
border-left:1px solid #eee;
|
11
|
+
|
12
|
+
font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif;
|
13
|
+
font-size: 80%;
|
14
|
+
line-height:130%;
|
15
|
+
text-decoration:none;
|
16
|
+
font-weight:bold;
|
17
|
+
color:#565656;
|
18
|
+
cursor:pointer;
|
19
|
+
padding:5px 10px 6px 7px; /* Links */
|
20
|
+
}
|
21
|
+
.buttons button {
|
22
|
+
width:auto;
|
23
|
+
overflow:visible;
|
24
|
+
padding:4px 10px 3px 7px; /* IE6 */
|
25
|
+
}
|
26
|
+
.buttons button[type]{
|
27
|
+
padding:5px 10px 5px 7px; /* Firefox */
|
28
|
+
line-height:17px; /* Safari */
|
29
|
+
}
|
30
|
+
*:first-child+html button[type]{
|
31
|
+
padding:4px 10px 3px 7px; /* IE7 */
|
32
|
+
}
|
33
|
+
.buttons button img, .buttons a img{
|
34
|
+
margin:0 3px -3px 0 !important;
|
35
|
+
padding:0;
|
36
|
+
border:none;
|
37
|
+
width:16px;
|
38
|
+
height:16px;
|
39
|
+
}
|
40
|
+
|
41
|
+
/* STANDARD */
|
42
|
+
|
43
|
+
button:hover, .buttons a:hover{
|
44
|
+
background-color:#dff4ff;
|
45
|
+
border:1px solid #c2e1ef;
|
46
|
+
color:#336699;
|
47
|
+
}
|
48
|
+
.buttons a:active{
|
49
|
+
background-color:#6299c5;
|
50
|
+
border:1px solid #6299c5;
|
51
|
+
color:#fff;
|
52
|
+
}
|
53
|
+
|
54
|
+
/* POSITIVE */
|
55
|
+
|
56
|
+
button.positive, .buttons a.positive{
|
57
|
+
color:#529214;
|
58
|
+
}
|
59
|
+
.buttons a.positive:hover, button.positive:hover{
|
60
|
+
background-color:#E6EFC2;
|
61
|
+
border:1px solid #C6D880;
|
62
|
+
color:#529214;
|
63
|
+
}
|
64
|
+
.buttons a.positive:active{
|
65
|
+
background-color:#529214;
|
66
|
+
border:1px solid #529214;
|
67
|
+
color:#fff;
|
68
|
+
}
|
69
|
+
|
70
|
+
/* NEGATIVE */
|
71
|
+
|
72
|
+
.buttons a.negative, button.negative{
|
73
|
+
color:#d12f19;
|
74
|
+
}
|
75
|
+
.buttons a.negative:hover, button.negative:hover{
|
76
|
+
background:#fbe3e4;
|
77
|
+
border:1px solid #fbc2c4;
|
78
|
+
color:#d12f19;
|
79
|
+
}
|
80
|
+
.buttons a.negative:active{
|
81
|
+
background-color:#d12f19;
|
82
|
+
border:1px solid #d12f19;
|
83
|
+
color:#fff;
|
84
|
+
}
|
85
|
+
|
86
|
+
.query {
|
87
|
+
float:left;
|
88
|
+
}
|
89
|
+
|
90
|
+
/* General UI Classes */
|
91
|
+
#query { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.5; }
|
92
|
+
|
93
|
+
.tfoot { text-align: right; font-style: italic; }
|
94
|
+
|
95
|
+
.ui-tabs-hide { display: none; }
|
96
|
+
|
97
|
+
.contents { display: none; }
|
98
|
+
|
99
|
+
.box h3 { cursor:pointer; }
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,126 @@
|
|
1
|
+
|
2
|
+
function populatePrefixes(id, url) {
|
3
|
+
|
4
|
+
populate(id,
|
5
|
+
url,
|
6
|
+
function(entry) {
|
7
|
+
var listItem = document.createElement("li");
|
8
|
+
$(listItem).html("<a href='" + entry.uri +
|
9
|
+
"' title='" + entry.prefix + "'>" +
|
10
|
+
entry.description +
|
11
|
+
"</a>");
|
12
|
+
return listItem;
|
13
|
+
},
|
14
|
+
function() {
|
15
|
+
var query = $("#query").val();
|
16
|
+
var prefix = $(this).attr("title");
|
17
|
+
var uri = $(this).attr("href");
|
18
|
+
if ( !new RegExp( "PREFIX " + prefix + ":").test(query) ) {
|
19
|
+
$("#query").val( "PREFIX " + prefix +
|
20
|
+
": <" + uri + ">\n" + query );
|
21
|
+
}
|
22
|
+
return false;
|
23
|
+
}
|
24
|
+
);
|
25
|
+
|
26
|
+
}
|
27
|
+
|
28
|
+
function populateTemplates(id, url) {
|
29
|
+
populate(id,
|
30
|
+
url,
|
31
|
+
function(entry) {
|
32
|
+
var listItem = document.createElement("li");
|
33
|
+
$(listItem).html("<a href='" + entry.uri + "'>" +
|
34
|
+
entry.description +
|
35
|
+
"</a>");
|
36
|
+
return listItem;
|
37
|
+
}
|
38
|
+
,
|
39
|
+
function() {
|
40
|
+
//var query = $("#query").val();
|
41
|
+
var uri = $(this).attr("href");
|
42
|
+
$.ajax({
|
43
|
+
type: "GET",
|
44
|
+
async: false,
|
45
|
+
url: uri,
|
46
|
+
dataType: "text",
|
47
|
+
success: function(data, textStatus) {
|
48
|
+
$("#query").val(data);
|
49
|
+
},
|
50
|
+
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
51
|
+
alert("Unable to load query");
|
52
|
+
}
|
53
|
+
|
54
|
+
});
|
55
|
+
return false;
|
56
|
+
}
|
57
|
+
);
|
58
|
+
}
|
59
|
+
|
60
|
+
function populateExamples(id, url) {
|
61
|
+
populate(id,
|
62
|
+
url,
|
63
|
+
function(entry) {
|
64
|
+
var listItem = document.createElement("li");
|
65
|
+
$(listItem).html("<a href='" + entry.uri + "'>" +
|
66
|
+
entry.description +
|
67
|
+
"</a>");
|
68
|
+
return listItem;
|
69
|
+
}
|
70
|
+
,
|
71
|
+
function() {
|
72
|
+
//var query = $("#query").val();
|
73
|
+
var uri = $(this).attr("href");
|
74
|
+
$.ajax({
|
75
|
+
type: "GET",
|
76
|
+
async: false,
|
77
|
+
url: uri,
|
78
|
+
dataType: "text",
|
79
|
+
success: function(data, textStatus) {
|
80
|
+
$("#query").val(data);
|
81
|
+
},
|
82
|
+
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
83
|
+
alert("Unable to load query");
|
84
|
+
}
|
85
|
+
|
86
|
+
});
|
87
|
+
return false;
|
88
|
+
}
|
89
|
+
);
|
90
|
+
}
|
91
|
+
|
92
|
+
|
93
|
+
/*
|
94
|
+
* id - identifier of container div. Will have ul added.
|
95
|
+
* url - url of config
|
96
|
+
* createItem - function to create list item, accepts entry param
|
97
|
+
* clickHandler - click handler to add to the created item
|
98
|
+
*/
|
99
|
+
function populate(id, url, createItem, clickHandler) {
|
100
|
+
|
101
|
+
var container = "#" + id;
|
102
|
+
|
103
|
+
$.ajax({
|
104
|
+
type: "GET",
|
105
|
+
url: url,
|
106
|
+
async: false,
|
107
|
+
dataType: "json",
|
108
|
+
success: function(config, textStatus) {
|
109
|
+
|
110
|
+
$(container).html("");
|
111
|
+
|
112
|
+
var list = document.createElement("ul");
|
113
|
+
//console.log("Populating: " + config.title);
|
114
|
+
|
115
|
+
jQuery.each( config.entries, function() {
|
116
|
+
$(list).append( createItem(this) );
|
117
|
+
});
|
118
|
+
|
119
|
+
$(container).append(list);
|
120
|
+
|
121
|
+
$(container).find("a").click( clickHandler );
|
122
|
+
|
123
|
+
}
|
124
|
+
});
|
125
|
+
|
126
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
{
|
2
|
+
title: "Core Prefixes",
|
3
|
+
entries: [
|
4
|
+
{
|
5
|
+
prefix: "bibo",
|
6
|
+
uri: "http://purl.org/ontology/bibo/",
|
7
|
+
description: "Bibliographic Ontology"
|
8
|
+
},
|
9
|
+
{
|
10
|
+
prefix: "dc",
|
11
|
+
uri: "http://purl.org/dc/elements/1.1/",
|
12
|
+
description: "Dublin Core Elements"
|
13
|
+
},
|
14
|
+
{
|
15
|
+
prefix: "dcterms",
|
16
|
+
uri: "http://purl.org/dc/terms/",
|
17
|
+
description: "Dublic Core Terms"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
prefix: "foaf",
|
21
|
+
uri: "http://xmlns.com/foaf/0.1",
|
22
|
+
description: "FOAF"
|
23
|
+
},
|
24
|
+
{
|
25
|
+
prefix: "mo",
|
26
|
+
uri: "http://purl.org/ontology/mo/",
|
27
|
+
description: "Music Ontology"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
prefix: "po",
|
31
|
+
uri: "http://purl.org/ontology/po/",
|
32
|
+
description: "Programmes Ontology"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
prefix: "owl",
|
36
|
+
uri: "http://www.w3.org/2002/07/owl#",
|
37
|
+
description: "OWL"
|
38
|
+
},
|
39
|
+
{
|
40
|
+
prefix: "rdf",
|
41
|
+
uri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
42
|
+
description: "RDF Namespace"
|
43
|
+
},
|
44
|
+
{
|
45
|
+
prefix: "rdfs",
|
46
|
+
uri: "http://www.w3.org/2000/01/rdf-schema#",
|
47
|
+
description: "RDF Schema"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
prefix: "rel",
|
51
|
+
uri: "http://purl.org/vocab/relationship/",
|
52
|
+
description: "Relationship"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
prefix: "rev",
|
56
|
+
uri: "http://purl.org/stuff/rev#",
|
57
|
+
description: "Reviews"
|
58
|
+
},
|
59
|
+
{
|
60
|
+
prefix: "rss",
|
61
|
+
uri: "http://purl.org/rss/1.0/",
|
62
|
+
description: "RSS 1.0"
|
63
|
+
},
|
64
|
+
{
|
65
|
+
prefix: "sioc",
|
66
|
+
uri: "http://rdfs.org/sioc/ns#",
|
67
|
+
description: "SIOC Core Ontology"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
prefix: "skos",
|
71
|
+
uri: "http://www.w3.org/2004/02/skos/core#",
|
72
|
+
description: "SKOS Core"
|
73
|
+
},
|
74
|
+
{
|
75
|
+
prefix: "geo",
|
76
|
+
uri: "http://www.w3.org/2003/01/geo/wgs84_pos#",
|
77
|
+
description: "W3C Geo Schema"
|
78
|
+
},
|
79
|
+
{
|
80
|
+
prefix: "xsd",
|
81
|
+
uri: "http://www.w3.org/2001/XMLSchema#",
|
82
|
+
description: "XML Schema"
|
83
|
+
}
|
84
|
+
]
|
85
|
+
}
|
data/public/js/spared.js
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
function displayError(container, XMLHttpRequest, textStatus, errorThrown) {
|
4
|
+
container.find(".results-table").remove();
|
5
|
+
|
6
|
+
container.append( "<div class='error'>Error Executing Query: " + XMLHttpRequest.responseText + "</div>");
|
7
|
+
|
8
|
+
}
|
9
|
+
|
10
|
+
function dumpToTextArea(container, data, elapsed) {
|
11
|
+
container.append( "<textarea class='span-24'>" + data + "</textarea>");
|
12
|
+
}
|
13
|
+
|
14
|
+
function sparqlResultsToTable(container, json, elapsed) {
|
15
|
+
container.find(".results-table").remove();
|
16
|
+
container.find(".error").remove();
|
17
|
+
|
18
|
+
//console.log(json);
|
19
|
+
var table = document.createElement("table");
|
20
|
+
var tbody = document.createElement("tbody");
|
21
|
+
var thead = document.createElement("thead");
|
22
|
+
table.appendChild(thead);
|
23
|
+
table.appendChild(tbody);
|
24
|
+
|
25
|
+
var row = document.createElement("tr");
|
26
|
+
|
27
|
+
jQuery.each( json.head.vars, function(i, val) {
|
28
|
+
var col = document.createElement("th");
|
29
|
+
row.appendChild(col);
|
30
|
+
$(col).text( val );
|
31
|
+
});
|
32
|
+
|
33
|
+
thead.appendChild(row);
|
34
|
+
|
35
|
+
var cols = json.head.vars.length;
|
36
|
+
var rows = json.results.bindings.length;
|
37
|
+
|
38
|
+
jQuery.each( json.results.bindings, function(i, binding) {
|
39
|
+
var row = document.createElement("tr");
|
40
|
+
jQuery.each( json.head.vars, function() {
|
41
|
+
var td = document.createElement("td");
|
42
|
+
var text = ""
|
43
|
+
if ( binding[this] ) {
|
44
|
+
text = binding[this].value;
|
45
|
+
}
|
46
|
+
|
47
|
+
if ( binding[this] && binding[this].type == 'uri' ) {
|
48
|
+
var anchor = document.createElement("a");
|
49
|
+
$(anchor).attr("href", text);
|
50
|
+
$(anchor).text( text );
|
51
|
+
td.appendChild( anchor );
|
52
|
+
} else {
|
53
|
+
$(td).text( text );
|
54
|
+
}
|
55
|
+
row.appendChild(td);
|
56
|
+
});
|
57
|
+
tbody.appendChild(row);
|
58
|
+
});
|
59
|
+
|
60
|
+
var footerRow = document.createElement("tr");
|
61
|
+
var footer = document.createElement("td");
|
62
|
+
footerRow.appendChild(footer);
|
63
|
+
$(footer).text( json.results.bindings.length + " Results in " + elapsed + " msecs");
|
64
|
+
$(footer).attr("colspan", json.head.vars.length);
|
65
|
+
$(footer).addClass("tfoot");
|
66
|
+
tbody.appendChild(footerRow);
|
67
|
+
|
68
|
+
$(container).append(table);
|
69
|
+
$(table).attr("border", 1);
|
70
|
+
$(table).addClass("results-table");
|
71
|
+
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Click handler for the load button. Uses the impromptu jquery plugin to
|
76
|
+
* display a dialog
|
77
|
+
*/
|
78
|
+
function loadQueryClickHandler() {
|
79
|
+
var txt = 'Please enter query URL:<br /><input type="text" id="query-url" name="query-url" value="" />';
|
80
|
+
|
81
|
+
$.prompt(txt,{
|
82
|
+
prefix: "blueprint",
|
83
|
+
buttons: { Ok: true, Cancel: false },
|
84
|
+
callback: function (value,m){
|
85
|
+
if (value) {
|
86
|
+
$.get( m.children("#query-url").val(),
|
87
|
+
function(data, textStatus) {
|
88
|
+
$("#query").val( data );
|
89
|
+
},
|
90
|
+
"text"
|
91
|
+
);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
});
|
96
|
+
return false;
|
97
|
+
}
|
98
|
+
|
99
|
+
function doQuery() {
|
100
|
+
$("#results").find(".error").remove();
|
101
|
+
$("#results").find(".results-table").remove();
|
102
|
+
$("#results").find("textarea").remove();
|
103
|
+
|
104
|
+
if ( !$("#inline").is(":checked") ) {
|
105
|
+
|
106
|
+
return true;
|
107
|
+
}
|
108
|
+
|
109
|
+
var form = $(".spared");
|
110
|
+
|
111
|
+
var q = $(form).find("#query").val();
|
112
|
+
//console.log( "Query: " + q );
|
113
|
+
|
114
|
+
var startTime = new Date().getTime();
|
115
|
+
|
116
|
+
|
117
|
+
if ( q.match(/SELECT /i) ) {
|
118
|
+
$.ajax({
|
119
|
+
type: "GET",
|
120
|
+
url: $(form).attr("action"),
|
121
|
+
data: {
|
122
|
+
query: q,
|
123
|
+
output: "json"
|
124
|
+
},
|
125
|
+
dataType: "json",
|
126
|
+
success: function(data, textStatus) {
|
127
|
+
var elapsed = new Date().getTime() - startTime;
|
128
|
+
sparqlResultsToTable( $("#results"), data, elapsed );
|
129
|
+
|
130
|
+
},
|
131
|
+
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
132
|
+
displayError( $("#results"), XMLHttpRequest, textStatus, errorThrown );
|
133
|
+
}
|
134
|
+
|
135
|
+
});
|
136
|
+
} else {
|
137
|
+
$.ajax({
|
138
|
+
type: "GET",
|
139
|
+
url: $(form).attr("action"),
|
140
|
+
data: {
|
141
|
+
query: q
|
142
|
+
},
|
143
|
+
dataType: "text",
|
144
|
+
success: function(data, textStatus) {
|
145
|
+
var elapsed = new Date().getTime() - startTime;
|
146
|
+
dumpToTextArea($("#results"), data, elapsed);
|
147
|
+
},
|
148
|
+
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
149
|
+
displayError( $("#results"), XMLHttpRequest, textStatus, errorThrown );
|
150
|
+
}
|
151
|
+
|
152
|
+
});
|
153
|
+
}
|
154
|
+
|
155
|
+
|
156
|
+
return false;
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* Setup the event handlers for the form
|
161
|
+
*/
|
162
|
+
$(document).ready(function(){
|
163
|
+
populatePrefixes("prefixes", "js/spared-prefixes.js");
|
164
|
+
populateTemplates("templates", "js/spared-templates.js");
|
165
|
+
populateTemplates("examples", "js/spared-examples.js");
|
166
|
+
|
167
|
+
$("#query").resizable({
|
168
|
+
autoHide: true
|
169
|
+
});
|
170
|
+
|
171
|
+
$("#clear-query").click( function() {
|
172
|
+
var form = $(".spared");
|
173
|
+
$(form).find("#query").val("");
|
174
|
+
return false;
|
175
|
+
});
|
176
|
+
|
177
|
+
$("#load-query").click( loadQueryClickHandler );
|
178
|
+
|
179
|
+
$("#run-query").click( doQuery );
|
180
|
+
|
181
|
+
$(".box h3").toggle(
|
182
|
+
function() {
|
183
|
+
$(this).parent().find(".contents").show();
|
184
|
+
},
|
185
|
+
function() {
|
186
|
+
$(this).parent().find(".contents").hide();
|
187
|
+
}
|
188
|
+
);
|
189
|
+
|
190
|
+
});
|