|  |  | 
 |  |  |     var svgCanvas = methodDraw.canvas; | 
 |  |  |     var showGrid = false; | 
 |  |  |     var assignAttributes = s.assignAttributes; | 
 |  |  |      | 
 |  |  |  | 
 |  |  |     var hcanvas = document.createElement('canvas'); | 
 |  |  |     $(hcanvas).hide().appendTo('body'); | 
 |  |  |  | 
 |  |  | 
 |  |  |         'overflow': 'visible', | 
 |  |  |         'display': 'none' | 
 |  |  |     }); | 
 |  |  |      | 
 |  |  |  | 
 |  |  |     var canvBG = $('#canvas_background'); | 
 |  |  |     canvBG.after(canvasgrid); | 
 |  |  |      | 
 |  |  |      | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         // grid-pattern | 
 |  |  |         var gridPattern = svgdoc.createElementNS(svgns, "pattern"); | 
 |  |  | 
 |  |  |             'width': 100, | 
 |  |  |             'height': 100 | 
 |  |  |         }); | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var gridimg = svgdoc.createElementNS(svgns, "image"); | 
 |  |  |         assignAttributes(gridimg, { | 
 |  |  |             'x': 0, | 
 |  |  | 
 |  |  |             'width': 100, | 
 |  |  |             'height': 100 | 
 |  |  |         }); | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         gridPattern.appendChild(gridimg); | 
 |  |  |         $('#svgroot defs').append(gridPattern); | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |     function updateGrid(zoom) { | 
 |  |  |         // TODO: Try this with <line> elements, then compare performance difference | 
 |  |  |      | 
 |  |  |  | 
 |  |  |         var bgwidth = +canvBG.attr('width'); | 
 |  |  |         var bgheight = +canvBG.attr('height'); | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var units = svgedit.units.getTypeMap(); | 
 |  |  |         var unit = units[methodDraw.curConfig.baseUnit]; // 1 = 1px | 
 |  |  |         var r_intervals = [.01, .1, 1, 10, 100, 1000]; | 
 |  |  |      | 
 |  |  |  | 
 |  |  |         var d = 0; | 
 |  |  |         var is_x = (d === 0); | 
 |  |  |         var dim = is_x ? 'x' : 'y'; | 
 |  |  |         var lentype = is_x?'width':'height'; | 
 |  |  |         var c_elem = svgCanvas.getContentElem(); | 
 |  |  |         var content_d = c_elem.getAttribute(dim)-0; | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var hcanv = hcanvas; | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var u_multi = unit * zoom; | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         // Calculate the main number interval | 
 |  |  |         var raw_m = 100 / u_multi; | 
 |  |  |         var multi = 1; | 
 |  |  | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var big_int = multi * u_multi; | 
 |  |  |  | 
 |  |  |         // Set the canvas size to the width of the container | 
 |  |  | 
 |  |  |         hcanv.height = big_int; | 
 |  |  |         var ctx = hcanv.getContext("2d"); | 
 |  |  |  | 
 |  |  |         var ruler_d = 0;  | 
 |  |  |         var ruler_d = 0; | 
 |  |  |         var cur_d = .5; | 
 |  |  |          | 
 |  |  |  | 
 |  |  |         var part = big_int / 10; | 
 |  |  |  | 
 |  |  |         ctx.globalAlpha = 0.2; | 
 |  |  | 
 |  |  |             ctx.lineTo(line_num ,sub_d); | 
 |  |  |         } | 
 |  |  |         ctx.stroke(); | 
 |  |  |         ctx.beginPath();   | 
 |  |  |         ctx.beginPath(); | 
 |  |  |         ctx.globalAlpha = 0.5; | 
 |  |  |         ctx.moveTo(cur_d, big_int); | 
 |  |  |         ctx.lineTo(cur_d, 0); |