Patch title: Release 85 bulk changes
Abstract:
File: /pliant/protocol/http/style/draw.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/parser.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/common.pli"
module "/pliant/util/encoding/http.pli"
module "/pliant/util/encoding/html.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/math/functions.pli"
module "/pliant/protocol/http/common/cache.pli"


module "/pliant/language/compiler.pli"
module "/pliant/language/parser.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/common.pli"
module "/pliant/util/encoding/http.pli"
module "/pliant/util/encoding/html.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/math/functions.pli"
module "/pliant/protocol/http/common/cache.pli"


method p html_may_draw_begin m
  arg_rw HtmlPage p ; arg_rw Int m
  m := p:do_not_use_Int .and. 2
  p do_not_use_Int := p:do_not_use_Int .or. 2

method p html_may_draw_end m
  arg_rw HtmlPage p ; arg_rw Int m
  p do_not_use_Int := (p:do_not_use_Int .and. .not. 2) .or. 

meta '. may_draw' e
  if e:size<>2 or not (e:0 cast HtmlPage)
    return
  e:1 compile ?
  e suckup e:0
  var Link:Argument flags :> argument local Int
  e add (instruction (the_function '. html_may_draw_begin' H
  e suckup e:1
  e add (instruction (the_function '. html_may_draw_end' Htm
  e set_void_result

export '. may_draw'


method page html_draw img url_id format options flags link b
  arg_rw HtmlPage page ; oarg_rw ImagePrototype img ; arg St
  var Str url := image_cache_record img url_id format option
  var Str id := generate_id
  if (flags .and. 1)<>0
method page html_draw img url_id format options flags link b
  arg_rw HtmlPage page ; oarg_rw ImagePrototype img ; arg St
  var Str url := image_cache_record img url_id format option
  var Str id := generate_id
  if (flags .and. 1)<>0
    page html "<a href=[dq]"+html_encode:link+"[dq]>[lf]"
    page html "<a href=[dq]"+html_encode:link+"[dq]>"
  var Str event := ""
  if (flags .and. 4)<>0
    event := " onClick==[dq]button_pressed('button 0 0 "+bod
  var Str event := ""
  if (flags .and. 4)<>0
    event := " onClick==[dq]button_pressed('button 0 0 "+bod
  page html "<image id=[dq]"+id+"[dq] src=[dq]"+url+"[dq]"+e
  page html "<img src=[dq]"+url+"[dq] width=[dq]"+(string img:size_x)+"[dq] height=[dq]"+(string img:size_y)+"[dq] id=[dq]"+id+"[dq]"+event+">"
  if (flags .and. 1)<>0
  if (flags .and. 1)<>0
    page html "</a>[lf]"
    page html "</a>"
  if flags=0
    return
  implicit page
  if flags=0
    return
  implicit page
    if (flags .and. 2)<>0 and (env first "pliant draw")=null
      env insert "pliant draw" true addressof:void
    if (flags .and. 2)<>0 and (environment first "pliant draw")=null
      environment insert "pliant draw" true addressof:void
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_x0[d
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_y0[d
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_x1[d
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_y1[d
    var Str pos_x := "e.clientX" ; var Str pos_y := "e.clien
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_x0[d
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_y0[d
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_x1[d
      html "<input type=[dq]hidden[dq] name=[dq]_pliant_y1[d
    var Str pos_x := "e.clientX" ; var Str pos_y := "e.clien
    var CBool relative := true
    var Str browser := http_request:browser_model
    var Str browser := http_request browser_model
    if browser="mozilla"
      buttons := "e.which"
    eif browser="ie"
      pos_x := "event.clientX" ; pos_y := "event.clientY" ; 
    if browser="mozilla"
      buttons := "e.which"
    eif browser="ie"
      pos_x := "event.clientX" ; pos_y := "event.clientY" ; 
    var Str offset_x offset_y
    if relative
      offset_x := "-document.getElementById([dq]"+id+"[dq]).
      var (Pointer List:Str) ids :> page:env kmap "default i
      var Pointer:Str i :> ids last
      while exists:i
        offset_x += "-document.getElementById([dq]"+i+"[dq])
        i :> ids previous i
      offset_y := replace offset_x "offsetLeft" "offsetTop"
    else
      offset_x := "" ; offset_y := ""
    html "<script language=[dq]JavaScript[dq]>[lf]"
    html "function mm_x_"+id+"(x,delta) {[lf]"
    html "<script language=[dq]JavaScript[dq]>[lf]"
    html "function mm_x_"+id+"(x,delta) {[lf]"
    html "  return "+(string img:x0)+"+"+(string img:x1-img:
    html "  return "+(string img:x0)+"+"+(string img:x1-img:x0)+"*(relative_x(x,'"+id+"')+delta)/"+(string img:size_x)+"; }[lf]"
    html "function mm_y_"+id+"(y,delta) {[lf]"
    html "function mm_y_"+id+"(y,delta) {[lf]"
    html "  return "+(string img:y0)+"+"+(string img:y1-img:
    html "  return "+(string img:y0)+"+"+(string img:y1-img:y0)+"*(relative_y(y,'"+id+"')+delta)/"+(string img:size_y)+"; }[lf]"
    if (flags .and. 2)<>0
      html "function down_"+id+"(e) {[lf]"
      html "  if("+buttons+"==1){[lf]"
      html "    document.pliant._pliant_x0.value = mm_x_"+id
      html "    document.pliant._pliant_y0.value = mm_y_"+id
      html "    return false;[lf]"
      html "  } else {[lf]"
      html "    return true; } }[lf]"
      html "function up_"+id+"(e) {[lf]"
      html "  if("+buttons+"==1){[lf]"
      html "    document.pliant._pliant_x1.value = mm_x_"+id
      html "    document.pliant._pliant_y1.value = mm_y_"+id
      html "    button_pressed('button 0 0 "+body_id+" "+(pa
      html "    return false;[lf]"
      html "  } else {[lf]"
      html "    return true; } }[lf]"
      html "document.getElementById([dq]"+id+"[dq]).onmoused
      html "document.getElementById([dq]"+id+"[dq]).onmouseu
    if (flags .and. 8)<>0
      html "function move_"+id+"(e) {[lf]"
      html "  x = mm_x_"+id+"("+pos_x+",0.5);[lf]"
      html "  y = mm_y_"+id+"("+pos_y+",0.5);[lf]"
      var Float psize := (img:x1-img:x0)/img:size_x
      var Int r := 10^(min (max -(cast log:psize Int) 0) 9)
      html "  x = ((x*"+string:r+")-(x*"+string:r+")%1)/"+st
      var Float psize := (img:y1-img:y0)/img:size_y
      var Int r := 10^(min (max -(cast log:psize Int) 0) 9)
      html "  y = ((y*"+string:r+")-(y*"+string:r+")%1)/"+st
      html "  window.status=x+'  '+y;[lf]"
      html "  return true; }[lf]"
      html "document.getElementById([dq]"+id+"[dq]).onmousem
    html "</script>[lf]"


export '. draw' '. selected'
    if (flags .and. 2)<>0
      html "function down_"+id+"(e) {[lf]"
      html "  if("+buttons+"==1){[lf]"
      html "    document.pliant._pliant_x0.value = mm_x_"+id
      html "    document.pliant._pliant_y0.value = mm_y_"+id
      html "    return false;[lf]"
      html "  } else {[lf]"
      html "    return true; } }[lf]"
      html "function up_"+id+"(e) {[lf]"
      html "  if("+buttons+"==1){[lf]"
      html "    document.pliant._pliant_x1.value = mm_x_"+id
      html "    document.pliant._pliant_y1.value = mm_y_"+id
      html "    button_pressed('button 0 0 "+body_id+" "+(pa
      html "    return false;[lf]"
      html "  } else {[lf]"
      html "    return true; } }[lf]"
      html "document.getElementById([dq]"+id+"[dq]).onmoused
      html "document.getElementById([dq]"+id+"[dq]).onmouseu
    if (flags .and. 8)<>0
      html "function move_"+id+"(e) {[lf]"
      html "  x = mm_x_"+id+"("+pos_x+",0.5);[lf]"
      html "  y = mm_y_"+id+"("+pos_y+",0.5);[lf]"
      var Float psize := (img:x1-img:x0)/img:size_x
      var Int r := 10^(min (max -(cast log:psize Int) 0) 9)
      html "  x = ((x*"+string:r+")-(x*"+string:r+")%1)/"+st
      var Float psize := (img:y1-img:y0)/img:size_y
      var Int r := 10^(min (max -(cast log:psize Int) 0) 9)
      html "  y = ((y*"+string:r+")-(y*"+string:r+")%1)/"+st
      html "  window.status=x+'  '+y;[lf]"
      html "  return true; }[lf]"
      html "document.getElementById([dq]"+id+"[dq]).onmousem
    html "</script>[lf]"


export '. draw' '. selected'