Commit 265ce2812a446606566c2886864e916fb460a5d7
JSON editor and history for demo
Implemented a JSON editor, saving it and displaying the list of JSON
files. The saving doesn't work right now.
- fetch.py 41 +++++++++++++++++++++++++++++++++++++++++
- static/jit.js 65 ----------------------------+++++++++++++++++++++++++++++++++++++
- static/old.json 235 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- static/test.json 6 -+++++
- static/tree.js 235 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+++++++++++++
- templates/editor.html 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- templates/history.html 18 ++++++++++++++++++
- templates/index.html 72 -----------------------------------+++++++++++++++++++++++++++++++++++++
| | | | 1 | from flask import Flask | 1 | from flask import Flask |
---|
2 | from flask import request | 2 | from flask import request |
---|
3 | from flask import render_template | 3 | from flask import render_template |
---|
| | 4 | from flask import make_response |
---|
4 | import json | 5 | import json |
---|
5 | import pymongo | 6 | import pymongo |
---|
| | 7 | import os |
---|
| | 8 | import glob |
---|
6 | | 9 | |
---|
7 | app = Flask(__name__) | 10 | app = Flask(__name__) |
---|
8 | | 11 | |
---|
… | | … | |
---|
15 | return render_template('index.html',json=request.args['json']) | 15 | return render_template('index.html',json=request.args['json']) |
---|
16 | else: | 16 | else: |
---|
17 | return render_template('index.html') | 17 | return render_template('index.html') |
---|
| | 18 | |
---|
| | 19 | @app.route('/editor', methods=['GET']) |
---|
| | 20 | def editor(): |
---|
| | 21 | if request.args.has_key('json'): |
---|
| | 22 | filename = request.args['json'] |
---|
| | 23 | else: |
---|
| | 24 | filename = 'test.json' |
---|
| | 25 | filename = os.path.join('static', filename) |
---|
| | 26 | try: |
---|
| | 27 | f = open(filename, 'r') |
---|
| | 28 | except: |
---|
| | 29 | f = open('static/test.json', 'r') |
---|
| | 30 | buf = f.read() |
---|
| | 31 | f.close() |
---|
| | 32 | return render_template('editor.html', json = buf) |
---|
| | 33 | |
---|
| | 34 | @app.route('/saveJSON', methods=['POST']) |
---|
| | 35 | def saveJSON(): |
---|
| | 36 | if request.form: |
---|
| | 37 | data = request.form |
---|
| | 38 | JSON = data['json'] |
---|
| | 39 | filename = os.path.join('static', data['filename']) |
---|
| | 40 | f = open(filename, 'w') |
---|
| | 41 | f.write(JSON) |
---|
| | 42 | f.close() |
---|
| | 43 | return (data, 200) |
---|
| | 44 | else: |
---|
| | 45 | return (json.dumps(request.form), 200) # Bad Request |
---|
| | 46 | |
---|
| | 47 | @app.route('/history', methods=['GET']) |
---|
| | 48 | def listJSON(): |
---|
| | 49 | path = os.path.join('static', '*.json') |
---|
| | 50 | ls = glob.glob(path) |
---|
| | 51 | def sanitize(i): |
---|
| | 52 | return i.split('/')[-1] |
---|
| | 53 | ls = map(sanitize, ls) |
---|
| | 54 | return render_template('history.html', ls=ls) |
---|
| | 55 | |
---|
18 | | 56 | |
---|
19 | if __name__ == "__main__": | 57 | if __name__ == "__main__": |
---|
20 | app.run(debug=True, host='0.0.0.0') | 58 | app.run(debug=True, host='0.0.0.0') |
---|
| | | | 6764 | } | 6764 | } |
---|
6765 | this.plot() | 6765 | this.plot() |
---|
6766 | }, | 6766 | }, |
---|
6767 | reposition:function(){ | | reposition:function(){ |
---|
6768 | this.compute("end"); | | this.compute("end"); |
---|
6769 | var w=this.graph.getNode(this.root).pos.getc().scale(-1); | | var w=this.graph.getNode(this.root).pos.getc().scale(-1); |
---|
6770 | e.Util.moebiusTransformation(this.graph,[w],["end"],"end","ignore"); | | e.Util.moebiusTransformation(this.graph,[w],["end"],"end","ignore"); |
---|
6771 | this.graph.eachNode(function(x){ | | this.graph.eachNode(function(x){ |
---|
6772 | if(x.ignore){ | | if(x.ignore){ |
---|
6773 | x.endPos.rho=x.pos.rho; | | x.endPos.rho=x.pos.rho; |
---|
6774 | x.endPos.theta=x.pos.theta | | x.endPos.theta=x.pos.theta |
---|
6775 | } | | } |
---|
6776 | }) | | }) |
---|
| | 6767 | reposition: function() { | | | 6768 | this.compute("end"); |
---|
| | 6769 | var w=this.graph.getNode(this.root).pos.getc().scale(-1); |
---|
| | 6770 | e.Util.moebiusTransformation(this.graph,[w],["end"],"end","ignore"); |
---|
| | 6771 | this.graph.eachNode(function(x) { |
---|
| | 6772 | if(x.ignore){ |
---|
| | 6773 | x.endPos.rho=x.pos.rho; |
---|
| | 6774 | x.endPos.theta=x.pos.theta |
---|
| | 6775 | } |
---|
| | 6776 | }); |
---|
6777 | }, | 6777 | }, |
---|
6778 | plot:function(){ | | plot:function(){ |
---|
6779 | this.fx.plot() | | this.fx.plot() |
---|
| | 6778 | plot: function() { | | | 6779 | this.fx.plot(); |
---|
6780 | }, | 6780 | }, |
---|
6781 | onClick:function(y,w){ | | onClick:function(y,w){ |
---|
6782 | // Ajay - Visual target selection | | // Ajay - Visual target selection |
---|
6783 | if (this.graph.getNode(y)._angularWidth <= 0.5) { | | if (this.graph.getNode(y)._angularWidth <= 0.5) { |
---|
6784 | if (this.graph.getNode(y).data.band == "Character") { | | if (this.graph.getNode(y).data.band == "Character") { |
---|
6785 | $("#character-value").html(this.graph.getNode(y).name); | | $("#character-value").html(this.graph.getNode(y).name); |
---|
6786 | } else if (this.graph.getNode(y).data.band == "Jewellery") { | | } else if (this.graph.getNode(y).data.band == "Jewellery") { |
---|
6787 | $("#jewellery-value").html(this.graph.getNode(y).name); | | $("#jewellery-value").html(this.graph.getNode(y).name); |
---|
6788 | } else if (this.graph.getNode(y).data.band == "Material") { | | } else if (this.graph.getNode(y).data.band == "Material") { |
---|
6789 | $("#material-value").html(this.graph.getNode(y).name); | | $("#material-value").html(this.graph.getNode(y).name); |
---|
6790 | } | | } |
---|
6791 | } | | } |
---|
6792 | // Ajay - end of visual target selection | | // Ajay - end of visual target selection |
---|
6793 | var x=this.graph.getNode(y).pos.getc(true); | | var x=this.graph.getNode(y).pos.getc(true); |
---|
6794 | this.move(x,w) | | this.move(x,w) |
---|
6795 | }, | | }, |
---|
| | 6781 | tree_info_template: _.template($('#tree-info-template').html()), | | | 6782 | onClick: function(y, w) { |
---|
| | 6783 | // Ajay - Visual target selection |
---|
| | 6784 | /*if (this.graph.getNode(y)._angularWidth <= 0.5) { |
---|
| | 6785 | if (this.graph.getNode(y).data.band == "Character") { |
---|
| | 6786 | $("#character-value").html(this.graph.getNode(y).name); |
---|
| | 6787 | } else if (this.graph.getNode(y).data.band == "Jewellery") { |
---|
| | 6788 | $("#jewellery-value").html(this.graph.getNode(y).name); |
---|
| | 6789 | } else if (this.graph.getNode(y).data.band == "Material") { |
---|
| | 6790 | $("#material-value").html(this.graph.getNode(y).name); |
---|
| | 6791 | } |
---|
| | 6792 | }*/ |
---|
| | 6793 | // Ajay - end of visual target selection |
---|
| | 6794 | var node = this.graph.getNode(y); |
---|
| | 6795 | var children = $jit.json.getSubtree(tree_json, node.id).children; |
---|
| | 6796 | if(_.isEmpty(children)) { |
---|
| | 6797 | $('#tree-info ul').append(this.tree_info_template({ |
---|
| | 6798 | band: node.data.band, |
---|
| | 6799 | node: node.name |
---|
| | 6800 | })); |
---|
| | 6801 | } |
---|
| | 6802 | var x = node.pos.getc(true); |
---|
| | 6803 | this.move(x, w); |
---|
| | 6804 | }, |
---|
6796 | move:function(A,y){ | 6805 | move:function(A,y){ |
---|
6797 | var x=r(A.x,A.y); | 6806 | var x=r(A.x,A.y); |
---|
6798 | if(this.busy===false&&x.norm()<0.9){ // Ajay - make it clickable upto the depth of tree DIRECTLY. Increase in value = deeper the length. | 6807 | if(this.busy===false&&x.norm()<0.9){ // Ajay - make it clickable upto the depth of tree DIRECTLY. Increase in value = deeper the length. |
---|
| | | | | | 1 | { |
---|
| | 2 | "id": "characteristics", |
---|
| | 3 | "name": "Characteristics", |
---|
| | 4 | "children": [ |
---|
| | 5 | { |
---|
| | 6 | "id": "character", |
---|
| | 7 | "name": "Character", |
---|
| | 8 | "data": { |
---|
| | 9 | "band": "Characteristics", |
---|
| | 10 | "relation": "coordinators.html" |
---|
| | 11 | }, |
---|
| | 12 | "children": [ |
---|
| | 13 | { |
---|
| | 14 | "id": "shiva", |
---|
| | 15 | "name": "Shiva", |
---|
| | 16 | "data": { |
---|
| | 17 | "band": "Character", |
---|
| | 18 | "relation": "individual_ranganathan.html" |
---|
| | 19 | }, |
---|
| | 20 | "children": [] |
---|
| | 21 | }, |
---|
| | 22 | { |
---|
| | 23 | "id": "parvathi", |
---|
| | 24 | "name": "Parvathi", |
---|
| | 25 | "data": { |
---|
| | 26 | "band": "Character", |
---|
| | 27 | "relation": "individual_sharat.html" |
---|
| | 28 | }, |
---|
| | 29 | "children": [] |
---|
| | 30 | }, |
---|
| | 31 | { |
---|
| | 32 | "id": "ganesha", |
---|
| | 33 | "name": "Ganesha", |
---|
| | 34 | "data": { |
---|
| | 35 | "band": "Character", |
---|
| | 36 | "relation": "individual_sharat.html" |
---|
| | 37 | }, |
---|
| | 38 | "children": [] |
---|
| | 39 | }, |
---|
| | 40 | { |
---|
| | 41 | "id": "bramha", |
---|
| | 42 | "name": "Bramha", |
---|
| | 43 | "data": { |
---|
| | 44 | "band": "Character", |
---|
| | 45 | "relation": "individual_sharat.html" |
---|
| | 46 | }, |
---|
| | 47 | "children": [] |
---|
| | 48 | }, |
---|
| | 49 | { |
---|
| | 50 | "id": "vishnu", |
---|
| | 51 | "name": "Vishnu", |
---|
| | 52 | "data": { |
---|
| | 53 | "band": "Character", |
---|
| | 54 | "relation": "individual_sharat.html" |
---|
| | 55 | }, |
---|
| | 56 | "children": [] |
---|
| | 57 | }, |
---|
| | 58 | { |
---|
| | 59 | "id": "krishna", |
---|
| | 60 | "name": "Krishna", |
---|
| | 61 | "data": { |
---|
| | 62 | "band": "Character", |
---|
| | 63 | "relation": "individual_muralimohan.html" |
---|
| | 64 | }, |
---|
| | 65 | "children": [] |
---|
| | 66 | }, |
---|
| | 67 | { |
---|
| | 68 | "id": "radha", |
---|
| | 69 | "name": "Radha", |
---|
| | 70 | "data": { |
---|
| | 71 | "band": "Character", |
---|
| | 72 | "relation": "individual_muralimohan.html" |
---|
| | 73 | }, |
---|
| | 74 | "children": [] |
---|
| | 75 | } |
---|
| | 76 | ] |
---|
| | 77 | }, |
---|
| | 78 | { |
---|
| | 79 | "id": "ornament", |
---|
| | 80 | "name": "Ornament", |
---|
| | 81 | "data": { |
---|
| | 82 | "band": "Characteristics", |
---|
| | 83 | "relation": "cultural.html" |
---|
| | 84 | }, |
---|
| | 85 | "children": [ |
---|
| | 86 | { |
---|
| | 87 | "id": "jewellery", |
---|
| | 88 | "name": "Jewellery", |
---|
| | 89 | "data": { |
---|
| | 90 | "band": "Ornament" |
---|
| | 91 | }, |
---|
| | 92 | "children": [ |
---|
| | 93 | { |
---|
| | 94 | "id": "ear-ring", |
---|
| | 95 | "name": "Ear-ring", |
---|
| | 96 | "data": { |
---|
| | 97 | "band": "Jewellery" |
---|
| | 98 | }, |
---|
| | 99 | "children": [] |
---|
| | 100 | }, |
---|
| | 101 | { |
---|
| | 102 | "id": "ring", |
---|
| | 103 | "name": "Ring", |
---|
| | 104 | "data": { |
---|
| | 105 | "band": "Jewellery" |
---|
| | 106 | }, |
---|
| | 107 | "children": [] |
---|
| | 108 | }, |
---|
| | 109 | { |
---|
| | 110 | "id": "nose-ring", |
---|
| | 111 | "name": "Nose-ring", |
---|
| | 112 | "data": { |
---|
| | 113 | "band": "Jewellery", |
---|
| | 114 | "relation": "project_murals.html" |
---|
| | 115 | }, |
---|
| | 116 | "children": [] |
---|
| | 117 | }, |
---|
| | 118 | { |
---|
| | 119 | "id": "pendent", |
---|
| | 120 | "name": "Pendent", |
---|
| | 121 | "data": { |
---|
| | 122 | "band": "Jewellery", |
---|
| | 123 | "relation": "project_murals.html" |
---|
| | 124 | }, |
---|
| | 125 | "children": [] |
---|
| | 126 | }, |
---|
| | 127 | { |
---|
| | 128 | "id": "ankelet", |
---|
| | 129 | "name": "Ankelet", |
---|
| | 130 | "data": { |
---|
| | 131 | "band": "Jewellery", |
---|
| | 132 | "relation": "project_murals.html" |
---|
| | 133 | }, |
---|
| | 134 | "children": [] |
---|
| | 135 | }, |
---|
| | 136 | { |
---|
| | 137 | "id": "bracelet", |
---|
| | 138 | "name": "Bracelet", |
---|
| | 139 | "data": { |
---|
| | 140 | "band": "Jewellery", |
---|
| | 141 | "relation": "project_murals.html" |
---|
| | 142 | }, |
---|
| | 143 | "children": [] |
---|
| | 144 | }, |
---|
| | 145 | { |
---|
| | 146 | "id": "bangles", |
---|
| | 147 | "name": "Bangles", |
---|
| | 148 | "data": { |
---|
| | 149 | "band": "Jewellery", |
---|
| | 150 | "relation": "project_murals.html" |
---|
| | 151 | }, |
---|
| | 152 | "children": [] |
---|
| | 153 | } |
---|
| | 154 | ] |
---|
| | 155 | }, |
---|
| | 156 | { |
---|
| | 157 | "id": "material", |
---|
| | 158 | "name": "Material", |
---|
| | 159 | "data": { |
---|
| | 160 | "band": "Ornament", |
---|
| | 161 | "relation": "project_knowledge.html" |
---|
| | 162 | }, |
---|
| | 163 | "children": [ |
---|
| | 164 | { |
---|
| | 165 | "id": "gold", |
---|
| | 166 | "name": "Gold", |
---|
| | 167 | "data": { |
---|
| | 168 | "band": "Material", |
---|
| | 169 | "relation": "project_murals.html" |
---|
| | 170 | }, |
---|
| | 171 | "children": [] |
---|
| | 172 | }, |
---|
| | 173 | { |
---|
| | 174 | "id": "silver", |
---|
| | 175 | "name": "Silver", |
---|
| | 176 | "data": { |
---|
| | 177 | "band": "Material", |
---|
| | 178 | "relation": "project_murals.html" |
---|
| | 179 | }, |
---|
| | 180 | "children": [] |
---|
| | 181 | }, |
---|
| | 182 | { |
---|
| | 183 | "id": "bronze", |
---|
| | 184 | "name": "Bronze", |
---|
| | 185 | "data": { |
---|
| | 186 | "band": "Material", |
---|
| | 187 | "relation": "project_murals.html" |
---|
| | 188 | }, |
---|
| | 189 | "children": [] |
---|
| | 190 | }, |
---|
| | 191 | { |
---|
| | 192 | "id": "ruby", |
---|
| | 193 | "name": "Ruby", |
---|
| | 194 | "data": { |
---|
| | 195 | "band": "Material", |
---|
| | 196 | "relation": "project_murals.html" |
---|
| | 197 | }, |
---|
| | 198 | "children": [] |
---|
| | 199 | }, |
---|
| | 200 | { |
---|
| | 201 | "id": "copper", |
---|
| | 202 | "name": "Copper", |
---|
| | 203 | "data": { |
---|
| | 204 | "band": "Material", |
---|
| | 205 | "relation": "project_murals.html" |
---|
| | 206 | }, |
---|
| | 207 | "children": [] |
---|
| | 208 | }, |
---|
| | 209 | { |
---|
| | 210 | "id": "diamond", |
---|
| | 211 | "name": "Diamond", |
---|
| | 212 | "data": { |
---|
| | 213 | "band": "Material", |
---|
| | 214 | "relation": "project_murals.html" |
---|
| | 215 | }, |
---|
| | 216 | "children": [] |
---|
| | 217 | }, |
---|
| | 218 | { |
---|
| | 219 | "id": "topaz", |
---|
| | 220 | "name": "Topaz", |
---|
| | 221 | "data": { |
---|
| | 222 | "band": "Material", |
---|
| | 223 | "relation": "project_murals.html" |
---|
| | 224 | }, |
---|
| | 225 | "children": [] |
---|
| | 226 | } |
---|
| | 227 | ] |
---|
| | 228 | } |
---|
| | 229 | ] |
---|
| | 230 | } |
---|
| | 231 | ], |
---|
| | 232 | "data": { |
---|
| | 233 | "relation": "index.html" |
---|
| | 234 | } |
---|
| | 235 | } |
---|
| | | | 64 | "children":[] | 64 | "children":[] |
---|
65 | } | 65 | } |
---|
66 | ]} | 66 | ]} |
---|
67 | ]} | | ]} |
---|
| | 67 | ], | | | 68 | "data": { |
---|
| | 69 | "relation": "index.html" |
---|
| | 70 | } |
---|
| | 71 | } |
---|
| | | | 1 | var labelType, useGradients, nativeTextSupport, animate, ht; | | var labelType, useGradients, nativeTextSupport, animate, ht; |
---|
| | 1 | var labelType, useGradients, nativeTextSupport, animate, ht, tree_json; | 2 | | 2 | |
---|
3 | (function() { | 3 | (function() { |
---|
4 | var ua = navigator.userAgent, | 4 | var ua = navigator.userAgent, |
---|
… | | … | |
---|
13 | nativeTextSupport = labelType == 'Native'; | 13 | nativeTextSupport = labelType == 'Native'; |
---|
14 | useGradients = nativeCanvasSupport; | 14 | useGradients = nativeCanvasSupport; |
---|
15 | animate = !(iStuff || !nativeCanvasSupport); | 15 | animate = !(iStuff || !nativeCanvasSupport); |
---|
16 | })(); | | })(); |
---|
17 | | 16 | |
---|
18 | function inits(){ | | function inits(){ |
---|
19 | //init data | | //init data |
---|
20 | var json = { | | var json = { |
---|
21 | "id": "characteristics", | | "id": "characteristics", |
---|
22 | "name": "Characteristics", | | "name": "Characteristics", |
---|
23 | "children": [ | | "children": [ |
---|
24 | // Location | | // Location |
---|
25 | { | | { |
---|
26 | "id": "character", | | "id": "character", |
---|
27 | "name": "Character", | | "name": "Character", |
---|
28 | "data": { | | "data": { |
---|
29 | "band": "Characteristics", | | "band": "Characteristics", |
---|
30 | "relation": "coordinators.html" | | "relation": "coordinators.html" |
---|
31 | }, | | }, |
---|
32 | "children": [{ | | "children": [{ |
---|
33 | "id": "shiva", | | "id": "shiva", |
---|
34 | "name": "Shiva", | | "name": "Shiva", |
---|
35 | "data": { | | "data": { |
---|
36 | "band": "Character", | | "band": "Character", |
---|
37 | "relation": "individual_ranganathan.html" | | "relation": "individual_ranganathan.html" |
---|
38 | }, | | }, |
---|
39 | "children": [] | | "children": [] |
---|
| | 17 | //load JSON data. | | | 18 | // FIXME: the url is hardcoded, maybe you have to change it |
---|
| | 19 | // if the file is a variable one |
---|
| | 20 | $.getJSON('static/old.json', function(json) { |
---|
| | 21 | console.log('json', json); |
---|
| | 22 | tree_json = json; |
---|
| | 23 | inits(); |
---|
| | 24 | }); |
---|
40 | | 25 | |
---|
41 | }, { | | }, { |
---|
42 | "id": "parvathi", | | "id": "parvathi", |
---|
43 | "name": "Parvathi", | | "name": "Parvathi", |
---|
44 | "data": { | | "data": { |
---|
45 | "band": "Character", | | "band": "Character", |
---|
46 | "relation": "individual_sharat.html" | | "relation": "individual_sharat.html" |
---|
47 | }, | | }, |
---|
48 | "children": [] | | "children": [] |
---|
49 | }, { | | }, { |
---|
50 | "id": "ganesha", | | "id": "ganesha", |
---|
51 | "name": "Ganesha", | | "name": "Ganesha", |
---|
52 | "data": { | | "data": { |
---|
53 | "band": "Character", | | "band": "Character", |
---|
54 | "relation": "individual_sharat.html" | | "relation": "individual_sharat.html" |
---|
55 | }, | | }, |
---|
56 | "children": [] | | "children": [] |
---|
57 | }, { | | }, { |
---|
58 | "id": "bramha", | | "id": "bramha", |
---|
59 | "name": "Bramha", | | "name": "Bramha", |
---|
60 | "data": { | | "data": { |
---|
61 | "band": "Character", | | "band": "Character", |
---|
62 | "relation": "individual_sharat.html" | | "relation": "individual_sharat.html" |
---|
63 | }, | | }, |
---|
64 | "children": [] | | "children": [] |
---|
65 | }, { | | }, { |
---|
66 | "id": "vishnu", | | "id": "vishnu", |
---|
67 | "name": "Vishnu", | | "name": "Vishnu", |
---|
68 | "data": { | | "data": { |
---|
69 | "band": "Character", | | "band": "Character", |
---|
70 | "relation": "individual_sharat.html" | | "relation": "individual_sharat.html" |
---|
71 | }, | | }, |
---|
72 | "children": [] | | "children": [] |
---|
73 | }, { | | }, { |
---|
74 | "id": "krishna", | | "id": "krishna", |
---|
75 | "name": "Krishna", | | "name": "Krishna", |
---|
76 | "data": { | | "data": { |
---|
77 | "band": "Character", | | "band": "Character", |
---|
78 | "relation": "individual_muralimohan.html" | | "relation": "individual_muralimohan.html" |
---|
79 | }, | | }, |
---|
80 | "children": [] | | "children": [] |
---|
81 | }, { | | }, { |
---|
82 | "id": "radha", | | "id": "radha", |
---|
83 | "name": "Radha", | | "name": "Radha", |
---|
84 | "data": { | | "data": { |
---|
85 | "band": "Character", | | "band": "Character", |
---|
86 | "relation": "individual_muralimohan.html" | | "relation": "individual_muralimohan.html" |
---|
87 | }, | | }, |
---|
88 | "children": [] | | "children": [] |
---|
89 | }] | | }] |
---|
90 | }, | | }, |
---|
91 | // Languages | | // Languages |
---|
92 | { | | { |
---|
93 | "id": "ornament", | | "id": "ornament", |
---|
94 | "name": "Ornament", | | "name": "Ornament", |
---|
95 | "data": { | | "data": { |
---|
96 | "band": "Characteristics", | | "band": "Characteristics", |
---|
97 | "relation": "cultural.html" | | "relation": "cultural.html" |
---|
98 | }, | | }, |
---|
99 | "children": [{ | | "children": [{ |
---|
100 | "id": "jewellery", | | "id": "jewellery", |
---|
101 | "name": "Jewellery", | | "name": "Jewellery", |
---|
102 | "data": { | | "data": { |
---|
103 | "band": "Ornament" | | "band": "Ornament" |
---|
104 | // "relation": "project_murals.html" | | // "relation": "project_murals.html" |
---|
105 | }, | | }, |
---|
106 | "children": [{ | | "children": [{ |
---|
107 | "id": "ear-ring", | | "id": "ear-ring", |
---|
108 | "name": "Ear-ring", | | "name": "Ear-ring", |
---|
109 | "data": { | | "data": { |
---|
110 | "band": "Jewellery" | | "band": "Jewellery" |
---|
111 | // "relation": "project_murals.html" | | // "relation": "project_murals.html" |
---|
112 | }, | | }, |
---|
113 | "children": [] | | "children": [] |
---|
114 | },{ | | },{ |
---|
115 | "id": "ring", | | "id": "ring", |
---|
116 | "name": "Ring", | | "name": "Ring", |
---|
117 | "data": { | | "data": { |
---|
118 | "band": "Jewellery" | | "band": "Jewellery" |
---|
119 | // "relation": "project_murals.html" | | // "relation": "project_murals.html" |
---|
120 | }, | | }, |
---|
121 | "children": [] | | "children": [] |
---|
122 | },{ | | },{ |
---|
123 | "id": "nose-ring", | | "id": "nose-ring", |
---|
124 | "name": "Nose-ring", | | "name": "Nose-ring", |
---|
125 | "data": { | | "data": { |
---|
126 | "band": "Jewellery", | | "band": "Jewellery", |
---|
127 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
128 | }, | | }, |
---|
129 | "children": [] | | "children": [] |
---|
130 | },{ | | },{ |
---|
131 | "id": "pendent", | | "id": "pendent", |
---|
132 | "name": "Pendent", | | "name": "Pendent", |
---|
133 | "data": { | | "data": { |
---|
134 | "band": "Jewellery", | | "band": "Jewellery", |
---|
135 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
136 | }, | | }, |
---|
137 | "children": [] | | "children": [] |
---|
138 | },{ | | },{ |
---|
139 | "id": "ankelet", | | "id": "ankelet", |
---|
140 | "name": "Ankelet", | | "name": "Ankelet", |
---|
141 | "data": { | | "data": { |
---|
142 | "band": "Jewellery", | | "band": "Jewellery", |
---|
143 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
144 | }, | | }, |
---|
145 | "children": [] | | "children": [] |
---|
146 | },{ | | },{ |
---|
147 | "id": "bracelet", | | "id": "bracelet", |
---|
148 | "name": "Bracelet", | | "name": "Bracelet", |
---|
149 | "data": { | | "data": { |
---|
150 | "band": "Jewellery", | | "band": "Jewellery", |
---|
151 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
152 | }, | | }, |
---|
153 | "children": [] | | "children": [] |
---|
154 | },{ | | },{ |
---|
155 | "id": "bangles", | | "id": "bangles", |
---|
156 | "name": "Bangles", | | "name": "Bangles", |
---|
157 | "data": { | | "data": { |
---|
158 | "band": "Jewellery", | | "band": "Jewellery", |
---|
159 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
160 | }, | | }, |
---|
161 | "children": [] | | "children": [] |
---|
162 | }] | | }] |
---|
163 | }, { | | }, { |
---|
164 | "id": "material", | | "id": "material", |
---|
165 | "name": "Material", | | "name": "Material", |
---|
166 | "data": { | | "data": { |
---|
167 | "band": "Ornament", | | "band": "Ornament", |
---|
168 | "relation": "project_knowledge.html" | | "relation": "project_knowledge.html" |
---|
169 | }, | | }, |
---|
170 | "children": [{ | | "children": [{ |
---|
171 | "id": "gold", | | "id": "gold", |
---|
172 | "name": "Gold", | | "name": "Gold", |
---|
173 | "data": { | | "data": { |
---|
174 | "band": "Material", | | "band": "Material", |
---|
175 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
176 | }, | | }, |
---|
177 | "children": [] | | "children": [] |
---|
178 | },{ | | },{ |
---|
179 | "id": "silver", | | "id": "silver", |
---|
180 | "name": "Silver", | | "name": "Silver", |
---|
181 | "data": { | | "data": { |
---|
182 | "band": "Material", | | "band": "Material", |
---|
183 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
184 | }, | | }, |
---|
185 | "children": [] | | "children": [] |
---|
186 | },{ | | },{ |
---|
187 | "id": "bronze", | | "id": "bronze", |
---|
188 | "name": "Bronze", | | "name": "Bronze", |
---|
189 | "data": { | | "data": { |
---|
190 | "band": "Material", | | "band": "Material", |
---|
191 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
192 | }, | | }, |
---|
193 | "children": [] | | "children": [] |
---|
194 | },{ | | },{ |
---|
195 | "id": "ruby", | | "id": "ruby", |
---|
196 | "name": "Ruby", | | "name": "Ruby", |
---|
197 | "data": { | | "data": { |
---|
198 | "band": "Material", | | "band": "Material", |
---|
199 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
200 | }, | | }, |
---|
201 | "children": [] | | "children": [] |
---|
202 | },{ | | },{ |
---|
203 | "id": "copper", | | "id": "copper", |
---|
204 | "name": "Copper", | | "name": "Copper", |
---|
205 | "data": { | | "data": { |
---|
206 | "band": "Material", | | "band": "Material", |
---|
207 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
208 | }, | | }, |
---|
209 | "children": [] | | "children": [] |
---|
210 | },{ | | },{ |
---|
211 | "id": "diamond", | | "id": "diamond", |
---|
212 | "name": "Diamond", | | "name": "Diamond", |
---|
213 | "data": { | | "data": { |
---|
214 | "band": "Material", | | "band": "Material", |
---|
215 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
216 | }, | | }, |
---|
217 | "children": [] | | "children": [] |
---|
218 | },{ | | },{ |
---|
219 | "id": "topaz", | | "id": "topaz", |
---|
220 | "name": "Topaz", | | "name": "Topaz", |
---|
221 | "data": { | | "data": { |
---|
222 | "band": "Material", | | "band": "Material", |
---|
223 | "relation": "project_murals.html" | | "relation": "project_murals.html" |
---|
224 | }, | | }, |
---|
225 | "children": [] | | "children": [] |
---|
226 | }] | | }] |
---|
227 | }] | | }] |
---|
228 | }], | | }], |
---|
229 | "data": { | | "data": { |
---|
230 | "relation": "index.html" | | "relation": "index.html" |
---|
231 | } | | } |
---|
232 | }; | | }; |
---|
233 | //end | | //end |
---|
| | 26 | })(); | | | 27 | |
---|
| | 28 | function inits() { |
---|
234 | var infovis = document.getElementById('infovis'); | 29 | var infovis = document.getElementById('infovis'); |
---|
235 | var w = infovis.offsetWidth + 500; var h = infovis.offsetHeight + 385; | 30 | var w = infovis.offsetWidth + 500; var h = infovis.offsetHeight + 385; |
---|
236 | | 31 | |
---|
… | | … | |
---|
100 | style.left = (left - w / 2) + 'px'; | 100 | style.left = (left - w / 2) + 'px'; |
---|
101 | }, | 101 | }, |
---|
102 | }); | 102 | }); |
---|
103 | //load JSON data. | | //load JSON data. |
---|
104 | ht.loadJSON(json); | | ht.loadJSON(json); |
---|
| | 103 | ht.loadJSON(tree_json); | 105 | //compute positions and plot. | 104 | //compute positions and plot. |
---|
106 | ht.refresh(); | 105 | ht.refresh(); |
---|
107 | //end | 106 | //end |
---|
108 | ht.controller.onComplete(); | 107 | ht.controller.onComplete(); |
---|
109 | } | 108 | } |
---|
110 | | | |
---|
111 | document.addEventListener("DOMContentLoaded", inits, false); | | document.addEventListener("DOMContentLoaded", inits, false); |
---|
| | | | | | 1 | <!DOCTYPE html> |
---|
| | 2 | <html> |
---|
| | 3 | <head> |
---|
| | 4 | <title>Lepakshi Mural - JSON editor</title> |
---|
| | 5 | <link rel="stylesheet" type="text/css" href="static/bootstrap.css"></link> |
---|
| | 6 | <meta charset="utf-8" /> |
---|
| | 7 | <style> |
---|
| | 8 | textarea { |
---|
| | 9 | width: 500px; |
---|
| | 10 | } |
---|
| | 11 | </style> |
---|
| | 12 | </head> |
---|
| | 13 | <body> |
---|
| | 14 | <p></p><br> |
---|
| | 15 | <div class="container"> |
---|
| | 16 | <h3> JSON Editor </h3> |
---|
| | 17 | <div id="json-saved" class="alert alert-success" style="display: none; width: 300px; margin: auto;"> |
---|
| | 18 | <button type="button" class="close" data-dismiss="alert">×</button> |
---|
| | 19 | <b>Success!</b> JSON saved. See <a href="/history">here</a> |
---|
| | 20 | </div> |
---|
| | 21 | <div id="json-error" class="alert alert-error" style="display: none; width: 300px; margin: auto;"> |
---|
| | 22 | <button type="button" class="close" data-dismiss="alert">×</button> |
---|
| | 23 | <b>Invalid JSON!</b> Verify at <a href="http://jsonlint.com">jsonlint.com</a> |
---|
| | 24 | </div> |
---|
| | 25 | <textarea id="json" rows="30"> |
---|
| | 26 | {{ json }} |
---|
| | 27 | </textarea> |
---|
| | 28 | Enter JSON filename |
---|
| | 29 | <input type="text" id="filename" placeholder="newname.json"> |
---|
| | 30 | <button class="btn" onclick="save();"> Save </button> |
---|
| | 31 | </div> |
---|
| | 32 | <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> |
---|
| | 33 | <script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script> |
---|
| | 34 | <script type="text/javascript" src="static/bootstrap.js"></script> |
---|
| | 35 | <script> |
---|
| | 36 | function save() { |
---|
| | 37 | var json = $('#json').val(); |
---|
| | 38 | var filename = $('#filename').val(); |
---|
| | 39 | if(!filename.match(/.json$/)) { |
---|
| | 40 | filename += '.json'; |
---|
| | 41 | } |
---|
| | 42 | try { |
---|
| | 43 | json = JSON.parse(json); |
---|
| | 44 | console.log(json); |
---|
| | 45 | console.log(filename); |
---|
| | 46 | $.post('/saveJSON', {"json": json, "filename": filename}, function(data) { |
---|
| | 47 | console.log(data); |
---|
| | 48 | $('#json-saved').show(); |
---|
| | 49 | }, 'json'); |
---|
| | 50 | } catch(e) { |
---|
| | 51 | $('#json-error').show(); |
---|
| | 52 | } |
---|
| | 53 | } |
---|
| | 54 | </script> |
---|
| | 55 | </body> |
---|
| | 56 | </html> |
---|
| | | | | | 1 | <!DOCTYPE html> |
---|
| | 2 | <html> |
---|
| | 3 | <head> |
---|
| | 4 | <title>Lepakshi Mural - JSON history</title> |
---|
| | 5 | <link rel="stylesheet" type="text/css" href="static/bootstrap.css"></link> |
---|
| | 6 | <meta charset="utf-8" /> |
---|
| | 7 | </head> |
---|
| | 8 | <body> |
---|
| | 9 | <div class="container"> |
---|
| | 10 | <h3> JSON history </h3> |
---|
| | 11 | <ul> |
---|
| | 12 | {% for file in ls %} |
---|
| | 13 | <li><a href="/editor?{{ file }}">{{ file }}</a></li> |
---|
| | 14 | {% endfor %} |
---|
| | 15 | </ul> |
---|
| | 16 | </div> |
---|
| | 17 | </body> |
---|
| | 18 | </html> |
---|
| | | | 10 | <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> | 10 | <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> |
---|
11 | <script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script> | 11 | <script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script> |
---|
12 | <script type="text/javascript" src="http://backbonejs.org/backbone-min.js"></script> | 12 | <script type="text/javascript" src="http://backbonejs.org/backbone-min.js"></script> |
---|
13 | <script type="text/javascript" src="static/jit.js"></script> | | <script type="text/javascript" src="static/jit.js"></script> |
---|
14 | <script type="text/javascript" src="static/tree.js"></script> | 13 | <script type="text/javascript" src="static/tree.js"></script> |
---|
15 | <style type='text/css'> | 14 | <style type='text/css'> |
---|
16 | /*#annotation-tree { | 15 | /*#annotation-tree { |
---|
… | | … | |
---|
23 | z-index:99999; | 23 | z-index:99999; |
---|
24 | }*/ | 24 | }*/ |
---|
25 | </style> | 25 | </style> |
---|
26 | <title>Flask Lepakshi Mural</title> | | <title>Flask Lepakshi Mural</title> |
---|
| | 26 | <title>Lepakshi Mural</title> | 27 | <meta http-equiv='imagetoolbar' content='no'/> | 27 | <meta http-equiv='imagetoolbar' content='no'/> |
---|
28 | <link rel="stylesheet" type="text/css" href="static/bootstrap.css"></link> | 28 | <link rel="stylesheet" type="text/css" href="static/bootstrap.css"></link> |
---|
29 | <!--link rel="stylesheet" type="text/css" href="./tree.css"></link--> | 29 | <!--link rel="stylesheet" type="text/css" href="./tree.css"></link--> |
---|
… | | … | |
---|
83 | <button type="button" class="close" data-dismiss="alert">×</button> | 83 | <button type="button" class="close" data-dismiss="alert">×</button> |
---|
84 | <b>Success!</b> Post successfully posted. | 84 | <b>Success!</b> Post successfully posted. |
---|
85 | </div> | 85 | </div> |
---|
| | 86 | <div id="tree-json-loaded" class="alert alert-success" style="display: none; width: 300px; margin: auto;"> |
---|
| | 87 | <button type="button" class="close" data-dismiss="alert">×</button> |
---|
| | 88 | <b>Success!</b> New JSON loaded. |
---|
| | 89 | </div> |
---|
86 | | 90 | |
---|
87 | <div class="btn-group"> | 91 | <div class="btn-group"> |
---|
88 | <button onclick="handler.trigger();" class="btn btn-small">Mural</button> | 92 | <button onclick="handler.trigger();" class="btn btn-small">Mural</button> |
---|
… | | … | |
---|
96 | | 96 | |
---|
97 | <p></p> | 97 | <p></p> |
---|
98 | | 98 | |
---|
| | 99 | <input type="text" id="tree-json-file" value="old.json"> |
---|
| | 100 | <button class="btn" id="load-tree-json" onclick="loadTreeJSON();">Load JSON</button> |
---|
| | 101 | <button class="btn" id="edit-tree-json" onclick="editTreeJSON();">Edit JSON</button> |
---|
| | 102 | <p></p> |
---|
99 | <div id="map"></div> | 103 | <div id="map"></div> |
---|
100 | | 104 | |
---|
101 | <div id="subheader">Generated by <a href="http://www.maptiler.org/">MapTiler</a><a href="http://www.klokan.cz/projects/gdal2tiles/">GDAL2Tiles</a>, Copyright © 2008 <a href="http://www.klokan.cz/">Klokan Petr Pridal</a>, <a href="http://www.gdal.org/">GDAL</a> & <a href="http://www.osgeo.org/">OSGeo</a> <a href="http://code.google.com/soc/">GSoC</a> | 105 | <div id="subheader">Generated by <a href="http://www.maptiler.org/">MapTiler</a><a href="http://www.klokan.cz/projects/gdal2tiles/">GDAL2Tiles</a>, Copyright © 2008 <a href="http://www.klokan.cz/">Klokan Petr Pridal</a>, <a href="http://www.gdal.org/">GDAL</a> & <a href="http://www.osgeo.org/">OSGeo</a> <a href="http://code.google.com/soc/">GSoC</a> |
---|
… | | … | |
---|
107 | </div> | 107 | </div> |
---|
108 | | 108 | |
---|
109 | <div class="edit-json"> | 109 | <div class="edit-json"> |
---|
110 | <button id="edit-json-btn" class="btn" onclick="editJSON();">Edit JSON manually</button> | | <button id="edit-json-btn" class="btn" onclick="editJSON();">Edit JSON manually</button> |
---|
111 | <textarea rows="3" id="edit-json" style="display: none;"></textarea> | | <textarea rows="3" id="edit-json" style="display: none;"></textarea> |
---|
| | 110 | <button id="edit-json-btn" class="btn" onclick="editJSON();">Edit JSON to tweet</button> | | | 111 | <textarea rows="20" cols="50" id="edit-json" style="display: none;"></textarea> |
---|
112 | <button class="btn" id="save-json" style="display: none;" onclick="saveJSON();">Save</button> | 112 | <button class="btn" id="save-json" style="display: none;" onclick="saveJSON();">Save</button> |
---|
113 | </div> | 113 | </div> |
---|
114 | | 114 | |
---|
… | | … | |
---|
125 | </div> | 125 | </div> |
---|
126 | </div> | 126 | </div> |
---|
127 | <div class="modal-body"> | 127 | <div class="modal-body"> |
---|
128 | <div id="infovis"> | | <div id="infovis"> |
---|
129 | <div class="well text-info"> | | <div class="well text-info"> |
---|
130 | <ul> | | <ul> |
---|
131 | <li><b>Character:</b> <span id="character-value"></span></li> | | <li><b>Character:</b> <span id="character-value"></span></li> |
---|
132 | <li> | | <li> |
---|
133 | <b>Ornament:</b> | | <b>Ornament:</b> |
---|
134 | <ul> | | <ul> |
---|
135 | <li><b>Material:</b> <span id="material-value"></span></li> | | <li><b>Material:</b> <span id="material-value"></span></li> |
---|
136 | <li><b>Jewellery:</b> <span id="jewellery-value"></span></li> | | <li><b>Jewellery:</b> <span id="jewellery-value"></span></li> |
---|
137 | </ul> | | </ul> |
---|
138 | </li> | | </li> |
---|
139 | </ul> | | </ul> |
---|
140 | </div> | | </div> |
---|
| | 128 | <div id="infovis"> </div> | | | 129 | <div id="tree-info" class="well text-info"> |
---|
| | 130 | <ul></ul> |
---|
141 | </div> | 131 | </div> |
---|
142 | </div> | 132 | </div> |
---|
143 | <div class="modal-footer"> | 133 | <div class="modal-footer"> |
---|
… | | … | |
---|
136 | </div> | 136 | </div> |
---|
137 | </div> | 137 | </div> |
---|
138 | | 138 | |
---|
| | 139 | <script type="text/template" id="tree-info-template"> |
---|
| | 140 | <li><b><%= band %></b>: <span id="<%= node %>-value"><%= node %></span></li> |
---|
| | 141 | </script> |
---|
| | 142 | |
---|
139 | <script type="text/javascript"> | 143 | <script type="text/javascript"> |
---|
140 | function annotationTree() { | 144 | function annotationTree() { |
---|
141 | $('#annotation-tree').modal(); | 145 | $('#annotation-tree').modal(); |
---|
… | | … | |
---|
165 | } | 165 | } |
---|
166 | function treeClose() { | 166 | function treeClose() { |
---|
167 | $('#annotation-tree').modal('hide'); | 167 | $('#annotation-tree').modal('hide'); |
---|
168 | attribs["character"] = $("#character-value").text(); | | attribs["character"] = $("#character-value").text(); |
---|
169 | attribs["material"] = $("#material-value").text(); | | attribs["material"] = $("#material-value").text(); |
---|
| | 168 | $('#tree-info ul li').each(function(idx, elem) { | | | 169 | var key = $(elem).find('b').text().toLowerCase(); |
---|
| | 170 | var val = $(elem).find('span').text().toLowerCase(); |
---|
| | 171 | attribs[key] = val; |
---|
| | 172 | }); |
---|
170 | myJSON.push(attribs); | 173 | myJSON.push(attribs); |
---|
171 | $("#publish").attr("disabled", false); | 174 | $("#publish").attr("disabled", false); |
---|
172 | } | 175 | } |
---|
| | 176 | function loadTreeJSON() { |
---|
| | 177 | var file = $('#tree-json-file').val(); |
---|
| | 178 | $.getJSON('static/'+file, function(json) { |
---|
| | 179 | ht.loadJSON(json); |
---|
| | 180 | ht.refresh(); |
---|
| | 181 | ht.controller.onComplete(); |
---|
| | 182 | $('#tree-json-loaded').show(); |
---|
| | 183 | }); |
---|
| | 184 | } |
---|
| | 185 | function editTreeJSON() { |
---|
| | 186 | var json = $('#tree-json-loaded').val(); |
---|
| | 187 | window.open('/editor?json='+json); |
---|
| | 188 | } |
---|
173 | </script> | 189 | </script> |
---|
174 | | | |
---|
175 | {% if json %} | | {% if json %} |
---|
176 | <script type="text/javascript"> | | <script type="text/javascript"> |
---|
177 | | | |
---|
178 | $.get({{ json|string|safe }} , function(data){ | | $.get({{ json|string|safe }} , function(data){ |
---|
179 | console.log(data); | | console.log(data); |
---|
180 | ht.loadJSON(data); | | ht.loadJSON(data); |
---|
181 | //compute positions and plot. | | //compute positions and plot. |
---|
182 | ht.refresh(); | | ht.refresh(); |
---|
183 | //end | | //end |
---|
184 | ht.controller.onComplete(); | | ht.controller.onComplete(); |
---|
185 | | | |
---|
186 | }, 'json'); | | }, 'json'); |
---|
187 | </script> | | </script> |
---|
188 | {% endif %} | | {% endif %} |
---|
189 | | | |
---|
| | 190 | <script type="text/javascript" src="static/jit.js"></script> | 190 | </body> | 191 | </body> |
---|
191 | </html> | 192 | </html> |
---|