Mercurial > hg > digilib-old
annotate webapp/src/main/webapp/jquery/svg/jquery.digilibSVG.js @ 1107:365f95a14057
factor out defineArea, using overlay div
author | hertzhaft |
---|---|
date | Sat, 27 Oct 2012 00:06:29 +0200 |
parents | ad769aaea759 |
children |
rev | line source |
---|---|
778 | 1 /* Copyright (c) 2011 Martin Raspe, Robert Casties |
2 | |
3 This program is free software: you can redistribute it and/or modify | |
4 it under the terms of the GNU Lesser General Public License as published by | |
5 the Free Software Foundation, either version 2 of the License, or | |
6 (at your option) any later version. | |
7 | |
8 This program is distributed in the hope that it will be useful, | |
9 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 GNU Lesser General Public License for more details. | |
12 | |
13 You should have received a copy of the GNU Lesser General Public License | |
14 along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | |
16 Authors: | |
1107 | 17 Martin Raspe, Robert Casties, 9.2.2011 - 26.3.2012 |
18 | |
778 | 19 */ |
20 | |
21 /** | |
22 * digilib SVG plugin (measuring tool for use within the digilib jQuery plugin) | |
23 **/ | |
24 | |
25 /* jslint browser: true, debug: true, forin: true | |
26 */ | |
27 | |
28 (function($) { | |
782 | 29 |
1051
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
30 // plugin object with digilib data |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
31 var digilib = null; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
32 // the functions made available by digilib |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
33 var fn = null; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
34 // affine geometry plugin |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
35 var geom = null; |
782 | 36 |
778 | 37 var defaults = { |
38 // choice of colors offered by toolbar | |
39 lineColors : ['white', 'red', 'yellow', 'green', 'blue', 'black'], | |
40 // default color | |
41 lineColor : 'white', | |
42 // color while the line is drawn | |
43 drawColor : 'green', | |
44 // color of selected objects | |
45 selectColor : 'red', | |
46 // drawing shapes | |
47 shapes : ['line', 'polyline', 'rectangle', 'square', 'circle', 'arch', | |
48 'ratio', 'intercolumn', 'line grid'], | |
49 // default shape | |
50 shape : 'line', | |
51 // measuring unit (index into list) | |
52 unit : 1, | |
53 // converted unit (index into list) | |
54 converted : 2, | |
55 // last measured distance | |
56 lastDistance : 0, | |
57 // last measured angle | |
58 lastAngle : 0, | |
59 // maximal denominator for mixed fractions | |
60 maxDenominator : 20, | |
61 // number of decimal places for convert results | |
62 maxDecimals : 3, | |
63 // show convert result as mixed fraction? | |
64 showMixedFraction : false, | |
65 // show angle relative to last line? | |
66 showRelativeAngle : false, | |
67 // show distance numbers? | |
68 showDistanceNumbers : true, | |
69 // show ratio of rectangle sides? | |
70 showRectangleRatios : false, | |
71 // draw line ends as small crosses | |
72 drawEndPoints : true, | |
73 // draw mid points of lines | |
74 drawMidPoints : false, | |
75 // draw circle centers | |
76 drawCenters : false, | |
77 // draw rectangles from the diagonal and one point | |
78 drawFromDiagonal : false, | |
79 // draw circles from center | |
80 drawFromCenter : false, | |
81 // snap to endpoints | |
82 snapEndPoints : false, | |
83 // snap to mid points of lines | |
84 snapMidPoints : false, | |
85 // snap to circle centers | |
86 snapCenters : false, | |
789 | 87 // snap distance (in screen pixels) |
88 snapDistance : 5, | |
778 | 89 // keep original object when moving/scaling/rotating |
90 keepOriginal : false, | |
91 // number of copies when drawing grids | |
92 gridCopies : 10 | |
93 }; | |
94 | |
1051
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
95 var actions = { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
96 "test" : function(options) { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
97 var onLoadXML = function (xml) { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
98 settings.xml = xml; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
99 settings.$toolBar = setupToolBar(settings); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
100 $digilib.each(function() { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
101 var $elem = $(this); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
102 $elem.data(pluginName, settings); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
103 }); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
104 }; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
105 var onLoadScalerImg = function () { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
106 var $svgDiv = $('<div id="svg" />'); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
107 $('body').append($svgDiv); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
108 // size SVG div like scaler img |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
109 var $scalerImg = $digilib.find('img.pic'); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
110 var scalerImgRect = geom.rectangle($scalerImg); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
111 scalerImgRect.adjustDiv($svgDiv); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
112 console.debug('$svgDiv', scalerImgRect); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
113 var $svg = $svgDiv.svg({ |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
114 'onLoad' : drawInitial |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
115 }); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
116 settings.$elem = $digilib; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
117 settings.$svgDiv = $svgDiv; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
118 settings.$svg = $svg; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
119 // set SVG data |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
120 $svg.data('digilib', data); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
121 $svg.data(pluginName, settings); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
122 }; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
123 // fetch the XML measuring unit list |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
124 $.ajax({ |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
125 type : "GET", |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
126 url : "svg/archimedes.xml", |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
127 dataType : "xml", |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
128 success : onLoadXML |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
129 }); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
130 data.$img.load(onLoadScalerImg); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
131 return this; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
132 } |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
133 }; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
134 |
778 | 135 // setup a div for accessing the main SVG functionality |
136 var setupToolBar = function(settings) { | |
782 | 137 var $toolBar = $('<div id="svg-toolbar"/>'); |
778 | 138 // shapes select |
139 var $shape = $('<select id="svg-shapes"/>'); | |
140 for (var i = 0; i < settings.shapes.length; i++) { | |
141 var name = settings.shapes[i]; | |
142 var $opt = $('<option value="' + i + '">' + name + '</option>'); | |
143 $shape.append($opt); | |
144 } | |
145 // console.debug($xml); | |
146 var $xml = $(settings.xml); | |
147 // unit selects | |
781 | 148 var $unit1 = $('<select id="svg-convert1"/>'); |
149 var $unit2 = $('<select id="svg-convert2"/>'); | |
789 | 150 |
151 $xml.find("section").each(function() { | |
152 var $section = $(this); | |
153 var name = $section.attr("name"); | |
154 // append section name as option | |
155 var $opt = $('<option class="section" disabled="disabled">' + name + '</option>'); | |
781 | 156 $unit1.append($opt); |
157 $unit2.append($opt.clone()); | |
789 | 158 $section.find("unit").each(function() { |
159 var $unit = $(this); | |
160 var name = $unit.attr("name"); | |
161 var factor = $unit.attr("factor"); | |
162 var $opt = $('<option class="unit" value="' + factor + '">' + name + '</option>'); | |
163 $opt.data(pluginName, { | |
164 'name' : name, | |
165 'factor' : factor, | |
166 'add' : $unit.attr("add"), | |
167 'subunits' : $unit.attr("subunits") | |
168 }); | |
169 $unit1.append($opt); | |
170 $unit2.append($opt.clone()); | |
171 }); | |
172 }); | |
173 // settings.units = units; | |
778 | 174 // other elements |
781 | 175 var $la1 = $('<span class="svg-label">pixel</span>'); |
176 var $la2 = $('<span class="svg-label">factor</span>'); | |
177 var $la3 = $('<span class="svg-label">=</span>'); | |
178 var $la4 = $('<span class="svg-label">=</span>'); | |
179 var $px = $('<span id="svg-pixel" class="svg-number">0.0</span>'); | |
180 var $factor = $('<span id="svg-factor" class="svg-number">0.0</span>'); | |
181 var $result1 = $('<input id="svg-unit1" class="svg-input" value="0.0"/>'); | |
182 var $result2 = $('<input id="svg-unit2" class="svg-input" value="0.0"/>'); | |
183 var $angle = $('<span id="svg-angle" class="svg-number">0.0</span>'); | |
782 | 184 $('body').append($toolBar); |
185 $toolBar.append($shape); | |
186 $toolBar.append($la1); | |
187 $toolBar.append($px); | |
188 $toolBar.append($la2); | |
189 $toolBar.append($factor); | |
190 $toolBar.append($la3); | |
191 $toolBar.append($result1); | |
192 $toolBar.append($unit1); | |
193 $toolBar.append($la4); | |
194 $toolBar.append($result2); | |
195 $toolBar.append($unit2); | |
196 $toolBar.append($angle); | |
197 return $toolBar; | |
198 }; | |
199 | |
200 var drawInitial = function ($svg) { | |
201 console.debug('SVG is ready'); | |
202 var $svgDiv = $(this); | |
203 var rect = geom.rectangle($svgDiv); | |
204 $svg.line(0, 0, rect.width, rect.height, | |
205 {stroke: 'white', strokeWidth: 2}); | |
206 $svg.line(0, rect.height, rect.width, 0, | |
207 {stroke: 'red', strokeWidth: 2}); | |
778 | 208 }; |
209 | |
1051
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
210 // plugin installation called by digilib on plugin object. |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
211 var install = function (plugin) { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
212 digilib = plugin; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
213 console.debug('installing digilibSVG plugin. digilib:', digilib); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
214 fn = digilib.fn; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
215 // import geometry classes |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
216 geom = fn.geometry; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
217 // add defaults, actions, buttons |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
218 $.extend(true, digilib.defaults, defaults); // make deep copy |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
219 $.extend(digilib.actions, actions); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
220 // export functions |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
221 // fn.test = test; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
222 }; |
778 | 223 |
1051
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
224 // plugin initialization |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
225 var init = function (data) { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
226 console.debug('initialising digilibSVG plugin. data:', data); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
227 var $data = $(data); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
228 $data.bind('setup', handleSetup); |
778 | 229 }; |
230 | |
1051
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
231 var handleSetup = function (evt) { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
232 console.debug("digilibSVG: handleSetup"); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
233 var data = this; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
234 var settings = data.settings; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
235 }; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
236 |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
237 // plugin object with name and init |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
238 // shared objects filled by digilib on registration |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
239 var plugin = { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
240 name : 'digilibSVG', |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
241 install : install, |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
242 init : init, |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
243 buttons : {}, |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
244 actions : {}, |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
245 fn : {}, |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
246 plugins : {} |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
247 }; |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
248 |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
249 if ($.fn.digilib == null) { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
250 $.error("jquery.digilibSVG must be loaded after jquery.digilib!"); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
251 } else { |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
252 $.fn.digilib('plugin', plugin); |
ad769aaea759
adapt digilibSVG plugin to new plugin architecture
hertzhaft
parents:
903
diff
changeset
|
253 } |
778 | 254 })(jQuery); |