Merge branch 'master' of github.com:tla/stemmatology
[scpubgit/stemmaweb.git] / root / js / componentload.js
1 function loadTradition( textid, textname, editable ) {
2         selectedTextID = textid;
3     // First insert the placeholder image and register an error handler
4     $('#textinfo_load_status').empty();
5     $('#stemma_graph').empty();
6     $('#textinfo_waitbox').show();
7     $('#textinfo_container').hide().ajaxError( 
8         function(event, jqXHR, ajaxSettings, thrownError) {
9         if( ajaxSettings.url.indexOf( 'textinfo' ) > -1 && ajaxSettings.type == 'GET'  ) {
10                         $('#textinfo_waitbox').hide();
11                         $('#textinfo_container').show();
12                         display_error( jqXHR, $("#textinfo_load_status") );
13         }
14     });
15     
16     // Hide the functionality that is irrelevant
17     if( editable ) {
18         $('#open_stemma_add').show();
19         $('#open_stemma_edit').show();
20         $('#open_textinfo_edit').show();
21     } else {
22         $('#open_stemma_add').hide();
23         $('#open_stemma_edit').hide();
24         $('#open_textinfo_edit').hide();
25     }
26
27     // Then get and load the actual content.
28     // TODO: scale #stemma_graph both horizontally and vertically
29     // TODO: load svgs from SVG.Jquery (to make scaling react in Safari)
30     $.getJSON( basepath + "/textinfo/" + textid, function (textdata) {
31         // Add the scalar data
32         selectedTextInfo = textdata;
33         load_textinfo();
34         // Add the stemma(ta) and set up the stexaminer button
35         stemmata = textdata.stemmata;
36         if( stemmata.length ) {
37                 selectedStemmaID = 0;
38                         $('#run_stexaminer').show();
39         } else {
40                 selectedStemmaID = -1;
41                         $('#open_stemma_edit').hide();
42                         $('#run_stexaminer').hide();
43                 }
44                 load_stemma( selectedStemmaID, basepath );
45         // Set up the relationship mapper button
46                 $('#run_relater').attr( 'action', basepath + "/relation/" + textid );
47         });
48 }
49
50 function load_textinfo() {
51         $('#textinfo_waitbox').hide();
52         $('#textinfo_load_status').empty();
53         $('#textinfo_container').show();
54         $('.texttitle').empty().append( selectedTextInfo.name );
55         // Witnesses
56         $('#witness_num').empty().append( selectedTextInfo.witnesses.size );
57         $('#witness_list').empty().append( selectedTextInfo.witnesses.join( ', ' ) );
58         // Who the owner is
59         $('#owner_id').empty().append('no one');
60         if( selectedTextInfo.owner ) {
61                 $('#owner_id').empty().append( selectedTextInfo.owner );
62         }
63         // Whether or not it is public
64         $('#not_public').empty();
65         if( selectedTextInfo['public'] == false ) {
66                 $('#not_public').append('NOT ');
67         }
68         // What language setting it has, if any
69         $('#marked_language').empty().append('no language set');
70         if( selectedTextInfo.language && selectedTextInfo.language != 'Default' ) {
71                 $('#marked_language').empty().append( selectedTextInfo.language );
72         }
73 }       
74
75 function show_stemmapager () {
76       $('.pager_left_button').unbind('click').addClass( 'greyed_out' );
77       $('.pager_right_button').unbind('click').addClass( 'greyed_out' );
78       if( selectedStemmaID > 0 ) {
79               $('.pager_left_button').click( function () {
80                       load_stemma( selectedStemmaID - 1 );
81               }).removeClass( 'greyed_out' );
82       }       
83       if( selectedStemmaID + 1 < stemmata.length ) {
84               $('.pager_right_button').click( function () {
85                       load_stemma( selectedStemmaID + 1 );
86               }).removeClass( 'greyed_out' );
87       }
88 }
89
90
91 function load_stemma( idx ) {
92         // Load the stemma at idx
93         selectedStemmaID = idx;
94         show_stemmapager();
95         if( idx > -1 ) {
96                 $('#stemma_graph').empty();
97                 $('#stemma_graph').append( stemmata[idx] );
98                 // Stexaminer submit action
99                 var stexpath = basepath + "/stexaminer/" + selectedTextID + "/" + idx;
100                 $('#run_stexaminer').attr( 'action', stexpath );
101         setTimeout( 'start_element_height = $("#stemma_graph .node")[0].getBBox().height;', 500 );
102         }
103 }
104
105 function display_error( jqXHR, el ) {
106         var errmsg;
107         if( jqXHR.responseText == "" ) {
108                 errmsg = "perhaps the server went down?"
109         } else {
110                 var errobj;
111                 try {
112                         errobj = jQuery.parseJSON( jqXHR.responseText );
113                         errmsg = errobj.error;
114                 } catch ( parse_err ) {
115                         errmsg = "something went wrong on the server."
116                 }
117         }
118         var msghtml = $('<span>').attr('class', 'error').text( "An error occurred: " + errmsg );
119         $(el).empty().append( msghtml ).show();
120 }