mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
RGL Browser: small user guide, less crash-prone
This commit is contained in:
@@ -1,38 +1,54 @@
|
||||
/*
|
||||
GF RGL Browser
|
||||
John J. Camiller, 2012
|
||||
John J. Camilleri, 2012
|
||||
*/
|
||||
$(document).ready(function() {
|
||||
|
||||
// var urlPrefix = "/GF"; // local
|
||||
var urlPrefix = ""; // live
|
||||
|
||||
var loading = function(b){
|
||||
if (b)
|
||||
$("#loading").show();
|
||||
else
|
||||
$("#loading").hide();
|
||||
}
|
||||
|
||||
var scrollToTop = function(){
|
||||
$("html, body").animate({ scrollTop: 0 }, "slow");
|
||||
}
|
||||
|
||||
var current_language = undefined;
|
||||
var index;
|
||||
$.getJSON("index.json", function(data){
|
||||
index = data;
|
||||
$.ajax({
|
||||
url: "index.json",
|
||||
dataType: "json",
|
||||
type: "GET",
|
||||
success: function(data){
|
||||
index = data;
|
||||
|
||||
// Initialize the language list
|
||||
var lang_select = $("<select>")
|
||||
.attr('id', 'language_select')
|
||||
.change(function(){
|
||||
setLanguage($(this).val());
|
||||
})
|
||||
.appendTo("#languages")
|
||||
var language_list = data['languages'];
|
||||
for (i in language_list) {
|
||||
if (!i) continue;
|
||||
var lang = i;
|
||||
$('<option>')
|
||||
.html(lang)
|
||||
.appendTo(lang_select);
|
||||
// Initialize the language list
|
||||
var lang_select = $("<select>")
|
||||
.attr('id', 'language_select')
|
||||
.change(function(){
|
||||
setLanguage($(this).val());
|
||||
})
|
||||
.appendTo("#languages")
|
||||
var language_list = data['languages'];
|
||||
for (i in language_list) {
|
||||
if (!i) continue;
|
||||
var lang = i;
|
||||
$('<option>')
|
||||
.html(lang)
|
||||
.appendTo(lang_select);
|
||||
}
|
||||
setLanguage("english");
|
||||
loading(false);
|
||||
},
|
||||
error: function(){
|
||||
alert("Error getting index. Try reloading page, or just give up.");
|
||||
loading(false);
|
||||
}
|
||||
setLanguage("english");
|
||||
$("#loading").hide();
|
||||
});
|
||||
|
||||
var setLanguage = function(lang){
|
||||
@@ -44,7 +60,7 @@ $(document).ready(function() {
|
||||
// Initialize the module list
|
||||
var initModules = function(lang){
|
||||
index['languages'][lang] = index['languages'][lang].sort();
|
||||
$("#modules").html("");
|
||||
$("#modules").empty();
|
||||
for (i in index['languages'][lang]) {
|
||||
var module = index['languages'][lang][i];
|
||||
if (!module) continue;
|
||||
@@ -66,20 +82,28 @@ $(document).ready(function() {
|
||||
$(obj).show(); // obj can be just a plain selector or a jQuery object
|
||||
}
|
||||
$(".panel").each(function(a,b){
|
||||
$("<span>")
|
||||
.addClass('tab').addClass($(b).attr('id'))
|
||||
$("<a>")
|
||||
.addClass('tab')
|
||||
.addClass($(b).attr('id'))
|
||||
.attr('href', '#'+$(b).attr('id'))
|
||||
.html($(b).attr('id'))
|
||||
.click(function(){
|
||||
showPanel(b);
|
||||
return false;
|
||||
})
|
||||
.insertBefore("#loading");
|
||||
});
|
||||
showPanel(".panel:first");
|
||||
|
||||
var setTitle = function(s){
|
||||
var setTitle = function(s){
|
||||
$('#tabbar h2').html(s);
|
||||
}
|
||||
}
|
||||
|
||||
var updateScopeCount = function(){
|
||||
$('#scope_count').text( $("#scope_list dt:visible").length );
|
||||
}
|
||||
|
||||
// Load both scope & source for a file
|
||||
var loadFile = function(lang, module){
|
||||
setTitle(lang+"/"+module);
|
||||
loadTagsFile(module);
|
||||
@@ -89,17 +113,21 @@ $(document).ready(function() {
|
||||
// Load a tags file
|
||||
var loadTagsFile = function(module) {
|
||||
$('#search').val("");
|
||||
$('#scope dl').html("");
|
||||
$("#loading").show();
|
||||
$('#scope dl').empty();
|
||||
updateScopeCount();
|
||||
loading(true);
|
||||
$.ajax({
|
||||
url: "tags/"+module+".gf-tags",
|
||||
type: "GET",
|
||||
dataType: "text",
|
||||
success: function(data){
|
||||
var data = data.replace(/^(\S+)\s+(.+)$/gm, '<dt name="$1">$1</dt><dd name="$1">$2</dd>');
|
||||
data = data.replace(/^(\S+)\s+(.+)$/gm, '<dt name="$1">$1</dt><dd name="$1">$2</dd>');
|
||||
// data = data.replace(/^(\S+)\s(\S+)\s(\S+)(.+)?$/gm, function(a,b,c,d,e){
|
||||
// return '<tr name="'+b+'"><th>'+b+'</th><td>'+c+'</td><td>'+d+'</td><td>'+e+'</td></tr>'
|
||||
// });
|
||||
data = data.replace(/\s(\/lib\/\S+?\.gf(-tags)?)/gm, '<a href="$1">$1</a>');
|
||||
$('#scope dl').html(data);
|
||||
$('#scope dl a').click(function(){
|
||||
$('#scope_list').html(data);
|
||||
$('#scope_list a').click(function(){
|
||||
var href = $(this).attr('href');
|
||||
var m = href.match(/([^\/]+)\/([^\/]+)\.(gf(-tags)?)$/);
|
||||
if (m[3]=="gf") {
|
||||
@@ -116,7 +144,7 @@ $(document).ready(function() {
|
||||
onerror: function(){
|
||||
// Load just tags (we don't know source)
|
||||
setTitle(m[2]+" (scope only)");
|
||||
$('#code').html("");
|
||||
$('#code').empty();
|
||||
loadTagsFile(m[2]);
|
||||
}
|
||||
});
|
||||
@@ -124,15 +152,17 @@ $(document).ready(function() {
|
||||
scrollToTop();
|
||||
return false;
|
||||
});
|
||||
$("#loading").hide();
|
||||
updateScopeCount();
|
||||
loading(false);
|
||||
},
|
||||
error: function(data){
|
||||
$('#scope dl').html("<em>No scope available</em>");
|
||||
$("#loading").hide();
|
||||
$('#scope_list').html("<em>No scope available</em>");
|
||||
loading(false);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Just get the HTTP headers to see if a file exists
|
||||
var checkSourceFile = function(args) {
|
||||
$.ajax({
|
||||
url: urlPrefix + "/lib/src/"+args.lang+"/"+args.module+".gf",
|
||||
@@ -144,19 +174,19 @@ $(document).ready(function() {
|
||||
|
||||
// Load a source module
|
||||
var loadSourceFile = function(lang, module) {
|
||||
$('#code').html("");
|
||||
$("#loading").show();
|
||||
$('#code').empty();
|
||||
loading(true);
|
||||
$.ajax({
|
||||
url: urlPrefix + "/lib/src/"+lang+"/"+module+".gf",
|
||||
type: "GET",
|
||||
dataType: "text",
|
||||
success: function(data){
|
||||
$('#code').html(data);
|
||||
$("#loading").hide();
|
||||
loading(false);
|
||||
},
|
||||
error: function(data){
|
||||
$('#code').html("<em>No code available</em>");
|
||||
$("#loading").hide();
|
||||
loading(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -175,11 +205,33 @@ $(document).ready(function() {
|
||||
var runfilter = function() {
|
||||
// Hide anything which doesn't match
|
||||
var s = $("#search").val();
|
||||
$("#scope dl *").show();
|
||||
if (s)
|
||||
$("#scope dl *:not(:match(\""+s+"\"))").hide();
|
||||
loading(true);
|
||||
try {
|
||||
if (s) {
|
||||
$("#scope_list").children( ":match(\""+s+"\")").show();
|
||||
$("#scope_list").children(":not(:match(\""+s+"\"))").hide();
|
||||
//$("#scope_list tr:not(:match(\""+s+"\"))").hide();
|
||||
} else {
|
||||
$("#scope_list").children().show();
|
||||
}
|
||||
} catch (error) {
|
||||
alert(error.message);
|
||||
}
|
||||
updateScopeCount();
|
||||
loading(false);
|
||||
}
|
||||
|
||||
$("#search").keyup(runfilter);
|
||||
// $("#search").keyup(runfilter);
|
||||
$("#search").keypress(function(e){
|
||||
var code = (e.keyCode ? e.keyCode : e.which);
|
||||
if(code == 13) { // Enter
|
||||
runfilter();
|
||||
}
|
||||
});
|
||||
$("#submit").click(runfilter);
|
||||
$("#clear").click(function(){
|
||||
$("#search").val('');
|
||||
runfilter();
|
||||
});
|
||||
$("#case_sensitive").change(runfilter);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user