Advertisement
Guest User

Untitled

a guest
Aug 24th, 2013
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Copyright (c) 2013 Perttu Ahola <celeron55@gmail.com>
  3.  
  4. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
  5.  
  6. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
  7.  
  8. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  9. */
  10.  
  11. var __tmp = function(){
  12. var h1e = {}
  13. h1edpi_module = h1e
  14.  
  15. /* H1edpi */
  16.  
  17. ERROR_COOLDOWN = 30*5
  18.  
  19. h1e.canvas = undefined
  20. h1e.w = undefined
  21. h1e.h = undefined
  22. h1e.fps = undefined
  23. h1e.ctx = undefined
  24. h1e.started = false
  25. h1e.sprites = {}
  26. h1e.sections = []
  27. h1e.preloading = true
  28. h1e.error_cooldown = 0
  29. h1e.num_sprites_incomplete = 0
  30. h1e.bgstyle = "#005500"
  31. h1e.keys = {}
  32. h1e.has_focus = true
  33. h1e.cb_draw_no_focus = undefined
  34.  
  35. h1e.init = function(canvas, w, h, fps){
  36.     h1e.checkdom(canvas)
  37.     h1e.checkinteger(w)
  38.     h1e.checkinteger(h)
  39.     h1e.checkinteger(fps)
  40.  
  41.     h1e.canvas = canvas
  42.     h1e.w = w
  43.     h1e.h = h
  44.     h1e.fps = fps
  45.  
  46.     h1e.update_scale()
  47. }
  48.  
  49. h1e.resize_canvas = function(w, h){
  50.     $("#main_canvas")[0].width = Math.floor((w)/12)*12
  51.     $("#main_canvas")[0].height = Math.floor((h)/12)*12
  52.     h1e.update_scale()
  53. }
  54.  
  55. h1e.update_scale = function(){
  56.     var canvas = h1e.canvas
  57.     h1e.scale = Math.floor(Math.min(canvas.width/h1e.w, canvas.height/h1e.h))
  58.     h1e.off_x = (canvas.width  - h1e.w*h1e.scale) / 2
  59.     h1e.off_y = (canvas.height - h1e.h*h1e.scale) / 2
  60.  
  61.     var section = h1e.sections[h1e.sections.length-1]
  62.     if(section)
  63.         section._h1e_updated = true
  64. }
  65.  
  66. h1e.add_image = function(name, url){
  67.     h1e.preload.add_image(name, url)
  68. }
  69.  
  70. h1e.def_sprite = function(sprite_name, img_name, tcs){
  71.     h1e.checkstring(sprite_name)
  72.     h1e.checkstring(img_name)
  73.     if(!h1e.isarray(tcs) && tcs !== undefined)
  74.         throw new Error("tcs should be array or undefined")
  75.  
  76.     h1e.sprites[sprite_name] = {
  77.         img_name: img_name,
  78.         tcs: tcs,
  79.         cache_img: undefined,
  80.         cache_scale: undefined,
  81.         draw_iteration: 0,
  82.         error_count: 0,
  83.     }
  84. }
  85.  
  86. h1e.get_frame_count = function(sprite_name){
  87.     var sprite = h1e.sprites[sprite_name]
  88.     if(!sprite)
  89.         throw new Error("Sprite \""+sprite_name+"\" does not exist")
  90.     return sprite.tcs.length
  91. }
  92.  
  93. h1e.draw_rect = function(x, y, w, h, fillStyle){
  94.     h1e.ctx.fillStyle = fillStyle
  95.     h1e.ctx.fillRect(x*h1e.scale, y*h1e.scale, w*h1e.scale, h*h1e.scale)
  96. }
  97.  
  98. h1e.draw_sprite = function(x, y, sprite_name, opts){
  99.     var sprite = h1e.sprites[sprite_name]
  100.     if(!sprite){
  101.         console.log("h1e.draw_sprite: Couldn't get sprite")
  102.         h1e.error_cooldown = ERROR_COOLDOWN
  103.         return
  104.     }
  105.     var img = h1e.get_sprite_image(sprite)
  106.     if(!img){
  107.         return
  108.     }
  109.     var tc = undefined
  110.     if(sprite.tcs){
  111.         var frame = 0
  112.         if(opts && opts.frame)
  113.             frame = opts.frame
  114.         var tc = sprite.tcs[frame]
  115.         if(tc === undefined)
  116.             throw new Error(sprite_name+" does not have frame "+frame)
  117.     } else {
  118.         tc = [0, 0, img.width/h1e.scale, img.height/h1e.scale]
  119.     }
  120.     var sx = tc[0]
  121.     var sy = tc[1]
  122.     var sw = tc[2]
  123.     var sh = tc[3]
  124.     var dx = x
  125.     var dy = y
  126.     var dw = tc[2]
  127.     var dh = tc[3]
  128.     if(opts && opts.cut){
  129.         sx += opts.cut[0]
  130.         sy += opts.cut[1]
  131.         sw = opts.cut[2]
  132.         sh = opts.cut[3]
  133.         dw = opts.cut[2]
  134.         dh = opts.cut[3]
  135.     }
  136.     var s = h1e.scale
  137.     h1e.ctx.drawImage(img, sx*s, sy*s, sw*s, sh*s, dx*s, dy*s, dw*s, dh*s)
  138.     //h1e.ctx.drawImage(img, dx, dy)
  139. }
  140.  
  141. h1e.push_section = function(section){
  142.     h1e.checkobject(section)
  143.  
  144.     section._h1e_updated = true
  145.     h1e.sections.push(section)
  146. }
  147.  
  148. h1e.remove_section = function(section){
  149.     var i = h1e.sections.indexOf(section)
  150.     if(i != -1)
  151.         h1e.sections.splice(i, 1)
  152.     else
  153.         throw new Error("h1e.remove_section: Section not found")
  154. }
  155.  
  156. h1e.keyname_to_keycodes = function(keyname){
  157.     var keycodes = {
  158.         left: [37],
  159.         up: [38],
  160.         right: [39],
  161.         down: [40],
  162.         space: [32],
  163.         escape: [27],
  164.     }
  165.     if(keycodes[keyname])
  166.         return keycodes[keyname]
  167.     if(h1e.isinteger(keyname))
  168.         return [keyname]
  169.     if(h1e.isstring(keyname) && keyname.length == 1)
  170.         return [keyname.toUpperCase().charCodeAt(0)]
  171.     throw new Error("Unknown keyname: \""+keyname+"\"")
  172. }
  173.  
  174. h1e.iskey = function(key, keyname){
  175.     var keynames = h1e.isarray(keyname) ? keyname : [keyname]
  176.     return keynames.some(function(keyname){
  177.         var keycodes = h1e.keyname_to_keycodes(keyname)
  178.         return keycodes.some(function(keycode){
  179.             if(key == keycode)
  180.                 return true
  181.         })
  182.     })
  183. }
  184.  
  185. h1e.keydown = function(keyname){
  186.     var keycodes = h1e.keyname_to_keycodes(keyname)
  187.     return keycodes.some(function(keycode){
  188.         if(h1e.keys[keycode])
  189.             return true
  190.     })
  191. }
  192.  
  193. h1e.start = function(){
  194.     if(h1e.started)
  195.         throw new Error("h1e.start: h1edpi already started")
  196.     h1e.started = true
  197.  
  198.     h1e.preload.all_added(function(){
  199.         h1e.preloading = false
  200.     })
  201.  
  202.     document.addEventListener('keydown', function(e){
  203.         h1e.keys[e.keyCode] = true
  204.         var section = h1e.sections[h1e.sections.length-1]
  205.         if(section && section.event(h1e, {type:"keydown", key:e.keyCode}))
  206.             section._h1e_updated = true
  207.     })
  208.     document.addEventListener('keyup', function(e){
  209.         h1e.keys[e.keyCode] = false
  210.         var section = h1e.sections[h1e.sections.length-1]
  211.         if(section && section.event(h1e, {type:"keyup", key:e.keyCode}))
  212.             section._h1e_updated = true
  213.     })
  214.     window.onfocus = function(e){
  215.         h1e.has_focus = true
  216.     }
  217.     window.onblur = function(e){
  218.         h1e.has_focus = false
  219.     }
  220.  
  221.     h1e.ctx = h1e.canvas.getContext("2d")
  222.     h1e.ctx.imageSmoothingEnabled = false
  223.  
  224.     function draw_bg(){
  225.         if(h1e.bgstyle){
  226.             h1e.draw_rect(0, 0, h1e.w, h1e.h, h1e.bgstyle)
  227.         }
  228.     }
  229.  
  230.     function update(){
  231.         setTimeout(update, 1000/h1e.fps)
  232.         var section = h1e.sections[h1e.sections.length-1]
  233.         if(section && section.update){
  234.             var r = section.update(h1e)
  235.             if(r) section._h1e_updated = true
  236.         }
  237.     }
  238.     update()
  239.  
  240.     var last_has_focus = true
  241.     function draw(){
  242.         window.requestAnimationFrameCompatible(draw)
  243.  
  244.         if(h1e.error_cooldown){
  245.             h1e.error_cooldown--
  246.             return
  247.         }
  248.  
  249.         h1e.ctx.save()
  250.         h1e.ctx.beginPath()
  251.         h1e.ctx.rect(h1e.off_x, h1e.off_y, h1e.scale*h1e.w, h1e.scale*h1e.h)
  252.         h1e.ctx.clip()
  253.         h1e.ctx.translate(h1e.off_x, h1e.off_y)
  254.  
  255.         var section = h1e.sections[h1e.sections.length-1]
  256.  
  257.         if(h1e.preloading){
  258.             draw_bg()
  259.             h1e.ctx.save()
  260.             h1e.ctx.fillStyle = "#ffffff"
  261.             h1e.ctx.fillText("[Preloading...]", 40, 40)
  262.             h1e.ctx.restore()
  263.         } else if(section){
  264.             if(section._h1e_updated || (h1e.has_focus != last_has_focus)){
  265.                 draw_bg()
  266.                 section.draw(h1e)
  267.                 if(h1e.num_sprites_incomplete == 0)
  268.                     section._h1e_updated = false
  269.                 if(!h1e.has_focus && h1e.cb_draw_no_focus)
  270.                     h1e.cb_draw_no_focus(h1e)
  271.                 last_has_focus = h1e.has_focus
  272.             }
  273.         } else {
  274.             draw_bg()
  275.             h1e.ctx.save()
  276.             h1e.ctx.fillStyle = "#ffffff"
  277.             h1e.ctx.fillText("[No Section]", 40, 40)
  278.             h1e.ctx.restore()
  279.         }
  280.         h1e.ctx.restore()
  281.  
  282.         for(name in h1e.sprites){
  283.             var sprite = h1e.sprites[name]
  284.             sprite.draw_iteration++
  285.         }
  286.         h1e.num_sprites_incomplete = 0
  287.     }
  288.     window.requestAnimationFrameCompatible(draw)
  289. }
  290.  
  291. /* Internal */
  292.  
  293. h1e.get_sprite_image = function(sprite){
  294.     h1e.checkobject(sprite)
  295.     if(sprite.cache_img && sprite.cache_scale == h1e.scale){
  296.         if(!sprite.cache_img.complete){
  297.             h1e.num_sprites_incomplete++
  298.         }
  299.         return sprite.cache_img
  300.     }
  301.     var img = h1e.get_image(sprite.img_name+"|scale="+h1e.scale)
  302.     if(!img){
  303.         h1e.num_sprites_incomplete++
  304.         if(sprite.draw_iteration < 3)
  305.             return undefined
  306.         sprite.error_count++
  307.         if(sprite.error_count > 10){
  308.             console.log("h1e.get_sprite_image: Failed to get \""+sprite.img_name+
  309.                     "\"")
  310.             h1e.error_cooldown = ERROR_COOLDOWN
  311.         }
  312.         return undefined
  313.     }
  314.     sprite.cache_img = img
  315.     sprite.cache_scale = h1e.scale
  316.     return sprite.cache_img
  317. }
  318.  
  319. h1e.get_image = function(name, base){
  320.     var img = undefined
  321.     var next = undefined
  322.  
  323.     if(base){
  324.         img = base
  325.         next = name
  326.     } else {
  327.         var m = /(.+?)\|(.+)/.exec(name)
  328.         var first = m[1]
  329.         //console.log("first:", m)
  330.         img = h1e.preload.images[first]
  331.         if(!img || !img.complete){
  332.             console.log("h1e.get_image:", first, "not found or not complete")
  333.             h1e.error_cooldown = ERROR_COOLDOWN
  334.             return undefined
  335.         }
  336.         next = m[2]
  337.     }
  338.  
  339.     var m = /(.+?)\|(.+)/.exec(next)
  340.     if(!m)
  341.         m = [undefined, next]
  342.     //console.log("mod:", m)
  343.     var mod = m[1]
  344.     methods = [
  345.         {t: function(mod){
  346.             return /scale=(\d+)/.exec(mod)
  347.         },f: function(img, m){
  348.             var scale = Number(m[1])
  349.             //console.log("scale:", scale)
  350.             return h1e.scale_image(img, scale)
  351.         }},
  352.         {t: function(mod){
  353.             return /mask=(#[a-f0-9]+)/.exec(mod)
  354.         },f: function(img, m){
  355.             var color = new h1e.Color(m[1])
  356.             //console.log("color:", color)
  357.             return h1e.mask_image(img, color)
  358.         }},
  359.         {t: function(mod){
  360.             return /recolor=(#[a-f0-9]+),(#[a-f0-9]+)/.exec(mod)
  361.         },f: function(img, m){
  362.             var from = new h1e.Color(m[1])
  363.             var to = new h1e.Color(m[2])
  364.             //console.log("from:", from)
  365.             //console.log("to:", to)
  366.             return h1e.recolor_image(img, from, to)
  367.         }},
  368.     ]
  369.     var did = methods.some(function(method){
  370.         var m2 = method.t(mod)
  371.         if(m2){
  372.             //console.log("Applying", mod, "in", name)
  373.             img = method.f(img, m2)
  374.             return true
  375.         }
  376.     })
  377.     if(!did){
  378.         console.log("h1e.get_image: Invalid mod:", mod)
  379.         h1e.error_cooldown = ERROR_COOLDOWN
  380.         return undefined
  381.     }
  382.     next = m[2]
  383.     if(next){
  384.         if(!img.complete){
  385.             console.log("h1e.get_image:", name, "is incomplete for now")
  386.             return undefined
  387.         }
  388.         return h1e.get_image(next, img)
  389.     } else {
  390.         return img
  391.     }
  392. }
  393.  
  394. /* Image preloading */
  395.  
  396. h1e.preload = {}
  397.  
  398. h1e.preload.on_images_preloaded = undefined
  399.  
  400. h1e.preload.num_images_loading = 1
  401. h1e.preload.images_loading = {"__all_not_added": true}
  402. h1e.preload.num_images_failed = 0
  403. h1e.preload.images_failed = {}
  404. h1e.preload.images = {}
  405.  
  406. h1e.preload.image_loaded = function(name){
  407.     console.log("__preload: Image loaded: \""+name+"\"")
  408.     delete h1e.preload.images_loading[name]
  409.     h1e.preload.num_images_loading--
  410.     if(h1e.preload.num_images_loading == 0){
  411.         console.log("__preload: All images loaded")
  412.         h1e.preload.on_images_preloaded()
  413.     }
  414. }
  415.  
  416. h1e.preload.image_error = function(name){
  417.     h1e.preload.images_failed[name] = h1e.preload.images_loading[name]
  418.     delete h1e.preload.images_loading[name]
  419.     h1e.preload.num_images_loading--
  420.     h1e.preload.num_images_failed++
  421.     console.log("__preload: Failed to load image: \""+name+"\"")
  422.     if(h1e.preload.num_images_loading == 0)
  423.         h1e.preload.on_images_preloaded()
  424. }
  425.  
  426. h1e.preload.add_image = function(name, src){
  427.     if(src === undefined)
  428.         src = name
  429.     console.log("__preload: preload.add_image(\""+name+"\", \""+src+"\")")
  430.     var img = new Image()
  431.     img.onload = function(){
  432.         h1e.preload.image_loaded(name)
  433.     }
  434.     img.onerror = function(){
  435.         h1e.preload.image_error(name)
  436.     }
  437.     img.src = src
  438.     h1e.preload.images[name] = img
  439.     h1e.preload.images_loading[name] = img
  440.     h1e.preload.num_images_loading++
  441. }
  442.  
  443. h1e.preload.add_images = function(images){
  444.     for(var name in images){
  445.         h1e.preload.add_image(name, images[name])
  446.     }
  447. }
  448.  
  449. h1e.preload.all_added = function(callback){
  450.     h1e.preload.on_images_preloaded = callback
  451.     h1e.preload.image_loaded("__all_not_added")
  452. }
  453.  
  454. h1e.preload.clear = function(){
  455.     h1e.preload.images_loading = {"__all_not_added": true}
  456.     h1e.preload.num_images_failed = 0
  457.     h1e.preload.images_failed = {}
  458.     h1e.preload.images = {}
  459. }
  460.  
  461. /* Image processing */
  462.  
  463. h1e.scale_image = function(img, scale)
  464. {
  465.     h1e.checkdom(img)
  466.     h1e.checkinteger(scale)
  467.  
  468.     var w = img.width
  469.     var h = img.height
  470.     h1e.assert(w && h)
  471.     var canvas = document.createElement('canvas')
  472.     canvas.width = w
  473.     canvas.height = h
  474.     var ctx = canvas.getContext("2d")
  475.     ctx.drawImage(img, 0, 0)
  476.  
  477.     var w2 = img.width * scale
  478.     var h2 = img.height * scale
  479.     var canvas2 = document.createElement('canvas')
  480.     canvas2.width = w2
  481.     canvas2.height = h2
  482.     var ctx2 = canvas2.getContext("2d")
  483.     //ctx2.drawImage(img, 0, 0, w2, h2)
  484.  
  485.     var s = scale
  486.     var im = ctx.getImageData(0, 0, w, h)
  487.     var im2 = ctx2.getImageData(0, 0, w2, h2)
  488.     h1e.checkobject(im2)
  489.     for(var y=0; y<h; y++){
  490.         for(var x=0; x<w; x++){
  491.             for(var y2=0; y2<scale; y2++){
  492.                 for(var x2=0; x2<scale; x2++){
  493.                     im2.data[((y*s+y2)*w2+x*s+x2)*4+0] = im.data[(y*w+x)*4+0]
  494.                     im2.data[((y*s+y2)*w2+x*s+x2)*4+1] = im.data[(y*w+x)*4+1]
  495.                     im2.data[((y*s+y2)*w2+x*s+x2)*4+2] = im.data[(y*w+x)*4+2]
  496.                     im2.data[((y*s+y2)*w2+x*s+x2)*4+3] = im.data[(y*w+x)*4+3]
  497.                 }
  498.             }
  499.         }
  500.     }
  501.     /*for(var i=0; i<w2*h2; i++){
  502.         im2.data[i*4+0] = 255
  503.         im2.data[i*4+1] = 0
  504.         im2.data[i*4+2] = 150
  505.         im2.data[i*4+3] = 255
  506.     }*/
  507.     ctx2.putImageData(im2, 0, 0)
  508.  
  509.     var dataurl = canvas2.toDataURL()
  510.     var img2 = new Image()
  511.     img2.src = dataurl
  512.     return img2
  513. }
  514.  
  515. h1e.Color = function(r, g, b)
  516. {
  517.     if(h1e.isstring(r)){
  518.         if(r.substr(0,1) != "#")
  519.             throw "Invalid color string"
  520.         this.r = parseInt(r.substr(1,2), 16)
  521.         this.g = parseInt(r.substr(3,2), 16)
  522.         this.b = parseInt(r.substr(5,2), 16)
  523.     } else {
  524.         this.r = r
  525.         this.g = g
  526.         this.b = b
  527.     }
  528. }
  529. h1e.Color.prototype.r = 0
  530. h1e.Color.prototype.g = 0
  531. h1e.Color.prototype.b = 0
  532. h1e.Color.prototype.toString = function(){
  533.     return "["+this.r+","+this.g+","+this.b+"]"
  534. }
  535. h1e.Color.prototype.eqArr = function(arr, i){
  536.     return this.r == arr[i+0] && this.g == arr[i+1] && this.b == arr[i+2]
  537. }
  538. h1e.Color.prototype.setArr = function(arr, i){
  539.     arr[i+0] = this.r
  540.     arr[i+1] = this.g
  541.     arr[i+2] = this.b
  542. }
  543.  
  544. h1e.mask_image = function(img, mask)
  545. {
  546.     h1e.checkdom(img)
  547.     h1e.checkobject(mask)
  548.  
  549.     var w = img.width
  550.     var h = img.height
  551.     var canvas = document.createElement('canvas')
  552.     canvas.width = w
  553.     canvas.height = h
  554.     var ctx = canvas.getContext("2d")
  555.     ctx.drawImage(img, 0, 0)
  556.  
  557.     var im = ctx.getImageData(0, 0, w, h)
  558.     for(var i=0; i<w*h; i++){
  559.         if(im.data[i*4+3] == 0)
  560.             continue
  561.         if(mask.eqArr(im.data, i*4))
  562.             im.data[i*4+3] = 0
  563.     }
  564.     ctx.putImageData(im, 0, 0)
  565.  
  566.     var dataurl = canvas.toDataURL()
  567.     var img2 = new Image()
  568.     img2.src = dataurl
  569.     return img2
  570. }
  571.  
  572. h1e.recolor_image = function(img, from, to)
  573. {
  574.     h1e.checkdom(img)
  575.     h1e.checkobject(from)
  576.     h1e.checkobject(to)
  577.  
  578.     var w = img.width
  579.     var h = img.height
  580.     var canvas = document.createElement('canvas')
  581.     canvas.width = w
  582.     canvas.height = h
  583.     var ctx = canvas.getContext("2d")
  584.     ctx.drawImage(img, 0, 0)
  585.  
  586.     var im = ctx.getImageData(0, 0, w, h)
  587.     for(var i=0; i<w*h; i++){
  588.         if(im.data[i*4+3] == 0)
  589.             continue
  590.         if(from.eqArr(im.data, i*4))
  591.             to.setArr(im.data, i*4)
  592.     }
  593.     ctx.putImageData(im, 0, 0)
  594.  
  595.     var dataurl = canvas.toDataURL()
  596.     var img2 = new Image()
  597.     img2.src = dataurl
  598.     return img2
  599. }
  600.  
  601. /* Misc. */
  602.  
  603. window.requestAnimationFrameCompatible = (function(){
  604.     return window.requestAnimationFrame ||
  605.         window.webkitRequestAnimationFrame ||
  606.         window.mozRequestAnimationFrame ||
  607.         window.oRequestAnimationFrame ||
  608.         window.msRequestAnimationFrame ||
  609.         function(callback){
  610.             window.setTimeout(callback, 1000/30);
  611.         }
  612. })()
  613.  
  614. h1e.isobject = function(value){
  615.     return !(typeof value !== "object") }
  616. h1e.isarray = function(value){
  617.     return (typeof(value) == 'object' && value !== null && value instanceof Array) }
  618. h1e.isstring = function(value){
  619.     return !(typeof value !== "string") }
  620. h1e.isnumber = function(value){
  621.     return (typeof value === "number" && value === value) }
  622. h1e.isbool = function(value){
  623.     return (typeof value === "boolean") }
  624. h1e.isfinite = function(value){
  625.     return !(typeof value !== "number" || !isFinite(value)) }
  626. h1e.isinteger = function(value){
  627.     return !(typeof value !== "number" || !isFinite(value) || value != Math.floor(value)) }
  628. h1e.isdom = function(value){
  629.     return h1e.isobject(value) && !!value.nodeType }
  630.  
  631. h1e.checkobject = function(value){
  632.     if(!h1e.isobject(value)) throw new Error("Value is not object") }
  633. h1e.checkarray = function(value){
  634.     if(!h1e.isarray(value)) throw new Error("Value is not array") }
  635. h1e.checkstring = function(value){
  636.     if(!h1e.isstring(value)) throw new Error("Value is not string") }
  637. h1e.checknumber = function(value){
  638.     if(!h1e.isnumber(value)) throw new Error("Value is not number") }
  639. h1e.checkbool = function(value){
  640.     if(!h1e.isbool(value)) throw new Error("Value is not bool") }
  641. h1e.checkfinite = function(value){
  642.     if(!h1e.isfinite(value)) throw new Error("Value is not a finite number") }
  643. h1e.checkinteger = function(value){
  644.     if(!h1e.isinteger(value)) throw new Error("Value is not integer") }
  645. h1e.checkdom = function(value){
  646.     if(!h1e.isdom(value)) throw new Error("Value is not dom") }
  647. h1e.checkbool_or_undefined = function(value){
  648.     if(!h1e.isbool(value) && value !== undefined)
  649.         throw new Error("Value is not bool or undefined") }
  650. h1e.assert = function(v){
  651.     if(!v) throw new Error("Assertion failed") }
  652.  
  653. h1e.dump = function(arr, dumped_objects){
  654.     if(dumped_objects === undefined)
  655.         var dumped_objects = []
  656.     var dumped_text = ""
  657.     if(typeof(arr) == 'object' && arr === null){
  658.         dumped_text += "null"
  659.     } else if(typeof(arr) == 'object' && arr !== null && arr instanceof Array){
  660.         if(dumped_objects.indexOf(arr) != -1)
  661.             return "(circular reference)"
  662.         dumped_objects.push(arr)
  663.         dumped_text += "["
  664.         var first = true
  665.         for(var i in arr){
  666.             if(!first)
  667.                 dumped_text += ","
  668.             first = false
  669.             var value = arr[i]
  670.             dumped_text += h1e.dump(value, dumped_objects)
  671.         }
  672.         dumped_text += "]"
  673.     } else if(typeof(arr) == 'object'){
  674.         if(dumped_objects.indexOf(arr) != -1)
  675.             return "(circular reference)"
  676.         dumped_objects.push(arr)
  677.         dumped_text += "{"
  678.         var first = true
  679.         for(var item in arr){
  680.             if(!first)
  681.                 dumped_text += ","
  682.             first = false
  683.             var value = arr[item]
  684.             dumped_text += "'"+item+"':"+h1e.dump(value, dumped_objects)
  685.         }
  686.         dumped_text += "}"
  687.     } else {
  688.         if(typeof(arr) == 'string')
  689.             dumped_text = "\""+arr+"\""
  690.         else if(typeof(arr) == 'number')
  691.             dumped_text = arr
  692.         else if(typeof(arr) == 'undefined')
  693.             dumped_text = "undefined"
  694.         else
  695.             dumped_text = ""+arr+" ("+typeof(arr)+")"
  696.     }
  697.     return dumped_text
  698. }
  699.  
  700. }()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement