Bring back the original js files and more

This commit is contained in:
pancake committed 2016-02-27 00:11:16 +01:00
1 parent 2c32b181ab
commit 1c5938fb58
41 files changed
+50693 -80

No files matched your search

+1 -1
View File
@@ -9,7 +9,7 @@
{
expand: true,
src: ['js/*.js', '!Gruntfile.js'],
dest: './'
dest: 'ugly/'
}
]
}
+4 -1
View File
@@ -14,7 +14,7 @@ BOWER=$(shell npm bin)/bower
index.js: node_modules
$(BOWER) install
$(GRUNT)
cat build/*.js js/*.js > index.js
cat build/*.js ugly/js/*.js > index.js
ENYO=http://enyojs.com/sampler/latest/build
JOINT=http://www.jointjs.com/cms/downloads/
@@ -32,5 +32,8 @@ enyo-sync:
# jQuery
wget -O build/jquery.min.js http://code.jquery.com/jquery-2.0.3.min.js
run:
r2 -q -e http.root=$(PWD)/../ -c=H /bin/ls
clean:
rm -rf node_modules
+11
View File
@@ -0,0 +1,11 @@
Enyo Radare2 WebUI
==================
js/
Contains all webui specific javascript files
css/
CSS files
lib/
javascript libraries (jquery, enyo, ...)
img/
images for this webui
+8
View File
@@ -0,0 +1,8 @@
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
.viewport{-webkit-user-select:none;-moz-user-select:none;user-select:none}[magnet=true]:not(.element){cursor:crosshair}[magnet=true]:not(.element):hover{opacity:.7}.element{cursor:move}.element *{vector-effect:non-scaling-stroke;user-drag:none}.connection-wrap{fill:none;stroke:#000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;opacity:0;cursor:move}.connection-wrap:hover{opacity:.4;stroke-opacity:.4}.connection{fill:none;stroke-linejoin:round}.marker-source,.marker-target{vector-effect:non-scaling-stroke}.marker-vertices{opacity:0;cursor:move}.marker-arrowheads{opacity:0;cursor:move;cursor:-webkit-grab;cursor:-moz-grab}.link-tools{opacity:0;cursor:pointer}.link-tools .tool-options{display:none}.link-tools .tool-remove circle{fill:red}.link-tools .tool-remove path{fill:#fff}.link:hover .marker-vertices,.link:hover .marker-arrowheads,.link:hover .link-tools{opacity:1}.marker-vertex{fill:#1ABC9C}.marker-vertex:hover{fill:#34495E;stroke:none}.marker-arrowhead{fill:#1ABC9C}.marker-arrowhead:hover{fill:#F39C12;stroke:none}.marker-vertex-remove{cursor:pointer;opacity:.1;fill:#fff}.marker-vertex-group:hover .marker-vertex-remove{opacity:1}.marker-vertex-remove-area{opacity:.1;cursor:pointer}.marker-vertex-group:hover .marker-vertex-remove-area{opacity:1}.highlighted{opacity:.7}text.highlighted{fill:red}@media screen and (-webkit-min-device-pixel-ratio:0){.highlighted{outline:2px solid red;opacity:initial}}.element .fobj{overflow:hidden}.element .fobj body{background-color:transparent;margin:0}.element .fobj div{text-align:center;vertical-align:middle;display:table-cell;padding:0 5px}
+131
View File
@@ -0,0 +1,131 @@
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// For AMD.
define(['backbone', 'lodash', 'jquery'], function(Backbone, _, $) {
Backbone.$ = $;
return factory(root, Backbone, _, $);
});
} else if (typeof exports !== 'undefined') {
// For Node.js or CommonJS.
var Backbone = require('backbone');
var _ = require('lodash');
var $ = Backbone.$ = require('jquery');
module.exports = factory(root, Backbone, _, $);
} else {
// As a browser global.
var Backbone = root.Backbone;
var _ = root._;
var $ = Backbone.$ = root.jQuery || root.$;
root.joint = factory(root, Backbone, _, $);
root.g = root.joint.g;
root.V = root.Vectorizer = root.joint.V;
}
}(this, function(root, Backbone, _, $) {
var g=function(){function a(b,c){if(!(this instanceof a))return new a(b,c);var d;void 0===c&&Object(b)!==b?(d=b.split(-1===b.indexOf("@")?" ":"@"),this.x=parseInt(d[0],10),this.y=parseInt(d[1],10)):Object(b)===b?(this.x=b.x,this.y=b.y):(this.x=b,this.y=c)}function b(c,d){return this instanceof b?(this.start=a(c),void(this.end=a(d))):new b(c,d)}function c(a,b,d,e){return this instanceof c?(void 0===b&&(b=a.y,d=a.width,e=a.height,a=a.x),this.x=a,this.y=b,this.width=d,void(this.height=e)):new c(a,b,d,e)}function d(b,c,e){return this instanceof d?(b=a(b),this.x=b.x,this.y=b.y,this.a=c,void(this.b=e)):new d(b,c,e)}var e=Math,f=e.abs,h=e.cos,i=e.sin,j=e.sqrt,k=e.min,l=e.max,m=(e.atan,e.atan2),n=(e.acos,e.round),o=e.floor,p=e.PI,q=e.random,r=function(a){return 180*a/p%360},s=function(a,b){return b=b||!1,a=b?a:a%360,a*p/180},t=function(a,b){return b*Math.round(a/b)},u=function(a){return a%360+(0>a?360:0)};a.prototype={toString:function(){return this.x+"@"+this.y},adhereToRect:function(a){return a.containsPoint(this)?this:(this.x=k(l(this.x,a.x),a.x+a.width),this.y=k(l(this.y,a.y),a.y+a.height),this)},theta:function(b){b=a(b);var c=-(b.y-this.y),d=b.x-this.x,e=10,f=0==c.toFixed(e)&&0==d.toFixed(e)?0:m(c,d);return 0>f&&(f=2*p+f),180*f/p},distance:function(a){return b(this,a).length()},manhattanDistance:function(a){return f(a.x-this.x)+f(a.y-this.y)},offset:function(a,b){return this.x+=a||0,this.y+=b||0,this},magnitude:function(){return j(this.x*this.x+this.y*this.y)||.01},update:function(a,b){return this.x=a||0,this.y=b||0,this},round:function(a){return this.x=a?this.x.toFixed(a):n(this.x),this.y=a?this.y.toFixed(a):n(this.y),this},normalize:function(a){var b=(a||1)/this.magnitude();return this.x=b*this.x,this.y=b*this.y,this},difference:function(b){return a(this.x-b.x,this.y-b.y)},bearing:function(a){return b(this,a).bearing()},toPolar:function(b){b=b&&a(b)||a(0,0);var c=this.x,d=this.y;return this.x=j((c-b.x)*(c-b.x)+(d-b.y)*(d-b.y)),this.y=s(b.theta(a(c,d))),this},rotate:function(b,c){c=(c+360)%360,this.toPolar(b),this.y+=s(c);var d=a.fromPolar(this.x,this.y,b);return this.x=d.x,this.y=d.y,this},move:function(b,c){var d=s(a(b).theta(this));return this.offset(h(d)*c,-i(d)*c)},changeInAngle:function(b,c,d){return a(this).offset(-b,-c).theta(d)-this.theta(d)},equals:function(a){return this.x===a.x&&this.y===a.y},snapToGrid:function(a,b){return this.x=t(this.x,a),this.y=t(this.y,b||a),this},reflection:function(b){return a(b).move(this,this.distance(b))},clone:function(){return a(this)}},a.fromPolar=function(b,c,d){d=d&&a(d)||a(0,0);var e=f(b*h(c)),g=f(b*i(c)),j=u(r(c));return 90>j?g=-g:180>j?(e=-e,g=-g):270>j&&(e=-e),a(d.x+e,d.y+g)},a.random=function(b,c,d,e){return a(o(q()*(c-b+1)+b),o(q()*(e-d+1)+d))},b.prototype={toString:function(){return this.start.toString()+" "+this.end.toString()},length:function(){return j(this.squaredLength())},squaredLength:function(){var a=this.start.x,b=this.start.y,c=this.end.x,d=this.end.y;return(a-=c)*a+(b-=d)*b},midpoint:function(){return a((this.start.x+this.end.x)/2,(this.start.y+this.end.y)/2)},intersection:function(b){var c=a(this.end.x-this.start.x,this.end.y-this.start.y),d=a(b.end.x-b.start.x,b.end.y-b.start.y),e=c.x*d.y-c.y*d.x,f=a(b.start.x-this.start.x,b.start.y-this.start.y),g=f.x*d.y-f.y*d.x,h=f.x*c.y-f.y*c.x;if(0===e||0>g*e||0>h*e)return null;if(e>0){if(g>e||h>e)return null}else if(e>g||e>h)return null;return a(this.start.x+g*c.x/e,this.start.y+g*c.y/e)},bearing:function(){var a=s(this.start.y),b=s(this.end.y),c=this.start.x,d=this.end.x,e=s(d-c),f=i(e)*h(b),g=h(a)*i(b)-i(a)*h(b)*h(e),j=r(m(f,g)),k=["NE","E","SE","S","SW","W","NW","N"],l=j-22.5;return 0>l&&(l+=360),l=parseInt(l/45),k[l]},pointAt:function(b){var c=(1-b)*this.start.x+b*this.end.x,d=(1-b)*this.start.y+b*this.end.y;return a(c,d)},pointOffset:function(a){return((this.end.x-this.start.x)*(a.y-this.start.y)-(this.end.y-this.start.y)*(a.x-this.start.x))/2},clone:function(){return b(this)}},c.prototype={toString:function(){return this.origin().toString()+" "+this.corner().toString()},equals:function(a){var b=g.rect(this).normalize(),c=g.rect(a).normalize();return b.x===c.x&&b.y===c.y&&b.width===c.width&&b.height===c.height},origin:function(){return a(this.x,this.y)},corner:function(){return a(this.x+this.width,this.y+this.height)},topRight:function(){return a(this.x+this.width,this.y)},bottomLeft:function(){return a(this.x,this.y+this.height)},center:function(){return a(this.x+this.width/2,this.y+this.height/2)},intersect:function(a){var b=this.origin(),d=this.corner(),e=a.origin(),f=a.corner();if(f.x<=b.x||f.y<=b.y||e.x>=d.x||e.y>=d.y)return null;var g=Math.max(b.x,e.x),h=Math.max(b.y,e.y);return c(g,h,Math.min(d.x,f.x)-g,Math.min(d.y,f.y)-h)},union:function(a){var b=this.origin(),d=this.corner(),e=a.origin(),f=a.corner(),g=Math.min(b.x,e.x),h=Math.min(b.y,e.y),i=Math.max(d.x,f.x),j=Math.max(d.y,f.y);return c(g,h,i-g,j-h)},sideNearestToPoint:function(b){b=a(b);var c=b.x-this.x,d=this.x+this.width-b.x,e=b.y-this.Line truncated
var V,Vectorizer;V=Vectorizer=function(){function a(){var a=++x+"";return"v-"+a}function b(a){return(a||"").replace(/ /g," ")}function c(a){return a===Object(a)}function d(a){return"[object Array]"==Object.prototype.toString.call(a)}function e(a){var b='<svg xmlns="'+v.xmlns+'" xmlns:xlink="'+v.xlink+'" version="'+w+'">'+(a||"")+"</svg>",c=f(b,{async:!1});return c.documentElement}function f(a,b){b=b||{};var c;try{var d=new DOMParser;"undefined"!=typeof b.async&&(d.async=b.async),c=d.parseFromString(a,"text/xml")}catch(e){c=void 0}if(!c||c.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+a);return c}function h(a,b,c){var d,f;if(!a)return void 0;if("object"==typeof a)return new m(a);if(b=b||{},"svg"===a.toLowerCase())return new m(e());if("<"===a[0]){var g=e(a);if(g.childNodes.length>1){var h=[];for(d=0,f=g.childNodes.length;f>d;d++){var j=g.childNodes[d];h.push(new m(document.importNode(j,!0)))}return h}return new m(document.importNode(g.firstChild,!0))}a=document.createElementNS(v.xmlns,a);for(var k in b)i(a,k,b[k]);for("[object Array]"!=Object.prototype.toString.call(c)&&(c=[c]),d=0,f=c[0]&&c.length||0;f>d;d++){var l=c[d];a.appendChild(l instanceof m?l.node:l)}return new m(a)}function i(a,b,c){if(b.indexOf(":")>-1){var d=b.split(":");a.setAttributeNS(v[d[0]],d[1],c)}else"id"===b?a.id=c:a.setAttribute(b,c)}function j(a){var b,c,d;if(a){var e=/[ ,]+/,f=a.match(/translate\((.*)\)/);f&&(b=f[1].split(e));var g=a.match(/rotate\((.*)\)/);g&&(c=g[1].split(e));var h=a.match(/scale\((.*)\)/);h&&(d=h[1].split(e))}var i=d&&d[0]?parseFloat(d[0]):1;return{translate:{tx:b&&b[0]?parseInt(b[0],10):0,ty:b&&b[1]?parseInt(b[1],10):0},rotate:{angle:c&&c[0]?parseInt(c[0],10):0,cx:c&&c[1]?parseInt(c[1],10):void 0,cy:c&&c[2]?parseInt(c[2],10):void 0},scale:{sx:i,sy:d&&d[1]?parseFloat(d[1]):i}}}function k(a,b){var c=b.x*a.a+b.y*a.c+0,d=b.x*a.b+b.y*a.d+0;return{x:c,y:d}}function l(a){var b=k(a,{x:0,y:1}),c=k(a,{x:1,y:0}),d=180/Math.PI*Math.atan2(b.y,b.x)-90,e=180/Math.PI*Math.atan2(c.y,c.x);return{translateX:a.e,translateY:a.f,scaleX:Math.sqrt(a.a*a.a+a.b*a.b),scaleY:Math.sqrt(a.c*a.c+a.d*a.d),skewX:d,skewY:e,rotation:d}}function m(b){b instanceof m&&(b=b.node),this.node=b,this.node.id||(this.node.id=a())}function n(a){a=h(a);var b=["M",a.attr("x1"),a.attr("y1"),"L",a.attr("x2"),a.attr("y2")].join(" ");return b}function o(a){a=h(a);for(var b,c=a.node.points,d=[],e=0;e<c.length;e++)b=c[e],d.push(0===e?"M":"L",b.x,b.y);return d.push("Z"),d.join(" ")}function p(a){a=h(a);for(var b,c=a.node.points,d=[],e=0;e<c.length;e++)b=c[e],d.push(0===e?"M":"L",b.x,b.y);return d.join(" ")}function q(a){a=h(a);var b=parseFloat(a.attr("cx"))||0,c=parseFloat(a.attr("cy"))||0,d=parseFloat(a.attr("r")),e=d*y,f=["M",b,c-d,"C",b+e,c-d,b+d,c-e,b+d,c,"C",b+d,c+e,b+e,c+d,b,c+d,"C",b-e,c+d,b-d,c+e,b-d,c,"C",b-d,c-e,b-e,c-d,b,c-d,"Z"].join(" ");return f}function r(a){a=h(a);var b=parseFloat(a.attr("cx"))||0,c=parseFloat(a.attr("cy"))||0,d=parseFloat(a.attr("rx")),e=parseFloat(a.attr("ry"))||d,f=d*y,g=e*y,i=["M",b,c-e,"C",b+f,c-e,b+d,c-g,b+d,c,"C",b+d,c+g,b+f,c+e,b,c+e,"C",b-f,c+e,b-d,c+g,b-d,c,"C",b-d,c-g,b-f,c-e,b,c-e,"Z"].join(" ");return i}function s(a){a=h(a);var b,c=parseFloat(a.attr("x"))||0,d=parseFloat(a.attr("y"))||0,e=parseFloat(a.attr("width"))||0,f=parseFloat(a.attr("height"))||0,i=parseFloat(a.attr("rx"))||0,j=parseFloat(a.attr("ry"))||0,k=g.rect(c,d,e,f);if(i||j){var l=c+e,m=d+f;b=["M",c+i,d,"L",l-i,d,"Q",l,d,l,d+j,"L",l,d+f-j,"Q",l,m,l-i,m,"L",c+i,m,"Q",c,m,c,m-i,"L",c,d+j,"Q",c,d,c+i,d,"Z"].join(" ")}else b=["M",k.origin().x,k.origin().y,"H",k.corner().x,"V",k.corner().y,"H",k.origin().x,"V",k.origin().y,"Z"].join(" ");return b}function t(a){var b=a.rx||a["top-rx"]||0,c=a.rx||a["bottom-rx"]||0,d=a.ry||a["top-ry"]||0,e=a.ry||a["bottom-ry"]||0;return["M",a.x,a.y+d,"v",a.height-d-e,"a",c,e,0,0,0,c,e,"h",a.width-2*c,"a",c,e,0,0,0,c,-e,"v",-(a.height-e-d),"a",b,d,0,0,0,-b,-d,"h",-(a.width-2*b),"a",b,d,0,0,0,-b,d].join(" ")}var u="object"==typeof window&&!(!window.SVGAngle&&!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"));if(!u)return function(){};var v={xmlns:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"},w="1.1",x=0;m.prototype={getTransformToElement:function(a){return a.getScreenCTM().inverse().multiply(this.node.getScreenCTM())},translate:function(a,b,c){c=c||{},b=b||0;var d=this.attr("transform")||"",e=j(d);if("undefined"==typeof a)return e.translate;d=d.replace(/translate\([^\)]*\)/g,"").trim();var f=c.absolute?a:e.translate.tx+a,g=c.absolute?b:e.translate.ty+b,h="translate("+f+","+g+")";return this.attr("transform",(h+" "+d).trim()),this},rotate:function(a,b,c,d){d=d||{};var e=this.attr("transform")||"",f=j(e);if("undefined"==typeof a)return f.rotate;e=e.replace(/rotate\([^\)]*\)/g,"").trim(),a%=360;var g=d.absolute?a:f.rotate.angle+a,h=void 0!==b&&void 0!==c?","+b+","+c:"",i="rotate("+g+h+")";return this.attr("transform",(e+" "+i).trim()),this},scaleLine truncated
var joint={version:"0.9.6",dia:{},ui:{},layout:{},shapes:{},format:{},connectors:{},routers:{},mvc:{views:{}},setTheme:function(a,b){b=b||{},_.invoke(joint.mvc.views,"setTheme",a,b),joint.mvc.View.prototype.options.theme=a},util:{hashCode:function(a){var b=0;if(0==a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b},getByPath:function(a,b,c){c=c||"/";for(var d,e=b.split(c);e.length;){if(d=e.shift(),!(Object(a)===a&&d in a))return void 0;a=a[d]}return a},setByPath:function(a,b,c,d){d=d||"/";var e=b.split(d),f=a,g=0;if(b.indexOf(d)>-1){for(var h=e.length;h-1>g;g++)f=f[e[g]]||(f[e[g]]={});f[e[h-1]]=c}else a[b]=c;return a},unsetByPath:function(a,b,c){c=c||"/";var d=b.lastIndexOf(c);if(d>-1){var e=joint.util.getByPath(a,b.substr(0,d),c);e&&delete e[b.slice(d+1)]}else delete a[b];return a},flattenObject:function(a,b,c){b=b||"/";var d={};for(var e in a)if(a.hasOwnProperty(e)){var f="object"==typeof a[e];if(f&&c&&c(a[e])&&(f=!1),f){var g=this.flattenObject(a[e],b,c);for(var h in g)g.hasOwnProperty(h)&&(d[e+b+h]=g[h])}else d[e]=a[e]}return d},uuid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})},guid:function(a){return this.guid.id=this.guid.id||1,a.id=void 0===a.id?"j_"+this.guid.id++:a.id,a.id},mixin:function(){for(var a=arguments[0],b=1,c=arguments.length;c>b;b++){var d=arguments[b];(Object(d)===d||_.isFunction(d)||null!==d&&void 0!==d)&&_.each(d,function(b,c){return this.mixin.deep&&Object(b)===b?(a[c]||(a[c]=_.isArray(b)?[]:{}),void this.mixin(a[c],b)):void(a[c]!==b&&(this.mixin.supplement&&a.hasOwnProperty(c)||(a[c]=b)))},this)}return a},supplement:function(){this.mixin.supplement=!0;var a=this.mixin.apply(this,arguments);return this.mixin.supplement=!1,a},deepMixin:function(){this.mixin.deep=!0;var a=this.mixin.apply(this,arguments);return this.mixin.deep=!1,a},deepSupplement:function(){this.mixin.deep=this.mixin.supplement=!0;var a=this.mixin.apply(this,arguments);return this.mixin.deep=this.mixin.supplement=!1,a},normalizeEvent:function(a){var b=a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0];if(b){for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return a},nextFrame:function(){var a;if("undefined"!=typeof window&&(a=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame),!a){var b=0;a=function(a){var c=(new Date).getTime(),d=Math.max(0,16-(c-b)),e=setTimeout(function(){a(c+d)},d);return b=c+d,e}}return function(b,c){return a(c?_.bind(b,c):b)}}(),cancelFrame:function(){var a,b="undefined"!=typeof window;return b&&(a=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.msCancelAnimationFrame||window.msCancelRequestAnimationFrame||window.oCancelAnimationFrame||window.oCancelRequestAnimationFrame||window.mozCancelAnimationFrame||window.mozCancelRequestAnimationFrame),a=a||clearTimeout,b?_.bind(a,window):a}(),shapePerimeterConnectionPoint:function(a,b,c,d){var e,f;if(!c){var h=b.$(".scalable")[0],i=b.$(".rotatable")[0];h&&h.firstChild?c=h.firstChild:i&&i.firstChild&&(c=i.firstChild)}return c?(f=V(c).findIntersection(d,a.paper.viewport),f||(e=g.rect(V(c).bbox(!1,a.paper.viewport)))):(e=b.model.getBBox(),f=e.intersectionWithLineFromCenterToPoint(d)),f||e.center()},breakText:function(a,b,c,d){d=d||{};var e=b.width,f=b.height,g=d.svgDocument||V("svg").node,h=V("<text><tspan></tspan></text>").attr(c||{}).node,i=h.firstChild,j=document.createTextNode("");i.appendChild(j),g.appendChild(h),d.svgDocument||document.body.appendChild(g);for(var k,l=a.split(" "),m=[],n=[],o=0,p=0,q=l.length;q>o;o++){var r=l[o];if(j.data=n[p]?n[p]+" "+r:r,i.getComputedTextLength()<=e)n[p]=j.data,k&&(m[p++]=!0,k=0);else{if(!n[p]||k){var s=!!k;if(k=r.length-1,s||!k){if(!k){if(!n[p]){n=[];break}l.splice(o,2,r+l[o+1]),q--,m[p++]=!0,o--;continue}l[o]=r.substring(0,k),l[o+1]=r.substring(k)+l[o+1]}else l.splice(o,1,r.substring(0,k),r.substring(k)),q++,p&&!m[p-1]&&p--;o--;continue}p++,o--}if("undefined"!=typeof f){var t=t||1.25*h.getBBox().height;if(t*n.length>f){n.splice(Math.floor(f/t));break}}}return d.svgDocument?g.removeChild(h):document.body.removeChild(g),n.join("\n")},imageToDataUri:function(a,b){if(!a||"data:"===a.substr(0,"data:".length))return setTimeout(function(){b(null,a)},0);var c=document.createElement("canvas"),d=document.createElement("img");d.onload=function(){var e=c.getContext("2d");c.width=d.width,c.height=d.height,e.drawImage(d,0,0);try{var f=(a.split(".").pop()||"png","jpeg"),g=c.toDataURL(f)}catch(h){if(/\.svg$/.test(a)){var i=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");i.open("GET",a,!1),i.send(null);var j=i.responseText;return b(null,"data:image/svg+xml,"+encodeURIComponent(j))}console.error(d.src,"fails to convert",h)}b(null,g)},d.ononerror=funcLine truncated
this.el=this.$el[0],this.vel=V(this.el)},findBySelector:function(a){var b="."===a?this.$el:this.$el.find(a);return b},notify:function(a){if(this.paper){var b=Array.prototype.slice.call(arguments,1);this.trigger.apply(this,[a].concat(b)),this.paper.trigger.apply(this.paper,[a,this].concat(b))}},getStrokeBBox:function(a){var b=!!a;a=a||this.el;var c,d=V(a).bbox(!1,this.paper.viewport);return c=b?V(a).attr("stroke-width"):this.model.attr("rect/stroke-width")||this.model.attr("circle/stroke-width")||this.model.attr("ellipse/stroke-width")||this.model.attr("path/stroke-width"),c=parseFloat(c)||0,g.rect(d).moveAndExpand({x:-c/2,y:-c/2,width:c,height:c})},getBBox:function(){return g.rect(this.vel.bbox())},highlight:function(a,b){return a=a?this.$(a)[0]||this.el:this.el,b=b||{},b.partial=a!=this.el,this.notify("cell:highlight",a,b),this},unhighlight:function(a,b){return a=a?this.$(a)[0]||this.el:this.el,b=b||{},b.partial=a!=this.el,this.notify("cell:unhighlight",a,b),this},findMagnet:function(a){var b=this.$(a);if(0===b.length||b[0]===this.el){var c=this.model.get("attrs")||{};return c["."]&&c["."].magnet===!1?void 0:this.el}return b.attr("magnet")?b[0]:this.findMagnet(b.parent())},applyFilter:function(a,b){var c=_.isString(a)?this.findBySelector(a):$(a),d=b.name+this.paper.svg.id+joint.util.hashCode(JSON.stringify(b));if(!this.paper.svg.getElementById(d)){var e=joint.util.filter[b.name]&&joint.util.filter[b.name](b.args||{});if(!e)throw new Error("Non-existing filter "+b.name);var f=V(e);f.attr({filterUnits:"objectBoundingBox",x:-1,y:-1,width:3,height:3}),b.attrs&&f.attr(b.attrs),f.node.id=d,V(this.paper.svg).defs().append(f)}c.each(function(){V(this).attr("filter","url(#"+d+")")})},applyGradient:function(a,b,c){var d=_.isString(a)?this.findBySelector(a):$(a),e=c.type+this.paper.svg.id+joint.util.hashCode(JSON.stringify(c));if(!this.paper.svg.getElementById(e)){var f=["<"+c.type+">",_.map(c.stops,function(a){return'<stop offset="'+a.offset+'" stop-color="'+a.color+'" stop-opacity="'+(_.isFinite(a.opacity)?a.opacity:1)+'" />'}).join(""),"</"+c.type+">"].join(""),g=V(f);c.attrs&&g.attr(c.attrs),g.node.id=e,V(this.paper.svg).defs().append(g)}d.each(function(){V(this).attr(b,"url(#"+e+")")})},getSelector:function(a,b){if(a===this.el)return b;var c=V(a).index()+1,d=a.tagName+":nth-child("+c+")";return b&&(d+=" > "+b),this.getSelector(a.parentNode,d)},pointerdblclick:function(a,b,c){this.notify("cell:pointerdblclick",a,b,c)},pointerclick:function(a,b,c){this.notify("cell:pointerclick",a,b,c)},pointerdown:function(a,b,c){this.model.collection&&(this.model.trigger("batch:start",{batchName:"pointer"}),this._collection=this.model.collection),this.notify("cell:pointerdown",a,b,c)},pointermove:function(a,b,c){this.notify("cell:pointermove",a,b,c)},pointerup:function(a,b,c){this.notify("cell:pointerup",a,b,c),this._collection&&(this._collection.trigger("batch:stop",{batchName:"pointer"}),delete this._collection)},mouseover:function(a){this.notify("cell:mouseover",a)},mouseout:function(a){this.notify("cell:mouseout",a)},contextmenu:function(a,b,c){this.notify("cell:contextmenu",a,b,c)},onSetTheme:function(a,b){a&&this.vel.removeClass(this.themeClassNamePrefix+a),this.vel.addClass(this.themeClassNamePrefix+b)}}),joint.dia.Element=joint.dia.Cell.extend({defaults:{position:{x:0,y:0},size:{width:1,height:1},angle:0},position:function(a,b,c){var d=_.isNumber(b);if(c=(d?c:a)||{},c.parentRelative){if(!this.graph)throw new Error("Element must be part of a graph.");var e=this.graph.getCell(this.get("parent")),f=e&&!e.isLink()?e.get("position"):{x:0,y:0}}if(d)return c.parentRelative&&(a+=f.x,b+=f.y),this.set("position",{x:a,y:b},c);var h=g.point(this.get("position"));return c.parentRelative?h.difference(f):h},translate:function(a,b,c){if(a=a||0,b=b||0,0===a&&0===b)return this;c=c||{},c.translateBy=c.translateBy||this.id;var d=this.get("position")||{x:0,y:0};if(c.restrictedArea&&c.translateBy===this.id){var e=this.getBBox({deep:!0}),f=c.restrictedArea,g=d.x-e.x,h=d.y-e.y,i=Math.max(f.x+g,Math.min(f.x+f.width+g-e.width,d.x+a)),j=Math.max(f.y+h,Math.min(f.y+f.height+h-e.height,d.y+b));a=i-d.x,b=j-d.y}var k={x:d.x+a,y:d.y+b};return c.tx=a,c.ty=b,c.transition?(_.isObject(c.transition)||(c.transition={}),this.transition("position",k,_.extend({},c.transition,{valueFunction:joint.util.interpolate.object}))):(this.set("position",k,c),_.invoke(this.getEmbeddedCells(),"translate",a,b,c)),this},resize:function(a,b,c){if(c=c||{},this.trigger("batch:start",_.extend({},c,{element:this,batchName:"resize"})),c.direction){var d=this.get("size");switch(c.direction){case"left":case"right":b=d.height;break;case"top":case"bottom":a=d.width}var e=g.normalizeAngle(this.get("angle")||0),f={"top-right":0,right:0,"top-left":1,top:1,"bottom-left":2,left:2,"bottom-right":3,bottom:3}[c.direction];c.absolute&&(f+=Math.floor((e+45)/90),f%=4);var h=this.getBBox(),i=h[["bottomLeft","corner","topRight","origin"][f]](),j=g.point(i).rotate(h.center(),-e),k=Math.sqrt(a*a+b*Line truncated
function b(a,b){return c[f]=a,c[f+1]=a.el===b?void 0:b,c}var c=[];c[4]=a,c[5]=this;var d,e=0,f=0;"source"===a?(e=2,d="target"):(f=2,d="source");var g=this.model.get(d);return g.id&&(c[e]=this.paper.findViewByModel(g.id),c[e+1]=g.selector&&c[e].el.querySelector(g.selector)),b},_markAvailableMagnets:function(){var a=this.paper.model.getElements(),b=this.paper.options.validateConnection;_.chain(a).map(this.paper.findViewByModel,this.paper).each(function(a){var c="false"!==a.el.getAttribute("magnet")&&b.apply(this.paper,this._validateConnectionArgs(a,null)),d=_.filter(a.el.querySelectorAll("[magnet]"),function(c){return b.apply(this.paper,this._validateConnectionArgs(a,c))},this);c&&V(a.el).addClass("available-magnet"),_.each(d,function(a){V(a).addClass("available-magnet")}),(c||d.length)&&V(a.el).addClass("available-cell")},this).value()},_unmarkAvailableMagnets:function(){_.each(this.paper.el.querySelectorAll(".available-cell, .available-magnet"),function(a){V(a).removeClass("available-magnet").removeClass("available-cell")})},startArrowheadMove:function(a,b){b=_.defaults(b||{},{whenNotAllowed:"revert"}),this._action="arrowhead-move",this._whenNotAllowed=b.whenNotAllowed,this._arrowhead=a,this._initialEnd=_.clone(this.model.get(a))||{x:0,y:0},this._validateConnectionArgs=this._createValidateConnectionArgs(this._arrowhead),this._beforeArrowheadMove()},can:function(a){var b=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;return b===!1?!1:_.isObject(b)&&b[a]===!1?!1:!0},pointerdown:function(a,b,c){if(joint.dia.CellView.prototype.pointerdown.apply(this,arguments),this.notify("link:pointerdown",a,b,c),this._dx=b,this._dy=c,null==a.target.getAttribute("magnet")){var d=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;if(d!==!1){var e,f=a.target.getAttribute("class"),g=a.target.parentNode.getAttribute("class");switch("label"===g?(f=g,e=a.target.parentNode):e=a.target,f){case"marker-vertex":this.can("vertexMove")&&(this._action="vertex-move",this._vertexIdx=a.target.getAttribute("idx"));break;case"marker-vertex-remove":case"marker-vertex-remove-area":this.can("vertexRemove")&&this.removeVertex(a.target.getAttribute("idx"));break;case"marker-arrowhead":this.can("arrowheadMove")&&this.startArrowheadMove(a.target.getAttribute("end"));break;case"label":this.can("labelMove")&&(this._action="label-move",this._labelIdx=parseInt(V(e).attr("label-idx"),10),this._samples=this._V.connection.sample(1),this._linkLength=this._V.connection.node.getTotalLength());break;default:var h=a.target.parentNode.getAttribute("event");h?"remove"===h?this.model.remove():this.paper.trigger(h,a,this,b,c):this.can("vertexAdd")&&(this._vertexIdx=this.addVertex({x:b,y:c}),this._action="vertex-move")}}}},pointermove:function(a,b,c){switch(this._action){case"vertex-move":var d=_.clone(this.model.get("vertices"));d[this._vertexIdx]={x:b,y:c},this.model.set("vertices",d,{ui:!0});break;case"label-move":for(var e,f,h,i,j={x:b,y:c},k=(this.model.get("labels")[this._labelIdx],this._samples),l=1/0,m=0,n=k.length;n>m;m++)h=k[m],i=g.line(h,j).squaredLength(),l>i&&(l=i,e=h,f=m);var o=k[f-1],p=k[f+1],q=(g.point(e).distance(j),0);o&&p?q=g.line(o,p).pointOffset(j):o?q=g.line(o,e).pointOffset(j):p&&(q=g.line(e,p).pointOffset(j)),this.model.label(this._labelIdx,{position:{distance:e.distance/this._linkLength,offset:q}});break;case"arrowhead-move":if(this.paper.options.snapLinks){var r=this.paper.options.snapLinks.radius||50,s=this.paper.findViewsInArea({x:b-r,y:c-r,width:2*r,height:2*r});this._closestView&&this._closestView.unhighlight(this._closestEnd.selector,{connecting:!0,snapping:!0}),this._closestView=this._closestEnd=null;var t,u=Number.MAX_VALUE,v=g.point(b,c);_.each(s,function(a){"false"!==a.el.getAttribute("magnet")&&(t=a.model.getBBox().center().distance(v),r>t&&u>t&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,null))&&(u=t,this._closestView=a,this._closestEnd={id:a.model.id})),a.$("[magnet]").each(_.bind(function(b,c){var d=V(c).bbox(!1,this.paper.viewport);t=v.distance({x:d.x+d.width/2,y:d.y+d.height/2}),r>t&&u>t&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,c))&&(u=t,this._closestView=a,this._closestEnd={id:a.model.id,selector:a.getSelector(c),port:c.getAttribute("port")})},this))},this),this._closestView&&this._closestView.highlight(this._closestEnd.selector,{connecting:!0,snapping:!0}),this.model.set(this._arrowhead,this._closestEnd||{x:b,y:c},{ui:!0})}else{var w="mousemove"===a.type?a.target:document.elementFromPoint(a.clientX,a.clientY);this._targetEvent!==w&&(this._magnetUnderPointer&&this._viewUnderPointer.unhighlight(this._magnetUnderPointer,{connecting:!0}),this._viewUnderPointer=this.paper.findView(w),this._viewUnderPointer?(this._magnetUnderPointer=this._viewUnderPointer.findMagnet(w),this._magnetUnderPointer&&this.paper.options.validateConnecLine truncated
offsetY:-a,cost:a}]},penalties:function(){return{0:0,45:this.step/2,90:this.step/2}},fallbackRoute:function(b,c,d){var e=(d.previousDirAngle||0)%180===0?a.point(b.x,c.y):a.point(c.x,b.y);return[e,c]},draggingRoute:null};return c.prototype.build=function(a,c){var d=this.options,e=b.chain(d.excludeEnds).map(c.get,c).pluck("id").map(a.getCell,a).value(),f=[],g=a.getCell(c.get("source").id);g&&(f=b.union(f,b.map(g.getAncestors(),"id")));var h=a.getCell(c.get("target").id);h&&(f=b.union(f,b.map(h.getAncestors(),"id")));var i=this.mapGridSize;return b.chain(a.getElements()).difference(e).reject(function(a){return b.contains(d.excludeTypes,a.get("type"))||b.contains(f,a.id)}).invoke("getBBox").invoke("moveAndExpand",d.paddingBox).foldl(function(a,b){for(var c=b.origin().snapToGrid(i),d=b.corner().snapToGrid(i),e=c.x;e<=d.x;e+=i)for(var f=c.y;f<=d.y;f+=i){var g=e+"@"+f;a[g]=a[g]||[],a[g].push(b)}return a},this.map).value(),this},c.prototype.isPointAccessible=function(a){var c=a.clone().snapToGrid(this.mapGridSize).toString();return b.every(this.map[c],function(b){return!b.containsPoint(a)})},d.prototype.add=function(a,c){this.hash[a]?this.items.splice(this.items.indexOf(a),1):this.hash[a]=this.OPEN,this.values[a]=c;var d=b.sortedIndex(this.items,a,function(a){return this.values[a]},this);this.items.splice(d,0,a)},d.prototype.remove=function(a){this.hash[a]=this.CLOSE},d.prototype.isOpen=function(a){return this.hash[a]===this.OPEN},d.prototype.isClose=function(a){return this.hash[a]===this.CLOSE},d.prototype.isEmpty=function(){return 0===this.items.length},d.prototype.pop=function(){var a=this.items.shift();return this.remove(a),a},function(a,c,d){return l.call(d,a,b.extend({},m,c))}}(g,_),joint.routers.metro=function(){if(!_.isFunction(joint.routers.manhattan))throw"Metro requires the manhattan router.";var a={diagonalCost:null,directions:function(){var a=this.step,b=this.diagonalCost||Math.ceil(Math.sqrt(a*a<<1));return[{offsetX:a,offsetY:0,cost:a},{offsetX:a,offsetY:a,cost:b},{offsetX:0,offsetY:a,cost:a},{offsetX:-a,offsetY:a,cost:b},{offsetX:-a,offsetY:0,cost:a},{offsetX:-a,offsetY:-a,cost:b},{offsetX:0,offsetY:-a,cost:a},{offsetX:a,offsetY:-a,cost:b}]},maxAllowedDirectionChange:45,fallbackRoute:function(a,b,c){var d=a.theta(b),e={x:b.x,y:a.y},f={x:a.x,y:b.y};if(d%180>90){var h=e;e=f,f=h}var i=45>d%90?e:f,j=g.line(a,i),k=90*Math.ceil(d/90),l=g.point.fromPolar(j.squaredLength(),g.toRad(k+135),i),m=g.line(b,l),n=j.intersection(m);return n?[n.round(),b]:[b]}};return function(b,c,d){return joint.routers.manhattan(b,_.extend({},a,c),d)}}(),joint.routers.oneSide=function(a,b,c){var d,e,f,g=b.side||"bottom",h=b.padding||40,i=c.sourceBBox,j=c.targetBBox,k=i.center(),l=j.center();switch(g){case"bottom":f=1,d="y",e="height";break;case"top":f=-1,d="y",e="height";break;case"left":f=-1,d="x",e="width";break;case"right":f=1,d="x",e="width";break;default:throw new Error("Router: invalid side")}return k[d]+=f*(i[e]/2+h),l[d]+=f*(j[e]/2+h),f*(k[d]-l[d])>0?l[d]=k[d]:k[d]=l[d],[k].concat(a,l)},joint.connectors.normal=function(a,b,c){var d=["M",a.x,a.y];return _.each(c,function(a){d.push(a.x,a.y)}),d.push(b.x,b.y),d.join(" ")},joint.connectors.rounded=function(a,b,c,d){d=d||{};var e,f,h,i,j,k,l=d.radius||10,m=["M",a.x,a.y];return _.each(c,function(d,n){j=c[n-1]||a,k=c[n+1]||b,h=i||g.point(d).distance(j)/2,i=g.point(d).distance(k)/2,e=g.point(d).move(j,-Math.min(l,h)).round(),f=g.point(d).move(k,-Math.min(l,i)).round(),m.push(e.x,e.y,"S",d.x,d.y,f.x,f.y,"L")}),m.push(b.x,b.y),m.join(" ")},joint.connectors.smooth=function(a,b,c){var d;if(c.length)d=g.bezier.curveThroughPoints([a].concat(c).concat([b]));else{var e=a.x<b.x?b.x-(b.x-a.x)/2:a.x-(a.x-b.x)/2;d=["M",a.x,a.y,"C",e,a.y,e,b.y,b.x,b.y]}return d.join(" ")},joint.connectors.jumpover=function(a,b){function c(a,c,d){var e=[].concat(a,d,c);return e.reduce(function(a,c,d){var f=e[d+1];return null!=f&&(a[d]=b.line(c,f)),a},[])}function d(a){var b=a.paper._jumpOverUpdateList;null==b&&(b=a.paper._jumpOverUpdateList=[],a.paper.on("cell:pointerup",e),a.paper.model.on("reset",function(){b=[]})),b.indexOf(a)<0&&(b.push(a),a.listenToOnce(a.model,"change:connector remove",function(){b.splice(b.indexOf(a),1)}))}function e(){for(var a=this._jumpOverUpdateList,b=0;b<a.length;b++)a[b].update()}function f(b,c){return a(c).map(function(a){return b.intersection(a)}).compact().value()}function g(a,c){return b.line(a,c).squaredLength()}function h(a,c,d){return c.reduce(function(e,f,g){if(f.skip===!0)return e;var h=e.pop()||a,i=b.point(f).move(h.start,-d),j=b.point(f).move(h.start,+d),k=c[g+1];if(null!=k){var m=j.distance(k);d>=m&&(j=k.move(h.start,m),k.skip=!0)}else{var n=i.distance(h.end);if(2*d+l>n)return e.push(h),e}var o=j.distance(h.start);if(2*d+l>o)return e.push(h),e;var p=b.line(i,j);return p.isJump=!0,e.push(b.line(h.start,i),p,b.line(j,h.end)),e},[])}function i(c,d,e){var f=["M",c[0].start.x,c[0].start.y],g=a(c).map(function(a){if(a.isJump){var c;if("arc"===e){c=a.start.difference(a.end);vaLine truncated
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.erd={},joint.shapes.erd.Entity=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><polygon class="outer"/><polygon class="inner"/></g><text/></g>',defaults:joint.util.deepSupplement({type:"erd.Entity",size:{width:150,height:60},attrs:{".outer":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"100,0 100,60 0,60 0,0"},".inner":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"95,5 95,55 5,55 5,5",display:"none"},text:{text:"Entity","font-family":"Arial","font-size":14,ref:".outer","ref-x":.5,"ref-y":.5,"x-alignment":"middle","y-alignment":"middle"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.erd.WeakEntity=joint.shapes.erd.Entity.extend({defaults:joint.util.deepSupplement({type:"erd.WeakEntity",attrs:{".inner":{display:"auto"},text:{text:"Weak Entity"}}},joint.shapes.erd.Entity.prototype.defaults)}),joint.shapes.erd.Relationship=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><polygon class="outer"/><polygon class="inner"/></g><text/></g>',defaults:joint.util.deepSupplement({type:"erd.Relationship",size:{width:80,height:80},attrs:{".outer":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,0 80,40 40,80 0,40"},".inner":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,5 75,40 40,75 5,40",display:"none"},text:{text:"Relationship","font-family":"Arial","font-size":12,ref:".","ref-x":.5,"ref-y":.5,"x-alignment":"middle","y-alignment":"middle"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.erd.IdentifyingRelationship=joint.shapes.erd.Relationship.extend({defaults:joint.util.deepSupplement({type:"erd.IdentifyingRelationship",attrs:{".inner":{display:"auto"},text:{text:"Identifying"}}},joint.shapes.erd.Relationship.prototype.defaults)}),joint.shapes.erd.Attribute=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><ellipse class="outer"/><ellipse class="inner"/></g><text/></g>',defaults:joint.util.deepSupplement({type:"erd.Attribute",size:{width:100,height:50},attrs:{ellipse:{transform:"translate(50, 25)"},".outer":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:50,ry:25,fill:"#E67E22"},".inner":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:45,ry:20,fill:"#E67E22",display:"none"},text:{"font-family":"Arial","font-size":14,ref:".","ref-x":.5,"ref-y":.5,"x-alignment":"middle","y-alignment":"middle"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.erd.Multivalued=joint.shapes.erd.Attribute.extend({defaults:joint.util.deepSupplement({type:"erd.Multivalued",attrs:{".inner":{display:"block"},text:{text:"multivalued"}}},joint.shapes.erd.Attribute.prototype.defaults)}),joint.shapes.erd.Derived=joint.shapes.erd.Attribute.extend({defaults:joint.util.deepSupplement({type:"erd.Derived",attrs:{".outer":{"stroke-dasharray":"3,5"},text:{text:"derived"}}},joint.shapes.erd.Attribute.prototype.defaults)}),joint.shapes.erd.Key=joint.shapes.erd.Attribute.extend({defaults:joint.util.deepSupplement({type:"erd.Key",attrs:{ellipse:{"stroke-width":4},text:{text:"key","font-weight":"800","text-decoration":"underline"}}},joint.shapes.erd.Attribute.prototype.defaults)}),joint.shapes.erd.Normal=joint.shapes.erd.Attribute.extend({defaults:joint.util.deepSupplement({type:"erd.Normal",attrs:{text:{text:"Normal"}}},joint.shapes.erd.Attribute.prototype.defaults)}),joint.shapes.erd.ISA=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><polygon/></g><text/></g>',defaults:joint.util.deepSupplement({type:"erd.ISA",size:{width:100,height:50},attrs:{polygon:{points:"0,0 50,50 100,0",fill:"#F1C40F",stroke:"#F39C12","stroke-width":2},text:{text:"ISA","font-size":18,ref:"polygon","ref-x":.5,"ref-y":.3,"x-alignment":"middle","y-alignment":"middle"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.erd.Line=joint.dia.Link.extend({defaults:{type:"erd.Line"},cardinality:function(a){this.set("labels",[{position:-20,attrs:{text:{dy:-8,text:a}}}])}});
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.fsa={},joint.shapes.fsa.State=joint.shapes.basic.Circle.extend({defaults:joint.util.deepSupplement({type:"fsa.State",attrs:{circle:{"stroke-width":3},text:{"font-weight":"800"}}},joint.shapes.basic.Circle.prototype.defaults)}),joint.shapes.fsa.StartState=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><circle/></g></g>',defaults:joint.util.deepSupplement({type:"fsa.StartState",size:{width:20,height:20},attrs:{circle:{transform:"translate(10, 10)",r:10,fill:"#000000"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.fsa.EndState=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><circle class="outer"/><circle class="inner"/></g></g>',defaults:joint.util.deepSupplement({type:"fsa.EndState",size:{width:20,height:20},attrs:{".outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#000000"},".inner":{transform:"translate(10, 10)",r:6,fill:"#000000"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.fsa.Arrow=joint.dia.Link.extend({defaults:joint.util.deepSupplement({type:"fsa.Arrow",attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}},smooth:!0},joint.dia.Link.prototype.defaults)});
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.org={},joint.shapes.org.Member=joint.dia.Element.extend({markup:'<g class="rotatable"><g class="scalable"><rect class="card"/><image/></g><text class="rank"/><text class="name"/></g>',defaults:joint.util.deepSupplement({type:"org.Member",size:{width:180,height:70},attrs:{rect:{width:170,height:60},".card":{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"pointer-events":"visiblePainted",rx:10,ry:10},image:{width:48,height:48,ref:".card","ref-x":10,"ref-y":5},".rank":{"text-decoration":"underline",ref:".card","ref-x":.9,"ref-y":.2,"font-family":"Courier New","font-size":14,"text-anchor":"end"},".name":{"font-weight":"800",ref:".card","ref-x":.9,"ref-y":.6,"font-family":"Courier New","font-size":14,"text-anchor":"end"}}},joint.dia.Element.prototype.defaults)}),joint.shapes.org.Arrow=joint.dia.Link.extend({defaults:{type:"org.Arrow",source:{selector:".card"},target:{selector:".card"},attrs:{".connection":{stroke:"#585858","stroke-width":3}},z:-1}});
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.chess={},joint.shapes.chess.KingWhite=joint.shapes.basic.Generic.extend({markup:'<g class="rotatable"><g class="scalable"><g style="fill:none; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"><path d="M 22.5,11.63 L 22.5,6" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> <path d="M 20,8 L 25,8" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> <path d="M 22.5,25 C 22.5,25 27,17.5 25.5,14.5 C 25.5,14.5 24.5,12 22.5,12 C 20.5,12 19.5,14.5 19.5,14.5 C 18,17.5 22.5,25 22.5,25" style="fill:#ffffff; stroke:#000000; stroke-linecap:butt; stroke-linejoin:miter;" /> <path d="M 11.5,37 C 17,40.5 27,40.5 32.5,37 L 32.5,30 C 32.5,30 41.5,25.5 38.5,19.5 C 34.5,13 25,16 22.5,23.5 L 22.5,27 L 22.5,23.5 C 19,16 9.5,13 6.5,19.5 C 3.5,25.5 11.5,29.5 11.5,29.5 L 11.5,37 z " style="fill:#ffffff; stroke:#000000;" /> <path d="M 11.5,30 C 17,27 27,27 32.5,30" style="fill:none; stroke:#000000;" /> <path d="M 11.5,33.5 C 17,30.5 27,30.5 32.5,33.5" style="fill:none; stroke:#000000;" /> <path d="M 11.5,37 C 17,34 27,34 32.5,37" style="fill:none; stroke:#000000;" /> </g></g></g>',defaults:joint.util.deepSupplement({type:"chess.KingWhite",size:{width:42,height:38}},joint.shapes.basic.Generic.prototype.defaults)}),joint.shapes.chess.KingBlack=joint.shapes.basic.Generic.extend({markup:'<g class="rotatable"><g class="scalable"><g style="fill:none; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 22.5,11.63 L 22.5,6" style="fill:none; stroke:#000000; stroke-linejoin:miter;" id="path6570" /> <path d="M 22.5,25 C 22.5,25 27,17.5 25.5,14.5 C 25.5,14.5 24.5,12 22.5,12 C 20.5,12 19.5,14.5 19.5,14.5 C 18,17.5 22.5,25 22.5,25" style="fill:#000000;fill-opacity:1; stroke-linecap:butt; stroke-linejoin:miter;" /> <path d="M 11.5,37 C 17,40.5 27,40.5 32.5,37 L 32.5,30 C 32.5,30 41.5,25.5 38.5,19.5 C 34.5,13 25,16 22.5,23.5 L 22.5,27 L 22.5,23.5 C 19,16 9.5,13 6.5,19.5 C 3.5,25.5 11.5,29.5 11.5,29.5 L 11.5,37 z " style="fill:#000000; stroke:#000000;" /> <path d="M 20,8 L 25,8" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> <path d="M 32,29.5 C 32,29.5 40.5,25.5 38.03,19.85 C 34.15,14 25,18 22.5,24.5 L 22.51,26.6 L 22.5,24.5 C 20,18 9.906,14 6.997,19.85 C 4.5,25.5 11.85,28.85 11.85,28.85" style="fill:none; stroke:#ffffff;" /> <path d="M 11.5,30 C 17,27 27,27 32.5,30 M 11.5,33.5 C 17,30.5 27,30.5 32.5,33.5 M 11.5,37 C 17,34 27,34 32.5,37" style="fill:none; stroke:#ffffff;" /> </g></g></g>',defaults:joint.util.deepSupplement({type:"chess.KingBlack",size:{width:42,height:38}},joint.shapes.basic.Generic.prototype.defaults)}),joint.shapes.chess.QueenWhite=joint.shapes.basic.Generic.extend({markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:#ffffff; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(-1,-1)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(15.5,-5.5)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(32,-1)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(7,-4.5)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(24,-4)" /> <path d="M 9,26 C 17.5,24.5 30,24.5 36,26 L 38,14 L 31,25 L 31,11 L 25.5,24.5 L 22.5,9.5 L 19.5,24.5 L 14,10.5 L 14,25 L 7,14 L 9,26 z " style="stroke-linecap:butt;" /> <path d="M 9,26 C 9,28 10.5,28 11.5,30 C 12.5,31.5 12.5,31 12,33.5 C 10.5,34.5 10.5,36 10.5,36 C 9,37.5 11,38.5 11,38.5 C 17.5,39.5 27.5,39.5 34,38.5 C 34,38.5 35.5,37.5 34,36 C 34,36 34.5,34.5 33,33.5 C 32.5,31 32.5,31.5 33.5,30 C 34.5,28 36,28 36,26 C 27.5,24.5 17.5,24.5 9,26 z " style="stroke-linecap:butt;" /> <path d="M 11.5,30 C 15,29 30,29 33.5,30" style="fill:none;" /> <path d="M 12,33.5 C 18,32.5 27,32.5 33,33.5" style="fill:none;" /> </g></g></g>',defaults:joint.util.deepSupplement({type:"chess.QueenWhite",size:{width:42,height:38}},joint.shapes.basic.Generic.prototype.defaults)}),joint.shapes.chess.QueenBlack=joint.shapes.basic.Generic.extend({markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:#000000; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <gLine truncated
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.pn={},joint.shapes.pn.Place=joint.shapes.basic.Generic.extend({markup:'<g class="rotatable"><g class="scalable"><circle class="root"/><g class="tokens" /></g><text class="label"/></g>',defaults:joint.util.deepSupplement({type:"pn.Place",size:{width:50,height:50},attrs:{".root":{r:25,fill:"#ffffff",stroke:"#000000",transform:"translate(25, 25)"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:".root",fill:"#000000","font-size":12},".tokens > circle":{fill:"#000000",r:5},".tokens.one > circle":{transform:"translate(25, 25)"},".tokens.two > circle:nth-child(1)":{transform:"translate(19, 25)"},".tokens.two > circle:nth-child(2)":{transform:"translate(31, 25)"},".tokens.three > circle:nth-child(1)":{transform:"translate(18, 29)"},".tokens.three > circle:nth-child(2)":{transform:"translate(25, 19)"},".tokens.three > circle:nth-child(3)":{transform:"translate(32, 29)"},".tokens.alot > text":{transform:"translate(25, 18)","text-anchor":"middle",fill:"#000000"}}},joint.shapes.basic.Generic.prototype.defaults)}),joint.shapes.pn.PlaceView=joint.dia.ElementView.extend({initialize:function(){joint.dia.ElementView.prototype.initialize.apply(this,arguments),this.model.on("change:tokens",function(){this.renderTokens(),this.update()},this)},render:function(){joint.dia.ElementView.prototype.render.apply(this,arguments),this.renderTokens(),this.update()},renderTokens:function(){var a=this.$(".tokens").empty();a[0].className.baseVal="tokens";var b=this.model.get("tokens");if(b)switch(b){case 1:a[0].className.baseVal+=" one",a.append(V("<circle/>").node);break;case 2:a[0].className.baseVal+=" two",a.append(V("<circle/>").node,V("<circle/>").node);break;case 3:a[0].className.baseVal+=" three",a.append(V("<circle/>").node,V("<circle/>").node,V("<circle/>").node);break;default:a[0].className.baseVal+=" alot",a.append(V("<text/>").text(b+"").node)}}}),joint.shapes.pn.Transition=joint.shapes.basic.Generic.extend({markup:'<g class="rotatable"><g class="scalable"><rect class="root"/></g></g><text class="label"/>',defaults:joint.util.deepSupplement({type:"pn.Transition",size:{width:12,height:50},attrs:{rect:{width:12,height:50,fill:"#000000",stroke:"#000000"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:"rect",fill:"#000000","font-size":12}}},joint.shapes.basic.Generic.prototype.defaults)}),joint.shapes.pn.Link=joint.dia.Link.extend({defaults:joint.util.deepSupplement({type:"pn.Link",attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}}},joint.dia.Link.prototype.defaults)});
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.devs={},joint.shapes.devs.Model=joint.shapes.basic.Generic.extend(_.extend({},joint.shapes.basic.PortsModelInterface,{markup:'<g class="rotatable"><g class="scalable"><rect class="body"/></g><text class="label"/><g class="inPorts"/><g class="outPorts"/></g>',portMarkup:'<g class="port port<%= id %>"><circle class="port-body"/><text class="port-label"/></g>',defaults:joint.util.deepSupplement({type:"devs.Model",size:{width:1,height:1},inPorts:[],outPorts:[],attrs:{".":{magnet:!1},".body":{width:150,height:250,stroke:"#000000"},".port-body":{r:10,magnet:!0,stroke:"#000000"},text:{"pointer-events":"none"},".label":{text:"Model","ref-x":.5,"ref-y":10,ref:".body","text-anchor":"middle",fill:"#000000"},".inPorts .port-label":{x:-15,dy:4,"text-anchor":"end",fill:"#000000"},".outPorts .port-label":{x:15,dy:4,fill:"#000000"}}},joint.shapes.basic.Generic.prototype.defaults),getPortAttrs:function(a,b,c,d,e){var f={},g="port"+b,h=d+">."+g,i=h+">.port-label",j=h+">.port-body";return f[i]={text:a},f[j]={port:{id:a||_.uniqueId(e),type:e}},f[h]={ref:".body","ref-y":(b+.5)*(1/c)},".outPorts"===d&&(f[h]["ref-dx"]=0),f}})),joint.shapes.devs.Atomic=joint.shapes.devs.Model.extend({defaults:joint.util.deepSupplement({type:"devs.Atomic",size:{width:80,height:80},attrs:{".body":{fill:"salmon"},".label":{text:"Atomic"},".inPorts .port-body":{fill:"PaleGreen"},".outPorts .port-body":{fill:"Tomato"}}},joint.shapes.devs.Model.prototype.defaults)}),joint.shapes.devs.Coupled=joint.shapes.devs.Model.extend({defaults:joint.util.deepSupplement({type:"devs.Coupled",size:{width:200,height:300},attrs:{".body":{fill:"seaGreen"},".label":{text:"Coupled"},".inPorts .port-body":{fill:"PaleGreen"},".outPorts .port-body":{fill:"Tomato"}}},joint.shapes.devs.Model.prototype.defaults)}),joint.shapes.devs.Link=joint.dia.Link.extend({defaults:{type:"devs.Link",attrs:{".connection":{"stroke-width":2}}}}),joint.shapes.devs.ModelView=joint.dia.ElementView.extend(joint.shapes.basic.PortsViewInterface),joint.shapes.devs.AtomicView=joint.shapes.devs.ModelView,joint.shapes.devs.CoupledView=joint.shapes.devs.ModelView;
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.uml={},joint.shapes.uml.Class=joint.shapes.basic.Generic.extend({markup:['<g class="rotatable">','<g class="scalable">','<rect class="uml-class-name-rect"/><rect class="uml-class-attrs-rect"/><rect class="uml-class-methods-rect"/>',"</g>",'<text class="uml-class-name-text"/><text class="uml-class-attrs-text"/><text class="uml-class-methods-text"/>',"</g>"].join(""),defaults:joint.util.deepSupplement({type:"uml.Class",attrs:{rect:{width:200},".uml-class-name-rect":{stroke:"black","stroke-width":2,fill:"#3498db"},".uml-class-attrs-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-methods-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-name-text":{ref:".uml-class-name-rect","ref-y":.5,"ref-x":.5,"text-anchor":"middle","y-alignment":"middle","font-weight":"bold",fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-attrs-text":{ref:".uml-class-attrs-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-methods-text":{ref:".uml-class-methods-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"}},name:[],attributes:[],methods:[]},joint.shapes.basic.Generic.prototype.defaults),initialize:function(){this.on("change:name change:attributes change:methods",function(){this.updateRectangles(),this.trigger("uml-update")},this),this.updateRectangles(),joint.shapes.basic.Generic.prototype.initialize.apply(this,arguments)},getClassName:function(){return this.get("name")},updateRectangles:function(){var a=this.get("attrs"),b=[{type:"name",text:this.getClassName()},{type:"attrs",text:this.get("attributes")},{type:"methods",text:this.get("methods")}],c=0;_.each(b,function(b){var d=_.isArray(b.text)?b.text:[b.text],e=20*d.length+20;a[".uml-class-"+b.type+"-text"].text=d.join("\n"),a[".uml-class-"+b.type+"-rect"].height=e,a[".uml-class-"+b.type+"-rect"].transform="translate(0,"+c+")",c+=e})}}),joint.shapes.uml.ClassView=joint.dia.ElementView.extend({initialize:function(){joint.dia.ElementView.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"uml-update",function(){this.update(),this.resize()})}}),joint.shapes.uml.Abstract=joint.shapes.uml.Class.extend({defaults:joint.util.deepSupplement({type:"uml.Abstract",attrs:{".uml-class-name-rect":{fill:"#e74c3c"},".uml-class-attrs-rect":{fill:"#c0392b"},".uml-class-methods-rect":{fill:"#c0392b"}}},joint.shapes.uml.Class.prototype.defaults),getClassName:function(){return["<<Abstract>>",this.get("name")]}}),joint.shapes.uml.AbstractView=joint.shapes.uml.ClassView,joint.shapes.uml.Interface=joint.shapes.uml.Class.extend({defaults:joint.util.deepSupplement({type:"uml.Interface",attrs:{".uml-class-name-rect":{fill:"#f1c40f"},".uml-class-attrs-rect":{fill:"#f39c12"},".uml-class-methods-rect":{fill:"#f39c12"}}},joint.shapes.uml.Class.prototype.defaults),getClassName:function(){return["<<Interface>>",this.get("name")]}}),joint.shapes.uml.InterfaceView=joint.shapes.uml.ClassView,joint.shapes.uml.Generalization=joint.dia.Link.extend({defaults:{type:"uml.Generalization",attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"}}}}),joint.shapes.uml.Implementation=joint.dia.Link.extend({defaults:{type:"uml.Implementation",attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"},".connection":{"stroke-dasharray":"3,3"}}}}),joint.shapes.uml.Aggregation=joint.dia.Link.extend({defaults:{type:"uml.Aggregation",attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"white"}}}}),joint.shapes.uml.Composition=joint.dia.Link.extend({defaults:{type:"uml.Composition",attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"black"}}}}),joint.shapes.uml.Association=joint.dia.Link.extend({defaults:{type:"uml.Association"}}),joint.shapes.uml.State=joint.shapes.basic.Generic.extend({markup:['<g class="rotatable">','<g class="scalable">','<rect class="uml-state-body"/>',"</g>",'<path class="uml-state-separator"/>','<text class="uml-state-name"/>','<text class="uml-state-events"/>',"</g>"].join(""),defaults:joint.util.deepSupplement({type:"uml.State",attrs:{".uml-state-body":{width:200,height:200,rx:10,ry:10,fill:"#ecf0f1",stroke:"#bdc3c7","stroke-width":3},".uml-state-separator":{stroke:"#bdc3c7","stroke-width":2},".uml-state-name":{ref:".uml-state-body","ref-x":.5,"ref-y":5,"text-anchor":"middle",fill:"#000000","font-family":"Courier New","font-size":14},".uml-state-events":{ref:".uml-state-separator","ref-x":5,"ref-y":5,fill:"#000000","font-family":"Courier New","font-size":14}},name:"State",events:[]},joint.shapes.basic.Generic.prototype.defaults),initialize:function(){this.on({"change:name":this.updateName,"change:events":this.updateEvents,"change:size":this.updatePath},this),this.updateName(),this.updateEvents(),this.updatePath(),joint.shapes.basic.Generic.prototype.initialize.apply(this,arguments)},updateName:function(){this.attr(".uml-state-name/text",this.get("name"))},updateEvents:function(){this.attr(".uml-Line truncated
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
joint.shapes.logic={},joint.shapes.logic.Gate=joint.shapes.basic.Generic.extend({defaults:joint.util.deepSupplement({type:"logic.Gate",size:{width:80,height:40},attrs:{".":{magnet:!1},".body":{width:100,height:50},circle:{r:7,stroke:"black",fill:"transparent","stroke-width":2}}},joint.shapes.basic.Generic.prototype.defaults),operation:function(){return!0}}),joint.shapes.logic.IO=joint.shapes.logic.Gate.extend({markup:'<g class="rotatable"><g class="scalable"><rect class="body"/></g><path class="wire"/><circle/><text/></g>',defaults:joint.util.deepSupplement({type:"logic.IO",size:{width:60,height:30},attrs:{".body":{fill:"white",stroke:"black","stroke-width":2},".wire":{ref:".body","ref-y":.5,stroke:"black"},text:{fill:"black",ref:".body","ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle","font-weight":"bold","font-variant":"small-caps","text-transform":"capitalize","font-size":"14px"}}},joint.shapes.logic.Gate.prototype.defaults)}),joint.shapes.logic.Input=joint.shapes.logic.IO.extend({defaults:joint.util.deepSupplement({type:"logic.Input",attrs:{".wire":{"ref-dx":0,d:"M 0 0 L 23 0"},circle:{ref:".body","ref-dx":30,"ref-y":.5,magnet:!0,"class":"output",port:"out"},text:{text:"input"}}},joint.shapes.logic.IO.prototype.defaults)}),joint.shapes.logic.Output=joint.shapes.logic.IO.extend({defaults:joint.util.deepSupplement({type:"logic.Output",attrs:{".wire":{"ref-x":0,d:"M 0 0 L -23 0"},circle:{ref:".body","ref-x":-30,"ref-y":.5,magnet:"passive","class":"input",port:"in"},text:{text:"output"}}},joint.shapes.logic.IO.prototype.defaults)}),joint.shapes.logic.Gate11=joint.shapes.logic.Gate.extend({markup:'<g class="rotatable"><g class="scalable"><image class="body"/></g><circle class="input"/><circle class="output"/></g>',defaults:joint.util.deepSupplement({type:"logic.Gate11",attrs:{".input":{ref:".body","ref-x":-2,"ref-y":.5,magnet:"passive",port:"in"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},joint.shapes.logic.Gate.prototype.defaults)}),joint.shapes.logic.Gate21=joint.shapes.logic.Gate.extend({markup:'<g class="rotatable"><g class="scalable"><image class="body"/></g><circle class="input input1"/><circle class="input input2"/><circle class="output"/></g>',defaults:joint.util.deepSupplement({type:"logic.Gate21",attrs:{".input1":{ref:".body","ref-x":-2,"ref-y":.3,magnet:"passive",port:"in1"},".input2":{ref:".body","ref-x":-2,"ref-y":.7,magnet:"passive",port:"in2"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},joint.shapes.logic.Gate.prototype.defaults)}),joint.shapes.logic.Repeater=joint.shapes.logic.Gate11.extend({defaults:joint.util.deepSupplement({type:"logic.Repeater",attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwLine truncated
}}},joint.shapes.logic.Gate21.prototype.defaults),operation:function(a,b){return!(a||b)}}),joint.shapes.logic.Nand=joint.shapes.logic.Gate21.extend({defaults:joint.util.deepSupplement({type:"logic.Nand",attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5BTkQgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTYiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjI4MzMwNyIKICAgICBpbmtzY2FwZTpjeT0iMTYuNDQyODQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSLine truncated
/*! JointJS v0.9.6 - JavaScript diagramming library 2015-12-19
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
if("object"==typeof exports)var graphlib=require("graphlib"),dagre=require("dagre");graphlib=graphlib||"undefined"!=typeof window&&window.graphlib,dagre=dagre||"undefined"!=typeof window&&window.dagre,joint.dia.Graph.prototype.toGraphLib=function(a){a=a||{};var b=_.pick(a,"directed","compound","multigraph"),c=new graphlib.Graph(b),d=a.setNodeLabel||_.noop,e=a.setEdgeLabel||_.noop,f=a.setEdgeName||_.noop;return this.get("cells").each(function(a){if(a.isLink()){var b=a.get("source"),g=a.get("target");if(!b.id||!g.id)return;c.setEdge(b.id,g.id,e(a),f(a))}else c.setNode(a.id,d(a)),c.isCompound()&&a.has("parent")&&c.setParent(a.id,a.get("parent"))}),c},joint.dia.Graph.prototype.fromGraphLib=function(a,b){b=b||{};var c=b.importNode||_.noop,d=b.importEdge||_.noop;a.nodes().forEach(function(d){c.call(this,d,a,this,b)},this),a.edges().forEach(function(c){d.call(this,c,a,this,b)},this)},joint.layout.DirectedGraph={layout:function(a,b){b=_.defaults(b||{},{resizeClusters:!0,clusterPadding:10});var c=a.toGraphLib({directed:!0,multigraph:!0,compound:!0,setNodeLabel:function(a){return{width:a.get("size").width,height:a.get("size").height,rank:a.get("rank")}},setEdgeLabel:function(a){return{minLen:a.get("minLen")||1}},setEdgeName:function(a){return a.id}}),d={};return b.rankDir&&(d.rankdir=b.rankDir),b.nodeSep&&(d.nodesep=b.nodeSep),b.edgeSep&&(d.edgesep=b.edgeSep),b.rankSep&&(d.ranksep=b.rankSep),b.marginX&&(d.marginx=b.marginX),b.marginY&&(d.marginy=b.marginY),c.setGraph(d),dagre.layout(c,{debugTiming:!!b.debugTiming}),a.fromGraphLib(c,{importNode:function(a,c){var d=this.getCell(a),e=c.node(a);b.setPosition?b.setPosition(d,e):d.set("position",{x:e.x-e.width/2,y:e.y-e.height/2})},importEdge:function(a,c){var d=this.getCell(a.name),e=c.edge(a);b.setLinkVertices&&(b.setVertices?b.setVertices(d,e.points):d.set("vertices",e.points))}}),b.resizeClusters&&_.chain(c.nodes()).filter(function(a){return c.children(a).length>0}).map(a.getCell,a).sortBy(function(a){return-a.getAncestors().length}).invoke("fitEmbeds",{padding:b.clusterPadding}).value(),c.graph()}};
joint.g = g;
joint.V = joint.Vectorizer = V;
return joint;
}));
+6
View File
@@ -0,0 +1,6 @@
/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery-2.0.3.min.map
*/
(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(tLine truncated
};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:functLine truncated
},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Xt,Ut,Yt=x.now(),Vt=/\?/,Gt=/#.*$/,Jt=/([?&])_=[^&]*/,Qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Kt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Zt=/^(?:GET|HEAD)$/,en=/^\/\//,tn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,nn=x.fn.load,rn={},on={},sn="*/".concat("*");try{Ut=i.href}catch(an){Ut=o.createElement("a"),Ut.href="",Ut=Ut.href}Xt=tn.exec(Ut.toLowerCase())||[];function un(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function ln(e,t,n,r){var i={},o=e===on;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function cn(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if("string"!=typeof e&&nn)return nn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&"object"==typeof t&&(i="POST"),s.length>0&&x.ajax({url:e,type:i,dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?x("<div>").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ut,type:"GET",isLocal:Kt.test(Xt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?cn(cn(e,x.ajaxSettings),t):cn(x.ajaxSettings,e)},ajaxPrefilter:un(rn),ajaxTransport:un(on),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),p=c.context||c,f=c.context&&(p.nodeType||p.jquery)?x(p):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Qt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Ut)+"").replace(Gt,"").replace(en,Xt[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=tn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===Xt[1]&&a[2]===Xt[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(Xt[3]||("http:"===Xt[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),ln(rn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Zt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Vt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Jt.test(r)?r.replace(Jt,"$1_="+Yt++):r+(Vt.test(r)?"&":"?")+"_="+Yt++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+sn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(p,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=ln(on,c,t,T)){T.readyState=1,u&&f.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>Line truncated
+6 -5
View File
@@ -12,17 +12,18 @@
<script type='text/javascript' src='build/app.js'></script>
<script type='text/javascript' src='js/backbone-min.js'></script>
<script type='text/javascript' src='js/underscore-min.js'></script>
<script type='text/javascript' src='js/joint.dia.graph.js'></script>
<script type='text/javascript' src='js/joint.min.js'></script>
<link href="build/enyo.css" rel="stylesheet">
<link href="build/app.css" rel="stylesheet">
<script type='text/javascript' src='js/joint.dia.graph.js'></script>
<!-- my code -->
<script type='text/javascript' src="index.js"> </script>
<!-- CSS -->
<link href="index.css" rel="stylesheet">
<link href="disasm.css" rel="stylesheet">
<link href="joint.min.css" rel="stylesheet" />
<link href="../p/lib/css/layout-default-latest.css" rel="stylesheet" />
<link href="build/app.css" rel="stylesheet">
<link href="build/enyo.css" rel="stylesheet">
<link href="build/joint.min.css" rel="stylesheet" />
<link href="../p/lib/css/main.css" rel="stylesheet" />
<link href="../p/lib/css/layout-default-latest.css" rel="stylesheet" />
</head>
<body></body>
</html>
+29 -1
View File
@@ -1 +1,29 @@
enyo.kind({name:"About",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"r2wui"},{kind:"Image",src:"icon.png"},{tag:"h3",style:"color:#707070;margin-bottom:50px",content:"the web frontend for radare2"},{tag:"h2",style:"color:#a0a0a0",content:"author: pancake 2013-2014"},{tag:"h2",style:"color:#a0a0a0",content:"version: ???",name:"vertext"},{tag:"h2",style:"color:#a0a0a0",content:"revision: ???",name:"revtext"}]}],create:function(){this.inherited(arguments),function(a){setTimeout(function(){r2.cmd("?V",function(b){var c=b.split(" ")[0],d=b.split(" ")[2];a.$.vertext.setContent("version: "+c),a.$.revtext.setContent("revision: "+d)})},1e3)}(this)}});
enyo.kind ({
name: "About",
kind: "Scroller",
style: "background-color:#303030",
components: [
{tag: "center", components: [
{tag: "h1", style: "color:#f0f0f0", content: "r2wui"},
{kind: "Image", src: "icon.png" },
{tag: "h3", style: "color:#707070;margin-bottom:50px",
content: "the web frontend for radare2"},
{tag: "h2", style: "color:#a0a0a0", content: "author: pancake 2013-2014"},
{tag: "h2", style: "color:#a0a0a0", content: "version: ???", name: "vertext"},
{tag: "h2", style: "color:#a0a0a0", content: "revision: ???", name: "revtext"}
]}
],
create: function() {
this.inherited (arguments);
(function(me) {
setTimeout (function() {
r2.cmd ("?V", function (v) {
var version = v.split (" ")[0];
var revision = v.split (" ")[2];
me.$.vertext.setContent ("version: "+version);
me.$.revtext.setContent ("revision: "+revision);
});
}, 1000);
})(this);
}
});
+65 -1
View File
@@ -1 +1,65 @@
enyo.kind({name:"Assembler",kind:"Scroller",classes:"r2panel",style:"background-color:#c0c0c0;",components:[{tag:"form",style:"margin-top:8px;margin-left:8px",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:!0,components:[{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"opcode",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"",style:"width:60%",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"opcode"}]},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"bytes",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"",style:"width:120px",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"bytes"}]},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",content:"offset",classes:"r2ui-input",style:"width:64px;font-weight:bold"},{kind:"Input",value:"entry0",style:"width:120px",onkeydown:"assembleOpcode",attributes:{autocapitalize:"off"},name:"offset"}]}]}]},{tag:"form",style:"margin-top:8px;margin-left:8px",attributes:{action:"javascript:#"},components:[{tag:"h2",content:"Calculator"},{kind:"onyx.InputDecorator",classes:"r2ui-input",components:[{tag:"font",name:"value",content:"0",classes:"r2ui-input",style:"width:200px;font-weight:bold"},{kind:"Input",name:"ivalue",value:"0",style:"width:300",onkeydown:"calculateValue",attributes:{autocapitalize:"off"}}]}]}],calculateValue:function(a,b){if(13===b.keyCode){var c=this.$.value,d=a.getValue();c.setContent("..."),r2.cmd("?v "+d,function(a){c.setContent(a)})}},assembleOpcode:function(a,b){if(13===b.keyCode){var c=a.getValue(),d=this.$.offset.getValue();switch(a.name){case"opcode":var e=this.$.bytes;r2.assemble(d,c,function(a){e.setValue(a)});break;case"bytes":var f=this.$.opcode;r2.disassemble(d,c,function(a){f.setValue(a)});break;case"offset":}}}});
enyo.kind ({
name: "Assembler",
kind: "Scroller",
classes: "r2panel",
style: "background-color:#c0c0c0;",
components: [
{tag: "form", style:"margin-top:8px;margin-left:8px", attributes: {action:"javascript:#"}, components: [
{kind: "FittableRows", fit: true, components: [
{kind: "onyx.InputDecorator", classes: "r2ui-input", components: [
{tag: "font", content: "opcode", classes:"r2ui-input", style: "width:64px;font-weight:bold"},
{kind: "Input", value: '', style:"width:60%", onkeydown: "assembleOpcode", attributes: {autocapitalize:"off"}, name: "opcode"},
]},
{kind: "onyx.InputDecorator", classes: "r2ui-input", components: [
{tag: "font", content: "bytes", classes:"r2ui-input", style: "width:64px;font-weight:bold"},
{kind: "Input", value: '', style:"width:120px", onkeydown: "assembleOpcode", attributes: {autocapitalize:"off"}, name: "bytes"},
]},
{kind: "onyx.InputDecorator", classes: "r2ui-input", components: [
{tag: "font", content: "offset", classes: "r2ui-input", style:"width:64px;font-weight:bold"},
{kind: "Input", value: 'entry0', style:"width:120px", onkeydown: "assembleOpcode", attributes: {autocapitalize:"off"}, name: "offset"}
]},
]}
]},
{tag: "form", style:"margin-top:8px;margin-left:8px", attributes: {action:"javascript:#"}, components: [
{tag: "h2", content: "Calculator" },
{kind: "onyx.InputDecorator", classes: "r2ui-input", components: [
{tag: "font", name: "value", content: "0", classes: "r2ui-input", style:"width:200px;font-weight:bold"},
{kind: "Input", name: "ivalue", value: '0', style:"width:300",
onkeydown: "calculateValue", attributes: {autocapitalize:"off"} }
]}
]}
],
calculateValue: function (inSender, inEvent) {
if (inEvent.keyCode === 13) {
var v = this.$.value;
var val = inSender.getValue ();
v.setContent ("...");
r2.cmd ('?v '+val, function (x) {
v.setContent (x);
});
}
},
assembleOpcode: function (inSender, inEvent) {
if (inEvent.keyCode === 13) {
var arg = inSender.getValue ();
var off = this.$.offset.getValue ();
switch (inSender.name) {
case 'opcode':
var hex = this.$.bytes;
r2.assemble (off, arg, function (bytes) {
hex.setValue (bytes); // ? s/\n/;/g
});
break;
case 'bytes':
var op = this.$.opcode;
//r2.cmd ("pi 1@b:"+arg, function (x) {
r2.disassemble (off, arg, function (x) {
op.setValue (x); // ? s/\n/;/g
});
break;
case 'offset':
break;
}
}
}
});
+2 -1
View File
@@ -1 +1,2 @@
!function(a){var b="object"==typeof self&&self.self==self&&self||"object"==typeof global&&global.global==global&&global;if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(c,d,e){b.Backbone=a(b,e,c,d)});else if("undefined"!=typeof exports){var c,d=require("underscore");try{c=require("jquery")}catch(e){}a(b,exports,d,c)}else b.Backbone=a(b,{},b._,b.jQuery||b.Zepto||b.ender||b.$)}(function(a,b,c,d){var e=a.Backbone,f=[].slice;b.VERSION="1.2.1",b.$=d,b.noConflict=function(){return a.Backbone=e,this},b.emulateHTTP=!1,b.emulateJSON=!1;var g=function(a,b,d){switch(a){case 1:return function(){return c[b](this[d])};case 2:return function(a){return c[b](this[d],a)};case 3:return function(a,e){return c[b](this[d],a,e)};case 4:return function(a,e,f){return c[b](this[d],a,e,f)};default:return function(){var a=f.call(arguments);return a.unshift(this[d]),c[b].apply(c,a)}}},h=function(a,b,d){c.each(b,function(b,e){c[e]&&(a.prototype[e]=g(b,e,d))})},i=b.Events={},j=/\s+/,k=function(a,b,d,e,f){var g,h=0;if(d&&"object"==typeof d){void 0!==e&&"context"in f&&void 0===f.context&&(f.context=e);for(g=c.keys(d);h<g.length;h++)b=a(b,g[h],d[g[h]],f)}else if(d&&j.test(d))for(g=d.split(j);h<g.length;h++)b=a(b,g[h],e,f);else b=a(b,d,e,f);return b};i.on=function(a,b,c){return l(this,a,b,c)};var l=function(a,b,c,d,e){if(a._events=k(m,a._events||{},b,c,{context:d,ctx:a,listening:e}),e){var f=a._listeners||(a._listeners={});f[e.id]=e}return a};i.listenTo=function(a,b,d){if(!a)return this;var e=a._listenId||(a._listenId=c.uniqueId("l")),f=this._listeningTo||(this._listeningTo={}),g=f[e];if(!g){var h=this._listenId||(this._listenId=c.uniqueId("l"));g=f[e]={obj:a,objId:e,id:h,listeningTo:f,count:0}}return l(a,b,d,this,g),this};var m=function(a,b,c,d){if(c){var e=a[b]||(a[b]=[]),f=d.context,g=d.ctx,h=d.listening;h&&h.count++,e.push({callback:c,context:f,ctx:f||g,listening:h})}return a};i.off=function(a,b,c){return this._events?(this._events=k(n,this._events,a,b,{context:c,listeners:this._listeners}),this):this},i.stopListening=function(a,b,d){var e=this._listeningTo;if(!e)return this;for(var f=a?[a._listenId]:c.keys(e),g=0;g<f.length;g++){var h=e[f[g]];if(!h)break;h.obj.off(b,d,this)}return c.isEmpty(e)&&(this._listeningTo=void 0),this};var n=function(a,b,d,e){if(a){var f,g=0,h=e.context,i=e.listeners;if(b||d||h){for(var j=b?[b]:c.keys(a);g<j.length;g++){b=j[g];var k=a[b];if(!k)break;for(var l=[],m=0;m<k.length;m++){var n=k[m];d&&d!==n.callback&&d!==n.callback._callback||h&&h!==n.context?l.push(n):(f=n.listening,f&&0===--f.count&&(delete i[f.id],delete f.listeningTo[f.objId]))}l.length?a[b]=l:delete a[b]}return c.size(a)?a:void 0}for(var o=c.keys(i);g<o.length;g++)f=i[o[g]],delete i[f.id],delete f.listeningTo[f.objId]}};i.once=function(a,b,d){var e=k(o,{},a,b,c.bind(this.off,this));return this.on(e,void 0,d)},i.listenToOnce=function(a,b,d){var e=k(o,{},b,d,c.bind(this.stopListening,this,a));return this.listenTo(a,e)};var o=function(a,b,d,e){if(d){var f=a[b]=c.once(function(){e(b,f),d.apply(this,arguments)});f._callback=d}return a};i.trigger=function(a){if(!this._events)return this;for(var b=Math.max(0,arguments.length-1),c=Array(b),d=0;b>d;d++)c[d]=arguments[d+1];return k(p,this._events,a,void 0,c),this};var p=function(a,b,c,d){if(a){var e=a[b],f=a.all;e&&f&&(f=f.slice()),e&&q(e,d),f&&q(f,[b].concat(d))}return a},q=function(a,b){var c,d=-1,e=a.length,f=b[0],g=b[1],h=b[2];switch(b.length){case 0:for(;++d<e;)(c=a[d]).callback.call(c.ctx);return;case 1:for(;++d<e;)(c=a[d]).callback.call(c.ctx,f);return;case 2:for(;++d<e;)(c=a[d]).callback.call(c.ctx,f,g);return;case 3:for(;++d<e;)(c=a[d]).callback.call(c.ctx,f,g,h);return;default:for(;++d<e;)(c=a[d]).callback.apply(c.ctx,b);return}};i.bind=i.on,i.unbind=i.off,c.extend(b,i);var r=b.Model=function(a,b){var d=a||{};b||(b={}),this.cid=c.uniqueId(this.cidPrefix),this.attributes={},b.collection&&(this.collection=b.collection),b.parse&&(d=this.parse(d,b)||{}),d=c.defaults({},d,c.result(this,"defaults")),this.set(d,b),this.changed={},this.initialize.apply(this,arguments)};c.extend(r.prototype,i,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",initialize:function(){},toJSON:function(a){return c.clone(this.attributes)},sync:function(){return b.sync.apply(this,arguments)},get:function(a){return this.attributes[a]},escape:function(a){return c.escape(this.get(a))},has:function(a){return null!=this.get(a)},matches:function(a){return!!c.iteratee(a,this)(this.attributes)},set:function(a,b,d){if(null==a)return this;var e;if("object"==typeof a?(e=a,d=b):(e={})[a]=b,d||(d={}),!this._validate(e,d))return!1;var f=d.unset,g=d.silent,h=[],i=this._changing;this._changing=!0,i||(this._previousAttributes=c.clone(this.attributes),this.changed={});var j=this.attributes,k=this.changed,l=this._previousAttributes;this.idAttribute in e&&(this.id=e[this.idAttribute]);for(var m in e)b=e[m],c.isEqual(j[m],b)||h.push(m),c.isEqual(l[m],b)?delete k[m]:k[m]=b,f?delete j[m]:j[m]=Line truncated
(function(t){var e=typeof self=="object"&&self.self==self&&self||typeof global=="object"&&global.global==global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,s){e.Backbone=t(e,s,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore"),r;try{r=require("jquery")}catch(s){}t(e,exports,i,r)}else{e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}})(function(t,e,i,r){var s=t.Backbone;var n=[].slice;e.VERSION="1.2.1";e.$=r;e.noConflict=function(){t.Backbone=s;return this};e.emulateHTTP=false;e.emulateJSON=false;var a=function(t,e,r){switch(t){case 1:return function(){return i[e](this[r])};case 2:return function(t){return i[e](this[r],t)};case 3:return function(t,s){return i[e](this[r],t,s)};case 4:return function(t,s,n){return i[e](this[r],t,s,n)};default:return function(){var t=n.call(arguments);t.unshift(this[r]);return i[e].apply(i,t)}}};var o=function(t,e,r){i.each(e,function(e,s){if(i[s])t.prototype[s]=a(e,s,r)})};var h=e.Events={};var u=/\s+/;var l=function(t,e,r,s,n){var a=0,o;if(r&&typeof r==="object"){if(s!==void 0&&"context"in n&&n.context===void 0)n.context=s;for(o=i.keys(r);a<o.length;a++){e=t(e,o[a],r[o[a]],n)}}else if(r&&u.test(r)){for(o=r.split(u);a<o.length;a++){e=t(e,o[a],s,n)}}else{e=t(e,r,s,n)}return e};h.on=function(t,e,i){return c(this,t,e,i)};var c=function(t,e,i,r,s){t._events=l(f,t._events||{},e,i,{context:r,ctx:t,listening:s});if(s){var n=t._listeners||(t._listeners={});n[s.id]=s}return t};h.listenTo=function(t,e,r){if(!t)return this;var s=t._listenId||(t._listenId=i.uniqueId("l"));var n=this._listeningTo||(this._listeningTo={});var a=n[s];if(!a){var o=this._listenId||(this._listenId=i.uniqueId("l"));a=n[s]={obj:t,objId:s,id:o,listeningTo:n,count:0}}c(t,e,r,this,a);return this};var f=function(t,e,i,r){if(i){var s=t[e]||(t[e]=[]);var n=r.context,a=r.ctx,o=r.listening;if(o)o.count++;s.push({callback:i,context:n,ctx:n||a,listening:o})}return t};h.off=function(t,e,i){if(!this._events)return this;this._events=l(d,this._events,t,e,{context:i,listeners:this._listeners});return this};h.stopListening=function(t,e,r){var s=this._listeningTo;if(!s)return this;var n=t?[t._listenId]:i.keys(s);for(var a=0;a<n.length;a++){var o=s[n[a]];if(!o)break;o.obj.off(e,r,this)}if(i.isEmpty(s))this._listeningTo=void 0;return this};var d=function(t,e,r,s){if(!t)return;var n=0,a;var o=s.context,h=s.listeners;if(!e&&!r&&!o){var u=i.keys(h);for(;n<u.length;n++){a=h[u[n]];delete h[a.id];delete a.listeningTo[a.objId]}return}var l=e?[e]:i.keys(t);for(;n<l.length;n++){e=l[n];var c=t[e];if(!c)break;var f=[];for(var d=0;d<c.length;d++){var v=c[d];if(r&&r!==v.callback&&r!==v.callback._callback||o&&o!==v.context){f.push(v)}else{a=v.listening;if(a&&--a.count===0){delete h[a.id];delete a.listeningTo[a.objId]}}}if(f.length){t[e]=f}else{delete t[e]}}if(i.size(t))return t};h.once=function(t,e,r){var s=l(v,{},t,e,i.bind(this.off,this));return this.on(s,void 0,r)};h.listenToOnce=function(t,e,r){var s=l(v,{},e,r,i.bind(this.stopListening,this,t));return this.listenTo(t,s)};var v=function(t,e,r,s){if(r){var n=t[e]=i.once(function(){s(e,n);r.apply(this,arguments)});n._callback=r}return t};h.trigger=function(t){if(!this._events)return this;var e=Math.max(0,arguments.length-1);var i=Array(e);for(var r=0;r<e;r++)i[r]=arguments[r+1];l(g,this._events,t,void 0,i);return this};var g=function(t,e,i,r){if(t){var s=t[e];var n=t.all;if(s&&n)n=n.slice();if(s)p(s,r);if(n)p(n,[e].concat(r))}return t};var p=function(t,e){var i,r=-1,s=t.length,n=e[0],a=e[1],o=e[2];switch(e.length){case 0:while(++r<s)(i=t[r]).callback.call(i.ctx);return;case 1:while(++r<s)(i=t[r]).callback.call(i.ctx,n);return;case 2:while(++r<s)(i=t[r]).callback.call(i.ctx,n,a);return;case 3:while(++r<s)(i=t[r]).callback.call(i.ctx,n,a,o);return;default:while(++r<s)(i=t[r]).callback.apply(i.ctx,e);return}};h.bind=h.on;h.unbind=h.off;i.extend(e,h);var m=e.Model=function(t,e){var r=t||{};e||(e={});this.cid=i.uniqueId(this.cidPrefix);this.attributes={};if(e.collection)this.collection=e.collection;if(e.parse)r=this.parse(r,e)||{};r=i.defaults({},r,i.result(this,"defaults"));this.set(r,e);this.changed={};this.initialize.apply(this,arguments)};i.extend(m.prototype,h,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",initialize:function(){},toJSON:function(t){return i.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return i.escape(this.get(t))},has:function(t){return this.get(t)!=null},matches:function(t){return!!i.iteratee(t,this)(this.attributes)},set:function(t,e,r){if(t==null)return this;var s;if(typeof t==="object"){s=t;r=e}else{(s={})[t]=e}r||(r={});if(!this._validate(s,r))return false;var n=r.unset;var a=r.silent;var o=[];var h=this._changing;this._changing=true;if(!h){this._previousAttributes=i.clone(this.attributes);this.changed={}}var u=this.attributes;var l=this.changed;var c=this._previousAttributLine truncated
//# sourceMappingURL=backbone-min.map
+17 -1
View File
@@ -1 +1,17 @@
var Config={keys:{1:"this.setIndex(0)",2:"this.setIndex(1)",3:"this.setIndex(2)"}};
var Config = {
"keys": {
"1": "this.setIndex(0)",
"2": "this.setIndex(1)",
"3": "this.setIndex(2)",
// Most of this keya are used in disassembly so it makes no sense leaving the rest. maybe moving around with numbers
//"d": "r2ui.openpage(0)",
// "a": "r2ui.openpage(1)",
//"h": "r2ui.openpage(2)",
//"g": "r2ui.openpage(3)",
//"c": "r2ui.openpage(5)",
// "s": "r2ui.openpage(8)",
// Moved to disassembled panel
//";": "r2.cmd('CC '+prompt('comment'));r2ui.seek('$$',false);",
//"C-3": "this.setIndex(2)",
}
}
+27 -1
View File
@@ -1 +1,27 @@
enyo.kind({name:"Console",kind:"Scroller",classes:"r2panel",style:"background-color:#c0c0c0;padding-left:7px",components:[{tag:"form",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:!0,classes:"fittable-sample-shadow",components:[{kind:"onyx.InputDecorator",style:"margin-top:8px;background-color:#404040;width: 90%;display:inline-block",components:[{kind:"Input",style:"width:100%;color:white",value:"",onkeydown:"runCommand",attributes:{autocapitalize:"off"},name:"input"}]},{tag:"pre",classes:"r2ui-terminal",style:"width:90%;",fit:!0,allowHtml:!0,name:"output"}]}]}],runCommand:function(a,b){if(13===b.keyCode){var c=this.$.input.getValue();this.$.input.setValue(""),function(a){r2.cmd(c,function(b){a.setContent(b)})}(this.$.output)}}});
enyo.kind ({
name: "Console",
kind: "Scroller",
classes: "r2panel",
style: "background-color:#c0c0c0;padding-left:7px",
components: [
{tag: "form", attributes: {action:"javascript:#"}, components: [
{kind: "FittableRows", fit: true, classes: "fittable-sample-shadow", components: [
{kind: "onyx.InputDecorator", style: "margin-top:8px;background-color:#404040;width: 90%;display:inline-block", components: [
{kind: "Input", style:"width:100%;color:white", value: '', onkeydown: "runCommand", attributes: {autocapitalize:"off"}, name: "input"},
]},
{tag: "pre", classes:"r2ui-terminal", style:"width:90%;", fit: true, allowHtml: true, name:"output"}
]}
]}
],
runCommand: function (inSender, inEvent) {
if (inEvent.keyCode === 13) {
var cmd = this.$.input.getValue ();
this.$.input.setValue ("");
(function (out) {
r2.cmd (cmd, function (x) {
out.setContent (x);
});
})(this.$.output);
}
}
});
+10 -1
View File
@@ -1 +1,10 @@
enyo.kind({name:"Debugger",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"TODO: Debugger"}]}]});
enyo.kind ({
name: "Debugger",
kind: "Scroller",
style: "background-color:#303030",
components: [
{tag: "center", components: [
{tag: "h1", style: "color:#f0f0f0", content: "TODO: Debugger"}
]}
]
});
+1115 -1
View File
File diff suppressed because it is too large. Load diff
+605 -1
View File
@@ -1 +1,605 @@
enyo.kind({name:"Disassembler",kind:"Scroller",tag:"div",classes:"ec_gui_background",style:"margin:0px;position: relative;",data:null,components:[{tag:"div",allowHtml:!0,name:"minimap",style:"width:200px; height:200px; position:fixed; top:0; right 0px",id:"minimap"},{tag:"div",allowHtml:!0,name:"panel",content:"<div id='main_panel' class='ui-layout-center ec_gui_background'><div id='center_panel'></div></div><div class='ui-layout-south' style='display: none;background-color:rgb(20,20,20);'><pre id='cmd_output' class='ui-layout-content'></pre><div><input id='command' type='text' value=''/></div></div>",style:"margin-right:5px;width:100%;height:100%"},{kind:enyo.Signals,onkeypress:"handleKeyPress"},{name:"menuPopup",kind:"onyx.Popup",floating:!0,onHide:"hideContextMenu",onShow:"showContextMenu",style:"padding: 0px;",style:"padding: 10px",components:[{name:"menu",kind:"onyx.MenuDecorator",onSelect:"itemSelected",components:[{content:"Show menu"},{kind:"onyx.Menu",name:"contextMenu",components:[{content:"rename",value:"rename"},{content:"comment",value:"comment"},{content:"switch view",value:"do_switchview"},{content:"random colors",value:"do_randomcolors"}]}]}]}],handlers:{ontap:"handleTap",onhold:"handleHold",ondblclick:"handleDoubleClick",onTransitionFinish:"handleTransitionFinish"},handleTransitionFinish:function(){"graph"==r2ui._dis.display&&r2ui._dis.minimap&&update_minimap()},itemSelected:function(a,b){if(b.originator.content){var c=b.originator.content;"rename"==c?this.do_rename(this.selected,b):"comment"==c?this.do_comment(this.selected_offset):"random colors"==c?do_randomcolors():"switch view"==c&&this.switch_view()}this.$.menuPopup.hide()},handleHold:function(a,b){if(this.handleTap(a,b),"string"==typeof b.target.className&&(b.target.className.indexOf(" addr ")>-1||b.target.className.indexOf(" faddr ")>-1)){var c=get_address_from_class(b.target);this.selected=b.target,this.selected_offset=c,rehighlight_iaddress(c),this.showContextMenu(b.pageY,b.pageX)}},showContextMenu:function(a,b){parseFloat(a)!=parseInt(a)||isNaN(a)||parseFloat(b)!=parseInt(b)||isNaN(b)||(this.$.menuPopup.addStyles("top:"+a+"px; left:"+b+"px;padding:0px;"),this.$.menuPopup.show(),this.$.menuPopup.children[0].children[0].hide(),this.$.menuPopup.children[0].children[1].show(),this.$.menuPopup.render())},hideContextMenu:function(a,b){},handleDoubleClick:function(a,b){b.target.className.indexOf(" addr ")>-1&&-1===b.target.className.indexOf("insaddr")&&(this.handleTap(a,b),this.goToAddress())},handleKeyPress:function(a,b){var c=b.keyCode||b.charCode||b.which||0,d=String.fromCharCode(c);if(!b.ctrlKey&&!b.metaKey&&"INPUT"!==$(b.target).prop("tagName")&&"TEXTAREA"!==$(b.target).prop("tagName")){if("?"===d&&r2ui.mp.show_popup()," "===d&&this.switch_view(),"h"===d){var e=r2ui.history_prev();void 0!==e&&null!==e&&r2ui.seek(e,!1)}if("l"===d){var e=r2ui.history_next();void 0!==e&&null!==e&&r2ui.seek(e,!1)}if("m"===d&&"graph"==r2ui._dis.display&&toggle_minimap(),"j"===d){var f=!1;if($(this.selected).hasClass("insaddr")){var g;if("flat"==this.display&&(g=$(this.selected).closest(".instructionbox").next().find(".insaddr")[0],$("#gbox .instructionbox").index($(this.selected).closest(".instructionbox")[0])>$("#gbox .instructionbox").length-10&&(f=!0)),"graph"==this.display){var g=$(this.selected).closest(".instruction").next().find(".insaddr")[0];void 0!==g&&null!==g||(g=$(this.selected).closest(".basicblock").next().find(".insaddr")[0])}var h=get_address_from_class(g);f?r2ui.seek(h,!1):(r2ui.history_push(h),this.selected=g,this.selected_offset=h),rehighlight_iaddress(h),scroll_to_address(h)}}if("k"===d){var f=!1;if($(this.selected).hasClass("insaddr")){var i;if("flat"==this.display&&(i=$(this.selected).closest(".instructionbox").prev().find(".insaddr")[0],$("#gbox .instructionbox").index($(this.selected).closest(".instructionbox")[0])<10&&(f=!0)),"graph"==this.display){var i=$(this.selected).closest(".instruction").prev().find(".insaddr")[0];void 0!==i&&null!==i||(i=$(this.selected).closest(".basicblock").prev().find(".insaddr").last()[0])}var h=get_address_from_class(i);f?r2ui.seek(h,!1):(r2ui.history_push(h),this.selected=i,this.selected_offset=h),rehighlight_iaddress(h),scroll_to_address(h)}}if("c"===d){var j=prompt("Function name?");null!==j&&r2.cmd("af "+j,function(){r2.update_flags(),r2ui.seek("$$",!1)})}if("d"===d&&r2.cmd("af-",function(){r2.update_flags(),r2ui.seek("$$",!1)}),"g"===d){var k=prompt("Go to");null!==k&&r2ui.opendis(k)}if(";"===d&&this.do_comment(this.selected_offset),"n"===d&&this.do_rename(this.selected,b),"R"===d&&do_randomcolors(),27===c)if(null!==this.renaming)this.renaming.innerHTML=this.renameOldValue,this.renaming=null;else{var e=r2ui.history_prev();void 0!==e&&null!==e&&r2ui.seek(e,!1)}13===c&&this.goToAddress()}},handleTap:function(a,b){if("string"==typeof b.target.className)if(b.target.className.indexOf(" addr ")>-1){var c=get_address_from_class(b.target);if(rehighlight_iaddress(c),this.selected=b.target,this.selectLine truncated
enyo.kind ({
name: "Disassembler",
kind: "Scroller",
tag: "div",
classes:"ec_gui_background",
style:"margin:0px;position: relative;",
data: null,
components: [
// {tag: "div", allowHtml: true, classes: "colorbar", name: "colorbar" },
{
tag: "div",
allowHtml: true,
name: "minimap",
style : "width:200px; height:200px; position:fixed; top:0; right 0px",
id: "minimap"
},
{
tag: "div",
allowHtml: true,
name: "panel",
content: "<div id='main_panel' class='ui-layout-center ec_gui_background'><div id='center_panel'></div></div>"
+ "<div class='ui-layout-south' style='display: none;background-color:rgb(20,20,20);'><pre id='cmd_output' class='ui-layout-content'></pre><div><input id='command' type='text' value=''/></div></div>",
style:"margin-right:5px;width:100%;height:100%",
},
{kind: enyo.Signals,
onkeypress: "handleKeyPress"
},
{name: "menuPopup", kind: "onyx.Popup", floating: true, onHide:'hideContextMenu', onShow:"showContextMenu", style:"padding: 0px;",
style: "padding: 10px", components: [
{name: "menu", kind: "onyx.MenuDecorator", onSelect: "itemSelected", components: [
{content: "Show menu"},
{kind: "onyx.Menu", name: "contextMenu", components: [
{content: "rename", value: "rename"},
{content: "comment", value: "comment"},
{content: "switch view", value: "do_switchview"},
{content: "random colors", value: "do_randomcolors"}
]}
]}
]
},
],
handlers: {
ontap: "handleTap",
onhold: "handleHold",
ondblclick: "handleDoubleClick",
onTransitionFinish: "handleTransitionFinish",
},
handleTransitionFinish: function() {
if (r2ui._dis.display == "graph" && r2ui._dis.minimap) update_minimap();
},
itemSelected: function (inSender, inEvent) {
if (inEvent.originator.content) {
var itemContent = inEvent.originator.content;
if (itemContent == "rename") {
this.do_rename(this.selected, inEvent);
} else if (itemContent == "comment") {
this.do_comment(this.selected_offset);
} else if (itemContent == "random colors") {
do_randomcolors();
} else if (itemContent == "switch view") {
this.switch_view();
}
}
this.$.menuPopup.hide();
},
handleHold: function (inSender, inEvent) {
this.handleTap(inSender, inEvent);
if (typeof inEvent.target.className === "string" && (inEvent.target.className.indexOf(" addr ") > -1 || inEvent.target.className.indexOf(" faddr ") > -1)) {
var address = get_address_from_class(inEvent.target);
this.selected = inEvent.target;
this.selected_offset = address;
rehighlight_iaddress(address);
this.showContextMenu(inEvent.pageY, inEvent.pageX);
}
},
showContextMenu:function(inSender, inEvent){
if((parseFloat(inSender) == parseInt(inSender)) && !isNaN(inSender) && (parseFloat(inEvent) == parseInt(inEvent)) && !isNaN(inEvent)){
this.$.menuPopup.addStyles('top:'+inSender+'px; left:'+inEvent+'px;padding:0px;');
this.$.menuPopup.show();
this.$.menuPopup.children[0].children[0].hide();
this.$.menuPopup.children[0].children[1].show();
this.$.menuPopup.render();
}
},
hideContextMenu:function(inSender,inEvent){
},
handleDoubleClick: function (inSender, inEvent) {
if (inEvent.target.className.indexOf(" addr ") > -1 && inEvent.target.className.indexOf("insaddr") === -1) {
this.handleTap(inSender, inEvent);
this.goToAddress();
}
},
handleKeyPress: function(inSender, inEvent) {
var keynum = inEvent.keyCode || inEvent.charCode || inEvent.which || 0;
var key = String.fromCharCode(keynum);
// console.log(key);
if (inEvent.ctrlKey||inEvent.metaKey) return;
if ($(inEvent.target).prop("tagName") === "INPUT" || $(inEvent.target).prop("tagName") === "TEXTAREA") return;
// show help
if (key === '?') {
r2ui.mp.show_popup();
}
// Spacebar Switch flat and graph views
if (key === ' ') {
this.switch_view();
}
// h Seek to previous address in history
if (key === 'h') {
var addr = r2ui.history_prev();
if (addr !== undefined && addr !== null) r2ui.seek(addr, false);
}
// l Seek to next address in history
if (key === 'l') {
var addr = r2ui.history_next();
if (addr !== undefined && addr !== null) r2ui.seek(addr, false);
}
if (key === 'm' && r2ui._dis.display == "graph") toggle_minimap();
// j Seek to next Instruction
if (key === 'j') {
var get_more_instructions = false;
if ($(this.selected).hasClass("insaddr")) {
var next_instruction;
if (this.display == "flat") {
next_instruction = $(this.selected).closest(".instructionbox").next().find('.insaddr')[0];
if ($("#gbox .instructionbox").index( $(this.selected).closest(".instructionbox")[0]) > $("#gbox .instructionbox").length - 10) get_more_instructions = true;
}
if (this.display == "graph") {
var next_instruction = $(this.selected).closest(".instruction").next().find('.insaddr')[0];
if (next_instruction === undefined || next_instruction === null) {
next_instruction = $(this.selected).closest(".basicblock").next().find('.insaddr')[0];
}
}
// if (next_instruction === null || next_instruction === undefined) return;
var address = get_address_from_class(next_instruction);
if (get_more_instructions) {
r2ui.seek(address, false);
} else {
r2ui.history_push(address);
this.selected = next_instruction;
this.selected_offset = address;
}
rehighlight_iaddress(address);
scroll_to_address(address);
}
}
// k Seek to previous instruction
if (key === 'k') {
var get_more_instructions = false;
if ($(this.selected).hasClass("insaddr")) {
var prev_instruction;
if (this.display == "flat") {
prev_instruction = $(this.selected).closest(".instructionbox").prev().find('.insaddr')[0];
if ($("#gbox .instructionbox").index( $(this.selected).closest(".instructionbox")[0]) < 10) get_more_instructions = true;
}
if (this.display == "graph") {
var prev_instruction = $(this.selected).closest(".instruction").prev().find('.insaddr')[0];
if (prev_instruction === undefined || prev_instruction === null) {
prev_instruction = $(this.selected).closest(".basicblock").prev().find('.insaddr').last()[0];
}
}
var address = get_address_from_class(prev_instruction);
if (get_more_instructions) {
r2ui.seek(address, false);
} else {
r2ui.history_push(address);
this.selected = prev_instruction;
this.selected_offset = address;
}
rehighlight_iaddress(address);
scroll_to_address(address);
}
}
// c Define function
if (key === 'c') {
var msg = prompt ('Function name?');
if (msg !== null) {
r2.cmd("af " + msg, function() {
r2.update_flags();
r2ui.seek("$$", false);
});
}
}
// d Clear function metadata
if (key === 'd') {
r2.cmd("af-", function() {
r2.update_flags();
r2ui.seek("$$", false);
});
}
// g Go to address
if (key === 'g') {
var a = prompt('Go to');
if (a !== null) r2ui.opendis(a);
}
// ; Add comment
if (key === ';') {
this.do_comment(this.selected_offset);
}
// n Rename
if (key === 'n') {
this.do_rename(this.selected, inEvent);
}
if (key === 'R') do_randomcolors();
// esc
if (keynum === 27) {
// Esc belongs to renaming
if(this.renaming !== null) {
this.renaming.innerHTML = this.renameOldValue;
this.renaming = null;
} else {
// go back in history
var addr = r2ui.history_prev();
if (addr !== undefined && addr !== null) r2ui.seek(addr, false);
}
}
// enter
if (keynum === 13) {
// Enter means go to address
this.goToAddress();
}
},
handleTap: function(inSender, inEvent) {
if (typeof inEvent.target.className === 'string') {
if (inEvent.target.className.indexOf(" addr ") > -1) {
var address = get_address_from_class(inEvent.target);
rehighlight_iaddress(address);
this.selected = inEvent.target;
this.selected_offset = address;
// If instruction address, add address to history
if ($(inEvent.target).hasClass('insaddr')) {
r2ui.history_push(address);
var get_more_instructions = false;
var next_instruction;
var prev_instruction;
var address = get_address_from_class(inEvent.target);
if (r2ui._dis.display == "flat") {
next_instruction = $(r2ui._dis.selected).closest(".instructionbox").next().find('.insaddr')[0];
if ($("#gbox .instructionbox").index( $(r2ui._dis.selected).closest(".instructionbox")[0]) > $("#gbox .instructionbox").length - 10) {
get_more_instructions = true;
address = get_address_from_class(next_instruction);
}
prev_instruction = $(r2ui._dis.selected).closest(".instructionbox").prev().find('.insaddr')[0];
if ($("#gbox .instructionbox").index( $(r2ui._dis.selected).closest(".instructionbox")[0]) < 10) {
get_more_instructions = true;
address = get_address_from_class(prev_instruction);
}
}
if (r2ui._dis.display == "graph") {
var next_instruction = $(r2ui._dis.selected).closest(".instruction").next().find('.insaddr')[0];
if (next_instruction === undefined || next_instruction === null) {
next_instruction = $(r2ui._dis.selected).closest(".basicblock").next().find('.insaddr')[0];
}
var prev_instruction = $(r2ui._dis.selected).closest(".instruction").prev().find('.insaddr')[0];
if (prev_instruction === undefined || prev_instruction === null) {
prev_instruction = $(r2ui._dis.selected).closest(".basicblock").prev().find('.insaddr').last()[0];
}
}
if (get_more_instructions) {
r2ui.seek(address, false);
rehighlight_iaddress(address);
scroll_to_address(address);
document.getElementById("canvas").focus();
}
}
} else if ($(inEvent.target).hasClass('fvar') || $(inEvent.target).hasClass('farg')) {
var eid = null;
var address = get_address_from_class(inEvent.target, "faddr");
r2ui._dis.selected = inEvent.target;
r2ui._dis.selected_offset = address;
var classes = inEvent.target.className.split(' ');
for (var j in classes) {
var klass = classes[j];
if (klass.indexOf("id_") === 0) eid = klass.substring(3);
}
if (eid !== null) rehighlight_iaddress(eid, "id");
}
}
},
goToAddress: function() {
if (this.renaming === null && this.selected !== null && (this.selected.className.indexOf(" addr ") ) -1) {
var address = get_address_from_class(this.selected);
if (this.selected.className.indexOf("ec_dataoffset") > -1) {
// address is located in not executable memory, switching to hex view
r2ui.openpage(address, 2);
return;
}
if (address !== undefined && address !== null) {
address = address_canonicalize(address);
if (this.display === "flat") {
r2ui.seek(address, true);
} else {
// check if address belong to current function //
r2.cmdj("pdfj", function(x) {
if (x !== null && x !== undefined) {
var ops = x.ops;
var found = false;
for (var i in ops) {
if (ops[i].offset === parseInt(address,16)) {
found = true;
}
}
if (found) {
r2ui.seek_in_graph(address, true);
} else {
r2ui.seek(address, true);
}
}
});
}
}
}
},
handleInputTextChange: function() {
if (this.renaming !== null && this.rbox.value.length > 0) {
if ($(this.selected).hasClass('insaddr')) {
var old_value = get_offset_flag(r2ui._dis.selected_offset);
var type = "offsets";
r2.cmdj("afij @ " + r2ui._dis.selected_offset, function(x) {
if (x !== null && x !== undefined) {
if ("0x" + x[0].offset.toString(16) === r2ui._dis.selected_offset) {
type = "functions";
}
}
});
rename(r2ui._dis.selected_offset, old_value, this.rbox.value, type);
} else if ($(this.selected).hasClass('faddr')) {
if ($(this.selected).hasClass('fvar'))
r2.cmd("afvn " + r2ui._dis.renameOldValue + " " + r2ui._dis.rbox.value + " @ " + r2ui._dis.selected_offset, function(x){});
else if ($(this.selected).hasClass('farg'))
r2.cmd("afan " + r2ui._dis.renameOldValue + " " + r2ui._dis.rbox.value + " @ " + r2ui._dis.selected_offset, function(x){});
} else {
// TODO, try to recognize other spaces
var old_value = r2ui._dis.renameOldValue;
if (old_value.indexOf("0x") === 0) old_value = "";
rename(r2ui._dis.selected_offset, old_value, r2ui._dis.rbox.value, "*");
}
var instruction;
if (this.display == "flat") instruction = $(this.selected).closest(".instructionbox").find('.insaddr')[0];
if (this.display == "graph") instruction = $(this.selected).closest(".instruction").find('.insaddr')[0];
this.renaming = null;
var address = get_address_from_class(instruction);
r2ui.seek(address, false);
scroll_to_address(address);
}
},
min: 0,
max: 0,
block: 512,
base: "entry0",
display: "flat",
selected: null,
renaming: null,
renameOldValue: "",
rbox: null,
minimap:true,
console_history: [],
console_history_idx: 0,
instructions: [],
scrolling: false,
do_comment: function(address) {
var c = prompt('Comment');
if (c !== null) {
r2.cmd('CC- ' + " @ " + address + ';CC ' + c + " @ " + address);
r2ui.seek(address, false);
scroll_to_address(address);
}
},
do_rename: function(element, inEvent) {
if (this.renaming === null && this.selected !== null && this.selected.className.indexOf(" addr ") > -1) {
var address = get_address_from_class(this.selected);
this.renaming = this.selected;
this.renameOldValue = this.selected.innerHTML;
this.rbox = document.createElement('input');
this.rbox.setAttribute("type", "text");
this.rbox.setAttribute("id", "rename");
this.rbox.setAttribute("style", "border-width: 0;padding: 0;");
this.rbox.setAttribute("onChange", "handleInputTextChange()");
if (this.selected.className.indexOf("insaddr") > -1) {
var value = get_offset_flag(address);
this.rbox.setAttribute("value",value);
this.rbox.setSelectionRange(value.length, value.length);
} else {
this.rbox.setAttribute("value", this.renameOldValue);
this.rbox.setSelectionRange(this.renameOldValue.length, this.renameOldValue.length);
}
this.renaming.innerHTML = "";
this.renaming.appendChild(this.rbox);
setTimeout('r2ui._dis.rbox.focus();', 200);
} else if (this.renaming === null && element !== null && $(element).hasClass("faddr")) {
var address = get_address_from_class(element, "faddr");
this.selected = element;
this.selected_offset = address;
this.renaming = element;
this.renameOldValue = element.innerText;
this.rbox = document.createElement('input');
this.rbox.setAttribute("type", "text");
this.rbox.setAttribute("id", "rename");
this.rbox.setAttribute("style", "border-width: 0;padding: 0;");
this.rbox.setAttribute("onChange", "handleInputTextChange()");
this.rbox.setAttribute("value", this.renameOldValue);
this.rbox.setSelectionRange(this.renameOldValue.length, this.renameOldValue.length);
this.renaming.innerHTML = "";
this.renaming.appendChild(r2ui._dis.rbox);
setTimeout('r2ui._dis.rbox.focus();', 200);
}
},
switch_view: function() {
if (this.display === "flat") this.display_graph();
else this.display_flat();
var addr = r2ui.history_last();
if (addr !== undefined && addr !== null) r2ui.seek(addr, false);
},
display_graph: function() {
this.display = "graph";
$("#main_panel").removeClass("ec_gui_background");
$("#main_panel").addClass("ec_gui_alt_background");
},
display_flat: function() {
this.display = "flat";
$("#main_panel.ui-layout-pane").removeClass("ec_gui_alt_background");
$("#main_panel.ui-layout-pane").addClass("ec_gui_background");
},
// less: function() {
// this.min += this.block;
// r2.get_disasm_before(this.base + "-" + this.min, this.block, function(x) {
// x = render_instructions(x);
// var oldy = r2ui._dis.getScrollBounds().height;
// $("#center_panel").html(x+text.getContent());
// var newy = r2ui._dis.getScrollBounds().height;
// r2ui._dis.scrollTo(0, newy-oldy);
// });
// rehighlight_iaddress(this.base);
// },
// more: function() {
// this.max += this.block;
// r2.get_disasm_after(this.base + "+" + this.max, this.block, function(x) {
// x = render_instructions(x);
// $("#center_panel").html(text.getContent() + x);
// });
// rehighlight_iaddress(this.base);
// },
seek: function(addr, scroll) {
var error = false;
if (this.display === "graph") {
this.$.minimap.show();
$("#center_panel").html("");
r2.cmd ("agj " + addr, function(x) {
$("#center_panel").html("<div id='center_panel' style='width:100%;height:100%;overflow: auto;'><div id='canvas' class='canvas enyo-selectable ec_gui_background'></div></div>");
if (render_graph(x) === false) error = true;
});
}
if (error) this.display_flat();
if (this.display === "flat") {
$("#main_panel").scroll(on_scroll);
this.$.minimap.hide();
this.min = this.max = 0;
r2.get_disasm_before_after(addr, -100, 100, function(x) {
$("#center_panel").html("<div id='canvas' class='canvas enyo-selectable ec_gui_background'></div>");
r2ui._dis.instructions = x;
render_instructions(r2ui._dis.instructions);
});
}
this.selected = get_element_by_address(addr);
this.selected_offset = addr;
rehighlight_iaddress(addr);
if (scroll === undefined || scroll === true) {
scroll_to_address(addr);
}
},
create: function() {
this.inherited(arguments);
this.base = "entry0";
r2ui._dis = this;
// TODO: Move this to the application constructor
r2.update_flags();
r2.analAll();
r2.load_mmap();
r2ui.load_colors();
},
resizeHandler: function() {
this.inherited(arguments);
if (r2ui._dis.display == "graph" && r2ui._dis.minimap) update_minimap();
},
rendered: function() {
this.inherited(arguments);
myLayout = $('#radareApp_mp_panels_pageDisassembler_panel').layout({
south__size: 200,
});
this.display_flat();
r2ui.seek(this.base,true);
var console_history = this.console_history;
var console_history_idx = this.console_history_idx;
// Handle commands in console
$("#command").keypress(function( inEvent ) {
var key = inEvent.keyCode || inEvent.charCode || inEvent.which || 0;
if (key === 13) {
var cmd = inEvent.target.value.trim();
var reloadUI = cmd == '';
console_history[console_history.length] = cmd;
console_history_idx += 1;
/* empty input reloads UI */
if (cmd != '') {
r2.cmd(inColor(cmd), function(x) {
var old_value = $("#cmd_output").text();
$("#cmd_output").html(old_value + "\n> " + cmd + "\n" + x );
$('#cmd_output').scrollTo($('#cmd_output')[0].scrollHeight);
});
if (cmd.indexOf("s ") === 0) {
r2ui.history_push(r2ui._dis.selected_offset);
}
}
inEvent.target.value = "";
/* if command starts with :, do not reload */
if (reloadUI) {
r2.load_settings();
r2ui.load_colors();
r2ui.seek("$$", false);
scroll_to_element(r2ui._dis.selected);
}
}
});
$("#command").keydown(function( inEvent ) {
var key = inEvent.keyCode || inEvent.charCode || inEvent.which || 0;
if (key === 40) {
console_history_idx++;
if (console_history_idx > console_history.length - 1) console_history_idx = console_history.length;
inEvent.target.value = console_history[console_history_idx] === undefined ? "" : console_history[console_history_idx];
}
if (key === 38) {
console_history_idx--;
if (console_history_idx < 0) console_history_idx = 0;
inEvent.target.value = console_history[console_history_idx] === undefined ? "" : console_history[console_history_idx];
}
});
},
// colorbar_create: function () {
// var self = this;
// r2.cmd ("pvj 24", function(x) {
// try {
// var y = JSON.parse (x);
// } catch (e) {
// alert (e);
// return;
// }
// // console.log (y);
// // TODO: use canvas api for faster rendering and smaller dom
// var c = "<table class='colorbar'>"+
// "<tr valign=top style='height:8px;border-spacing:0'>";
// var colors = {
// flags: "#c0c0c0",
// comments: "yellow",
// functions: "#5050f0",
// strings: "orange",
// };
// var off = "";
// var WIDTH = '100%';
// var HEIGHT = 16;
// for (var i=0; i< y.blocks.length; i++) {
// var block = y.blocks[i];
// var r = "<div style='overflow:hidden;width:12px;'>____</div>";
// if (block.offset) { // Object.keys(block).length>1) {
// var r = "<table width='width:100%' height="+HEIGHT+" style='border-spacing:0px'>";
// var count = 0;
// for (var k in colors)
// if (block[k])
// count++;
// count++; // avoid 0div wtf
// if (count==1) break;
// var h = HEIGHT / count;
// for (var k in colors) {
// var color = colors[k];
// if (block[k])
// r += "<tr><td class='colorbar_item' style='background-color:"
// + colors[k]+"'><div style='width:12px;overflow:"
// + "hidden;height:"+h+"px'>____</div></td></tr>";
// }
// r += "</table>";
// off = "0x"+block.offset.toString (16);
// } else {
// off = "0x"+(y.from + (y.blocksize * i)).toString (16);
// }
// c += "<td onclick='r2ui.seek("+off+",true)' title='"+off
// + "' style='height:"+HEIGHT+"px' "
// + "width=15px>"+r+"</td>";
// }
// c += "</tr></table>";
// self.$.colorbar.setContent (c);
// });
// }
});
+120 -1
View File
@@ -1 +1,120 @@
function docss(a){return"<font color=black>"+a+"</font>"}enyo.kind({name:"DisassemblerOld",kind:"Scroller",tag:"div",style:"margin:0px;background-color:#c0c0c0",data:null,components:[{tag:"div",allowHtml:!0,classes:"colorbar",name:"colorbar"},{tag:"br"},{tag:"div",content:"^",classes:"moreless",ontap:"less"},{tag:"pre",allowHtml:!0,name:"text",content:"..",style:"margin-left:5px"},{tag:"div",content:"v",classes:"moreless",ontap:"more"}],min:0,max:0,block:512,base:"entry0",less:function(){var a=this.$.text;this.min+=this.block,r2.get_disasm(this.base+"-"+this.min,this.block,function(b){b=docss(r2.filter_asm(b,"pd"));var c=r2ui._dis.getScrollBounds().height;a.setContent("<div class='enyo-selectable'>"+b+a.getContent()+"</div>");var d=r2ui._dis.getScrollBounds().height;r2ui._dis.scrollTo(0,d-c)})},more:function(){var a=this.$.text;this.max+=this.block,r2.get_disasm(this.base+"+"+this.max,this.block,function(b){b=docss(r2.filter_asm(b,"pd")),a.setContent("<div class='enyo-selectable'>"+a.getContent()+b+"</div>")})},seek:function(a){var b=this.$.text;this.base=a,this.min=this.max=0,r2.get_disasm(a,this.block,function(a){a=docss(r2.filter_asm(a,"pd")),b.setContent("<div class='enyo-selectable'>"+a+"</div>")}),this.scrollTo(0,0)},create:function(){this.inherited(arguments),this.$.text,r2.cmd("e asm.lineswidth = 20",function(a){}),this.seek("entry0"),r2ui._dis=this,r2ui.history_push("entry0")},colorbar_create:function(){var a=this;r2.cmd("pvj 24",function(b){try{var c=JSON.parse(b)}catch(d){return void alert(d)}console.log(c);for(var e="<table class='colorbar'><tr valign=top style='height:8px;border-spacing:0'>",f={flags:"#c0c0c0",comments:"yellow",functions:"#5050f0",strings:"orange"},g="",h=16,i=0;i<c.blocks.length;i++){var j=c.blocks[i],k="<div style='overflow:hidden;width:12px;'>____</div>";if(j.offset){var k="<table width='width:100%' height="+h+" style='border-spacing:0px'>",l=0;for(var m in f)j[m]&&l++;if(l++,1==l)break;var n=h/l;for(var m in f)f[m],j[m]&&(k+="<tr><td class='colorbar_item' style='background-color:"+f[m]+"'><div style='width:12px;overflow:hidden;height:"+n+"px'>____</div></td></tr>");k+="</table>",g="0x"+j.offset.toString(16)}else g="0x"+(c.from+c.blocksize*i).toString(16);e+="<td onclick='r2ui.seek("+g+",true)' title='"+g+"' style='height:"+h+"px' width=15px>"+k+"</td>"}e+="</tr></table>",a.$.colorbar.setContent(e)})}});
function docss(x) {
return '<font color=black>'+x+'</font>';
}
enyo.kind ({
name: "DisassemblerOld",
kind: "Scroller",
tag: "div",
style:"margin:0px;background-color:#c0c0c0",
data: null,
components: [
{tag: "div", allowHtml: true, classes: "colorbar", name: "colorbar" },
{tag: "br" },
{tag: "div", content: "^", classes: "moreless", ontap: "less"},
{tag: "pre", allowHtml: true, name: "text", content: "..", style:"margin-left:5px"},
{tag: "div", content: "v", classes: "moreless", ontap: "more"},
],
min: 0,
max: 0,
block: 512,
base: "entry0",
less: function() {
var self = this;
var text = this.$.text;
this.min += this.block;
r2.get_disasm (this.base+"-"+this.min, this.block, function (x) {
x = docss (r2.filter_asm (x, "pd"));
var oldy = r2ui._dis.getScrollBounds().height;
text.setContent ("<div class='enyo-selectable'>" + x + text.getContent() + "</div>");
var newy = r2ui._dis.getScrollBounds().height;
r2ui._dis.scrollTo (0, newy-oldy);
});
},
more: function() {
var text = this.$.text;
this.max += this.block;
r2.get_disasm (this.base+"+"+this.max, this.block, function (x) {
x = docss (r2.filter_asm (x, "pd"));
text.setContent ("<div class='enyo-selectable'>" + text.getContent() + x + "</div>");
});
},
seek: function(addr) {
var text = this.$.text;
this.base = addr;
this.min = this.max = 0;
r2.get_disasm (addr, this.block, function (x) {
x = docss (r2.filter_asm (x, "pd"));
text.setContent("<div class='enyo-selectable'>" + x + "</div>");
});
this.scrollTo (0, 0);
//this.colorbar_create ();
},
create: function() {
this.inherited (arguments);
// this.$.list.setCount (this.data.length) ;
var text = this.$.text;
r2.cmd("e asm.lineswidth = 20", function(x){});
this.seek ("entry0");
r2ui._dis = this;
r2ui.history_push ("entry0");
//this.colorbar_create ();
//this.refresh ();
},
colorbar_create: function () {
var self = this;
r2.cmd ("pvj 24", function(x) {
try {
var y = JSON.parse (x);
} catch (e) {
alert (e);
return;
}
console.log (y);
// TODO: use canvas api for faster rendering and smaller dom
var c = "<table class='colorbar'>"+
"<tr valign=top style='height:8px;border-spacing:0'>";
var colors = {
flags: "#c0c0c0",
comments: "yellow",
functions: "#5050f0",
strings: "orange",
};
var off = "";
var WIDTH = '100%';
var HEIGHT = 16;
for (var i=0; i< y.blocks.length; i++) {
var block = y.blocks[i];
var r = "<div style='overflow:hidden;width:12px;'>____</div>";
if (block.offset) { // Object.keys(block).length>1) {
var r = "<table width='width:100%' height="+HEIGHT+" style='border-spacing:0px'>";
var count = 0;
for (var k in colors)
if (block[k])
count++;
count++; // avoid 0div wtf
if (count==1) break;
var h = HEIGHT / count;
for (var k in colors) {
var color = colors[k];
if (block[k])
r += "<tr><td class='colorbar_item' style='background-color:"
+ colors[k]+"'><div style='width:12px;overflow:"
+ "hidden;height:"+h+"px'>____</div></td></tr>";
}
r += "</table>";
off = "0x"+block.offset.toString (16);
} else {
off = "0x"+(y.from + (y.blocksize * i)).toString (16);
}
c += "<td onclick='r2ui.seek("+off+",true)' title='"+off
+ "' style='height:"+HEIGHT+"px' "
+ "width=15px>"+r+"</td>";
}
c += "</tr></table>";
self.$.colorbar.setContent (c);
});
}
});
+18 -1
View File
@@ -1 +1,18 @@
enyo.kind({name:"Graph",kind:"Scroller",style:"background-color:#c0c0c0",components:[{tag:"h2",content:"Open graph",style:"margin-left:10px;"},{kind:"Group",classes:"enyo-border-box group",defaultKind:"onyx.Button",components:[{content:"Basic blocks",classes:"onyx-dark menu-button",ontap:"openGraphBB"},{content:"Callgraph",classes:"onyx-dark menu-button",ontap:"openGraphCG"}]}],openGraphBB:function(){window.open("/graph/","_self")},openGraphCG:function(){window.open("/d3/","_self")}});
enyo.kind ({
name: "Graph",
kind: "Scroller",
style: "background-color:#c0c0c0",
components: [
{tag: "h2", content: "Open graph", style:"margin-left:10px;"},
{kind: "Group", classes: "enyo-border-box group", defaultKind: "onyx.Button", components: [
{content: "Basic blocks", classes: "onyx-dark menu-button", ontap:"openGraphBB" },
{content: "Callgraph", classes: "onyx-dark menu-button", ontap:"openGraphCG" }
]}
],
openGraphBB: function () {
window.open ('/graph/', '_self');
},
openGraphCG: function () {
window.open ('/d3/', '_self');
}
});
+131 -1
View File
@@ -1 +1,131 @@
function docss(a){return"<font color=black>"+a+"</font>"}enyo.kind({name:"Hexdump",kind:"Scroller",tag:"div",style:"margin:0px;background-color:#c0c0c0;color:black",data:null,components:[{tag:"div",allowHtml:!0,classes:"colorbar",name:"colorbar"},{tag:"div",content:"^",classes:"moreless",ontap:"less"},{tag:"pre",allowHtml:!0,name:"text",content:"..",style:"margin-left:5px;color:black"},{tag:"div",content:"v",classes:"moreless",ontap:"more"}],min:0,max:0,block:1024,base:"entry0",less:function(){var a=this.$.text;this.min+=this.block,r2.get_hexdump(this.base+"-"+this.min,this.block,function(b){b=css(r2.filter_asm(b,"px"));var c=r2ui._hex.getScrollBounds().height;a.setContent("<div class='enyo-selectable'>"+b+a.getContent()+"</div>");var d=r2ui._hex.getScrollBounds().height;r2ui._hex.scrollTo(0,d-c)})},more:function(){var a=this.$.text;this.max+=this.block,r2.get_hexdump(this.base+"+"+this.max,this.block,function(b){b=docss(r2.filter_asm(b,"px")),a.setContent("<div class='enyo-selectable'>"+a.getContent()+b+"</div>")})},seek:function(a){var b=this.$.text;this.base=a,this.min=this.max=0,r2.get_hexdump(a,this.block,function(a){a=docss(r2.filter_asm(a,"px")),b.setContent("<div class='enyo-selectable'>"+a+"</div>")}),this.colorbar_create()},create:function(){this.inherited(arguments),this.$.text,this.seek("entry0"),r2ui._hex=this,this.colorbar_create()},setupItem:function(a,b){return this.$.msg.setContent(this.data[b.index]),!0},colorbar_create:function(){var a=this;r2.cmd("pvj",function(b){try{var c=JSON.parse(b)}catch(d){return void alert(d)}for(var e="<table class='colorbar'><tr valign=top style='height:20px;border-spacing:0'>",f={flags:"#c0c0c0",comments:"yellow",functions:"#5050f0",strings:"orange"},g="",h=10,i=30,j=0;j<c.blocks.length;j++){var k=c.blocks[j],l="<div style='overflow:hidden;background-color:#404040;width:"+h+"px;'>&nbsp;</div>";if(k.offset){var l="<table height="+i+" style='color:black;border-spacing:0px'>",m=0;for(var n in f)k[n]&&m++;if(m++,1==m)break;var o=i/m;for(var n in f)f[n],k[n]&&(l+="<tr><td style='width:"+h+"px;background-color:"+f[n]+"'><div style='width:"+h+"px;overflow:hidden;height:"+o+"px'>&nbsp;</div></td></tr>");l+="</table>",g="0x"+k.offset.toString(16)}else g="0x"+(c.from+c.blocksize*j).toString(16);e+="<td onclick='r2ui.seek("+g+",true)' title='"+g+"' style='height:"+i+"px' width=15px>"+l+"</td>"}e+="</tr></table>",a.$.colorbar.setContent(e)})}});
function docss(x) {
return '<font color=black>'+x+'</font>';
}
enyo.kind ({
name: "Hexdump",
kind: "Scroller",
tag: "div",
style:"margin:0px;background-color:#c0c0c0;color:black",
data: null,
components: [
{tag: "div", allowHtml: true, classes: "colorbar", name: "colorbar" },
{tag: "div", content: "^", classes: "moreless", ontap: "less"},
{tag: "pre", allowHtml: true, name: "text", content: "..", style:"margin-left:5px;color:black"},
{tag: "div", content: "v", classes: "moreless", ontap: "more"},
/*
{kind: "List", count:3, name: "list", style:"height:400px", realtimeFit:false, onSetupItem: "setupItem", components: [
{kind: "onyx.Item", layoutKind: "HFlexLayout", style:"padding:0px", components: [
{kind: "onyx.Button", name: "msg", fit:true, active: true, ontap: "rowTap"}
]}
]}
*/
],
min: 0,
max: 0,
block: 1024,
base: "entry0",
less: function() {
var self = this;
var text = this.$.text;
this.min += this.block;
r2.get_hexdump (this.base+"-"+this.min, this.block, function (x) {
x = css (r2.filter_asm (x, "px"));
var oldy = r2ui._hex.getScrollBounds().height;
text.setContent ("<div class='enyo-selectable'>" + x + text.getContent() + "</div>");
var newy = r2ui._hex.getScrollBounds().height;
r2ui._hex.scrollTo (0, newy-oldy);
});
},
more: function() {
var text = this.$.text;
this.max += this.block;
r2.get_hexdump (this.base+"+"+this.max, this.block, function (x) {
x = docss (r2.filter_asm (x, "px"));
text.setContent ("<div class='enyo-selectable'>" + text.getContent() + x + "</div>");
});
},
seek: function(addr) {
var text = this.$.text;
this.base = addr;
this.min = this.max = 0;
r2.get_hexdump (addr, this.block, function (x) {
x = docss (r2.filter_asm (x, "px"));
text.setContent ("<div class='enyo-selectable'>" + x + "</div>");
});
this.colorbar_create ();
},
create: function() {
this.inherited (arguments);
// this.$.list.setCount (this.data.length) ;
var text = this.$.text;
this.seek ("entry0");
r2ui._hex = this;
// r2ui.history_push("entry0");
this.colorbar_create();
//this.refresh ();
},
setupItem: function (inSender, inIndex) {
this.$.msg.setContent (this.data[inIndex.index]);
return true;
},
/* TODO: spaggety. see disassemble.js . must be a separate kind */
colorbar_create: function () {
var self = this;
r2.cmd ("pvj", function(x) {
try {
var y = JSON.parse (x);
} catch (e) {
alert (e);
return;
}
// console.log (y);
// TODO: use canvas api for faster rendering and smaller dom
var c = "<table class='colorbar'><tr valign=top style='height:20px;border-spacing:0'>";
var colors = {
flags: "#c0c0c0",
comments: "yellow",
functions: "#5050f0",
strings: "orange",
};
var off = "";
var WIDTH = 10;
var HEIGHT = 30;
for (var i=0; i< y.blocks.length; i++) {
var block = y.blocks[i];
var r = "<div style='overflow:hidden;background-color:#404040;width:"
+ WIDTH+"px;'>&nbsp;</div>";
if (block.offset) { // Object.keys(block).length>1) {
var r = "<table height="+HEIGHT+" style='color:black;border-spacing:0px'>";
var count = 0;
for (var k in colors) {
if (block[k])
count++;
}
count++; // avoid 0div wtf
if (count==1) break;
var h = HEIGHT / count;
for (var k in colors) {
var color = colors[k];
if (block[k])
r += "<tr><td style='width:"+WIDTH+"px;background-color:"
+ colors[k]+"'><div style='width:"+WIDTH+"px;overflow:"
+ "hidden;height:"+h+"px'>&nbsp;</div></td></tr>";
}
r += "</table>";
off = "0x"+block.offset.toString (16);
} else {
off = "0x"+(y.from + (y.blocksize * i)).toString (16);
}
c += "<td onclick='r2ui.seek("+off+",true)' title='"+off
+ "' style='height:"+HEIGHT+"px' "
+ "width=15px>"+r+"</td>";
}
c += "</tr></table>";
self.$.colorbar.setContent (c);
});
}
});
+949 -1
View File
@@ -1 +1,949 @@
joint.dia.GraphCells=Backbone.Collection.extend({cellNamespace:joint.shapes,initialize:function(a,b){this.on("change:z",this.sort,this),b.cellNamespace&&(this.cellNamespace=b.cellNamespace),this.graph=b.graph},model:function(a,b){var c=b.collection,d=c.cellNamespace,e="link"===a.type?joint.dia.Link:joint.util.getByPath(d,a.type,".")||joint.dia.Element,f=new e(a,b);return f.graph=c.graph,f},comparator:function(a){return a.get("z")||0}}),joint.dia.Graph=Backbone.Model.extend({initialize:function(a,b){b=b||{};var c=new joint.dia.GraphCells([],{model:b.cellModel,cellNamespace:b.cellNamespace,graph:this});Backbone.Model.prototype.set.call(this,"cells",c),c.on("all",this.trigger,this),this._out={},this._in={},this._nodes={},this._edges={},c.on("add",this._restructureOnAdd,this),c.on("remove",this._restructureOnRemove,this),c.on("reset",this._restructureOnReset,this),c.on("change:source",this._restructureOnChangeSource,this),c.on("change:target",this._restructureOnChangeTarget,this),c.on("remove",this._removeCell,this)},_restructureOnAdd:function(a){if(a.isLink()){this._edges[a.id]=!0;var b=a.get("source"),c=a.get("target");b.id&&((this._out[b.id]||(this._out[b.id]={}))[a.id]=!0),c.id&&((this._in[c.id]||(this._in[c.id]={}))[a.id]=!0)}else this._nodes[a.id]=!0},_restructureOnRemove:function(a){if(a.isLink()){delete this._edges[a.id];var b=a.get("source"),c=a.get("target");b.id&&this._out[b.id]&&this._out[b.id][a.id]&&delete this._out[b.id][a.id],c.id&&this._in[c.id]&&this._in[c.id][a.id]&&delete this._in[c.id][a.id]}else delete this._nodes[a.id]},_restructureOnReset:function(a){a=a.models,this._out={},this._in={},this._nodes={},this._edges={},_.each(a,this._restructureOnAdd,this)},_restructureOnChangeSource:function(a){var b=a.previous("source");b.id&&this._out[b.id]&&delete this._out[b.id][a.id];var c=a.get("source");c.id&&((this._out[c.id]||(this._out[c.id]={}))[a.id]=!0)},_restructureOnChangeTarget:function(a){var b=a.previous("target");b.id&&this._in[b.id]&&delete this._in[b.id][a.id];var c=a.get("target");c.id&&((this._in[c.id]||(this._in[c.id]={}))[a.id]=!0)},getOutboundEdges:function(a){return this._out&&this._out[a]||{}},getInboundEdges:function(a){return this._in&&this._in[a]||{}},toJSON:function(){var a=Backbone.Model.prototype.toJSON.apply(this,arguments);return a.cells=this.get("cells").toJSON(),a},fromJSON:function(a,b){if(!a.cells)throw new Error("Graph JSON must contain cells array.");return this.set(a,b)},set:function(a,b,c){var d;return"object"==typeof a?(d=a,c=b):(d={})[a]=b,d.hasOwnProperty("cells")&&(this.resetCells(d.cells,c),d=_.omit(d,"cells")),Backbone.Model.prototype.set.call(this,d,c)},clear:function(a){a=_.extend({},a,{clear:!0});var b=this.get("cells");if(0===b.length)return this;this.trigger("batch:start",{batchName:"clear"});var c=b.sortBy(function(a){return a.isLink()?1:2});do c.shift().remove(a);while(c.length>0);return this.trigger("batch:stop",{batchName:"clear"}),this},_prepareCell:function(a){var b;if(a instanceof Backbone.Model?(b=a.attributes,a.graph=this):b=a,_.isUndefined(b.z)&&(b.z=this.maxZIndex()+1),!_.isString(b.type))throw new TypeError("dia.Graph: cell type must be a string.");return a},maxZIndex:function(){var a=this.get("cells").last();return a?a.get("z")||0:0},addCell:function(a,b){return _.isArray(a)?this.addCells(a,b):(this.get("cells").add(this._prepareCell(a),b||{}),this)},addCells:function(a,b){return b=b||{},b.position=a.length,_.each(a,function(a){b.position--,this.addCell(a,b)},this),this},resetCells:function(a,b){return this.get("cells").reset(_.map(a,this._prepareCell,this),b),this},_removeCell:function(a,b,c){c=c||{},c.clear||(c.disconnectLinks?this.disconnectLinks(a,c):this.removeLinks(a,c)),this.get("cells").remove(a,{silent:!0}),delete a.graph},getCell:function(a){return this.get("cells").get(a)},getCells:function(){return this.get("cells").toArray()},getElements:function(){return _.map(this._nodes,function(a,b){return this.getCell(b)},this)},getLinks:function(){return _.map(this._edges,function(a,b){return this.getCell(b)},this)},getFirstCell:function(){return this.get("cells").first()},getLastCell:function(){return this.get("cells").last()},getConnectedLinks:function(a,b){b=b||{};var c=b.inbound,d=b.outbound;_.isUndefined(c)&&_.isUndefined(d)&&(c=d=!0);var e=[],f={};if(d&&_.each(this.getOutboundEdges(a.id),function(a,b){f[b]||(e.push(this.getCell(b)),f[b]=!0)},this),c&&_.each(this.getInboundEdges(a.id),function(a,b){f[b]||(e.push(this.getCell(b)),f[b]=!0)},this),b.deep){var g=a.getEmbeddedCells({deep:!0}),h={};_.each(g,function(a){a.isLink()&&(h[a.id]=!0)}),_.each(g,function(a){a.isLink()||(d&&_.each(this.getOutboundEdges(a.id),function(a,b){f[b]||h[b]||(e.push(this.getCell(b)),f[b]=!0)},this),c&&_.each(this.getInboundEdges(a.id),function(a,b){f[b]||h[b]||(e.push(this.getCell(b)),f[b]=!0)},this))},this)}return e},getNeighbors:function(a,b){b=b||{};var c=b.inbound,d=b.outbound;_.isUndefined(c)&&_.isUndefined(d)&&(c=d=!0);var e=_.transform(this.getConnLine truncated
// JointJS, the JavaScript diagramming library.
// (c) 2011-2015 client IO
joint.dia.GraphCells = Backbone.Collection.extend({
cellNamespace: joint.shapes,
initialize: function(models, opt) {
// Backbone automatically doesn't trigger re-sort if models attributes are changed later when
// they're already in the collection. Therefore, we're triggering sort manually here.
this.on('change:z', this.sort, this);
// Set the optional namespace where all model classes are defined.
if (opt.cellNamespace) {
this.cellNamespace = opt.cellNamespace;
}
this.graph = opt.graph;
},
model: function(attrs, options) {
var collection = options.collection;
var namespace = collection.cellNamespace;
// Find the model class in the namespace or use the default one.
var ModelClass = (attrs.type === 'link')
? joint.dia.Link
: joint.util.getByPath(namespace, attrs.type, '.') || joint.dia.Element;
var cell = new ModelClass(attrs, options);
// Add a reference to the graph. It is necessary to do this here because this is the earliest place
// where a new model is created from a plain JS object. For other objects, see `joint.dia.Graph>>_prepareCell()`.
cell.graph = collection.graph;
return cell;
},
// `comparator` makes it easy to sort cells based on their `z` index.
comparator: function(model) {
return model.get('z') || 0;
}
});
joint.dia.Graph = Backbone.Model.extend({
initialize: function(attrs, opt) {
opt = opt || {};
// Passing `cellModel` function in the options object to graph allows for
// setting models based on attribute objects. This is especially handy
// when processing JSON graphs that are in a different than JointJS format.
var cells = new joint.dia.GraphCells([], {
model: opt.cellModel,
cellNamespace: opt.cellNamespace,
graph: this
});
Backbone.Model.prototype.set.call(this, 'cells', cells);
// Make all the events fired in the `cells` collection available.
// to the outside world.
cells.on('all', this.trigger, this);
// `joint.dia.Graph` keeps an internal data structure (an adjacency list)
// for fast graph queries. All changes that affect the structure of the graph
// must be reflected in the `al` object. This object provides fast answers to
// questions such as "what are the neighbours of this node" or "what
// are the sibling links of this link".
// Outgoing edges per node. Note that we use a hash-table for the list
// of outgoing edges for a faster lookup.
// [node ID] -> Object [edge] -> true
this._out = {};
// Ingoing edges per node.
// [node ID] -> Object [edge] -> true
this._in = {};
// `_nodes` is useful for quick lookup of all the elements in the graph, without
// having to go through the whole cells array.
// [node ID] -> true
this._nodes = {};
// `_edges` is useful for quick lookup of all the links in the graph, without
// having to go through the whole cells array.
// [edge ID] -> true
this._edges = {};
cells.on('add', this._restructureOnAdd, this);
cells.on('remove', this._restructureOnRemove, this);
cells.on('reset', this._restructureOnReset, this);
cells.on('change:source', this._restructureOnChangeSource, this);
cells.on('change:target', this._restructureOnChangeTarget, this);
cells.on('remove', this._removeCell, this);
},
_restructureOnAdd: function(cell) {
if (cell.isLink()) {
this._edges[cell.id] = true;
var source = cell.get('source');
var target = cell.get('target');
if (source.id) {
(this._out[source.id] || (this._out[source.id] = {}))[cell.id] = true;
}
if (target.id) {
(this._in[target.id] || (this._in[target.id] = {}))[cell.id] = true;
}
} else {
this._nodes[cell.id] = true;
}
},
_restructureOnRemove: function(cell) {
if (cell.isLink()) {
delete this._edges[cell.id];
var source = cell.get('source');
var target = cell.get('target');
if (source.id && this._out[source.id] && this._out[source.id][cell.id]) {
delete this._out[source.id][cell.id];
}
if (target.id && this._in[target.id] && this._in[target.id][cell.id]) {
delete this._in[target.id][cell.id];
}
} else {
delete this._nodes[cell.id];
}
},
_restructureOnReset: function(cells) {
// Normalize into an array of cells. The original `cells` is GraphCells Backbone collection.
cells = cells.models;
this._out = {};
this._in = {};
this._nodes = {};
this._edges = {};
_.each(cells, this._restructureOnAdd, this);
},
_restructureOnChangeSource: function(link) {
var prevSource = link.previous('source');
if (prevSource.id && this._out[prevSource.id]) {
delete this._out[prevSource.id][link.id];
}
var source = link.get('source');
if (source.id) {
(this._out[source.id] || (this._out[source.id] = {}))[link.id] = true;
}
},
_restructureOnChangeTarget: function(link) {
var prevTarget = link.previous('target');
if (prevTarget.id && this._in[prevTarget.id]) {
delete this._in[prevTarget.id][link.id];
}
var target = link.get('target');
if (target.id) {
(this._in[target.id] || (this._in[target.id] = {}))[link.id] = true;
}
},
// Return all outbound edges for the node. Return value is an object
// of the form: [edge] -> true
getOutboundEdges: function(node) {
return (this._out && this._out[node]) || {};
},
// Return all inbound edges for the node. Return value is an object
// of the form: [edge] -> true
getInboundEdges: function(node) {
return (this._in && this._in[node]) || {};
},
toJSON: function() {
// Backbone does not recursively call `toJSON()` on attributes that are themselves models/collections.
// It just clones the attributes. Therefore, we must call `toJSON()` on the cells collection explicitely.
var json = Backbone.Model.prototype.toJSON.apply(this, arguments);
json.cells = this.get('cells').toJSON();
return json;
},
fromJSON: function(json, opt) {
if (!json.cells) {
throw new Error('Graph JSON must contain cells array.');
}
return this.set(json, opt);
},
set: function(key, val, opt) {
var attrs;
// Handle both `key`, value and {key: value} style arguments.
if (typeof key === 'object') {
attrs = key;
opt = val;
} else {
(attrs = {})[key] = val;
}
// Make sure that `cells` attribute is handled separately via resetCells().
if (attrs.hasOwnProperty('cells')) {
this.resetCells(attrs.cells, opt);
attrs = _.omit(attrs, 'cells');
}
// The rest of the attributes are applied via original set method.
return Backbone.Model.prototype.set.call(this, attrs, opt);
},
clear: function(opt) {
opt = _.extend({}, opt, { clear: true });
var collection = this.get('cells');
if (collection.length === 0) return this;
this.trigger('batch:start', { batchName: 'clear' });
// The elements come after the links.
var cells = collection.sortBy(function(cell) {
return cell.isLink() ? 1 : 2;
});
do {
// Remove all the cells one by one.
// Note that all the links are removed first, so it's
// safe to remove the elements without removing the connected
// links first.
cells.shift().remove(opt);
} while (cells.length > 0);
this.trigger('batch:stop', { batchName: 'clear' });
return this;
},
_prepareCell: function(cell) {
var attrs;
if (cell instanceof Backbone.Model) {
attrs = cell.attributes;
cell.graph = this;
} else {
// In case we're dealing with a plain JS object, we have to set the reference
// to the `graph` right after the actual model is created. This happens in the `model()` function
// of `joint.dia.GraphCells`.
attrs = cell;
}
if (_.isUndefined(attrs.z)) {
attrs.z = this.maxZIndex() + 1;
}
if (!_.isString(attrs.type)) {
throw new TypeError('dia.Graph: cell type must be a string.');
}
return cell;
},
maxZIndex: function() {
var lastCell = this.get('cells').last();
return lastCell ? (lastCell.get('z') || 0) : 0;
},
addCell: function(cell, options) {
if (_.isArray(cell)) {
return this.addCells(cell, options);
}
this.get('cells').add(this._prepareCell(cell), options || {});
return this;
},
addCells: function(cells, options) {
options = options || {};
options.position = cells.length;
_.each(cells, function(cell) {
options.position--;
this.addCell(cell, options);
}, this);
return this;
},
// When adding a lot of cells, it is much more efficient to
// reset the entire cells collection in one go.
// Useful for bulk operations and optimizations.
resetCells: function(cells, opt) {
this.get('cells').reset(_.map(cells, this._prepareCell, this), opt);
return this;
},
_removeCell: function(cell, collection, options) {
options = options || {};
if (!options.clear) {
// Applications might provide a `disconnectLinks` option set to `true` in order to
// disconnect links when a cell is removed rather then removing them. The default
// is to remove all the associated links.
if (options.disconnectLinks) {
this.disconnectLinks(cell, options);
} else {
this.removeLinks(cell, options);
}
}
// Silently remove the cell from the cells collection. Silently, because
// `joint.dia.Cell.prototype.remove` already triggers the `remove` event which is
// then propagated to the graph model. If we didn't remove the cell silently, two `remove` events
// would be triggered on the graph model.
this.get('cells').remove(cell, { silent: true });
delete cell.graph;
},
// Get a cell by `id`.
getCell: function(id) {
return this.get('cells').get(id);
},
getCells: function() {
return this.get('cells').toArray();
},
getElements: function() {
return _.map(this._nodes, function(exists, node) { return this.getCell(node); }, this);
},
getLinks: function() {
return _.map(this._edges, function(exists, edge) { return this.getCell(edge); }, this);
},
getFirstCell: function() {
return this.get('cells').first();
},
getLastCell: function() {
return this.get('cells').last();
},
// Get all inbound and outbound links connected to the cell `model`.
getConnectedLinks: function(model, opt) {
opt = opt || {};
var inbound = opt.inbound;
var outbound = opt.outbound;
if (_.isUndefined(inbound) && _.isUndefined(outbound)) {
inbound = outbound = true;
}
// The final array of connected link models.
var links = [];
// Connected edges. This hash table ([edge] -> true) serves only
// for a quick lookup to check if we already added a link.
var edges = {};
if (outbound) {
_.each(this.getOutboundEdges(model.id), function(exists, edge) {
if (!edges[edge]) {
links.push(this.getCell(edge));
edges[edge] = true;
}
}, this);
}
if (inbound) {
_.each(this.getInboundEdges(model.id), function(exists, edge) {
// Skip links that were already added. Those must be self-loop links
// because they are both inbound and outbond edges of the same element.
if (!edges[edge]) {
links.push(this.getCell(edge));
edges[edge] = true;
}
}, this);
}
// If 'deep' option is 'true', return all the links that are connected to any of the descendent cells
// and are not descendents themselves.
if (opt.deep) {
var embeddedCells = model.getEmbeddedCells({ deep: true });
// In the first round, we collect all the embedded edges so that we can exclude
// them from the final result.
var embeddedEdges = {};
_.each(embeddedCells, function(cell) {
if (cell.isLink()) {
embeddedEdges[cell.id] = true;
}
});
_.each(embeddedCells, function(cell) {
if (cell.isLink()) return;
if (outbound) {
_.each(this.getOutboundEdges(cell.id), function(exists, edge) {
if (!edges[edge] && !embeddedEdges[edge]) {
links.push(this.getCell(edge));
edges[edge] = true;
}
}, this);
}
if (inbound) {
_.each(this.getInboundEdges(cell.id), function(exists, edge) {
if (!edges[edge] && !embeddedEdges[edge]) {
links.push(this.getCell(edge));
edges[edge] = true;
}
}, this);
}
}, this);
}
return links;
},
getNeighbors: function(model, opt) {
opt = opt || {};
var inbound = opt.inbound;
var outbound = opt.outbound;
if (_.isUndefined(inbound) && _.isUndefined(outbound)) {
inbound = outbound = true;
}
var neighbors = _.transform(this.getConnectedLinks(model, opt), function(res, link) {
var source = link.get('source');
var target = link.get('target');
var loop = link.hasLoop(opt);
// Discard if it is a point, or if the neighbor was already added.
if (inbound && _.has(source, 'id') && !res[source.id]) {
var sourceElement = this.getCell(source.id);
if (loop || (sourceElement && sourceElement !== model && (!opt.deep || !sourceElement.isEmbeddedIn(model)))) {
res[source.id] = sourceElement;
}
}
// Discard if it is a point, or if the neighbor was already added.
if (outbound && _.has(target, 'id') && !res[target.id]) {
var targetElement = this.getCell(target.id);
if (loop || (targetElement && targetElement !== model && (!opt.deep || !targetElement.isEmbeddedIn(model)))) {
res[target.id] = targetElement;
}
}
}, {}, this);
return _.values(neighbors);
},
getCommonAncestor: function(/* cells */) {
var cellsAncestors = _.map(arguments, function(cell) {
var ancestors = [];
var parentId = cell.get('parent');
while (parentId) {
ancestors.push(parentId);
parentId = this.getCell(parentId).get('parent');
}
return ancestors;
}, this);
cellsAncestors = _.sortBy(cellsAncestors, 'length');
var commonAncestor = _.find(cellsAncestors.shift(), function(ancestor) {
return _.every(cellsAncestors, function(cellAncestors) {
return _.contains(cellAncestors, ancestor);
});
});
return this.getCell(commonAncestor);
},
// Find the whole branch starting at `element`.
// If `opt.deep` is `true`, take into account embedded elements too.
// If `opt.breadthFirst` is `true`, use the Breadth-first search algorithm, otherwise use Depth-first search.
getSuccessors: function(element, opt) {
opt = opt || {};
var res = [];
// Modify the options so that it includes the `outbound` neighbors only. In other words, search forwards.
this.search(element, function(el) {
if (el !== element) {
res.push(el);
}
}, _.extend({}, opt, { outbound: true }));
return res;
},
// Clone `cells` returning an object that maps the original cell ID to the clone. The number
// of clones is exactly the same as the `cells.length`.
// This function simply clones all the `cells`. However, it also reconstructs
// all the `source/target` and `parent/embed` references within the `cells`.
// This is the main difference from the `cell.clone()` method. The
// `cell.clone()` method works on one single cell only.
// For example, for a graph: `A --- L ---> B`, `cloneCells([A, L, B])`
// returns `[A2, L2, B2]` resulting to a graph: `A2 --- L2 ---> B2`, i.e.
// the source and target of the link `L2` is changed to point to `A2` and `B2`.
cloneCells: function(cells) {
// A map of the form [original cell ID] -> [clone] helping
// us to reconstruct references for source/target and parent/embeds.
// This is also the returned value.
var cloneMap = {};
// A map [original cell ID] -> [Array of original embeds].
// This mapping caches the `embeds` array of original cells.
// This is needed because when using a shallow clone (without `deep` set to `true`),
// `embeds` are reset (see joint.dia.Cell >> clone()).
var embedsCache = {};
_.each(cells, function(cell) {
if (!cloneMap[cell.id]) {
var clone = cell.clone();
cloneMap[cell.id] = clone;
embedsCache[clone.id] = cell.get('embeds');
}
});
_.each(cells, function(cell) {
var clone = cloneMap[cell.id];
// assert(clone exists)
if (clone.isLink()) {
var source = clone.get('source');
var target = clone.get('target');
if (source.id && cloneMap[source.id]) {
// Source points to an element and the element is among the clones.
// => Update the source of the cloned link.
clone.prop('source/id', cloneMap[source.id].id);
}
if (target.id && cloneMap[target.id]) {
// Target points to an element and the element is among the clones.
// => Update the target of the cloned link.
clone.prop('target/id', cloneMap[target.id].id);
}
}
var parent = clone.get('parent');
if (parent && cloneMap[parent]) {
clone.set('parent', cloneMap[parent].id);
}
if (embedsCache[clone.id]) {
var newEmbeds = [];
_.each(embedsCache[clone.id], function(embed) {
if (cloneMap[embed]) {
newEmbeds.push(cloneMap[embed].id);
} else {
newEmbeds.push(embed);
}
});
clone.set('embeds', newEmbeds);
}
});
return cloneMap;
},
// Clone the whole subgraph (including all the connected links whose source/target is in the subgraph).
// If `opt.deep` is `true`, also take into account all the embedded cells of all the subgraph cells.
// Return a map of the form: [original cell ID] -> [clone].
cloneSubgraph: function(cells, opt) {
var subgraph = this.getSubgraph(cells, opt);
return this.cloneCells(subgraph);
},
// Return `cells` and all the connected links that connect cells in the `cells` array.
// If `opt.deep` is `true`, return all the cells including all their embedded cells
// and all the links that connect any of the returned cells.
// For example, for a single shallow element, the result is that very same element.
// For two elements connected with a link: `A --- L ---> B`, the result for
// `getSubgraph([A, B])` is `[A, L, B]`. The same goes for `getSubgraph([L])`, the result is again `[A, L, B]`.
getSubgraph: function(cells, opt) {
opt = opt || {};
var subgraph = [];
// `cellMap` is used for a quick lookup of existance of a cell in the `cells` array.
var cellMap = {};
var elements = [];
var links = [];
_.each(cells, function(cell) {
if (!cellMap[cell.id]) {
subgraph.push(cell);
cellMap[cell.id] = cell;
if (cell.isLink()) {
links.push(cell);
} else {
elements.push(cell);
}
}
if (opt.deep) {
var embeds = cell.getEmbeddedCells({ deep: true });
_.each(embeds, function(embed) {
if (!cellMap[embed.id]) {
subgraph.push(embed);
cellMap[embed.id] = embed;
if (embed.isLink()) {
links.push(embed);
} else {
elements.push(embed);
}
}
});
}
});
_.each(links, function(link) {
// For links, return their source & target (if they are elements - not points).
var source = link.get('source');
var target = link.get('target');
if (source.id && !cellMap[source.id]) {
var sourceElement = this.getCell(source.id);
subgraph.push(sourceElement);
cellMap[sourceElement.id] = sourceElement;
elements.push(sourceElement);
}
if (target.id && !cellMap[target.id]) {
var targetElement = this.getCell(target.id);
subgraph.push(this.getCell(target.id));
cellMap[targetElement.id] = targetElement;
elements.push(targetElement);
}
}, this);
_.each(elements, function(element) {
// For elements, include their connected links if their source/target is in the subgraph;
var links = this.getConnectedLinks(element, opt);
_.each(links, function(link) {
var source = link.get('source');
var target = link.get('target');
if (!cellMap[link.id] && source.id && cellMap[source.id] && target.id && cellMap[target.id]) {
subgraph.push(link);
cellMap[link.id] = link;
}
});
}, this);
return subgraph;
},
// Find all the predecessors of `element`. This is a reverse operation of `getSuccessors()`.
// If `opt.deep` is `true`, take into account embedded elements too.
// If `opt.breadthFirst` is `true`, use the Breadth-first search algorithm, otherwise use Depth-first search.
getPredecessors: function(element, opt) {
opt = opt || {};
var res = [];
// Modify the options so that it includes the `inbound` neighbors only. In other words, search backwards.
this.search(element, function(el) {
if (el !== element) {
res.push(el);
}
}, _.extend({}, opt, { inbound: true }));
return res;
},
// Perform search on the graph.
// If `opt.breadthFirst` is `true`, use the Breadth-first Search algorithm, otherwise use Depth-first search.
// By setting `opt.inbound` to `true`, you can reverse the direction of the search.
// If `opt.deep` is `true`, take into account embedded elements too.
// `iteratee` is a function of the form `function(element) {}`.
// If `iteratee` explicitely returns `false`, the searching stops.
search: function(element, iteratee, opt) {
opt = opt || {};
if (opt.breadthFirst) {
this.bfs(element, iteratee, opt);
} else {
this.dfs(element, iteratee, opt);
}
},
// Breadth-first search.
// If `opt.deep` is `true`, take into account embedded elements too.
// If `opt.inbound` is `true`, reverse the search direction (it's like reversing all the link directions).
// `iteratee` is a function of the form `function(element, distance) {}`.
// where `element` is the currently visited element and `distance` is the distance of that element
// from the root `element` passed the `bfs()`, i.e. the element we started the search from.
// Note that the `distance` is not the shortest or longest distance, it is simply the number of levels
// crossed till we visited the `element` for the first time. It is especially useful for tree graphs.
// If `iteratee` explicitely returns `false`, the searching stops.
bfs: function(element, iteratee, opt) {
opt = opt || {};
var visited = {};
var distance = {};
var queue = [];
queue.push(element);
distance[element.id] = 0;
while (queue.length > 0) {
var next = queue.shift();
if (!visited[next.id]) {
visited[next.id] = true;
if (iteratee(next, distance[next.id]) === false) return;
_.each(this.getNeighbors(next, opt), function(neighbor) {
distance[neighbor.id] = distance[next.id] + 1;
queue.push(neighbor);
});
}
}
},
// Depth-first search.
// If `opt.deep` is `true`, take into account embedded elements too.
// If `opt.inbound` is `true`, reverse the search direction (it's like reversing all the link directions).
// `iteratee` is a function of the form `function(element, distance) {}`.
// If `iteratee` explicitely returns `false`, the search stops.
dfs: function(element, iteratee, opt, _visited, _distance) {
opt = opt || {};
var visited = _visited || {};
var distance = _distance || 0;
if (iteratee(element, distance) === false) return;
visited[element.id] = true;
_.each(this.getNeighbors(element, opt), function(neighbor) {
if (!visited[neighbor.id]) {
this.dfs(neighbor, iteratee, opt, visited, distance + 1);
}
}, this);
},
// Get all the roots of the graph. Time complexity: O(|V|).
getSources: function() {
var sources = [];
_.each(this._nodes, function(exists, node) {
if (!this._in[node] || _.isEmpty(this._in[node])) {
sources.push(this.getCell(node));
}
}, this);
return sources;
},
// Get all the leafs of the graph. Time complexity: O(|V|).
getSinks: function() {
var sinks = [];
_.each(this._nodes, function(exists, node) {
if (!this._out[node] || _.isEmpty(this._out[node])) {
sinks.push(this.getCell(node));
}
}, this);
return sinks;
},
// Return `true` if `element` is a root. Time complexity: O(1).
isSource: function(element) {
return !this._in[element.id] || _.isEmpty(this._in[element.id]);
},
// Return `true` if `element` is a leaf. Time complexity: O(1).
isSink: function(element) {
return !this._out[element.id] || _.isEmpty(this._out[element.id]);
},
// Return `true` is `elementB` is a successor of `elementA`. Return `false` otherwise.
isSuccessor: function(elementA, elementB) {
var isSuccessor = false;
this.search(elementA, function(element) {
if (element === elementB && element !== elementA) {
isSuccessor = true;
return false;
}
}, { outbound: true });
return isSuccessor;
},
// Return `true` is `elementB` is a predecessor of `elementA`. Return `false` otherwise.
isPredecessor: function(elementA, elementB) {
var isPredecessor = false;
this.search(elementA, function(element) {
if (element === elementB && element !== elementA) {
isPredecessor = true;
return false;
}
}, { inbound: true });
return isPredecessor;
},
// Return `true` is `elementB` is a neighbor of `elementA`. Return `false` otherwise.
// `opt.deep` controls whether to take into account embedded elements as well. See `getNeighbors()`
// for more details.
// If `opt.outbound` is set to `true`, return `true` only if `elementB` is a successor neighbor.
// Similarly, if `opt.inbound` is set to `true`, return `true` only if `elementB` is a predecessor neighbor.
isNeighbor: function(elementA, elementB, opt) {
opt = opt || {};
var inbound = opt.inbound;
var outbound = opt.outbound;
if (_.isUndefined(inbound) && _.isUndefined(outbound)) {
inbound = outbound = true;
}
var isNeighbor = false;
_.each(this.getConnectedLinks(elementA, opt), function(link) {
var source = link.get('source');
var target = link.get('target');
var loop = link.hasLoop(opt);
// Discard if it is a point.
if (inbound && _.has(source, 'id') && source.id === elementB.id) {
isNeighbor = true;
return false;
}
// Discard if it is a point, or if the neighbor was already added.
if (outbound && _.has(target, 'id') && target.id === elementB.id) {
isNeighbor = true;
return false;
}
});
return isNeighbor;
},
// Disconnect links connected to the cell `model`.
disconnectLinks: function(model, options) {
_.each(this.getConnectedLinks(model), function(link) {
link.set(link.get('source').id === model.id ? 'source' : 'target', g.point(0, 0), options);
});
},
// Remove links connected to the cell `model` completely.
removeLinks: function(model, options) {
_.invoke(this.getConnectedLinks(model), 'remove', options);
},
// Find all elements at given point
findModelsFromPoint: function(p) {
return _.filter(this.getElements(), function(el) {
return el.getBBox().containsPoint(p);
});
},
// Find all elements in given area
findModelsInArea: function(rect, opt) {
opt = _.defaults(opt || {}, { strict: false });
var method = opt.strict ? 'containsRect' : 'intersect';
return _.filter(this.getElements(), function(el) {
return rect[method](el.getBBox());
});
},
// Find all elements under the given element.
findModelsUnderElement: function(element, opt) {
opt = _.defaults(opt || {}, { searchBy: 'bbox' });
var bbox = element.getBBox();
var elements = (opt.searchBy == 'bbox')
? this.findModelsInArea(bbox)
: this.findModelsFromPoint(bbox[opt.searchBy]());
// don't account element itself or any of its descendents
return _.reject(elements, function(el) {
return element.id == el.id || el.isEmbeddedIn(element);
});
},
// Return the bounding box of all cells in array provided. If no array
// provided returns bounding box of all cells. Links are being ignored.
getBBox: function(cells) {
cells = cells || this.collection.models;
return _.reduce(cells, function(memo, cell) {
if (cell.isLink()) return memo;
if (memo) {
return memo.union(cell.getBBox());
} else {
return cell.getBBox();
}
}, undefined);
},
translate: function(dx, dy, opt) {
// Don't translate cells that are embedded in any other cell.
var cells = _.reject(this.getCells(), function(cell) {
return cell.isEmbedded();
});
_.invoke(cells, 'translate', dx, dy, opt);
}
});
+14 -7
View File
@@ -1,7 +1,14 @@
if(function(a,b){function c(a){var b=a.length,c=fa.type(a);return fa.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||"function"!==c&&(0===b||"number"==typeof b&&b>0&&b-1 in a)}function d(a){var b=oa[a]={};return fa.each(a.match(ha)||[],function(a,c){b[c]=!0}),b}function e(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=fa.expando+Math.random()}function f(a,c,d){var e;if(d===b&&1===a.nodeType)if(e="data-"+c.replace(sa,"-$1").toLowerCase(),d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:ra.test(d)?JSON.parse(d):d}catch(f){}pa.set(a,c,d)}else d=b;return d}function g(){return!0}function h(){return!1}function i(){try{return T.activeElement}catch(a){}}function j(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function k(a,b,c){if(fa.isFunction(b))return fa.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return fa.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(Ca.test(b))return fa.filter(b,a,c);b=fa.filter(b,a)}return fa.grep(a,function(a){return ba.call(b,a)>=0!==c})}function l(a,b){return fa.nodeName(a,"table")&&fa.nodeName(1===b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function m(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function n(a){var b=Na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function o(a,b){for(var c=a.length,d=0;c>d;d++)qa.set(a[d],"globalEval",!b||qa.get(b[d],"globalEval"))}function p(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(qa.hasData(a)&&(f=qa.access(a),g=qa.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)fa.event.add(b,e,j[e][c])}pa.hasData(a)&&(h=pa.access(a),i=fa.extend({},h),pa.set(b,i))}}function q(a,c){var d=a.getElementsByTagName?a.getElementsByTagName(c||"*"):a.querySelectorAll?a.querySelectorAll(c||"*"):[];return c===b||c&&fa.nodeName(a,c)?fa.merge([a],d):d}function r(a,b){var c=b.nodeName.toLowerCase();"input"===c&&Ka.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function s(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=_a.length;e--;)if(b=_a[e]+c,b in a)return b;return d}function t(a,b){return a=b||a,"none"===fa.css(a,"display")||!fa.contains(a.ownerDocument,a)}function u(b){return a.getComputedStyle(b,null)}function v(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=qa.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&t(d)&&(f[g]=qa.access(d,"olddisplay",z(d.nodeName)))):f[g]||(e=t(d),(c&&"none"!==c||!e)&&qa.set(d,"olddisplay",e?c:fa.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function w(a,b,c){var d=Ua.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function x(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=fa.css(a,c+$a[f],!0,e)),d?("content"===c&&(g-=fa.css(a,"padding"+$a[f],!0,e)),"margin"!==c&&(g-=fa.css(a,"border"+$a[f]+"Width",!0,e))):(g+=fa.css(a,"padding"+$a[f],!0,e),"padding"!==c&&(g+=fa.css(a,"border"+$a[f]+"Width",!0,e)));return g}function y(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=u(a),g=fa.support.boxSizing&&"border-box"===fa.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Qa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Va.test(e))return e;d=g&&(fa.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+x(a,b,c||(g?"border":"content"),d,f)+"px"}function z(a){var b=T,c=Xa[a];return c||(c=A(a,b),"none"!==c&&c||(Ra=(Ra||fa("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(b.documentElement),b=(Ra[0].contentWindow||Ra[0].contentDocument).document,b.write("<!doctype html><html><body>"),b.close(),c=A(a,b),Ra.detach()),Xa[a]=c),c}function A(a,b){var c=fa(b.createElement(a)).appendTo(b.body),d=fa.css(c[0],"display");return c.remove(),d}function B(a,b,c,d){var e;if(fa.isArray(b))fa.each(b,function(b,e){c||bb.test(a)?d(a,e):B(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==fa.type(b))d(a,b);else for(e in b)B(a+"["+e+"]",b[e],c,d)}function C(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(ha)||[];if(fa.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function D(a,b,c,d){function e(h){var i;return f[h]=!0,fa.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===sb;return e(b.dataTypes[0])||!f["*"]&&e("*")}function E(a,c){var d,e,f=fa.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);return e&&fa.extend(!0,a,e),a}function F(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;Line truncated
radio:!0,checkbox:!0,file:!0,password:!0,image:!0})z.pseudos[w]=i(w);for(w in{submit:!0,reset:!0})z.pseudos[w]=j(w);l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split("").sort(V).join("")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),f(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||g("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||g("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),f(function(a){return null==a.getAttribute("disabled")})||g(da,function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&d.specified?d.value:a[b]===!0?b.toLowerCase():null}),fa.find=c,fa.expr=c.selectors,fa.expr[":"]=fa.expr.pseudos,fa.unique=c.uniqueSort,fa.text=c.getText,fa.isXMLDoc=c.isXML,fa.contains=c.contains}(a);var oa={};fa.Callbacks=function(a){a="string"==typeof a?oa[a]||d(a):fa.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(c=a.memory&&b,e=!0,i=g||0,g=0,h=j.length,f=!0;j&&h>i;i++)if(j[i].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}f=!1,j&&(k?k.length&&l(k.shift()):c?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){fa.each(b,function(b,c){var e=fa.type(c);"function"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&"string"!==e&&d(c)})}(arguments),f?h=j.length:c&&(g=b,l(c))}return this},remove:function(){return j&&fa.each(arguments,function(a,b){for(var c;(c=fa.inArray(b,j,c))>-1;)j.splice(c,1),f&&(h>=c&&h--,i>=c&&i--)}),this},has:function(a){return a?fa.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],h=0,this},disable:function(){return j=k=c=b,this},disabled:function(){return!j},lock:function(){return k=b,c||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||e&&!k||(b=b||[],b=[a,b.slice?b.slice():b],f?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!e}};return m},fa.extend({Deferred:function(a){var b=[["resolve","done",fa.Callbacks("once memory"),"resolved"],["reject","fail",fa.Callbacks("once memory"),"rejected"],["notify","progress",fa.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return fa.Deferred(function(c){fa.each(b,function(b,f){var g=f[0],h=fa.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&fa.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+"With"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?fa.extend(a,d):d}},e={};return d.pipe=d.then,fa.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=aa.call(arguments),g=f.length,h=1!==g||a&&fa.isFunction(a.promise)?g:0,i=1===h?a:fa.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?aa.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&fa.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),fa.support=function(b){var c=T.createElement("input"),d=T.createDocumentFragment(),e=T.createElement("div"),f=T.createElement("select"),g=f.appendChild(T.createElement("option"));return c.type?(c.type="checkbox",b.checkOn=""!==c.value,b.optSelected=g.selected,b.reliableMarginRight=!0,b.boxSizingReliable=!0,b.pixelPosition=!1,c.checked=!0,b.noCloneChecked=c.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled,c=T.createElement("input"),c.value="t",c.type="radio",b.radioValue="t"===c.value,c.setAttribute("checked","t"),c.setAttribute("name","t"),d.appendChild(c),b.checkClone=d.cloneNode(!0).cloneNode(!0).lastChild.checked,b.focusinBubbles="onfocusin"in a,e.style.backgroundClip="content-box",e.cloneNode(!0).style.backgroundClip="",b.clearCloneStyle="content-box"===e.style.backgroundClip,fa(function(){var c,d,f="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",g=T.getElementsByTagName("body")[0];g&&(c=T.createElement("div"),c.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",g.appendChild(c).appendChild(e),e.innerHTML="",e.style.cssText="-Line truncated
fa.fn.extend({css:function(a,c){return fa.access(this,function(a,c,d){var e,f,g={},h=0;if(fa.isArray(c)){for(e=u(a),f=c.length;f>h;h++)g[c[h]]=fa.css(a,c[h],!1,e);return g}return d!==b?fa.style(a,c,d):fa.css(a,c)},a,c,arguments.length>1)},show:function(){return v(this,!0)},hide:function(){return v(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){t(this)?fa(this).show():fa(this).hide()})}}),fa.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Qa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=fa.camelCase(c),j=a.style;return c=fa.cssProps[i]||(fa.cssProps[i]=s(j,i)),h=fa.cssHooks[c]||fa.cssHooks[i],d===b?h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c]:(g=typeof d,"string"===g&&(f=Wa.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(fa.css(a,c)),g="number"),void(null==d||"number"===g&&isNaN(d)||("number"!==g||fa.cssNumber[i]||(d+="px"),fa.support.clearCloneStyle||""!==d||0!==c.indexOf("background")||(j[c]="inherit"),h&&"set"in h&&(d=h.set(a,d,e))===b||(j[c]=d))))}},css:function(a,c,d,e){var f,g,h,i=fa.camelCase(c);return c=fa.cssProps[i]||(fa.cssProps[i]=s(a.style,i)),h=fa.cssHooks[c]||fa.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,d)),f===b&&(f=Qa(a,c,e)),"normal"===f&&c in Za&&(f=Za[c]),""===d||d?(g=parseFloat(f),d===!0||fa.isNumeric(g)?g||0:f):f}}),Qa=function(a,c,d){var e,f,g,h=d||u(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(""!==i||fa.contains(a.ownerDocument,a)||(i=fa.style(a,c)),Va.test(i)&&Ta.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i},fa.each(["height","width"],function(a,b){fa.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Sa.test(fa.css(a,"display"))?fa.swap(a,Ya,function(){return y(a,b,d)}):y(a,b,d):void 0},set:function(a,c,d){var e=d&&u(a);return w(a,c,d?x(a,b,d,fa.support.boxSizing&&"border-box"===fa.css(a,"boxSizing",!1,e),e):0)}}}),fa(function(){fa.support.reliableMarginRight||(fa.cssHooks.marginRight={get:function(a,b){return b?fa.swap(a,{display:"inline-block"},Qa,[a,"marginRight"]):void 0}}),!fa.support.pixelPosition&&fa.fn.position&&fa.each(["top","left"],function(a,b){fa.cssHooks[b]={get:function(a,c){return c?(c=Qa(a,b),Va.test(c)?fa(a).position()[b]+"px":c):void 0}}})}),fa.expr&&fa.expr.filters&&(fa.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},fa.expr.filters.visible=function(a){return!fa.expr.filters.hidden(a)}),fa.each({margin:"",padding:"",border:"Width"},function(a,b){fa.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+$a[d]+b]=f[d]||f[d-2]||f[0];return e}},Ta.test(a)||(fa.cssHooks[a+b].set=w)});var ab=/%20/g,bb=/\[\]$/,cb=/\r?\n/g,db=/^(?:submit|button|image|reset|file)$/i,eb=/^(?:input|select|textarea|keygen)/i;fa.fn.extend({serialize:function(){return fa.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=fa.prop(this,"elements");return a?fa.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!fa(this).is(":disabled")&&eb.test(this.nodeName)&&!db.test(a)&&(this.checked||!Ka.test(a))}).map(function(a,b){var c=fa(this).val();return null==c?null:fa.isArray(c)?fa.map(c,function(a){return{name:b.name,value:a.replace(cb,"\r\n")}}):{name:b.name,value:c.replace(cb,"\r\n")}}).get()}}),fa.param=function(a,c){var d,e=[],f=function(a,b){b=fa.isFunction(b)?b():null==b?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(c===b&&(c=fa.ajaxSettings&&fa.ajaxSettings.traditional),fa.isArray(a)||a.jquery&&!fa.isPlainObject(a))fa.each(a,function(){f(this.name,this.value)});else for(d in a)B(d,a[d],c,f);return e.join("&").replace(ab,"+")},fa.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){fa.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),fa.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var fb,gb,hb=fa.now(),ib=/\?/,jb=/#.*$/,kb=/([?&])_=[^&]*/,lb=/^(.*?):[ \t]*([^\r\n]*)$/gm,mb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,nb=/^(?:GET|HEAD)$/,ob=/^\/\//,pb=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,qb=fa.fn.load,rb={},sb={},tb="*/".concat("*");try{gb=S.href}catch(ub){gb=T.createElement("a"),gb.href="",gb=gb.href}fb=pb.exec(gb.toLowerCase())||[],fa.fn.load=function(a,c,dLine truncated
if(j){var k=f(h);k?(e=b,h=k):j=!1}for(;++d<g;){var m=c[d];e(h,m)<0&&i.push(m)}return j&&l(h),i}function jb(a,b,c){var d=-1,e=a?a.length:0;for(b=p.createCallback(b,c,3);++d<e;)if(b(a[d],d,a))return d;return-1}function kb(a,b,c){var d=a?a.length:0;for(b=p.createCallback(b,c,3);d--;)if(b(a[d],d,a))return d;return-1}function lb(a,b,c){var d=0,e=a?a.length:0;if("number"!=typeof b&&null!=b){var f=-1;for(b=p.createCallback(b,c,3);++f<e&&b(a[f],f,a);)d++}else if(d=b,null==d||c)return a?a[0]:o;return m(a,0,Oc(Nc(0,d),e))}function mb(a,b,c,d){return"boolean"!=typeof b&&null!=b&&(d=c,c=d&&d[b]===a?null:b,b=!1),null!=c&&(a=Wa(a,c,d)),Y(a,b)}function nb(b,c,d){if("number"==typeof d){var e=b?b.length:0;d=0>d?Nc(0,e+d):d||0}else if(d){var f=wb(b,c);return b[f]===c?f:-1}return a(b,c,d)}function ob(a,b,c){var d=0,e=a?a.length:0;if("number"!=typeof b&&null!=b){var f=e;for(b=p.createCallback(b,c,3);f--&&b(a[f],f,a);)d++}else d=null==b||c?1:b||d;return m(a,0,Oc(Nc(0,e-d),e))}function pb(c){for(var d=arguments,e=d.length,g=-1,i=h(),j=-1,m=ga(),n=c?c.length:0,o=[],p=h();++g<e;){var q=d[g];i[g]=m===a&&(q?q.length:0)>=t&&f(g?d[g]:p)}a:for(;++j<n;){var r=i[0];if(q=c[j],(r?b(r,q):m(p,q))<0){for(g=e,(r||p).push(q);--g;)if(r=i[g],(r?b(r,q):m(d[g],q))<0)continue a;o.push(q)}}for(;e--;)r=i[e],r&&l(r);return k(i),k(p),o}function qb(a,b,c){var d=0,e=a?a.length:0;if("number"!=typeof b&&null!=b){var f=e;for(b=p.createCallback(b,c,3);f--&&b(a[f],f,a);)d++}else if(d=b,null==d||c)return a?a[e-1]:o;return m(a,Nc(0,e-d))}function rb(a,b,c){var d=a?a.length:0;for("number"==typeof c&&(d=(0>c?Nc(0,d+c):Oc(c,d-1))+1);d--;)if(a[d]===b)return d;return-1}function sb(a){for(var b=arguments,c=0,d=b.length,e=a?a.length:0;++c<d;)for(var f=-1,g=b[c];++f<e;)a[f]===g&&(Dc.call(a,f--,1),e--);return a}function tb(a,b,c){a=+a||0,c="number"==typeof c?c:+c||1,null==b&&(b=a,a=0);for(var d=-1,e=Nc(0,tc((b-a)/(c||1))),f=fc(e);++d<e;)f[d]=a,a+=c;return f}function ub(a,b,c){var d=-1,e=a?a.length:0,f=[];for(b=p.createCallback(b,c,3);++d<e;){var g=a[d];b(g,d,a)&&(f.push(g),Dc.call(a,d--,1),e--)}return f}function vb(a,b,c){if("number"!=typeof b&&null!=b){var d=0,e=-1,f=a?a.length:0;for(b=p.createCallback(b,c,3);++e<f&&b(a[e],e,a);)d++}else d=null==b||c?1:Nc(0,b);return m(a,d)}function wb(a,b,c,d){var e=0,f=a?a.length:e;for(c=c?p.createCallback(c,d,1):Tb,b=c(b);f>e;){var g=e+f>>>1;c(a[g])<b?e=g+1:f=g}return e}function xb(){return ba(Y(arguments,!0,!0))}function yb(a,b,c,d){return"boolean"!=typeof b&&null!=b&&(d=c,c=d&&d[b]===a?null:b,b=!1),null!=c&&(c=p.createCallback(c,d,3)),ba(a,b,c)}function zb(a){return ib(a,Rc.call(arguments,1))}function Ab(){for(var a=arguments.length>1?arguments:arguments[0],b=-1,c=a?Xa(Za(a,"length")):0,d=fc(0>c?0:c);++b<c;)d[b]=Za(a,b);return d}function Bb(a,b){for(var c=-1,d=a?a.length:0,e={};++c<d;){var f=a[c];b?e[f]=b[c]:f&&(e[f[0]]=f[1])}return e}function Cb(a,b){if(!za(b))throw new oc;return function(){return--a<1?b.apply(this,arguments):void 0}}function Db(a,b){return arguments.length>2?da(a,17,Rc.call(arguments,2),null,b):da(a,1,null,null,b)}function Eb(a){for(var b=arguments.length>1?Y(arguments,!0,!1,1):qa(a),c=-1,d=b.length;++c<d;){var e=b[c];a[e]=da(a[e],1,null,null,a)}return a}function Fb(a,b){return arguments.length>2?da(b,19,Rc.call(arguments,2),null,a):da(b,3,null,null,a)}function Gb(){for(var a=arguments,b=a.length;b--;)if(!za(a[b]))throw new oc;return function(){for(var b=arguments,c=a.length;c--;)b=[a[c].apply(this,b)];return b[0]}}function Hb(a,b,c){var d=typeof a;if(null==a||"function"==d)return W(a,b,c);if("object"!=d)return function(b){return b[a]};var e=Zc(a),f=e[0],g=a[f];return 1!=e.length||g!==g||Aa(g)?function(b){for(var c=e.length,d=!1;c--&&(d=Z(b[e[c]],a[e[c]],null,!0)););return d}:function(a){var b=a[f];return g===b&&(0!==g||1/g==1/b)}}function Ib(a,b){return b="number"==typeof b?b:+b||a.length,da(a,4,null,null,null,b)}function Jb(a,b,c){var d,e,f,g,h,i,j,k=0,l=!1,m=!0;if(!za(a))throw new oc;if(b=Nc(0,b)||0,c===!0){var n=!0;m=!1}else Aa(c)&&(n=c.leading,l="maxWait"in c&&(Nc(b,c.maxWait)||0),m="trailing"in c?c.trailing:m);var p=function(){var c=b-(zc()-g);if(0>=c){e&&uc(e);var l=j;e=i=j=o,l&&(k=zc(),f=a.apply(h,d))}else i=Cc(p,c)},q=function(){i&&uc(i),e=i=j=o,(m||l!==b)&&(k=zc(),f=a.apply(h,d))};return function(){if(d=arguments,g=zc(),h=this,j=m&&(i||!n),l===!1)var c=n&&!i;else{e||n||(k=g);var o=l-(g-k);0>=o?(e&&(e=uc(e)),k=g,f=a.apply(h,d)):e||(e=Cc(q,o))}return i||b===l||(i=Cc(p,b)),c&&(f=a.apply(h,d)),f}}function Kb(a){if(!za(a))throw new oc;var b=Rc.call(arguments,1);return Cc(function(){a.apply(o,b)},1)}function Lb(a,b){if(!za(a))throw new oc;var c=Rc.call(arguments,2);return Cc(function(){a.apply(o,c)},b)}function Mb(a,b){if(!za(a))throw new oc;var c=function(){var d=c.cache,e=b?b.apply(this,arguments):s+arguments[0];return yc.call(d,e)?d[e]:d[e]=a.apply(this,arguments)};return c.cache={},c}function Nb(a){var b,c;if(!za(a))throw new oc;return function(){return b?c:(b=!0,c=a.apply(this,arguments),a=null,c)}}funcLine truncated
!0;this._hasPushState&&this.atRoot()&&h.hash&&(this.fragment=this.getHash().replace(E,""),this.history.replaceState({},document.title,this.root+this.fragment))}return this.options.silent?void 0:this.loadUrl()},stop:function(){b.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),D.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();return a===this.fragment&&this.iframe&&(a=this.getFragment(this.getHash(this.iframe))),a===this.fragment?!1:(this.iframe&&this.navigate(a),void this.loadUrl())},loadUrl:function(a){return a=this.fragment=this.getFragment(a),c.any(this.handlers,function(b){return b.route.test(a)?(b.callback(a),!0):void 0})},navigate:function(a,b){if(!D.started)return!1;b&&b!==!0||(b={trigger:!!b});var c=this.root+(a=this.getFragment(a||""));if(a=a.replace(I,""),this.fragment!==a){if(this.fragment=a,""===a&&"/"!==c&&(c=c.slice(0,-1)),this._hasPushState)this.history[b.replace?"replaceState":"pushState"]({},document.title,c);else{if(!this._wantsHashChange)return this.location.assign(c);this._updateHash(this.location,a,b.replace),this.iframe&&a!==this.getFragment(this.getHash(this.iframe))&&(b.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,a,b.replace))}return b.trigger?this.loadUrl(a):void 0}},_updateHash:function(a,b,c){if(c){var d=a.href.replace(/(javascript:|#).*$/,"");a.replace(d+"#"+b)}else a.hash="#"+b}}),b.history=new D;var J=function(a,b){var d,e=this;d=a&&c.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},c.extend(d,e,b);var f=function(){this.constructor=d};return f.prototype=e.prototype,d.prototype=new f,a&&c.extend(d.prototype,a),d.__super__=e.prototype,d};m.extend=o.extend=y.extend=t.extend=D.extend=J;var K=function(){throw new Error('A "url" property or function must be specified')},L=function(a,b){var c=b.error;b.error=function(d){c&&c(a,d,b),a.trigger("error",a,d,b)}};return b}),function(a,b){"function"==typeof define&&define.amd?define([],b):a.Vectorizer=a.V=b()}(this,function(){function a(){var a=++m+"";return"v-"+a}function b(a){var b='<svg xmlns="'+k.xmlns+'" xmlns:xlink="'+k.xlink+'" version="'+l+'">'+(a||"")+"</svg>",c=new DOMParser;return c.async=!1,c.parseFromString(b,"text/xml").documentElement}function c(a,c,e){if(a){if("object"==typeof a)return new i(a);if(c=c||{},"svg"===a.toLowerCase())return new i(b());if("<"===a[0]){var f=b(a);if(f.childNodes.length>1){for(var g=[],h=0,j=f.childNodes.length;j>h;h++){var l=f.childNodes[h];g.push(new i(document.importNode(l,!0)))}return g}return new i(document.importNode(f.firstChild,!0))}a=document.createElementNS(k.xmlns,a);for(var m in c)d(a,m,c[m]);"[object Array]"!=Object.prototype.toString.call(e)&&(e=[e]);for(var n,h=0,j=e[0]&&e.length||0;j>h;h++)n=e[h],a.appendChild(n instanceof i?n.node:n);return new i(a)}}function d(a,b,c){if(b.indexOf(":")>-1){var d=b.split(":");a.setAttributeNS(k[d[0]],d[1],c)}else"id"===b?a.id=c:a.setAttribute(b,c)}function e(a){var b,c,d;if(a){var e=/[ ,]+/,f=a.match(/translate\((.*)\)/);f&&(b=f[1].split(e));var g=a.match(/rotate\((.*)\)/);g&&(c=g[1].split(e));var h=a.match(/scale\((.*)\)/);h&&(d=h[1].split(e))}var i=d&&d[0]?parseFloat(d[0]):1;return{translate:{tx:b&&b[0]?parseInt(b[0],10):0,ty:b&&b[1]?parseInt(b[1],10):0},rotate:{angle:c&&c[0]?parseInt(c[0],10):0,cx:c&&c[1]?parseInt(c[1],10):void 0,cy:c&&c[2]?parseInt(c[2],10):void 0},scale:{sx:i,sy:d&&d[1]?parseFloat(d[1]):i}}}function f(a,b){var c=b.x*a.a+b.y*a.c+0,d=b.x*a.b+b.y*a.d+0;return{x:c,y:d}}function h(a){var b=f(a,{x:0,y:1}),c=f(a,{x:1,y:0}),d=180/Math.PI*Math.atan2(b.y,b.x)-90,e=180/Math.PI*Math.atan2(c.y,c.x);return{translateX:a.e,translateY:a.f,scaleX:Math.sqrt(a.a*a.a+a.b*a.b),scaleY:Math.sqrt(a.c*a.c+a.d*a.d),skewX:d,skewY:e,rotation:d}}function i(b){this.node=b,this.node.id||(this.node.id=a())}function j(a){var b=a.rx||a["top-rx"]||0,c=a.rx||a["bottom-rx"]||0,d=a.ry||a["top-ry"]||0,e=a.ry||a["bottom-ry"]||0;return["M",a.x,a.y+d,"v",a.height-d-e,"a",c,e,0,0,0,c,e,"h",a.width-2*c,"a",c,e,0,0,0,c,-e,"v",-(a.height-e-d),"a",b,d,0,0,0,-b,-d,"h",-(a.width-2*b),"a",b,d,0,0,0,-b,d].join(" ")}var k=(!(!window.SVGAngle&&!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),{xmlns:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"}),l="1.1",m=0;i.prototype={translate:function(a,b,c){c=c||{},b=b||0;var d=this.attr("transform")||"",f=e(d);if("undefined"==typeof a)return f.translate;d=d.replace(/translate\([^\)]*\)/g,"").trim();var g=c.absolute?a:f.translate.tx+a,h=c.absolute?b:f.translate.ty+b,i="translate("+g+","+h+")";return this.attr("transform",(i+" "+d).trim()),this},rotate:function(a,b,c,d){d=d||{};var f=this.attr("transform")||"",g=e(f);if("undefined"==typeof a)return g.rotate;f=f.replace(/rotate\([^\)]*\)/g,"").trim(),a%=360;var h=d.absolute?a:g.rotate.angle+a,i=void 0!==b&&vLine truncated
this)},addCells:function(a,b){return b=b||{},b.position=a.length,_.each(a,function(a){b.position--,this.addCell(a,b)},this),this},resetCells:function(a,b){return this.get("cells").reset(_.map(a,this._prepareCell,this),b),this},removeCell:function(a,b,c){c&&c.disconnectLinks?this.disconnectLinks(a):this.removeLinks(a),this.get("cells").remove(a,{silent:!0})},getCell:function(a){return this.get("cells").get(a)},getElements:function(){return this.get("cells").filter(function(a){return a instanceof joint.dia.Element})},getLinks:function(){return this.get("cells").filter(function(a){return a instanceof joint.dia.Link})},getConnectedLinks:function(a,b){return this.get("cells").getConnectedLinks(a,b)},getNeighbors:function(a){var b=this.getConnectedLinks(a),c=[],d=this.get("cells");return _.each(b,function(b){var e=b.get("source"),f=b.get("target");if(!e.x){var g=d.get(e.id);g!==a&&c.push(g)}if(!f.x){var h=d.get(f.id);h!==a&&c.push(h)}}),c},disconnectLinks:function(a){_.each(this.getConnectedLinks(a),function(b){b.set(b.get("source").id===a.id?"source":"target",g.point(0,0))})},removeLinks:function(a){_.invoke(this.getConnectedLinks(a),"remove")},findModelsFromPoint:function(a){return _.filter(this.getElements(),function(b){return b.getBBox().containsPoint(a)})},findModelsInArea:function(a){return _.filter(this.getElements(),function(b){return b.getBBox().intersect(a)})},getBBox:function(a){var b={x:1/0,y:1/0},c={x:0,y:0};return _.each(a,function(a){var d=a.getBBox();b.x=Math.min(b.x,d.x),b.y=Math.min(b.y,d.y),c.x=Math.max(c.x,d.x+d.width),c.y=Math.max(c.y,d.y+d.height)}),g.rect(b.x,b.y,c.x-b.x,c.y-b.y)}}),"object"==typeof exports&&(module.exports.Graph=joint.dia.Graph),"object"==typeof exports)var joint={util:require("./core").util,dia:{Link:require("./joint.dia.link").Link}},Backbone=require("backbone"),_=require("lodash");if(joint.dia.Cell=Backbone.Model.extend({constructor:function(a,b){var c,d=a||{};this.cid=_.uniqueId("c"),this.attributes={},b&&b.collection&&(this.collection=b.collection),b&&b.parse&&(d=this.parse(d,b)||{}),(c=_.result(this,"defaults"))&&(d=_.merge({},c,d)),this.set(d,b),this.changed={},this.initialize.apply(this,arguments)},toJSON:function(){var a=this.constructor.prototype.defaults.attrs||{},b=this.attributes.attrs,c={};_.each(b,function(b,d){var e=a[d];_.each(b,function(a,b){_.isObject(a)&&!_.isArray(a)?_.each(a,function(a,f){e&&e[b]&&_.isEqual(e[b][f],a)||(c[d]=c[d]||{},(c[d][b]||(c[d][b]={}))[f]=a)}):e&&_.isEqual(e[b],a)||(c[d]=c[d]||{},c[d][b]=a)})});var d=_.cloneDeep(_.omit(this.attributes,"attrs"));return d.attrs=c,d},initialize:function(a){a&&a.id||this.set("id",joint.util.uuid(),{silent:!0}),this._transitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},processPorts:function(){var a=this.ports,b={};_.each(this.get("attrs"),function(a){a&&a.port&&(_.isUndefined(a.port.id)?b[a.port]={id:a.port}:b[a.port.id]=a.port)});var c={};if(_.each(a,function(a,d){b[d]||(c[d]=!0)}),this.collection&&!_.isEmpty(c)){var d=this.collection.getConnectedLinks(this,{inbound:!0});_.each(d,function(a){c[a.get("target").port]&&a.remove()});var e=this.collection.getConnectedLinks(this,{outbound:!0});_.each(e,function(a){c[a.get("source").port]&&a.remove()})}this.ports=b},remove:function(a){var b=this.collection;b&&b.trigger("batch:start");var c=this.get("parent");if(c){var d=this.collection&&this.collection.get(c);d.unembed(this)}return _.invoke(this.getEmbeddedCells(),"remove",a),this.trigger("remove",this,this.collection,a),b&&b.trigger("batch:stop"),this},toFront:function(){return this.collection&&this.set("z",(this.collection.last().get("z")||0)+1),this},toBack:function(){return this.collection&&this.set("z",(this.collection.first().get("z")||0)-1),this},embed:function(a){if(this.get("parent")==a.id)throw new Error("Recursive embedding not allowed.");return this.trigger("batch:start"),a.set("parent",this.id),this.set("embeds",_.uniq((this.get("embeds")||[]).concat([a.id]))),this.trigger("batch:stop"),this},unembed:function(a){this.trigger("batch:start");var b=a.id;return a.unset("parent"),this.set("embeds",_.without(this.get("embeds"),b)),this.trigger("batch:stop"),this},getEmbeddedCells:function(){return this.collection?_.map(this.get("embeds")||[],function(a){return this.collection.get(a)},this):[]},clone:function(a){a=a||{};var b=Backbone.Model.prototype.clone.apply(this,arguments);if(b.set("id",joint.util.uuid(),{silent:!0}),b.set("embeds",""),!a.deep)return b;var c=_.sortBy(this.getEmbeddedCells(),function(a){return a instanceof joint.dia.Element}),d=[b],e={};return _.each(c,function(a){var c=a.clone({deep:!0});b.embed(c[0]),_.each(c,function(c){if(c instanceof joint.dia.Link)return c.get("source").id==this.id&&c.prop("source",{id:b.id}),c.get("target").id==this.id&&c.prop("target",{id:b.id}),void(e[a.id]=c);d.push(c);var f=this.collection.getConnectedLinks(a,{inbound:!0});_.each(f,function(a){var b=e[a.id]||a.clone();e[a.id]=b,b.prop("target",{id:c.id})});var g=this.colLine truncated
this.paper.options.markAvailable&&this._unmarkAvailableMagnets(),this.model.trigger("batch:stop")},_createValidateConnectionArgs:function(a){function b(a,b){return c[f]=a,c[f+1]=a.el===b?void 0:b,c}var c=[];c[4]=a,c[5]=this;var d,e=0,f=0;"source"===a?(e=2,d="target"):(f=2,d="source");var g=this.model.get(d);return g.id&&(c[e]=this.paper.findViewByModel(g.id),c[e+1]=g.selector&&c[e].el.querySelector(g.selector)),b},_markAvailableMagnets:function(){var a=this.paper.model.getElements(),b=this.paper.options.validateConnection;_.chain(a).map(this.paper.findViewByModel,this.paper).each(function(a){var c="false"!==a.el.getAttribute("magnet")&&b.apply(this.paper,this._validateConnectionArgs(a,null)),d=_.filter(a.el.querySelectorAll("[magnet]"),function(c){return b.apply(this.paper,this._validateConnectionArgs(a,c))},this);c&&V(a.el).addClass("available-magnet"),_.each(d,function(a){V(a).addClass("available-magnet")}),(c||d.length)&&V(a.el).addClass("available-cell")},this)},_unmarkAvailableMagnets:function(){_.each(this.paper.el.querySelectorAll(".available-cell, .available-magnet"),function(a){V(a).removeClass("available-magnet").removeClass("available-cell")})},startArrowheadMove:function(a){this._action="arrowhead-move",this._arrowhead=a,this._validateConnectionArgs=this._createValidateConnectionArgs(this._arrowhead),this._beforeArrowheadMove()},pointerdown:function(a,b,c){function d(a){return!_.isObject(e)||e[a]!==!1}joint.dia.CellView.prototype.pointerdown.apply(this,arguments),this._dx=b,this._dy=c;var e=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;if(e!==!1){var f=a.target.getAttribute("class");switch(f){case"marker-vertex":d("vertexMove")&&(this._action="vertex-move",this._vertexIdx=a.target.getAttribute("idx"));break;case"marker-vertex-remove":case"marker-vertex-remove-area":d("vertexRemove")&&this.removeVertex(a.target.getAttribute("idx"));break;case"marker-arrowhead":d("arrowheadMove")&&this.startArrowheadMove(a.target.getAttribute("end"));break;default:var g=a.target.parentNode.getAttribute("event");g?"remove"===g?this.model.remove():this.paper.trigger(g,a,this,b,c):d("vertexAdd")&&(this._vertexIdx=this.addVertex({x:b,y:c}),this._action="vertex-move")}this.paper.trigger("link:pointerdown",a,this,b,c)}},pointermove:function(a,b,c){switch(joint.dia.CellView.prototype.pointermove.apply(this,arguments),this._action){case"vertex-move":var d=_.clone(this.model.get("vertices"));d[this._vertexIdx]={x:b,y:c},this.model.set("vertices",d);break;case"arrowhead-move":if(this.paper.options.snapLinks){var e=this.paper.options.snapLinks.radius||50,f=this.paper.findViewsInArea({x:b-e,y:c-e,width:2*e,height:2*e});this._closestView&&this._closestView.unhighlight(this._closestEnd.selector),this._closestView=this._closestEnd=null;var h,i=g.point(b,c),j=Number.MAX_VALUE;_.each(f,function(a){"false"!==a.el.getAttribute("magnet")&&(h=a.model.getBBox().center().distance(i),e>h&&j>h&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,null))&&(j=h,this._closestView=a,this._closestEnd={id:a.model.id})),a.$("[magnet]").each(_.bind(function(b,c){var d=V(c).bbox(!1,this.paper.viewport);h=i.distance({x:d.x+d.width/2,y:d.y+d.height/2}),e>h&&j>h&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,c))&&(j=h,this._closestView=a,this._closestEnd={id:a.model.id,selector:a.getSelector(c),port:c.getAttribute("port")})},this))},this),this._closestView&&this._closestView.highlight(this._closestEnd.selector),this.model.set(this._arrowhead,this._closestEnd||{x:b,y:c})}else{var k="mousemove"===a.type?a.target:document.elementFromPoint(a.clientX,a.clientY);this._targetEvent!==k&&(this._magnetUnderPointer&&this._viewUnderPointer.unhighlight(this._magnetUnderPointer),this._viewUnderPointer=this.paper.findView(k),this._viewUnderPointer?(this._magnetUnderPointer=this._viewUnderPointer.findMagnet(k),this._magnetUnderPointer&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(this._viewUnderPointer,this._magnetUnderPointer))?this._magnetUnderPointer&&this._viewUnderPointer.highlight(this._magnetUnderPointer):this._magnetUnderPointer=null):this._magnetUnderPointer=null),this._targetEvent=k,this.model.set(this._arrowhead,{x:b,y:c})}}this._dx=b,this._dy=c},pointerup:function(){joint.dia.CellView.prototype.pointerup.apply(this,arguments),"arrowhead-move"===this._action&&(this.paper.options.snapLinks?(this._closestView&&this._closestView.unhighlight(this._closestEnd.selector),this._closestView=this._closestEnd=null):(this._magnetUnderPointer&&(this._viewUnderPointer.unhighlight(this._magnetUnderPointer),this.model.set(this._arrowhead,{id:this._viewUnderPointer.model.id,selector:this._viewUnderPointer.getSelector(this._magnetUnderPointer),port:$(this._magnetUnderPointer).attr("port")})),delete this._viewUnderPointer,delete this._magnetUnderPointer,delete this._staticView,delete this._staticMagneLine truncated
/*! JointJS v0.9.2 - JavaScript diagramming library 2014-09-17
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
if(function(a,b){function c(a){var b=a.length,c=fb.type(a);return fb.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||"function"!==c&&(0===b||"number"==typeof b&&b>0&&b-1 in a)}function d(a){var b=ob[a]={};return fb.each(a.match(hb)||[],function(a,c){b[c]=!0}),b}function e(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=fb.expando+Math.random()}function f(a,c,d){var e;if(d===b&&1===a.nodeType)if(e="data-"+c.replace(sb,"-$1").toLowerCase(),d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:rb.test(d)?JSON.parse(d):d}catch(f){}pb.set(a,c,d)}else d=b;return d}function g(){return!0}function h(){return!1}function i(){try{return T.activeElement}catch(a){}}function j(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function k(a,b,c){if(fb.isFunction(b))return fb.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return fb.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(Cb.test(b))return fb.filter(b,a,c);b=fb.filter(b,a)}return fb.grep(a,function(a){return bb.call(b,a)>=0!==c})}function l(a,b){return fb.nodeName(a,"table")&&fb.nodeName(1===b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function m(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function n(a){var b=Nb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function o(a,b){for(var c=a.length,d=0;c>d;d++)qb.set(a[d],"globalEval",!b||qb.get(b[d],"globalEval"))}function p(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(qb.hasData(a)&&(f=qb.access(a),g=qb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)fb.event.add(b,e,j[e][c])}pb.hasData(a)&&(h=pb.access(a),i=fb.extend({},h),pb.set(b,i))}}function q(a,c){var d=a.getElementsByTagName?a.getElementsByTagName(c||"*"):a.querySelectorAll?a.querySelectorAll(c||"*"):[];return c===b||c&&fb.nodeName(a,c)?fb.merge([a],d):d}function r(a,b){var c=b.nodeName.toLowerCase();"input"===c&&Kb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function s(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=_b.length;e--;)if(b=_b[e]+c,b in a)return b;return d}function t(a,b){return a=b||a,"none"===fb.css(a,"display")||!fb.contains(a.ownerDocument,a)}function u(b){return a.getComputedStyle(b,null)}function v(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=qb.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&t(d)&&(f[g]=qb.access(d,"olddisplay",z(d.nodeName)))):f[g]||(e=t(d),(c&&"none"!==c||!e)&&qb.set(d,"olddisplay",e?c:fb.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function w(a,b,c){var d=Ub.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function x(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=fb.css(a,c+$b[f],!0,e)),d?("content"===c&&(g-=fb.css(a,"padding"+$b[f],!0,e)),"margin"!==c&&(g-=fb.css(a,"border"+$b[f]+"Width",!0,e))):(g+=fb.css(a,"padding"+$b[f],!0,e),"padding"!==c&&(g+=fb.css(a,"border"+$b[f]+"Width",!0,e)));return g}function y(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=u(a),g=fb.support.boxSizing&&"border-box"===fb.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Qb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Vb.test(e))return e;d=g&&(fb.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+x(a,b,c||(g?"border":"content"),d,f)+"px"}function z(a){var b=T,c=Xb[a];return c||(c=A(a,b),"none"!==c&&c||(Rb=(Rb||fb("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(b.documentElement),b=(Rb[0].contentWindow||Rb[0].contentDocument).document,b.write("<!doctype html><html><body>"),b.close(),c=A(a,b),Rb.detach()),Xb[a]=c),c}function A(a,b){var c=fb(b.createElement(a)).appendTo(b.body),d=fb.css(c[0],"display");return c.remove(),d}function B(a,b,c,d){var e;if(fb.isArray(b))fb.each(b,function(b,e){c||bc.test(a)?d(a,e):B(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==fb.type(b))d(a,b);else for(e in b)B(a+"["+e+"]",b[e],c,d)}function C(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(hb)||[];if(fb.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function D(a,b,c,d){function e(h){var i;return f[h]=!0,fb.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===sc;return e(b.dataTypes[0])||!f["*"]&&e("*")}function E(a,c){var d,e,f=fb.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);return e&&fb.extend(!0,a,e),a}function F(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;Line truncated
for(w in{submit:!0,reset:!0})z.pseudos[w]=j(w);l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split("").sort(V).join("")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),f(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||g("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||g("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),f(function(a){return null==a.getAttribute("disabled")})||g(db,function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&d.specified?d.value:a[b]===!0?b.toLowerCase():null}),fb.find=c,fb.expr=c.selectors,fb.expr[":"]=fb.expr.pseudos,fb.unique=c.uniqueSort,fb.text=c.getText,fb.isXMLDoc=c.isXML,fb.contains=c.contains}(a);var ob={};fb.Callbacks=function(a){a="string"==typeof a?ob[a]||d(a):fb.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(c=a.memory&&b,e=!0,i=g||0,g=0,h=j.length,f=!0;j&&h>i;i++)if(j[i].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}f=!1,j&&(k?k.length&&l(k.shift()):c?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){fb.each(b,function(b,c){var e=fb.type(c);"function"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&"string"!==e&&d(c)})}(arguments),f?h=j.length:c&&(g=b,l(c))}return this},remove:function(){return j&&fb.each(arguments,function(a,b){for(var c;(c=fb.inArray(b,j,c))>-1;)j.splice(c,1),f&&(h>=c&&h--,i>=c&&i--)}),this},has:function(a){return a?fb.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],h=0,this},disable:function(){return j=k=c=b,this},disabled:function(){return!j},lock:function(){return k=b,c||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||e&&!k||(b=b||[],b=[a,b.slice?b.slice():b],f?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!e}};return m},fb.extend({Deferred:function(a){var b=[["resolve","done",fb.Callbacks("once memory"),"resolved"],["reject","fail",fb.Callbacks("once memory"),"rejected"],["notify","progress",fb.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return fb.Deferred(function(c){fb.each(b,function(b,f){var g=f[0],h=fb.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&fb.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+"With"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?fb.extend(a,d):d}},e={};return d.pipe=d.then,fb.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=ab.call(arguments),g=f.length,h=1!==g||a&&fb.isFunction(a.promise)?g:0,i=1===h?a:fb.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?ab.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&fb.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),fb.support=function(b){var c=T.createElement("input"),d=T.createDocumentFragment(),e=T.createElement("div"),f=T.createElement("select"),g=f.appendChild(T.createElement("option"));return c.type?(c.type="checkbox",b.checkOn=""!==c.value,b.optSelected=g.selected,b.reliableMarginRight=!0,b.boxSizingReliable=!0,b.pixelPosition=!1,c.checked=!0,b.noCloneChecked=c.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled,c=T.createElement("input"),c.value="t",c.type="radio",b.radioValue="t"===c.value,c.setAttribute("checked","t"),c.setAttribute("name","t"),d.appendChild(c),b.checkClone=d.cloneNode(!0).cloneNode(!0).lastChild.checked,b.focusinBubbles="onfocusin"in a,e.style.backgroundClip="content-box",e.cloneNode(!0).style.backgroundClip="",b.clearCloneStyle="content-box"===e.style.backgroundClip,fb(function(){var c,d,f="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",g=T.getElementsByTagName("body")[0];g&&(c=T.createElement("div"),c.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",g.appendChild(c).appendChild(e),e.innerHTML="",e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:boLine truncated
if(fb.isArray(c)){for(e=u(a),f=c.length;f>h;h++)g[c[h]]=fb.css(a,c[h],!1,e);return g}return d!==b?fb.style(a,c,d):fb.css(a,c)},a,c,arguments.length>1)},show:function(){return v(this,!0)},hide:function(){return v(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){t(this)?fb(this).show():fb(this).hide()})}}),fb.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Qb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=fb.camelCase(c),j=a.style;return c=fb.cssProps[i]||(fb.cssProps[i]=s(j,i)),h=fb.cssHooks[c]||fb.cssHooks[i],d===b?h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c]:(g=typeof d,"string"===g&&(f=Wb.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(fb.css(a,c)),g="number"),null==d||"number"===g&&isNaN(d)||("number"!==g||fb.cssNumber[i]||(d+="px"),fb.support.clearCloneStyle||""!==d||0!==c.indexOf("background")||(j[c]="inherit"),h&&"set"in h&&(d=h.set(a,d,e))===b||(j[c]=d)),void 0)}},css:function(a,c,d,e){var f,g,h,i=fb.camelCase(c);return c=fb.cssProps[i]||(fb.cssProps[i]=s(a.style,i)),h=fb.cssHooks[c]||fb.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,d)),f===b&&(f=Qb(a,c,e)),"normal"===f&&c in Zb&&(f=Zb[c]),""===d||d?(g=parseFloat(f),d===!0||fb.isNumeric(g)?g||0:f):f}}),Qb=function(a,c,d){var e,f,g,h=d||u(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(""!==i||fb.contains(a.ownerDocument,a)||(i=fb.style(a,c)),Vb.test(i)&&Tb.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i},fb.each(["height","width"],function(a,b){fb.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Sb.test(fb.css(a,"display"))?fb.swap(a,Yb,function(){return y(a,b,d)}):y(a,b,d):void 0},set:function(a,c,d){var e=d&&u(a);return w(a,c,d?x(a,b,d,fb.support.boxSizing&&"border-box"===fb.css(a,"boxSizing",!1,e),e):0)}}}),fb(function(){fb.support.reliableMarginRight||(fb.cssHooks.marginRight={get:function(a,b){return b?fb.swap(a,{display:"inline-block"},Qb,[a,"marginRight"]):void 0}}),!fb.support.pixelPosition&&fb.fn.position&&fb.each(["top","left"],function(a,b){fb.cssHooks[b]={get:function(a,c){return c?(c=Qb(a,b),Vb.test(c)?fb(a).position()[b]+"px":c):void 0}}})}),fb.expr&&fb.expr.filters&&(fb.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},fb.expr.filters.visible=function(a){return!fb.expr.filters.hidden(a)}),fb.each({margin:"",padding:"",border:"Width"},function(a,b){fb.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+$b[d]+b]=f[d]||f[d-2]||f[0];return e}},Tb.test(a)||(fb.cssHooks[a+b].set=w)});var ac=/%20/g,bc=/\[\]$/,cc=/\r?\n/g,dc=/^(?:submit|button|image|reset|file)$/i,ec=/^(?:input|select|textarea|keygen)/i;fb.fn.extend({serialize:function(){return fb.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=fb.prop(this,"elements");return a?fb.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!fb(this).is(":disabled")&&ec.test(this.nodeName)&&!dc.test(a)&&(this.checked||!Kb.test(a))}).map(function(a,b){var c=fb(this).val();return null==c?null:fb.isArray(c)?fb.map(c,function(a){return{name:b.name,value:a.replace(cc,"\r\n")}}):{name:b.name,value:c.replace(cc,"\r\n")}}).get()}}),fb.param=function(a,c){var d,e=[],f=function(a,b){b=fb.isFunction(b)?b():null==b?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(c===b&&(c=fb.ajaxSettings&&fb.ajaxSettings.traditional),fb.isArray(a)||a.jquery&&!fb.isPlainObject(a))fb.each(a,function(){f(this.name,this.value)});else for(d in a)B(d,a[d],c,f);return e.join("&").replace(ac,"+")},fb.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){fb.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),fb.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var fc,gc,hc=fb.now(),ic=/\?/,jc=/#.*$/,kc=/([?&])_=[^&]*/,lc=/^(.*?):[ \t]*([^\r\n]*)$/gm,mc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,nc=/^(?:GET|HEAD)$/,oc=/^\/\//,pc=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,qc=fb.fn.load,rc={},sc={},tc="*/".concat("*");try{gc=S.href}catch(uc){gc=T.createElement("a"),gc.href="",gc=gc.href}fc=pc.exec(gc.toLowerCase())||[],fb.fn.load=function(a,c,d){if("string"!=typeof a&&qc)return qc.apply(this,arguments);var e,f,g,h=this,i=a.indexLine truncated
}function jc(a,b,c){var d=-1,e=a?a.length:0;for(b=p.createCallback(b,c,3);++d<e;)if(b(a[d],d,a))return d;return-1}function kc(a,b,c){var d=a?a.length:0;for(b=p.createCallback(b,c,3);d--;)if(b(a[d],d,a))return d;return-1}function lc(a,b,c){var d=0,e=a?a.length:0;if("number"!=typeof b&&null!=b){var f=-1;for(b=p.createCallback(b,c,3);++f<e&&b(a[f],f,a);)d++}else if(d=b,null==d||c)return a?a[0]:o;return m(a,0,Od(Nd(0,d),e))}function mc(a,b,c,d){return"boolean"!=typeof b&&null!=b&&(d=c,c=d&&d[b]===a?null:b,b=!1),null!=c&&(a=Wb(a,c,d)),Y(a,b)}function nc(b,c,d){if("number"==typeof d){var e=b?b.length:0;d=0>d?Nd(0,e+d):d||0}else if(d){var f=wc(b,c);return b[f]===c?f:-1}return a(b,c,d)}function oc(a,b,c){var d=0,e=a?a.length:0;if("number"!=typeof b&&null!=b){var f=e;for(b=p.createCallback(b,c,3);f--&&b(a[f],f,a);)d++}else d=null==b||c?1:b||d;return m(a,0,Od(Nd(0,e-d),e))}function pc(c){for(var d=arguments,e=d.length,g=-1,i=h(),j=-1,m=gb(),n=c?c.length:0,o=[],p=h();++g<e;){var q=d[g];i[g]=m===a&&(q?q.length:0)>=t&&f(g?d[g]:p)}a:for(;++j<n;){var r=i[0];if(q=c[j],(r?b(r,q):m(p,q))<0){for(g=e,(r||p).push(q);--g;)if(r=i[g],(r?b(r,q):m(d[g],q))<0)continue a;o.push(q)}}for(;e--;)r=i[e],r&&l(r);return k(i),k(p),o}function qc(a,b,c){var d=0,e=a?a.length:0;if("number"!=typeof b&&null!=b){var f=e;for(b=p.createCallback(b,c,3);f--&&b(a[f],f,a);)d++}else if(d=b,null==d||c)return a?a[e-1]:o;return m(a,Nd(0,e-d))}function rc(a,b,c){var d=a?a.length:0;for("number"==typeof c&&(d=(0>c?Nd(0,d+c):Od(c,d-1))+1);d--;)if(a[d]===b)return d;return-1}function sc(a){for(var b=arguments,c=0,d=b.length,e=a?a.length:0;++c<d;)for(var f=-1,g=b[c];++f<e;)a[f]===g&&(Dd.call(a,f--,1),e--);return a}function tc(a,b,c){a=+a||0,c="number"==typeof c?c:+c||1,null==b&&(b=a,a=0);for(var d=-1,e=Nd(0,td((b-a)/(c||1))),f=fd(e);++d<e;)f[d]=a,a+=c;return f}function uc(a,b,c){var d=-1,e=a?a.length:0,f=[];for(b=p.createCallback(b,c,3);++d<e;){var g=a[d];b(g,d,a)&&(f.push(g),Dd.call(a,d--,1),e--)}return f}function vc(a,b,c){if("number"!=typeof b&&null!=b){var d=0,e=-1,f=a?a.length:0;for(b=p.createCallback(b,c,3);++e<f&&b(a[e],e,a);)d++}else d=null==b||c?1:Nd(0,b);return m(a,d)}function wc(a,b,c,d){var e=0,f=a?a.length:e;for(c=c?p.createCallback(c,d,1):Tc,b=c(b);f>e;){var g=e+f>>>1;c(a[g])<b?e=g+1:f=g}return e}function xc(){return bb(Y(arguments,!0,!0))}function yc(a,b,c,d){return"boolean"!=typeof b&&null!=b&&(d=c,c=d&&d[b]===a?null:b,b=!1),null!=c&&(c=p.createCallback(c,d,3)),bb(a,b,c)}function zc(a){return ic(a,Rd.call(arguments,1))}function Ac(){for(var a=arguments.length>1?arguments:arguments[0],b=-1,c=a?Xb(Zb(a,"length")):0,d=fd(0>c?0:c);++b<c;)d[b]=Zb(a,b);return d}function Bc(a,b){for(var c=-1,d=a?a.length:0,e={};++c<d;){var f=a[c];b?e[f]=b[c]:f&&(e[f[0]]=f[1])}return e}function Cc(a,b){if(!zb(b))throw new od;return function(){return--a<1?b.apply(this,arguments):void 0}}function Dc(a,b){return arguments.length>2?db(a,17,Rd.call(arguments,2),null,b):db(a,1,null,null,b)}function Ec(a){for(var b=arguments.length>1?Y(arguments,!0,!1,1):qb(a),c=-1,d=b.length;++c<d;){var e=b[c];a[e]=db(a[e],1,null,null,a)}return a}function Fc(a,b){return arguments.length>2?db(b,19,Rd.call(arguments,2),null,a):db(b,3,null,null,a)}function Gc(){for(var a=arguments,b=a.length;b--;)if(!zb(a[b]))throw new od;return function(){for(var b=arguments,c=a.length;c--;)b=[a[c].apply(this,b)];return b[0]}}function Hc(a,b,c){var d=typeof a;if(null==a||"function"==d)return W(a,b,c);if("object"!=d)return function(b){return b[a]};var e=Zd(a),f=e[0],g=a[f];return 1!=e.length||g!==g||Ab(g)?function(b){for(var c=e.length,d=!1;c--&&(d=Z(b[e[c]],a[e[c]],null,!0)););return d}:function(a){var b=a[f];return g===b&&(0!==g||1/g==1/b)}}function Ic(a,b){return b="number"==typeof b?b:+b||a.length,db(a,4,null,null,null,b)}function Jc(a,b,c){var d,e,f,g,h,i,j,k=0,l=!1,m=!0;if(!zb(a))throw new od;if(b=Nd(0,b)||0,c===!0){var n=!0;m=!1}else Ab(c)&&(n=c.leading,l="maxWait"in c&&(Nd(b,c.maxWait)||0),m="trailing"in c?c.trailing:m);var p=function(){var c=b-(zd()-g);if(0>=c){e&&ud(e);var l=j;e=i=j=o,l&&(k=zd(),f=a.apply(h,d))}else i=Cd(p,c)},q=function(){i&&ud(i),e=i=j=o,(m||l!==b)&&(k=zd(),f=a.apply(h,d))};return function(){if(d=arguments,g=zd(),h=this,j=m&&(i||!n),l===!1)var c=n&&!i;else{e||n||(k=g);var o=l-(g-k);0>=o?(e&&(e=ud(e)),k=g,f=a.apply(h,d)):e||(e=Cd(q,o))}return i||b===l||(i=Cd(p,b)),c&&(f=a.apply(h,d)),f}}function Kc(a){if(!zb(a))throw new od;var b=Rd.call(arguments,1);return Cd(function(){a.apply(o,b)},1)}function Lc(a,b){if(!zb(a))throw new od;var c=Rd.call(arguments,2);return Cd(function(){a.apply(o,c)},b)}function Mc(a,b){if(!zb(a))throw new od;var c=function(){var d=c.cache,e=b?b.apply(this,arguments):s+arguments[0];return yd.call(d,e)?d[e]:d[e]=a.apply(this,arguments)};return c.cache={},c}function Nc(a){var b,c;if(!zb(a))throw new od;return function(){return b?c:(b=!0,c=a.apply(this,arguments),a=null,c)}}function Oc(a){return db(a,16,Rd.call(arguments,1))}function Pc(a){return db(a,32,null,Rd.call(argLine truncated
}return this.options.silent?void 0:this.loadUrl()},stop:function(){b.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),D.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();return a===this.fragment&&this.iframe&&(a=this.getFragment(this.getHash(this.iframe))),a===this.fragment?!1:(this.iframe&&this.navigate(a),this.loadUrl(),void 0)},loadUrl:function(a){return a=this.fragment=this.getFragment(a),c.any(this.handlers,function(b){return b.route.test(a)?(b.callback(a),!0):void 0})},navigate:function(a,b){if(!D.started)return!1;b&&b!==!0||(b={trigger:!!b});var c=this.root+(a=this.getFragment(a||""));if(a=a.replace(I,""),this.fragment!==a){if(this.fragment=a,""===a&&"/"!==c&&(c=c.slice(0,-1)),this._hasPushState)this.history[b.replace?"replaceState":"pushState"]({},document.title,c);else{if(!this._wantsHashChange)return this.location.assign(c);this._updateHash(this.location,a,b.replace),this.iframe&&a!==this.getFragment(this.getHash(this.iframe))&&(b.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,a,b.replace))}return b.trigger?this.loadUrl(a):void 0}},_updateHash:function(a,b,c){if(c){var d=a.href.replace(/(javascript:|#).*$/,"");a.replace(d+"#"+b)}else a.hash="#"+b}}),b.history=new D;var J=function(a,b){var d,e=this;d=a&&c.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},c.extend(d,e,b);var f=function(){this.constructor=d};return f.prototype=e.prototype,d.prototype=new f,a&&c.extend(d.prototype,a),d.__super__=e.prototype,d};m.extend=o.extend=y.extend=t.extend=D.extend=J;var K=function(){throw new Error('A "url" property or function must be specified')},L=function(a,b){var c=b.error;b.error=function(d){c&&c(a,d,b),a.trigger("error",a,d,b)}};return b}),function(a,b){"function"==typeof define&&define.amd?define([],b):a.Vectorizer=a.V=b()}(this,function(){function a(){var a=++m+"";return"v-"+a}function b(a){var b='<svg xmlns="'+k.xmlns+'" xmlns:xlink="'+k.xlink+'" version="'+l+'">'+(a||"")+"</svg>",c=new DOMParser;return c.async=!1,c.parseFromString(b,"text/xml").documentElement}function c(a,c,e){if(!a)return void 0;if("object"==typeof a)return new i(a);if(c=c||{},"svg"===a.toLowerCase())return new i(b());if("<"===a[0]){var f=b(a);if(f.childNodes.length>1){for(var g=[],h=0,j=f.childNodes.length;j>h;h++){var l=f.childNodes[h];g.push(new i(document.importNode(l,!0)))}return g}return new i(document.importNode(f.firstChild,!0))}a=document.createElementNS(k.xmlns,a);for(var m in c)d(a,m,c[m]);"[object Array]"!=Object.prototype.toString.call(e)&&(e=[e]);for(var n,h=0,j=e[0]&&e.length||0;j>h;h++)n=e[h],a.appendChild(n instanceof i?n.node:n);return new i(a)}function d(a,b,c){if(b.indexOf(":")>-1){var d=b.split(":");a.setAttributeNS(k[d[0]],d[1],c)}else"id"===b?a.id=c:a.setAttribute(b,c)}function e(a){var b,c,d;if(a){var e=/[ ,]+/,f=a.match(/translate\((.*)\)/);f&&(b=f[1].split(e));var g=a.match(/rotate\((.*)\)/);g&&(c=g[1].split(e));var h=a.match(/scale\((.*)\)/);h&&(d=h[1].split(e))}var i=d&&d[0]?parseFloat(d[0]):1;return{translate:{tx:b&&b[0]?parseInt(b[0],10):0,ty:b&&b[1]?parseInt(b[1],10):0},rotate:{angle:c&&c[0]?parseInt(c[0],10):0,cx:c&&c[1]?parseInt(c[1],10):void 0,cy:c&&c[2]?parseInt(c[2],10):void 0},scale:{sx:i,sy:d&&d[1]?parseFloat(d[1]):i}}}function f(a,b){var c=b.x*a.a+b.y*a.c+0,d=b.x*a.b+b.y*a.d+0;return{x:c,y:d}}function h(a){var b=f(a,{x:0,y:1}),c=f(a,{x:1,y:0}),d=180/Math.PI*Math.atan2(b.y,b.x)-90,e=180/Math.PI*Math.atan2(c.y,c.x);return{translateX:a.e,translateY:a.f,scaleX:Math.sqrt(a.a*a.a+a.b*a.b),scaleY:Math.sqrt(a.c*a.c+a.d*a.d),skewX:d,skewY:e,rotation:d}}function i(b){this.node=b,this.node.id||(this.node.id=a())}function j(a){var b=a.rx||a["top-rx"]||0,c=a.rx||a["bottom-rx"]||0,d=a.ry||a["top-ry"]||0,e=a.ry||a["bottom-ry"]||0;return["M",a.x,a.y+d,"v",a.height-d-e,"a",c,e,0,0,0,c,e,"h",a.width-2*c,"a",c,e,0,0,0,c,-e,"v",-(a.height-e-d),"a",b,d,0,0,0,-b,-d,"h",-(a.width-2*b),"a",b,d,0,0,0,-b,d].join(" ")}var k=(!(!window.SVGAngle&&!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),{xmlns:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"}),l="1.1",m=0;i.prototype={translate:function(a,b,c){c=c||{},b=b||0;var d=this.attr("transform")||"",f=e(d);if("undefined"==typeof a)return f.translate;d=d.replace(/translate\([^\)]*\)/g,"").trim();var g=c.absolute?a:f.translate.tx+a,h=c.absolute?b:f.translate.ty+b,i="translate("+g+","+h+")";return this.attr("transform",(i+" "+d).trim()),this},rotate:function(a,b,c,d){d=d||{};var f=this.attr("transform")||"",g=e(f);if("undefined"==typeof a)return g.rotate;f=f.replace(/rotate\([^\)]*\)/g,"").trim(),a%=360;var h=d.absolute?a:g.rotate.angle+a,i=void 0!==b&&void 0!==c?","+b+","+c:"",j="rotate("+h+i+")";return this.attr("transform",(f+" "+j).trim()),this},scale:function(a,b){b="undefined"==typeof b?a:Line truncated
},this),this},resetCells:function(a,b){return this.get("cells").reset(_.map(a,this._prepareCell,this),b),this},removeCell:function(a,b,c){c&&c.disconnectLinks?this.disconnectLinks(a):this.removeLinks(a),this.get("cells").remove(a,{silent:!0})},getCell:function(a){return this.get("cells").get(a)},getElements:function(){return this.get("cells").filter(function(a){return a instanceof joint.dia.Element})},getLinks:function(){return this.get("cells").filter(function(a){return a instanceof joint.dia.Link})},getConnectedLinks:function(a,b){return this.get("cells").getConnectedLinks(a,b)},getNeighbors:function(a){var b=this.getConnectedLinks(a),c=[],d=this.get("cells");return _.each(b,function(b){var e=b.get("source"),f=b.get("target");if(!e.x){var g=d.get(e.id);g!==a&&c.push(g)}if(!f.x){var h=d.get(f.id);h!==a&&c.push(h)}}),c},disconnectLinks:function(a){_.each(this.getConnectedLinks(a),function(b){b.set(b.get("source").id===a.id?"source":"target",g.point(0,0))})},removeLinks:function(a){_.invoke(this.getConnectedLinks(a),"remove")},findModelsFromPoint:function(a){return _.filter(this.getElements(),function(b){return b.getBBox().containsPoint(a)})},findModelsInArea:function(a){return _.filter(this.getElements(),function(b){return b.getBBox().intersect(a)})},getBBox:function(a){var b={x:1/0,y:1/0},c={x:0,y:0};return _.each(a,function(a){var d=a.getBBox();b.x=Math.min(b.x,d.x),b.y=Math.min(b.y,d.y),c.x=Math.max(c.x,d.x+d.width),c.y=Math.max(c.y,d.y+d.height)}),g.rect(b.x,b.y,c.x-b.x,c.y-b.y)}}),"object"==typeof exports&&(module.exports.Graph=joint.dia.Graph),"object"==typeof exports)var joint={util:require("./core").util,dia:{Link:require("./joint.dia.link").Link}},Backbone=require("backbone"),_=require("lodash");if(joint.dia.Cell=Backbone.Model.extend({constructor:function(a,b){var c,d=a||{};this.cid=_.uniqueId("c"),this.attributes={},b&&b.collection&&(this.collection=b.collection),b&&b.parse&&(d=this.parse(d,b)||{}),(c=_.result(this,"defaults"))&&(d=_.merge({},c,d)),this.set(d,b),this.changed={},this.initialize.apply(this,arguments)},toJSON:function(){var a=this.constructor.prototype.defaults.attrs||{},b=this.attributes.attrs,c={};_.each(b,function(b,d){var e=a[d];_.each(b,function(a,b){_.isObject(a)&&!_.isArray(a)?_.each(a,function(a,f){e&&e[b]&&_.isEqual(e[b][f],a)||(c[d]=c[d]||{},(c[d][b]||(c[d][b]={}))[f]=a)}):e&&_.isEqual(e[b],a)||(c[d]=c[d]||{},c[d][b]=a)})});var d=_.cloneDeep(_.omit(this.attributes,"attrs"));return d.attrs=c,d},initialize:function(a){a&&a.id||this.set("id",joint.util.uuid(),{silent:!0}),this._transitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},processPorts:function(){var a=this.ports,b={};_.each(this.get("attrs"),function(a){a&&a.port&&(_.isUndefined(a.port.id)?b[a.port]={id:a.port}:b[a.port.id]=a.port)});var c={};if(_.each(a,function(a,d){b[d]||(c[d]=!0)}),this.collection&&!_.isEmpty(c)){var d=this.collection.getConnectedLinks(this,{inbound:!0});_.each(d,function(a){c[a.get("target").port]&&a.remove()});var e=this.collection.getConnectedLinks(this,{outbound:!0});_.each(e,function(a){c[a.get("source").port]&&a.remove()})}this.ports=b},remove:function(a){var b=this.collection;b&&b.trigger("batch:start");var c=this.get("parent");if(c){var d=this.collection&&this.collection.get(c);d.unembed(this)}return _.invoke(this.getEmbeddedCells(),"remove",a),this.trigger("remove",this,this.collection,a),b&&b.trigger("batch:stop"),this},toFront:function(){return this.collection&&this.set("z",(this.collection.last().get("z")||0)+1),this},toBack:function(){return this.collection&&this.set("z",(this.collection.first().get("z")||0)-1),this},embed:function(a){if(this.get("parent")==a.id)throw new Error("Recursive embedding not allowed.");return this.trigger("batch:start"),a.set("parent",this.id),this.set("embeds",_.uniq((this.get("embeds")||[]).concat([a.id]))),this.trigger("batch:stop"),this},unembed:function(a){this.trigger("batch:start");var b=a.id;return a.unset("parent"),this.set("embeds",_.without(this.get("embeds"),b)),this.trigger("batch:stop"),this},getEmbeddedCells:function(){return this.collection?_.map(this.get("embeds")||[],function(a){return this.collection.get(a)},this):[]},clone:function(a){a=a||{};var b=Backbone.Model.prototype.clone.apply(this,arguments);if(b.set("id",joint.util.uuid(),{silent:!0}),b.set("embeds",""),!a.deep)return b;var c=_.sortBy(this.getEmbeddedCells(),function(a){return a instanceof joint.dia.Element}),d=[b],e={};return _.each(c,function(a){var c=a.clone({deep:!0});b.embed(c[0]),_.each(c,function(c){if(c instanceof joint.dia.Link)return c.get("source").id==this.id&&c.prop("source",{id:b.id}),c.get("target").id==this.id&&c.prop("target",{id:b.id}),e[a.id]=c,void 0;d.push(c);var f=this.collection.getConnectedLinks(a,{inbound:!0});_.each(f,function(a){var b=e[a.id]||a.clone();e[a.id]=b,b.prop("target",{id:c.id})});var g=this.collection.getConnectedLinks(a,{outbound:!0});_.each(g,function(a){var b=e[a.id]||a.clone();e[a.id]=b,b.prop("source",Line truncated
}var c=[];c[4]=a,c[5]=this;var d,e=0,f=0;"source"===a?(e=2,d="target"):(f=2,d="source");var g=this.model.get(d);return g.id&&(c[e]=this.paper.findViewByModel(g.id),c[e+1]=g.selector&&c[e].el.querySelector(g.selector)),b},_markAvailableMagnets:function(){var a=this.paper.model.getElements(),b=this.paper.options.validateConnection;_.chain(a).map(this.paper.findViewByModel,this.paper).each(function(a){var c="false"!==a.el.getAttribute("magnet")&&b.apply(this.paper,this._validateConnectionArgs(a,null)),d=_.filter(a.el.querySelectorAll("[magnet]"),function(c){return b.apply(this.paper,this._validateConnectionArgs(a,c))},this);c&&V(a.el).addClass("available-magnet"),_.each(d,function(a){V(a).addClass("available-magnet")}),(c||d.length)&&V(a.el).addClass("available-cell")},this)},_unmarkAvailableMagnets:function(){_.each(this.paper.el.querySelectorAll(".available-cell, .available-magnet"),function(a){V(a).removeClass("available-magnet").removeClass("available-cell")})},startArrowheadMove:function(a){this._action="arrowhead-move",this._arrowhead=a,this._validateConnectionArgs=this._createValidateConnectionArgs(this._arrowhead),this._beforeArrowheadMove()},pointerdown:function(a,b,c){function d(a){return _.isObject(e)&&e[a]===!1?!1:!0}joint.dia.CellView.prototype.pointerdown.apply(this,arguments),this._dx=b,this._dy=c;var e=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;if(e!==!1){var f=a.target.getAttribute("class");switch(f){case"marker-vertex":d("vertexMove")&&(this._action="vertex-move",this._vertexIdx=a.target.getAttribute("idx"));break;case"marker-vertex-remove":case"marker-vertex-remove-area":d("vertexRemove")&&this.removeVertex(a.target.getAttribute("idx"));break;case"marker-arrowhead":d("arrowheadMove")&&this.startArrowheadMove(a.target.getAttribute("end"));break;default:var g=a.target.parentNode.getAttribute("event");g?"remove"===g?this.model.remove():this.paper.trigger(g,a,this,b,c):d("vertexAdd")&&(this._vertexIdx=this.addVertex({x:b,y:c}),this._action="vertex-move")}this.paper.trigger("link:pointerdown",a,this,b,c)}},pointermove:function(a,b,c){switch(joint.dia.CellView.prototype.pointermove.apply(this,arguments),this._action){case"vertex-move":var d=_.clone(this.model.get("vertices"));d[this._vertexIdx]={x:b,y:c},this.model.set("vertices",d);break;case"arrowhead-move":if(this.paper.options.snapLinks){var e=this.paper.options.snapLinks.radius||50,f=this.paper.findViewsInArea({x:b-e,y:c-e,width:2*e,height:2*e});this._closestView&&this._closestView.unhighlight(this._closestEnd.selector),this._closestView=this._closestEnd=null;var h,i=g.point(b,c),j=Number.MAX_VALUE;_.each(f,function(a){"false"!==a.el.getAttribute("magnet")&&(h=a.model.getBBox().center().distance(i),e>h&&j>h&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,null))&&(j=h,this._closestView=a,this._closestEnd={id:a.model.id})),a.$("[magnet]").each(_.bind(function(b,c){var d=V(c).bbox(!1,this.paper.viewport);h=i.distance({x:d.x+d.width/2,y:d.y+d.height/2}),e>h&&j>h&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,c))&&(j=h,this._closestView=a,this._closestEnd={id:a.model.id,selector:a.getSelector(c),port:c.getAttribute("port")})},this))},this),this._closestView&&this._closestView.highlight(this._closestEnd.selector),this.model.set(this._arrowhead,this._closestEnd||{x:b,y:c})}else{var k="mousemove"===a.type?a.target:document.elementFromPoint(a.clientX,a.clientY);this._targetEvent!==k&&(this._magnetUnderPointer&&this._viewUnderPointer.unhighlight(this._magnetUnderPointer),this._viewUnderPointer=this.paper.findView(k),this._viewUnderPointer?(this._magnetUnderPointer=this._viewUnderPointer.findMagnet(k),this._magnetUnderPointer&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(this._viewUnderPointer,this._magnetUnderPointer))?this._magnetUnderPointer&&this._viewUnderPointer.highlight(this._magnetUnderPointer):this._magnetUnderPointer=null):this._magnetUnderPointer=null),this._targetEvent=k,this.model.set(this._arrowhead,{x:b,y:c})}}this._dx=b,this._dy=c},pointerup:function(){joint.dia.CellView.prototype.pointerup.apply(this,arguments),"arrowhead-move"===this._action&&(this.paper.options.snapLinks?(this._closestView&&this._closestView.unhighlight(this._closestEnd.selector),this._closestView=this._closestEnd=null):(this._magnetUnderPointer&&(this._viewUnderPointer.unhighlight(this._magnetUnderPointer),this.model.set(this._arrowhead,{id:this._viewUnderPointer.model.id,selector:this._viewUnderPointer.getSelector(this._magnetUnderPointer),port:$(this._magnetUnderPointer).attr("port")})),delete this._viewUnderPointer,delete this._magnetUnderPointer,delete this._staticView,delete this._staticMagnet),this._afterArrowheadMove()),delete this._action}}),"object"==typeof exports&&(module.exports.Link=joint.dia.Link,module.exports.LinkView=joint.dia.LinkView),joint.dia.Paper=Backbone.View.eLine truncated
+9 -1
View File
@@ -1 +1,9 @@
if("object"==typeof exports)var graphlib=require("graphlib"),dagre=require("dagre");graphlib=graphlib||"undefined"!=typeof window&&window.graphlib,dagre=dagre||"undefined"!=typeof window&&window.dagre,joint.dia.Graph.prototype.toGraphLib=function(a){a=a||{};var b=_.pick(a,"directed","compound","multigraph"),c=new graphlib.Graph(b),d=a.setNodeLabel||_.noop,e=a.setEdgeLabel||_.noop,f=a.setEdgeName||_.noop;return this.get("cells").each(function(a){if(a.isLink()){var b=a.get("source"),g=a.get("target");if(!b.id||!g.id)return;c.setEdge(b.id,g.id,e(a),f(a))}else c.setNode(a.id,d(a)),c.isCompound()&&a.has("parent")&&c.setParent(a.id,a.get("parent"))}),c},joint.dia.Graph.prototype.fromGraphLib=function(a,b){b=b||{};var c=b.importNode||_.noop,d=b.importEdge||_.noop;a.nodes().forEach(function(d){c.call(this,d,a,this,b)},this),a.edges().forEach(function(c){d.call(this,c,a,this,b)},this)},joint.layout.DirectedGraph={layout:function(a,b){b=_.defaults(b||{},{resizeClusters:!0,clusterPadding:10});var c=a.toGraphLib({directed:!0,multigraph:!0,compound:!0,setNodeLabel:function(a){return{width:a.get("size").width,height:a.get("size").height,rank:a.get("rank")}},setEdgeLabel:function(a){return{minLen:a.get("minLen")||1}},setEdgeName:function(a){return a.id}}),d={};return b.rankDir&&(d.rankdir=b.rankDir),b.nodeSep&&(d.nodesep=b.nodeSep),b.edgeSep&&(d.edgesep=b.edgeSep),b.rankSep&&(d.ranksep=b.rankSep),b.marginX&&(d.marginx=b.marginX),b.marginY&&(d.marginy=b.marginY),c.setGraph(d),dagre.layout(c,{debugTiming:!!b.debugTiming}),a.fromGraphLib(c,{importNode:function(a,c){var d=this.getCell(a),e=c.node(a);b.setPosition?b.setPosition(d,e):d.set("position",{x:e.x-e.width/2,y:e.y-e.height/2})},importEdge:function(a,c){var d=this.getCell(a.name),e=c.edge(a);b.setLinkVertices&&(b.setVertices?b.setVertices(d,e.points):d.set("vertices",e.points))}}),b.resizeClusters&&_.chain(c.nodes()).filter(function(a){return c.children(a).length>0}).map(a.getCell,a).sortBy(function(a){return-a.getAncestors().length}).invoke("fitEmbeds",{padding:b.clusterPadding}).value(),c.graph()}};
/*! JointJS v0.9.2 - JavaScript diagramming library 2014-09-17
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a){var b="undefined"!=typeof self?self:"undefined"!=typeof window?window:{};b.dagre=a("./index")},{"./index":2}],2:[function(a,b,c){c.Digraph=a("graphlib").Digraph,c.Graph=a("graphlib").Graph,c.layout=a("./lib/layout"),c.version=a("./lib/version")},{"./lib/layout":3,"./lib/version":18,graphlib:24}],3:[function(a,b){var c=a("./util"),d=a("./rank"),e=a("./order"),f=a("graphlib").CGraph,g=a("graphlib").CDigraph;b.exports=function(){function b(a){var b=new g;a.eachNode(function(a,c){void 0===c&&(c={}),b.addNode(a,{width:c.width,height:c.height}),c.hasOwnProperty("rank")&&(b.node(a).prefRank=c.rank)}),a.parent&&a.nodes().forEach(function(c){b.parent(c,a.parent(c))}),a.eachEdge(function(a,c,d,e){void 0===e&&(e={});var f={e:a,minLen:e.minLen||1,width:e.width||0,height:e.height||0,points:[]};b.addEdge(null,c,d,f)});var c=a.graph()||{};return b.graph({rankDir:c.rankDir||n.rankDir,orderRestarts:c.orderRestarts}),b}function h(a){var f,g=p.rankSep();try{return f=c.time("initLayoutGraph",b)(a),0===f.order()?f:(f.eachEdge(function(a,b,c,d){d.minLen*=2}),p.rankSep(g/2),c.time("rank.run",d.run)(f,n.rankSimplex),c.time("normalize",i)(f),c.time("order",e)(f,n.orderMaxSweeps),c.time("position",o.run)(f),c.time("undoNormalize",j)(f),c.time("fixupEdgePoints",k)(f),c.time("rank.restoreEdges",d.restoreEdges)(f),c.time("createFinalGraph",l)(f,a.isDirected()))}finally{p.rankSep(g)}}function i(a){var b=0;a.eachEdge(function(c,d,e,f){var g=a.node(d).rank,h=a.node(e).rank;if(h>g+1){for(var i=d,j=g+1,k=0;h>j;++j,++k){var l="_D"+ ++b,m={width:f.width,height:f.height,edge:{id:c,source:d,target:e,attrs:f},rank:j,dummy:!0};0===k?m.index=0:j+1===h&&(m.index=1),a.addNode(l,m),a.addEdge(null,i,l,{}),i=l}a.addEdge(null,i,e,{}),a.delEdge(c)}})}function j(a){a.eachNode(function(b,c){if(c.dummy){if("index"in c){var d=c.edge;a.hasEdge(d.id)||a.addEdge(d.id,d.source,d.target,d.attrs);var e=a.edge(d.id).points;e[c.index]={x:c.x,y:c.y,ul:c.ul,ur:c.ur,dl:c.dl,dr:c.dr}}a.delNode(b)}})}function k(a){a.eachEdge(function(a,b,c,d){d.reversed&&d.points.reverse()})}function l(a,b){var c=b?new g:new f;c.graph(a.graph()),a.eachNode(function(a,b){c.addNode(a,b)}),a.eachNode(function(b){c.parent(b,a.parent(b))}),a.eachEdge(function(a,b,d,e){c.addEdge(e.e,b,d,e)});var d=0,e=0;return a.eachNode(function(b,c){a.children(b).length||(d=Math.max(d,c.x+c.width/2),e=Math.max(e,c.y+c.height/2))}),a.eachEdge(function(a,b,c,f){var g=Math.max.apply(Math,f.points.map(function(a){return a.x})),h=Math.max.apply(Math,f.points.map(function(a){return a.y}));d=Math.max(d,g+f.width/2),e=Math.max(e,h+f.height/2)}),c.graph().width=d,c.graph().height=e,c}function m(a){return function(){return arguments.length?(a.apply(null,arguments),p):a()}}var n={debugLevel:0,orderMaxSweeps:e.DEFAULT_MAX_SWEEPS,rankSimplex:!1,rankDir:"TB"},o=a("./position")(),p={};return p.orderIters=c.propertyAccessor(p,n,"orderMaxSweeps"),p.rankSimplex=c.propertyAccessor(p,n,"rankSimplex"),p.nodeSep=m(o.nodeSep),p.edgeSep=m(o.edgeSep),p.universalSep=m(o.universalSep),p.rankSep=m(o.rankSep),p.rankDir=c.propertyAccessor(p,n,"rankDir"),p.debugAlignment=m(o.debugAlignment),p.debugLevel=c.propertyAccessor(p,n,"debugLevel",function(a){c.log.level=a,o.debugLevel(a)}),p.run=c.time("Total layout",h),p._normalize=i,p}},{"./order":4,"./position":9,"./rank":10,"./util":17,graphlib:24}],4:[function(a,b){function c(a,b){function c(){a.eachNode(function(a,b){n[a]=b.order})}arguments.length<2&&(b=o);var d=a.graph().orderRestarts||0,e=l(a);e.forEach(function(b){b=b.filterNodes(function(b){return!a.children(b).length})});for(var g,h=0,i=Number.MAX_VALUE,n={},p=0;p<Number(d)+1&&0!==i;++p){g=Number.MAX_VALUE,m(a,d>0),j.log(2,"Order phase start cross count: "+a.graph().orderInitCC);var q,r,s;for(q=0,r=0;4>r&&b>q&&g>0;++q,++r,++h)f(a,e,q),s=k(a),g>s&&(r=0,g=s,i>s&&(c(),i=s)),j.log(3,"Order phase start "+p+" iter "+q+" cross count: "+s)}Object.keys(n).forEach(function(b){a.children&&a.children(b).length||(a.node(b).order=n[b])}),a.graph().orderCC=i,j.log(2,"Order iterations: "+h),j.log(2,"Order phase best cross count: "+a.graph().orderCC)}function d(a,b){var c={};return b.forEach(function(b){c[b]=a.inEdges(b).map(function(b){return a.node(a.source(b)).order})}),c}function e(a,b){var c={};return b.forEach(function(b){c[b]=a.outEdges(b).map(function(b){return a.node(a.target(b)).order})}),c}function f(a,b,c){c%2===0?g(a,b,c):h(a,b,c)}function g(a,b){var c;for(i=1;i<b.length;++i)c=n(b[i],c,d(a,b[i].nodes()))}function h(a,b){var c;for(i=b.length-2;i>=0;--i)n(b[i],c,e(a,b[i].nodes()))}var j=a("./util"),k=a("./order/crossCount"),l=aLine truncated
},c.prototype.toString=function(){return"Graph "+JSON.stringify(this,null,2)},c.prototype.addNode=function(a,b){return a=e.prototype.addNode.call(this,a,b),this._incidentEdges[a]={},a},c.prototype.delNode=function(a){e.prototype.delNode.call(this,a),delete this._incidentEdges[a]},c.prototype.addEdge=function(a,b,c,d){return e.prototype._addEdge.call(this,a,b,c,d,this._incidentEdges,this._incidentEdges)},c.prototype.delEdge=function(a){e.prototype._delEdge.call(this,a,this._incidentEdges,this._incidentEdges)}},{"./BaseGraph":25,"./util":45,"cp-data":19}],30:[function(a,b){function c(a){function b(c,d){e.has(c)||(e.add(c),d.push(c),a.neighbors(c).forEach(function(a){b(a,d)}))}var c=[],e=new d;return a.nodes().forEach(function(a){var d=[];b(a,d),d.length>0&&c.push(d)}),c}var d=a("cp-data").Set;b.exports=c},{"cp-data":19}],31:[function(a,b){function c(a,b,c,e){function f(b){var d=a.incidentNodes(b),e=d[0]!==i?d[0]:d[1],f=g[e],k=c(b),l=j.distance+k;if(0>k)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+b+" Weight: "+k);l<f.distance&&(f.distance=l,f.predecessor=i,h.decrease(e,l))}var g={},h=new d;c=c||function(){return 1},e=e||(a.isDirected()?function(b){return a.outEdges(b)}:function(b){return a.incidentEdges(b)}),a.eachNode(function(a){var c=a===b?0:Number.POSITIVE_INFINITY;g[a]={distance:c},h.add(a,c)});for(var i,j;h.size()>0&&(i=h.removeMin(),j=g[i],j.distance!==Number.POSITIVE_INFINITY);)e(i).forEach(f);return g}var d=a("cp-data").PriorityQueue;b.exports=c},{"cp-data":19}],32:[function(a,b){function c(a,b,c){var e={};return a.eachNode(function(f){e[f]=d(a,f,b,c)}),e}var d=a("./dijkstra");b.exports=c},{"./dijkstra":31}],33:[function(a,b){function c(a){return d(a).filter(function(a){return a.length>1})}var d=a("./tarjan");b.exports=c},{"./tarjan":39}],34:[function(a,b){function c(a,b,c){var d={},e=a.nodes();return b=b||function(){return 1},c=c||(a.isDirected()?function(b){return a.outEdges(b)}:function(b){return a.incidentEdges(b)}),e.forEach(function(f){d[f]={},d[f][f]={distance:0},e.forEach(function(a){f!==a&&(d[f][a]={distance:Number.POSITIVE_INFINITY})}),c(f).forEach(function(c){var e=a.incidentNodes(c),g=e[0]!==f?e[0]:e[1],h=b(c);h<d[f][g].distance&&(d[f][g]={distance:h,predecessor:f})})}),e.forEach(function(a){var b=d[a];e.forEach(function(c){var f=d[c];e.forEach(function(c){var d=f[a],e=b[c],g=f[c],h=d.distance+e.distance;h<g.distance&&(g.distance=h,g.predecessor=e.predecessor)})})}),d}b.exports=c},{}],35:[function(a,b){function c(a){try{d(a)}catch(b){if(b instanceof d.CycleException)return!1;throw b}return!0}var d=a("./topsort");b.exports=c},{"./topsort":40}],36:[function(a,b){function c(a,b,c){function e(b,d){if(f.has(b))throw new Error("The input graph is not a tree: "+a);f.add(b),a.neighbors(b).forEach(function(a){a!==d&&e(a,b)}),c(b)}var f=new d;if(a.isDirected())throw new Error("This function only works for undirected graphs");e(b)}var d=a("cp-data").Set;b.exports=c},{"cp-data":19}],37:[function(a,b){function c(a,b,c){function e(b,d){if(f.has(b))throw new Error("The input graph is not a tree: "+a);f.add(b),c(b),a.neighbors(b).forEach(function(a){a!==d&&e(a,b)})}var f=new d;if(a.isDirected())throw new Error("This function only works for undirected graphs");e(b)}var d=a("cp-data").Set;b.exports=c},{"cp-data":19}],38:[function(a,b){function c(a,b){function c(c){var d=a.incidentNodes(c),e=d[0]!==f?d[0]:d[1],g=i.priority(e);if(void 0!==g){var j=b(c);g>j&&(h[e]=f,i.decrease(e,j))}}var f,g=new d,h={},i=new e;if(0===a.order())return g;a.eachNode(function(a){i.add(a,Number.POSITIVE_INFINITY),g.addNode(a)}),i.decrease(a.nodes()[0],0);for(var j=!1;i.size()>0;){if(f=i.removeMin(),f in h)g.addEdge(null,f,h[f]);else{if(j)throw new Error("Input graph is not connected: "+a);j=!0}a.incidentEdges(f).forEach(c)}return g}var d=a("../Graph"),e=a("cp-data").PriorityQueue;b.exports=c},{"../Graph":29,"cp-data":19}],39:[function(a,b){function c(a){function b(g){var h=e[g]={onStack:!0,lowlink:c,index:c++};if(d.push(g),a.successors(g).forEach(function(a){a in e?e[a].onStack&&(h.lowlink=Math.min(h.lowlink,e[a].index)):(b(a),h.lowlink=Math.min(h.lowlink,e[a].lowlink))}),h.lowlink===h.index){var i,j=[];do i=d.pop(),e[i].onStack=!1,j.push(i);while(g!==i);f.push(j)}}if(!a.isDirected())throw new Error("tarjan can only be applied to a directed graph. Bad input: "+a);var c=0,d=[],e={},f=[];return a.nodes().forEach(function(a){a in e||b(a)}),f}b.exports=c},{}],40:[function(a,b){function c(a){function b(g){if(g in e)throw new d;g in c||(e[g]=!0,c[g]=!0,a.predecessors(g).forEach(function(a){b(a)}),delete e[g],f.push(g))}if(!a.isDirected())throw new Error("topsort can only be applied to a directed graph. Bad input: "+a);var c={},e={},f=[],g=a.sinks();if(0!==a.order()&&0===g.length)throw new d;return a.sinks().forEach(function(a){b(a)}),f}function d(){}b.exports=c,c.CycleException=d,d.prototype.toString=function(){return"Graph has at least one cycle"}},{}],41:[function(a,b){function c(a){function b(){a.call(Line truncated
+3 -3
View File
@@ -1,4 +1,4 @@
var joint={version:"[%= pkg.version %]",dia:{},ui:{},layout:{},shapes:{},format:{},connectors:{},routers:{},mvc:{views:{}},setTheme:function(a,b){b=b||{},_.invoke(joint.mvc.views,"setTheme",a,b),joint.mvc.View.prototype.options.theme=a},util:{hashCode:function(a){var b=0;if(0==a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b},getByPath:function(a,b,c){c=c||"/";for(var d,e=b.split(c);e.length;){if(d=e.shift(),!(Object(a)===a&&d in a))return;a=a[d]}return a},setByPath:function(a,b,c,d){d=d||"/";var e=b.split(d),f=a,g=0;if(b.indexOf(d)>-1){for(var h=e.length;h-1>g;g++)f=f[e[g]]||(f[e[g]]={});f[e[h-1]]=c}else a[b]=c;return a},unsetByPath:function(a,b,c){c=c||"/";var d=b.lastIndexOf(c);if(d>-1){var e=joint.util.getByPath(a,b.substr(0,d),c);e&&delete e[b.slice(d+1)]}else delete a[b];return a},flattenObject:function(a,b,c){b=b||"/";var d={};for(var e in a)if(a.hasOwnProperty(e)){var f="object"==typeof a[e];if(f&&c&&c(a[e])&&(f=!1),f){var g=this.flattenObject(a[e],b,c);for(var h in g)g.hasOwnProperty(h)&&(d[e+b+h]=g[h])}else d[e]=a[e]}return d},uuid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})},guid:function(a){return this.guid.id=this.guid.id||1,a.id=void 0===a.id?"j_"+this.guid.id++:a.id,a.id},mixin:function(){for(var a=arguments[0],b=1,c=arguments.length;c>b;b++){var d=arguments[b];(Object(d)===d||_.isFunction(d)||null!==d&&void 0!==d)&&_.each(d,function(b,c){return this.mixin.deep&&Object(b)===b?(a[c]||(a[c]=_.isArray(b)?[]:{}),void this.mixin(a[c],b)):void(a[c]!==b&&(this.mixin.supplement&&a.hasOwnProperty(c)||(a[c]=b)))},this)}return a},supplement:function(){this.mixin.supplement=!0;var a=this.mixin.apply(this,arguments);return this.mixin.supplement=!1,a},deepMixin:function(){this.mixin.deep=!0;var a=this.mixin.apply(this,arguments);return this.mixin.deep=!1,a},deepSupplement:function(){this.mixin.deep=this.mixin.supplement=!0;var a=this.mixin.apply(this,arguments);return this.mixin.deep=this.mixin.supplement=!1,a},normalizeEvent:function(a){var b=a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0];if(b){for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return a},nextFrame:function(){var a;if("undefined"!=typeof window&&(a=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame),!a){var b=0;a=function(a){var c=(new Date).getTime(),d=Math.max(0,16-(c-b)),e=setTimeout(function(){a(c+d)},d);return b=c+d,e}}return function(b,c){return a(c?_.bind(b,c):b)}}(),cancelFrame:function(){var a,b="undefined"!=typeof window;return b&&(a=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.msCancelAnimationFrame||window.msCancelRequestAnimationFrame||window.oCancelAnimationFrame||window.oCancelRequestAnimationFrame||window.mozCancelAnimationFrame||window.mozCancelRequestAnimationFrame),a=a||clearTimeout,b?_.bind(a,window):a}(),shapePerimeterConnectionPoint:function(a,b,c,d){var e,f;if(!c){var h=b.$(".scalable")[0],i=b.$(".rotatable")[0];h&&h.firstChild?c=h.firstChild:i&&i.firstChild&&(c=i.firstChild)}return c?(f=V(c).findIntersection(d,a.paper.viewport),f||(e=g.rect(V(c).bbox(!1,a.paper.viewport)))):(e=b.model.getBBox(),f=e.intersectionWithLineFromCenterToPoint(d)),f||e.center()},breakText:function(a,b,c,d){d=d||{};var e=b.width,f=b.height,g=d.svgDocument||V("svg").node,h=V("<text><tspan></tspan></text>").attr(c||{}).node,i=h.firstChild,j=document.createTextNode("");i.appendChild(j),g.appendChild(h),d.svgDocument||document.body.appendChild(g);for(var k,l=a.split(" "),m=[],n=[],o=0,p=0,q=l.length;q>o;o++){var r=l[o];if(j.data=n[p]?n[p]+" "+r:r,i.getComputedTextLength()<=e)n[p]=j.data,k&&(m[p++]=!0,k=0);else{if(!n[p]||k){var s=!!k;if(k=r.length-1,s||!k){if(!k){if(!n[p]){n=[];break}l.splice(o,2,r+l[o+1]),q--,m[p++]=!0,o--;continue}l[o]=r.substring(0,k),l[o+1]=r.substring(k)+l[o+1]}else l.splice(o,1,r.substring(0,k),r.substring(k)),q++,p&&!m[p-1]&&p--;o--;continue}p++,o--}if("undefined"!=typeof f){var t=t||1.25*h.getBBox().height;if(t*n.length>f){n.splice(Math.floor(f/t));break}}}return d.svgDocument?g.removeChild(h):document.body.removeChild(g),n.join("\n")},imageToDataUri:function(a,b){if(!a||"data:"===a.substr(0,"data:".length))return setTimeout(function(){b(null,a)},0);var c=document.createElement("canvas"),d=document.createElement("img");d.onload=function(){var e=c.getContext("2d");c.width=d.width,c.height=d.height,e.drawImage(d,0,0);try{var f=(a.split(".").pop()||"png","jpeg"),g=c.toDataURL(f)}catch(h){if(/\.svg$/.test(a)){var i=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");i.open("GET",a,!1),i.send(null);var j=i.responseText;return b(null,"data:image/svg+xml,"+encodeURIComponent(j))}console.error(d.src,"fails to convert",h)}b(null,g)},d.ononerroLine truncated
var joint={version:"[%= pkg.version %]",dia:{},ui:{},layout:{},shapes:{},format:{},connectors:{},routers:{},mvc:{views:{}},setTheme:function(a,b){b=b||{},_.invoke(joint.mvc.views,"setTheme",a,b),joint.mvc.View.prototype.options.theme=a},util:{hashCode:function(a){var b=0;if(0==a.length)return b;for(var c=0;c<a.length;c++){var d=a.charCodeAt(c);b=(b<<5)-b+d,b&=b}return b},getByPath:function(a,b,c){c=c||"/";for(var d,e=b.split(c);e.length;){if(d=e.shift(),!(Object(a)===a&&d in a))return void 0;a=a[d]}return a},setByPath:function(a,b,c,d){d=d||"/";var e=b.split(d),f=a,g=0;if(b.indexOf(d)>-1){for(var h=e.length;h-1>g;g++)f=f[e[g]]||(f[e[g]]={});f[e[h-1]]=c}else a[b]=c;return a},unsetByPath:function(a,b,c){c=c||"/";var d=b.lastIndexOf(c);if(d>-1){var e=joint.util.getByPath(a,b.substr(0,d),c);e&&delete e[b.slice(d+1)]}else delete a[b];return a},flattenObject:function(a,b,c){b=b||"/";var d={};for(var e in a)if(a.hasOwnProperty(e)){var f="object"==typeof a[e];if(f&&c&&c(a[e])&&(f=!1),f){var g=this.flattenObject(a[e],b,c);for(var h in g)g.hasOwnProperty(h)&&(d[e+b+h]=g[h])}else d[e]=a[e]}return d},uuid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})},guid:function(a){return this.guid.id=this.guid.id||1,a.id=void 0===a.id?"j_"+this.guid.id++:a.id,a.id},mixin:function(){for(var a=arguments[0],b=1,c=arguments.length;c>b;b++){var d=arguments[b];(Object(d)===d||_.isFunction(d)||null!==d&&void 0!==d)&&_.each(d,function(b,c){return this.mixin.deep&&Object(b)===b?(a[c]||(a[c]=_.isArray(b)?[]:{}),void this.mixin(a[c],b)):void(a[c]!==b&&(this.mixin.supplement&&a.hasOwnProperty(c)||(a[c]=b)))},this)}return a},supplement:function(){this.mixin.supplement=!0;var a=this.mixin.apply(this,arguments);return this.mixin.supplement=!1,a},deepMixin:function(){this.mixin.deep=!0;var a=this.mixin.apply(this,arguments);return this.mixin.deep=!1,a},deepSupplement:function(){this.mixin.deep=this.mixin.supplement=!0;var a=this.mixin.apply(this,arguments);return this.mixin.deep=this.mixin.supplement=!1,a},normalizeEvent:function(a){var b=a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0];if(b){for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return a},nextFrame:function(){var a;if("undefined"!=typeof window&&(a=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame),!a){var b=0;a=function(a){var c=(new Date).getTime(),d=Math.max(0,16-(c-b)),e=setTimeout(function(){a(c+d)},d);return b=c+d,e}}return function(b,c){return a(c?_.bind(b,c):b)}}(),cancelFrame:function(){var a,b="undefined"!=typeof window;return b&&(a=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.msCancelAnimationFrame||window.msCancelRequestAnimationFrame||window.oCancelAnimationFrame||window.oCancelRequestAnimationFrame||window.mozCancelAnimationFrame||window.mozCancelRequestAnimationFrame),a=a||clearTimeout,b?_.bind(a,window):a}(),shapePerimeterConnectionPoint:function(a,b,c,d){var e,f;if(!c){var h=b.$(".scalable")[0],i=b.$(".rotatable")[0];h&&h.firstChild?c=h.firstChild:i&&i.firstChild&&(c=i.firstChild)}return c?(f=V(c).findIntersection(d,a.paper.viewport),f||(e=g.rect(V(c).bbox(!1,a.paper.viewport)))):(e=b.model.getBBox(),f=e.intersectionWithLineFromCenterToPoint(d)),f||e.center()},breakText:function(a,b,c,d){d=d||{};var e=b.width,f=b.height,g=d.svgDocument||V("svg").node,h=V("<text><tspan></tspan></text>").attr(c||{}).node,i=h.firstChild,j=document.createTextNode("");i.appendChild(j),g.appendChild(h),d.svgDocument||document.body.appendChild(g);for(var k,l=a.split(" "),m=[],n=[],o=0,p=0,q=l.length;q>o;o++){var r=l[o];if(j.data=n[p]?n[p]+" "+r:r,i.getComputedTextLength()<=e)n[p]=j.data,k&&(m[p++]=!0,k=0);else{if(!n[p]||k){var s=!!k;if(k=r.length-1,s||!k){if(!k){if(!n[p]){n=[];break}l.splice(o,2,r+l[o+1]),q--,m[p++]=!0,o--;continue}l[o]=r.substring(0,k),l[o+1]=r.substring(k)+l[o+1]}else l.splice(o,1,r.substring(0,k),r.substring(k)),q++,p&&!m[p-1]&&p--;o--;continue}p++,o--}if("undefined"!=typeof f){var t=t||1.25*h.getBBox().height;if(t*n.length>f){n.splice(Math.floor(f/t));break}}}return d.svgDocument?g.removeChild(h):document.body.removeChild(g),n.join("\n")},imageToDataUri:function(a,b){if(!a||"data:"===a.substr(0,"data:".length))return setTimeout(function(){b(null,a)},0);var c=document.createElement("canvas"),d=document.createElement("img");d.onload=function(){var e=c.getContext("2d");c.width=d.width,c.height=d.height,e.drawImage(d,0,0);try{var f=(a.split(".").pop()||"png","jpeg"),g=c.toDataURL(f)}catch(h){if(/\.svg$/.test(a)){var i=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");i.open("GET",a,!1),i.send(null);var j=i.responseText;return b(null,"data:image/svg+xml,"+encodeURIComponent(j))}console.error(d.src,"fails to convert",h)}b(null,g)},d.oLine truncated
this.el=this.$el[0],this.vel=V(this.el)},findBySelector:function(a){var b="."===a?this.$el:this.$el.find(a);return b},notify:function(a){if(this.paper){var b=Array.prototype.slice.call(arguments,1);this.trigger.apply(this,[a].concat(b)),this.paper.trigger.apply(this.paper,[a,this].concat(b))}},getStrokeBBox:function(a){var b=!!a;a=a||this.el;var c,d=V(a).bbox(!1,this.paper.viewport);return c=b?V(a).attr("stroke-width"):this.model.attr("rect/stroke-width")||this.model.attr("circle/stroke-width")||this.model.attr("ellipse/stroke-width")||this.model.attr("path/stroke-width"),c=parseFloat(c)||0,g.rect(d).moveAndExpand({x:-c/2,y:-c/2,width:c,height:c})},getBBox:function(){return g.rect(this.vel.bbox())},highlight:function(a,b){return a=a?this.$(a)[0]||this.el:this.el,b=b||{},b.partial=a!=this.el,this.notify("cell:highlight",a,b),this},unhighlight:function(a,b){return a=a?this.$(a)[0]||this.el:this.el,b=b||{},b.partial=a!=this.el,this.notify("cell:unhighlight",a,b),this},findMagnet:function(a){var b=this.$(a);if(0===b.length||b[0]===this.el){var c=this.model.get("attrs")||{};return c["."]&&c["."].magnet===!1?void 0:this.el}return b.attr("magnet")?b[0]:this.findMagnet(b.parent())},applyFilter:function(a,b){var c=_.isString(a)?this.findBySelector(a):$(a),d=b.name+this.paper.svg.id+joint.util.hashCode(JSON.stringify(b));if(!this.paper.svg.getElementById(d)){var e=joint.util.filter[b.name]&&joint.util.filter[b.name](b.args||{});if(!e)throw new Error("Non-existing filter "+b.name);var f=V(e);f.attr({filterUnits:"objectBoundingBox",x:-1,y:-1,width:3,height:3}),b.attrs&&f.attr(b.attrs),f.node.id=d,V(this.paper.svg).defs().append(f)}c.each(function(){V(this).attr("filter","url(#"+d+")")})},applyGradient:function(a,b,c){var d=_.isString(a)?this.findBySelector(a):$(a),e=c.type+this.paper.svg.id+joint.util.hashCode(JSON.stringify(c));if(!this.paper.svg.getElementById(e)){var f=["<"+c.type+">",_.map(c.stops,function(a){return'<stop offset="'+a.offset+'" stop-color="'+a.color+'" stop-opacity="'+(_.isFinite(a.opacity)?a.opacity:1)+'" />'}).join(""),"</"+c.type+">"].join(""),g=V(f);c.attrs&&g.attr(c.attrs),g.node.id=e,V(this.paper.svg).defs().append(g)}d.each(function(){V(this).attr(b,"url(#"+e+")")})},getSelector:function(a,b){if(a===this.el)return b;var c=V(a).index()+1,d=a.tagName+":nth-child("+c+")";return b&&(d+=" > "+b),this.getSelector(a.parentNode,d)},pointerdblclick:function(a,b,c){this.notify("cell:pointerdblclick",a,b,c)},pointerclick:function(a,b,c){this.notify("cell:pointerclick",a,b,c)},pointerdown:function(a,b,c){this.model.collection&&(this.model.trigger("batch:start",{batchName:"pointer"}),this._collection=this.model.collection),this.notify("cell:pointerdown",a,b,c)},pointermove:function(a,b,c){this.notify("cell:pointermove",a,b,c)},pointerup:function(a,b,c){this.notify("cell:pointerup",a,b,c),this._collection&&(this._collection.trigger("batch:stop",{batchName:"pointer"}),delete this._collection)},mouseover:function(a){this.notify("cell:mouseover",a)},mouseout:function(a){this.notify("cell:mouseout",a)},contextmenu:function(a,b,c){this.notify("cell:contextmenu",a,b,c)},onSetTheme:function(a,b){a&&this.vel.removeClass(this.themeClassNamePrefix+a),this.vel.addClass(this.themeClassNamePrefix+b)}}),joint.dia.Element=joint.dia.Cell.extend({defaults:{position:{x:0,y:0},size:{width:1,height:1},angle:0},position:function(a,b,c){var d=_.isNumber(b);if(c=(d?c:a)||{},c.parentRelative){if(!this.graph)throw new Error("Element must be part of a graph.");var e=this.graph.getCell(this.get("parent")),f=e&&!e.isLink()?e.get("position"):{x:0,y:0}}if(d)return c.parentRelative&&(a+=f.x,b+=f.y),this.set("position",{x:a,y:b},c);var h=g.point(this.get("position"));return c.parentRelative?h.difference(f):h},translate:function(a,b,c){if(a=a||0,b=b||0,0===a&&0===b)return this;c=c||{},c.translateBy=c.translateBy||this.id;var d=this.get("position")||{x:0,y:0};if(c.restrictedArea&&c.translateBy===this.id){var e=this.getBBox({deep:!0}),f=c.restrictedArea,g=d.x-e.x,h=d.y-e.y,i=Math.max(f.x+g,Math.min(f.x+f.width+g-e.width,d.x+a)),j=Math.max(f.y+h,Math.min(f.y+f.height+h-e.height,d.y+b));a=i-d.x,b=j-d.y}var k={x:d.x+a,y:d.y+b};return c.tx=a,c.ty=b,c.transition?(_.isObject(c.transition)||(c.transition={}),this.transition("position",k,_.extend({},c.transition,{valueFunction:joint.util.interpolate.object}))):(this.set("position",k,c),_.invoke(this.getEmbeddedCells(),"translate",a,b,c)),this},resize:function(a,b,c){if(c=c||{},this.trigger("batch:start",_.extend({},c,{element:this,batchName:"resize"})),c.direction){var d=this.get("size");switch(c.direction){case"left":case"right":b=d.height;break;case"top":case"bottom":a=d.width}var e=g.normalizeAngle(this.get("angle")||0),f={"top-right":0,right:0,"top-left":1,top:1,"bottom-left":2,left:2,"bottom-right":3,bottom:3}[c.direction];c.absolute&&(f+=Math.floor((e+45)/90),f%=4);var h=this.getBBox(),i=h[["bottomLeft","corner","topRight","origin"][f]](),j=g.point(i).rotate(h.center(),-e),k=Math.sqrt(a*a+b*Line truncated
function b(a,b){return c[f]=a,c[f+1]=a.el===b?void 0:b,c}var c=[];c[4]=a,c[5]=this;var d,e=0,f=0;"source"===a?(e=2,d="target"):(f=2,d="source");var g=this.model.get(d);return g.id&&(c[e]=this.paper.findViewByModel(g.id),c[e+1]=g.selector&&c[e].el.querySelector(g.selector)),b},_markAvailableMagnets:function(){var a=this.paper.model.getElements(),b=this.paper.options.validateConnection;_.chain(a).map(this.paper.findViewByModel,this.paper).each(function(a){var c="false"!==a.el.getAttribute("magnet")&&b.apply(this.paper,this._validateConnectionArgs(a,null)),d=_.filter(a.el.querySelectorAll("[magnet]"),function(c){return b.apply(this.paper,this._validateConnectionArgs(a,c))},this);c&&V(a.el).addClass("available-magnet"),_.each(d,function(a){V(a).addClass("available-magnet")}),(c||d.length)&&V(a.el).addClass("available-cell")},this).value()},_unmarkAvailableMagnets:function(){_.each(this.paper.el.querySelectorAll(".available-cell, .available-magnet"),function(a){V(a).removeClass("available-magnet").removeClass("available-cell")})},startArrowheadMove:function(a,b){b=_.defaults(b||{},{whenNotAllowed:"revert"}),this._action="arrowhead-move",this._whenNotAllowed=b.whenNotAllowed,this._arrowhead=a,this._initialEnd=_.clone(this.model.get(a))||{x:0,y:0},this._validateConnectionArgs=this._createValidateConnectionArgs(this._arrowhead),this._beforeArrowheadMove()},can:function(a){var b=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;return b===!1?!1:!_.isObject(b)||b[a]!==!1},pointerdown:function(a,b,c){if(joint.dia.CellView.prototype.pointerdown.apply(this,arguments),this.notify("link:pointerdown",a,b,c),this._dx=b,this._dy=c,null==a.target.getAttribute("magnet")){var d=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;if(d!==!1){var e,f=a.target.getAttribute("class"),g=a.target.parentNode.getAttribute("class");switch("label"===g?(f=g,e=a.target.parentNode):e=a.target,f){case"marker-vertex":this.can("vertexMove")&&(this._action="vertex-move",this._vertexIdx=a.target.getAttribute("idx"));break;case"marker-vertex-remove":case"marker-vertex-remove-area":this.can("vertexRemove")&&this.removeVertex(a.target.getAttribute("idx"));break;case"marker-arrowhead":this.can("arrowheadMove")&&this.startArrowheadMove(a.target.getAttribute("end"));break;case"label":this.can("labelMove")&&(this._action="label-move",this._labelIdx=parseInt(V(e).attr("label-idx"),10),this._samples=this._V.connection.sample(1),this._linkLength=this._V.connection.node.getTotalLength());break;default:var h=a.target.parentNode.getAttribute("event");h?"remove"===h?this.model.remove():this.paper.trigger(h,a,this,b,c):this.can("vertexAdd")&&(this._vertexIdx=this.addVertex({x:b,y:c}),this._action="vertex-move")}}}},pointermove:function(a,b,c){switch(this._action){case"vertex-move":var d=_.clone(this.model.get("vertices"));d[this._vertexIdx]={x:b,y:c},this.model.set("vertices",d,{ui:!0});break;case"label-move":for(var e,f,h,i,j={x:b,y:c},k=(this.model.get("labels")[this._labelIdx],this._samples),l=1/0,m=0,n=k.length;n>m;m++)h=k[m],i=g.line(h,j).squaredLength(),l>i&&(l=i,e=h,f=m);var o=k[f-1],p=k[f+1],q=(g.point(e).distance(j),0);o&&p?q=g.line(o,p).pointOffset(j):o?q=g.line(o,e).pointOffset(j):p&&(q=g.line(e,p).pointOffset(j)),this.model.label(this._labelIdx,{position:{distance:e.distance/this._linkLength,offset:q}});break;case"arrowhead-move":if(this.paper.options.snapLinks){var r=this.paper.options.snapLinks.radius||50,s=this.paper.findViewsInArea({x:b-r,y:c-r,width:2*r,height:2*r});this._closestView&&this._closestView.unhighlight(this._closestEnd.selector,{connecting:!0,snapping:!0}),this._closestView=this._closestEnd=null;var t,u=Number.MAX_VALUE,v=g.point(b,c);_.each(s,function(a){"false"!==a.el.getAttribute("magnet")&&(t=a.model.getBBox().center().distance(v),r>t&&u>t&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,null))&&(u=t,this._closestView=a,this._closestEnd={id:a.model.id})),a.$("[magnet]").each(_.bind(function(b,c){var d=V(c).bbox(!1,this.paper.viewport);t=v.distance({x:d.x+d.width/2,y:d.y+d.height/2}),r>t&&u>t&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,c))&&(u=t,this._closestView=a,this._closestEnd={id:a.model.id,selector:a.getSelector(c),port:c.getAttribute("port")})},this))},this),this._closestView&&this._closestView.highlight(this._closestEnd.selector,{connecting:!0,snapping:!0}),this.model.set(this._arrowhead,this._closestEnd||{x:b,y:c},{ui:!0})}else{var w="mousemove"===a.type?a.target:document.elementFromPoint(a.clientX,a.clientY);this._targetEvent!==w&&(this._magnetUnderPointer&&this._viewUnderPointer.unhighlight(this._magnetUnderPointer,{connecting:!0}),this._viewUnderPointer=this.paper.findView(w),this._viewUnderPointer?(this._magnetUnderPointer=this._viewUnderPointer.findMagnet(w),this._magnetUnderPointer&&this.paper.options.validateConnection.Line truncated
return{0:0,45:this.step/2,90:this.step/2}},fallbackRoute:function(b,c,d){var e=(d.previousDirAngle||0)%180===0?a.point(b.x,c.y):a.point(c.x,b.y);return[e,c]},draggingRoute:null};return c.prototype.build=function(a,c){var d=this.options,e=b.chain(d.excludeEnds).map(c.get,c).pluck("id").map(a.getCell,a).value(),f=[],g=a.getCell(c.get("source").id);g&&(f=b.union(f,b.map(g.getAncestors(),"id")));var h=a.getCell(c.get("target").id);h&&(f=b.union(f,b.map(h.getAncestors(),"id")));var i=this.mapGridSize;return b.chain(a.getElements()).difference(e).reject(function(a){return b.contains(d.excludeTypes,a.get("type"))||b.contains(f,a.id)}).invoke("getBBox").invoke("moveAndExpand",d.paddingBox).foldl(function(a,b){for(var c=b.origin().snapToGrid(i),d=b.corner().snapToGrid(i),e=c.x;e<=d.x;e+=i)for(var f=c.y;f<=d.y;f+=i){var g=e+"@"+f;a[g]=a[g]||[],a[g].push(b)}return a},this.map).value(),this},c.prototype.isPointAccessible=function(a){var c=a.clone().snapToGrid(this.mapGridSize).toString();return b.every(this.map[c],function(b){return!b.containsPoint(a)})},d.prototype.add=function(a,c){this.hash[a]?this.items.splice(this.items.indexOf(a),1):this.hash[a]=this.OPEN,this.values[a]=c;var d=b.sortedIndex(this.items,a,function(a){return this.values[a]},this);this.items.splice(d,0,a)},d.prototype.remove=function(a){this.hash[a]=this.CLOSE},d.prototype.isOpen=function(a){return this.hash[a]===this.OPEN},d.prototype.isClose=function(a){return this.hash[a]===this.CLOSE},d.prototype.isEmpty=function(){return 0===this.items.length},d.prototype.pop=function(){var a=this.items.shift();return this.remove(a),a},function(a,c,d){return l.call(d,a,b.extend({},m,c))}}(g,_),joint.routers.metro=function(){if(!_.isFunction(joint.routers.manhattan))throw"Metro requires the manhattan router.";var a={diagonalCost:null,directions:function(){var a=this.step,b=this.diagonalCost||Math.ceil(Math.sqrt(a*a<<1));return[{offsetX:a,offsetY:0,cost:a},{offsetX:a,offsetY:a,cost:b},{offsetX:0,offsetY:a,cost:a},{offsetX:-a,offsetY:a,cost:b},{offsetX:-a,offsetY:0,cost:a},{offsetX:-a,offsetY:-a,cost:b},{offsetX:0,offsetY:-a,cost:a},{offsetX:a,offsetY:-a,cost:b}]},maxAllowedDirectionChange:45,fallbackRoute:function(a,b,c){var d=a.theta(b),e={x:b.x,y:a.y},f={x:a.x,y:b.y};if(d%180>90){var h=e;e=f,f=h}var i=45>d%90?e:f,j=g.line(a,i),k=90*Math.ceil(d/90),l=g.point.fromPolar(j.squaredLength(),g.toRad(k+135),i),m=g.line(b,l),n=j.intersection(m);return n?[n.round(),b]:[b]}};return function(b,c,d){return joint.routers.manhattan(b,_.extend({},a,c),d)}}(),joint.routers.oneSide=function(a,b,c){var d,e,f,g=b.side||"bottom",h=b.padding||40,i=c.sourceBBox,j=c.targetBBox,k=i.center(),l=j.center();switch(g){case"bottom":f=1,d="y",e="height";break;case"top":f=-1,d="y",e="height";break;case"left":f=-1,d="x",e="width";break;case"right":f=1,d="x",e="width";break;default:throw new Error("Router: invalid side")}return k[d]+=f*(i[e]/2+h),l[d]+=f*(j[e]/2+h),f*(k[d]-l[d])>0?l[d]=k[d]:k[d]=l[d],[k].concat(a,l)},joint.connectors.normal=function(a,b,c){var d=["M",a.x,a.y];return _.each(c,function(a){d.push(a.x,a.y)}),d.push(b.x,b.y),d.join(" ")},joint.connectors.rounded=function(a,b,c,d){d=d||{};var e,f,h,i,j,k,l=d.radius||10,m=["M",a.x,a.y];return _.each(c,function(d,n){j=c[n-1]||a,k=c[n+1]||b,h=i||g.point(d).distance(j)/2,i=g.point(d).distance(k)/2,e=g.point(d).move(j,-Math.min(l,h)).round(),f=g.point(d).move(k,-Math.min(l,i)).round(),m.push(e.x,e.y,"S",d.x,d.y,f.x,f.y,"L")}),m.push(b.x,b.y),m.join(" ")},joint.connectors.smooth=function(a,b,c){var d;if(c.length)d=g.bezier.curveThroughPoints([a].concat(c).concat([b]));else{var e=a.x<b.x?b.x-(b.x-a.x)/2:a.x-(a.x-b.x)/2;d=["M",a.x,a.y,"C",e,a.y,e,b.y,b.x,b.y]}return d.join(" ")},joint.connectors.jumpover=function(a,b){function c(a,c,d){var e=[].concat(a,d,c);return e.reduce(function(a,c,d){var f=e[d+1];return null!=f&&(a[d]=b.line(c,f)),a},[])}function d(a){var b=a.paper._jumpOverUpdateList;null==b&&(b=a.paper._jumpOverUpdateList=[],a.paper.on("cell:pointerup",e),a.paper.model.on("reset",function(){b=[]})),b.indexOf(a)<0&&(b.push(a),a.listenToOnce(a.model,"change:connector remove",function(){b.splice(b.indexOf(a),1)}))}function e(){for(var a=this._jumpOverUpdateList,b=0;b<a.length;b++)a[b].update()}function f(b,c){return a(c).map(function(a){return b.intersection(a)}).compact().value()}function g(a,c){return b.line(a,c).squaredLength()}function h(a,c,d){return c.reduce(function(e,f,g){if(f.skip===!0)return e;var h=e.pop()||a,i=b.point(f).move(h.start,-d),j=b.point(f).move(h.start,+d),k=c[g+1];if(null!=k){var m=j.distance(k);d>=m&&(j=k.move(h.start,m),k.skip=!0)}else{var n=i.distance(h.end);if(2*d+l>n)return e.push(h),e}var o=j.distance(h.start);if(2*d+l>o)return e.push(h),e;var p=b.line(i,j);return p.isJump=!0,e.push(b.line(h.start,i),p,b.line(j,h.end)),e},[])}function i(c,d,e){var f=["M",c[0].start.x,c[0].start.y],g=a(c).map(function(a){if(a.isJump){var c;if("arc"===e){c=a.start.difference(a.end);var f=Number(c.x<0&&c.y<0);return["A",d,d,0,Line truncated
function b(a,b){return c[f]=a,c[f+1]=a.el===b?void 0:b,c}var c=[];c[4]=a,c[5]=this;var d,e=0,f=0;"source"===a?(e=2,d="target"):(f=2,d="source");var g=this.model.get(d);return g.id&&(c[e]=this.paper.findViewByModel(g.id),c[e+1]=g.selector&&c[e].el.querySelector(g.selector)),b},_markAvailableMagnets:function(){var a=this.paper.model.getElements(),b=this.paper.options.validateConnection;_.chain(a).map(this.paper.findViewByModel,this.paper).each(function(a){var c="false"!==a.el.getAttribute("magnet")&&b.apply(this.paper,this._validateConnectionArgs(a,null)),d=_.filter(a.el.querySelectorAll("[magnet]"),function(c){return b.apply(this.paper,this._validateConnectionArgs(a,c))},this);c&&V(a.el).addClass("available-magnet"),_.each(d,function(a){V(a).addClass("available-magnet")}),(c||d.length)&&V(a.el).addClass("available-cell")},this).value()},_unmarkAvailableMagnets:function(){_.each(this.paper.el.querySelectorAll(".available-cell, .available-magnet"),function(a){V(a).removeClass("available-magnet").removeClass("available-cell")})},startArrowheadMove:function(a,b){b=_.defaults(b||{},{whenNotAllowed:"revert"}),this._action="arrowhead-move",this._whenNotAllowed=b.whenNotAllowed,this._arrowhead=a,this._initialEnd=_.clone(this.model.get(a))||{x:0,y:0},this._validateConnectionArgs=this._createValidateConnectionArgs(this._arrowhead),this._beforeArrowheadMove()},can:function(a){var b=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;return b===!1?!1:_.isObject(b)&&b[a]===!1?!1:!0},pointerdown:function(a,b,c){if(joint.dia.CellView.prototype.pointerdown.apply(this,arguments),this.notify("link:pointerdown",a,b,c),this._dx=b,this._dy=c,null==a.target.getAttribute("magnet")){var d=_.isFunction(this.options.interactive)?this.options.interactive(this,"pointerdown"):this.options.interactive;if(d!==!1){var e,f=a.target.getAttribute("class"),g=a.target.parentNode.getAttribute("class");switch("label"===g?(f=g,e=a.target.parentNode):e=a.target,f){case"marker-vertex":this.can("vertexMove")&&(this._action="vertex-move",this._vertexIdx=a.target.getAttribute("idx"));break;case"marker-vertex-remove":case"marker-vertex-remove-area":this.can("vertexRemove")&&this.removeVertex(a.target.getAttribute("idx"));break;case"marker-arrowhead":this.can("arrowheadMove")&&this.startArrowheadMove(a.target.getAttribute("end"));break;case"label":this.can("labelMove")&&(this._action="label-move",this._labelIdx=parseInt(V(e).attr("label-idx"),10),this._samples=this._V.connection.sample(1),this._linkLength=this._V.connection.node.getTotalLength());break;default:var h=a.target.parentNode.getAttribute("event");h?"remove"===h?this.model.remove():this.paper.trigger(h,a,this,b,c):this.can("vertexAdd")&&(this._vertexIdx=this.addVertex({x:b,y:c}),this._action="vertex-move")}}}},pointermove:function(a,b,c){switch(this._action){case"vertex-move":var d=_.clone(this.model.get("vertices"));d[this._vertexIdx]={x:b,y:c},this.model.set("vertices",d,{ui:!0});break;case"label-move":for(var e,f,h,i,j={x:b,y:c},k=(this.model.get("labels")[this._labelIdx],this._samples),l=1/0,m=0,n=k.length;n>m;m++)h=k[m],i=g.line(h,j).squaredLength(),l>i&&(l=i,e=h,f=m);var o=k[f-1],p=k[f+1],q=(g.point(e).distance(j),0);o&&p?q=g.line(o,p).pointOffset(j):o?q=g.line(o,e).pointOffset(j):p&&(q=g.line(e,p).pointOffset(j)),this.model.label(this._labelIdx,{position:{distance:e.distance/this._linkLength,offset:q}});break;case"arrowhead-move":if(this.paper.options.snapLinks){var r=this.paper.options.snapLinks.radius||50,s=this.paper.findViewsInArea({x:b-r,y:c-r,width:2*r,height:2*r});this._closestView&&this._closestView.unhighlight(this._closestEnd.selector,{connecting:!0,snapping:!0}),this._closestView=this._closestEnd=null;var t,u=Number.MAX_VALUE,v=g.point(b,c);_.each(s,function(a){"false"!==a.el.getAttribute("magnet")&&(t=a.model.getBBox().center().distance(v),r>t&&u>t&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,null))&&(u=t,this._closestView=a,this._closestEnd={id:a.model.id})),a.$("[magnet]").each(_.bind(function(b,c){var d=V(c).bbox(!1,this.paper.viewport);t=v.distance({x:d.x+d.width/2,y:d.y+d.height/2}),r>t&&u>t&&this.paper.options.validateConnection.apply(this.paper,this._validateConnectionArgs(a,c))&&(u=t,this._closestView=a,this._closestEnd={id:a.model.id,selector:a.getSelector(c),port:c.getAttribute("port")})},this))},this),this._closestView&&this._closestView.highlight(this._closestEnd.selector,{connecting:!0,snapping:!0}),this.model.set(this._arrowhead,this._closestEnd||{x:b,y:c},{ui:!0})}else{var w="mousemove"===a.type?a.target:document.elementFromPoint(a.clientX,a.clientY);this._targetEvent!==w&&(this._magnetUnderPointer&&this._viewUnderPointer.unhighlight(this._magnetUnderPointer,{connecting:!0}),this._viewUnderPointer=this.paper.findView(w),this._viewUnderPointer?(this._magnetUnderPointer=this._viewUnderPointer.findMagnet(w),this._magnetUnderPointer&&this.paper.options.validateConnecLine truncated
offsetY:-a,cost:a}]},penalties:function(){return{0:0,45:this.step/2,90:this.step/2}},fallbackRoute:function(b,c,d){var e=(d.previousDirAngle||0)%180===0?a.point(b.x,c.y):a.point(c.x,b.y);return[e,c]},draggingRoute:null};return c.prototype.build=function(a,c){var d=this.options,e=b.chain(d.excludeEnds).map(c.get,c).pluck("id").map(a.getCell,a).value(),f=[],g=a.getCell(c.get("source").id);g&&(f=b.union(f,b.map(g.getAncestors(),"id")));var h=a.getCell(c.get("target").id);h&&(f=b.union(f,b.map(h.getAncestors(),"id")));var i=this.mapGridSize;return b.chain(a.getElements()).difference(e).reject(function(a){return b.contains(d.excludeTypes,a.get("type"))||b.contains(f,a.id)}).invoke("getBBox").invoke("moveAndExpand",d.paddingBox).foldl(function(a,b){for(var c=b.origin().snapToGrid(i),d=b.corner().snapToGrid(i),e=c.x;e<=d.x;e+=i)for(var f=c.y;f<=d.y;f+=i){var g=e+"@"+f;a[g]=a[g]||[],a[g].push(b)}return a},this.map).value(),this},c.prototype.isPointAccessible=function(a){var c=a.clone().snapToGrid(this.mapGridSize).toString();return b.every(this.map[c],function(b){return!b.containsPoint(a)})},d.prototype.add=function(a,c){this.hash[a]?this.items.splice(this.items.indexOf(a),1):this.hash[a]=this.OPEN,this.values[a]=c;var d=b.sortedIndex(this.items,a,function(a){return this.values[a]},this);this.items.splice(d,0,a)},d.prototype.remove=function(a){this.hash[a]=this.CLOSE},d.prototype.isOpen=function(a){return this.hash[a]===this.OPEN},d.prototype.isClose=function(a){return this.hash[a]===this.CLOSE},d.prototype.isEmpty=function(){return 0===this.items.length},d.prototype.pop=function(){var a=this.items.shift();return this.remove(a),a},function(a,c,d){return l.call(d,a,b.extend({},m,c))}}(g,_),joint.routers.metro=function(){if(!_.isFunction(joint.routers.manhattan))throw"Metro requires the manhattan router.";var a={diagonalCost:null,directions:function(){var a=this.step,b=this.diagonalCost||Math.ceil(Math.sqrt(a*a<<1));return[{offsetX:a,offsetY:0,cost:a},{offsetX:a,offsetY:a,cost:b},{offsetX:0,offsetY:a,cost:a},{offsetX:-a,offsetY:a,cost:b},{offsetX:-a,offsetY:0,cost:a},{offsetX:-a,offsetY:-a,cost:b},{offsetX:0,offsetY:-a,cost:a},{offsetX:a,offsetY:-a,cost:b}]},maxAllowedDirectionChange:45,fallbackRoute:function(a,b,c){var d=a.theta(b),e={x:b.x,y:a.y},f={x:a.x,y:b.y};if(d%180>90){var h=e;e=f,f=h}var i=45>d%90?e:f,j=g.line(a,i),k=90*Math.ceil(d/90),l=g.point.fromPolar(j.squaredLength(),g.toRad(k+135),i),m=g.line(b,l),n=j.intersection(m);return n?[n.round(),b]:[b]}};return function(b,c,d){return joint.routers.manhattan(b,_.extend({},a,c),d)}}(),joint.routers.oneSide=function(a,b,c){var d,e,f,g=b.side||"bottom",h=b.padding||40,i=c.sourceBBox,j=c.targetBBox,k=i.center(),l=j.center();switch(g){case"bottom":f=1,d="y",e="height";break;case"top":f=-1,d="y",e="height";break;case"left":f=-1,d="x",e="width";break;case"right":f=1,d="x",e="width";break;default:throw new Error("Router: invalid side")}return k[d]+=f*(i[e]/2+h),l[d]+=f*(j[e]/2+h),f*(k[d]-l[d])>0?l[d]=k[d]:k[d]=l[d],[k].concat(a,l)},joint.connectors.normal=function(a,b,c){var d=["M",a.x,a.y];return _.each(c,function(a){d.push(a.x,a.y)}),d.push(b.x,b.y),d.join(" ")},joint.connectors.rounded=function(a,b,c,d){d=d||{};var e,f,h,i,j,k,l=d.radius||10,m=["M",a.x,a.y];return _.each(c,function(d,n){j=c[n-1]||a,k=c[n+1]||b,h=i||g.point(d).distance(j)/2,i=g.point(d).distance(k)/2,e=g.point(d).move(j,-Math.min(l,h)).round(),f=g.point(d).move(k,-Math.min(l,i)).round(),m.push(e.x,e.y,"S",d.x,d.y,f.x,f.y,"L")}),m.push(b.x,b.y),m.join(" ")},joint.connectors.smooth=function(a,b,c){var d;if(c.length)d=g.bezier.curveThroughPoints([a].concat(c).concat([b]));else{var e=a.x<b.x?b.x-(b.x-a.x)/2:a.x-(a.x-b.x)/2;d=["M",a.x,a.y,"C",e,a.y,e,b.y,b.x,b.y]}return d.join(" ")},joint.connectors.jumpover=function(a,b){function c(a,c,d){var e=[].concat(a,d,c);return e.reduce(function(a,c,d){var f=e[d+1];return null!=f&&(a[d]=b.line(c,f)),a},[])}function d(a){var b=a.paper._jumpOverUpdateList;null==b&&(b=a.paper._jumpOverUpdateList=[],a.paper.on("cell:pointerup",e),a.paper.model.on("reset",function(){b=[]})),b.indexOf(a)<0&&(b.push(a),a.listenToOnce(a.model,"change:connector remove",function(){b.splice(b.indexOf(a),1)}))}function e(){for(var a=this._jumpOverUpdateList,b=0;b<a.length;b++)a[b].update()}function f(b,c){return a(c).map(function(a){return b.intersection(a)}).compact().value()}function g(a,c){return b.line(a,c).squaredLength()}function h(a,c,d){return c.reduce(function(e,f,g){if(f.skip===!0)return e;var h=e.pop()||a,i=b.point(f).move(h.start,-d),j=b.point(f).move(h.start,+d),k=c[g+1];if(null!=k){var m=j.distance(k);d>=m&&(j=k.move(h.start,m),k.skip=!0)}else{var n=i.distance(h.end);if(2*d+l>n)return e.push(h),e}var o=j.distance(h.start);if(2*d+l>o)return e.push(h),e;var p=b.line(i,j);return p.isJump=!0,e.push(b.line(h.start,i),p,b.line(j,h.end)),e},[])}function i(c,d,e){var f=["M",c[0].start.x,c[0].start.y],g=a(c).map(function(a){if(a.isJump){var c;if("arc"===e){c=a.start.difference(a.end);vaLine truncated
+9555 -3
View File
File diff suppressed because it is too large. Load diff
+14879 -8
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+6 -3
View File
@@ -1,3 +1,6 @@
!function(a,b){function c(a){var b=a.length,c=fa.type(a);return fa.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||"function"!==c&&(0===b||"number"==typeof b&&b>0&&b-1 in a)}function d(a){var b=oa[a]={};return fa.each(a.match(ha)||[],function(a,c){b[c]=!0}),b}function e(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=fa.expando+Math.random()}function f(a,c,d){var e;if(d===b&&1===a.nodeType)if(e="data-"+c.replace(sa,"-$1").toLowerCase(),d=a.getAttribute(e),"string"==typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:ra.test(d)?JSON.parse(d):d}catch(f){}pa.set(a,c,d)}else d=b;return d}function g(){return!0}function h(){return!1}function i(){try{return T.activeElement}catch(a){}}function j(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function k(a,b,c){if(fa.isFunction(b))return fa.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return fa.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(Ca.test(b))return fa.filter(b,a,c);b=fa.filter(b,a)}return fa.grep(a,function(a){return ba.call(b,a)>=0!==c})}function l(a,b){return fa.nodeName(a,"table")&&fa.nodeName(1===b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function m(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function n(a){var b=Na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function o(a,b){for(var c=a.length,d=0;c>d;d++)qa.set(a[d],"globalEval",!b||qa.get(b[d],"globalEval"))}function p(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(qa.hasData(a)&&(f=qa.access(a),g=qa.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)fa.event.add(b,e,j[e][c])}pa.hasData(a)&&(h=pa.access(a),i=fa.extend({},h),pa.set(b,i))}}function q(a,c){var d=a.getElementsByTagName?a.getElementsByTagName(c||"*"):a.querySelectorAll?a.querySelectorAll(c||"*"):[];return c===b||c&&fa.nodeName(a,c)?fa.merge([a],d):d}function r(a,b){var c=b.nodeName.toLowerCase();"input"===c&&Ka.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function s(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=_a.length;e--;)if(b=_a[e]+c,b in a)return b;return d}function t(a,b){return a=b||a,"none"===fa.css(a,"display")||!fa.contains(a.ownerDocument,a)}function u(b){return a.getComputedStyle(b,null)}function v(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=qa.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&t(d)&&(f[g]=qa.access(d,"olddisplay",z(d.nodeName)))):f[g]||(e=t(d),(c&&"none"!==c||!e)&&qa.set(d,"olddisplay",e?c:fa.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function w(a,b,c){var d=Ua.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function x(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=fa.css(a,c+$a[f],!0,e)),d?("content"===c&&(g-=fa.css(a,"padding"+$a[f],!0,e)),"margin"!==c&&(g-=fa.css(a,"border"+$a[f]+"Width",!0,e))):(g+=fa.css(a,"padding"+$a[f],!0,e),"padding"!==c&&(g+=fa.css(a,"border"+$a[f]+"Width",!0,e)));return g}function y(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=u(a),g=fa.support.boxSizing&&"border-box"===fa.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Qa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Va.test(e))return e;d=g&&(fa.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+x(a,b,c||(g?"border":"content"),d,f)+"px"}function z(a){var b=T,c=Xa[a];return c||(c=A(a,b),"none"!==c&&c||(Ra=(Ra||fa("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(b.documentElement),b=(Ra[0].contentWindow||Ra[0].contentDocument).document,b.write("<!doctype html><html><body>"),b.close(),c=A(a,b),Ra.detach()),Xa[a]=c),c}function A(a,b){var c=fa(b.createElement(a)).appendTo(b.body),d=fa.css(c[0],"display");return c.remove(),d}function B(a,b,c,d){var e;if(fa.isArray(b))fa.each(b,function(b,e){c||bb.test(a)?d(a,e):B(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==fa.type(b))d(a,b);else for(e in b)B(a+"["+e+"]",b[e],c,d)}function C(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(ha)||[];if(fa.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function D(a,c,d,e){function f(i){var j;return g[i]=!0,fa.each(a[i]||[],function(a,i){var k=i(c,d,e);return"string"!=typeof k||h||g[k]?h?!(j=k):b:(c.dataTypes.unshift(k),f(k),!1)}),j}var g={},h=a===sb;return f(c.dataTypes[0])||!g["*"]&&f("*")}function E(a,c){var d,e,f=fa.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);return e&&fa.extend(!0,a,e),a}function F(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;"*"===jLine truncated
l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split("").sort(V).join("")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),f(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||g("type|href|height|width",function(a,c,d){return d?b:a.getAttribute(c,"type"===c.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||g("value",function(a,c,d){return d||"input"!==a.nodeName.toLowerCase()?b:a.defaultValue}),f(function(a){return null==a.getAttribute("disabled")})||g(da,function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&e.specified?e.value:a[c]===!0?c.toLowerCase():null}),fa.find=c,fa.expr=c.selectors,fa.expr[":"]=fa.expr.pseudos,fa.unique=c.uniqueSort,fa.text=c.getText,fa.isXMLDoc=c.isXML,fa.contains=c.contains}(a);var oa={};fa.Callbacks=function(a){a="string"==typeof a?oa[a]||d(a):fa.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(c=a.memory&&b,e=!0,i=g||0,g=0,h=j.length,f=!0;j&&h>i;i++)if(j[i].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}f=!1,j&&(k?k.length&&l(k.shift()):c?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){fa.each(b,function(b,c){var e=fa.type(c);"function"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&"string"!==e&&d(c)})}(arguments),f?h=j.length:c&&(g=b,l(c))}return this},remove:function(){return j&&fa.each(arguments,function(a,b){for(var c;(c=fa.inArray(b,j,c))>-1;)j.splice(c,1),f&&(h>=c&&h--,i>=c&&i--)}),this},has:function(a){return a?fa.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],h=0,this},disable:function(){return j=k=c=b,this},disabled:function(){return!j},lock:function(){return k=b,c||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||e&&!k||(b=b||[],b=[a,b.slice?b.slice():b],f?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!e}};return m},fa.extend({Deferred:function(a){var b=[["resolve","done",fa.Callbacks("once memory"),"resolved"],["reject","fail",fa.Callbacks("once memory"),"rejected"],["notify","progress",fa.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return fa.Deferred(function(c){fa.each(b,function(b,f){var g=f[0],h=fa.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&fa.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+"With"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?fa.extend(a,d):d}},e={};return d.pipe=d.then,fa.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=aa.call(arguments),g=f.length,h=1!==g||a&&fa.isFunction(a.promise)?g:0,i=1===h?a:fa.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?aa.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=Array(g),c=Array(g),d=Array(g);g>e;e++)f[e]&&fa.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),fa.support=function(b){var c=T.createElement("input"),d=T.createDocumentFragment(),e=T.createElement("div"),f=T.createElement("select"),g=f.appendChild(T.createElement("option"));return c.type?(c.type="checkbox",b.checkOn=""!==c.value,b.optSelected=g.selected,b.reliableMarginRight=!0,b.boxSizingReliable=!0,b.pixelPosition=!1,c.checked=!0,b.noCloneChecked=c.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled,c=T.createElement("input"),c.value="t",c.type="radio",b.radioValue="t"===c.value,c.setAttribute("checked","t"),c.setAttribute("name","t"),d.appendChild(c),b.checkClone=d.cloneNode(!0).cloneNode(!0).lastChild.checked,b.focusinBubbles="onfocusin"in a,e.style.backgroundClip="content-box",e.cloneNode(!0).style.backgroundClip="",b.clearCloneStyle="content-box"===e.style.backgroundClip,fa(function(){var c,d,f="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",g=T.getElementsByTagName("body")[0];g&&(c=T.createElement("div"),c.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",g.appendChild(c).appendChild(e),e.innerHTML="",e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;posiLine truncated
}return d!==b?fa.style(a,c,d):fa.css(a,c)},a,c,arguments.length>1)},show:function(){return v(this,!0)},hide:function(){return v(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){t(this)?fa(this).show():fa(this).hide()})}}),fa.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Qa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=fa.camelCase(c),j=a.style;return c=fa.cssProps[i]||(fa.cssProps[i]=s(j,i)),h=fa.cssHooks[c]||fa.cssHooks[i],d===b?h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c]:(g=typeof d,"string"===g&&(f=Wa.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(fa.css(a,c)),g="number"),null==d||"number"===g&&isNaN(d)||("number"!==g||fa.cssNumber[i]||(d+="px"),fa.support.clearCloneStyle||""!==d||0!==c.indexOf("background")||(j[c]="inherit"),h&&"set"in h&&(d=h.set(a,d,e))===b||(j[c]=d)),b)}},css:function(a,c,d,e){var f,g,h,i=fa.camelCase(c);return c=fa.cssProps[i]||(fa.cssProps[i]=s(a.style,i)),h=fa.cssHooks[c]||fa.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,d)),f===b&&(f=Qa(a,c,e)),"normal"===f&&c in Za&&(f=Za[c]),""===d||d?(g=parseFloat(f),d===!0||fa.isNumeric(g)?g||0:f):f}}),Qa=function(a,c,d){var e,f,g,h=d||u(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(""!==i||fa.contains(a.ownerDocument,a)||(i=fa.style(a,c)),Va.test(i)&&Ta.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i},fa.each(["height","width"],function(a,c){fa.cssHooks[c]={get:function(a,d,e){return d?0===a.offsetWidth&&Sa.test(fa.css(a,"display"))?fa.swap(a,Ya,function(){return y(a,c,e)}):y(a,c,e):b},set:function(a,b,d){var e=d&&u(a);return w(a,b,d?x(a,c,d,fa.support.boxSizing&&"border-box"===fa.css(a,"boxSizing",!1,e),e):0)}}}),fa(function(){fa.support.reliableMarginRight||(fa.cssHooks.marginRight={get:function(a,c){return c?fa.swap(a,{display:"inline-block"},Qa,[a,"marginRight"]):b}}),!fa.support.pixelPosition&&fa.fn.position&&fa.each(["top","left"],function(a,c){fa.cssHooks[c]={get:function(a,d){return d?(d=Qa(a,c),Va.test(d)?fa(a).position()[c]+"px":d):b}}})}),fa.expr&&fa.expr.filters&&(fa.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight},fa.expr.filters.visible=function(a){return!fa.expr.filters.hidden(a)}),fa.each({margin:"",padding:"",border:"Width"},function(a,b){fa.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+$a[d]+b]=f[d]||f[d-2]||f[0];return e}},Ta.test(a)||(fa.cssHooks[a+b].set=w)});var ab=/%20/g,bb=/\[\]$/,cb=/\r?\n/g,db=/^(?:submit|button|image|reset|file)$/i,eb=/^(?:input|select|textarea|keygen)/i;fa.fn.extend({serialize:function(){return fa.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=fa.prop(this,"elements");return a?fa.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!fa(this).is(":disabled")&&eb.test(this.nodeName)&&!db.test(a)&&(this.checked||!Ka.test(a))}).map(function(a,b){var c=fa(this).val();return null==c?null:fa.isArray(c)?fa.map(c,function(a){return{name:b.name,value:a.replace(cb,"\r\n")}}):{name:b.name,value:c.replace(cb,"\r\n")}}).get()}}),fa.param=function(a,c){var d,e=[],f=function(a,b){b=fa.isFunction(b)?b():null==b?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(c===b&&(c=fa.ajaxSettings&&fa.ajaxSettings.traditional),fa.isArray(a)||a.jquery&&!fa.isPlainObject(a))fa.each(a,function(){f(this.name,this.value)});else for(d in a)B(d,a[d],c,f);return e.join("&").replace(ab,"+")},fa.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){fa.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),fa.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var fb,gb,hb=fa.now(),ib=/\?/,jb=/#.*$/,kb=/([?&])_=[^&]*/,lb=/^(.*?):[ \t]*([^\r\n]*)$/gm,mb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,nb=/^(?:GET|HEAD)$/,ob=/^\/\//,pb=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,qb=fa.fn.load,rb={},sb={},tb="*/".concat("*");try{gb=S.href}catch(ub){gb=T.createElement("a"),gb.href="",gb=gb.href}fb=pb.exec(gb.toLowerCase())||[],fa.fn.load=function(a,c,d){if("string"!=typeof a&&qb)return qb.apply(this,arguments);var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i),a=a.slice(0,i)),fa.isFunction(c)?(d=c,c=b):c&&"object"==typeof c&&(f=Line truncated
/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery.min.map
*/
(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(tLine truncated
};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:functLine truncated
},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Xt,Ut,Yt=x.now(),Vt=/\?/,Gt=/#.*$/,Jt=/([?&])_=[^&]*/,Qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Kt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Zt=/^(?:GET|HEAD)$/,en=/^\/\//,tn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,nn=x.fn.load,rn={},on={},sn="*/".concat("*");try{Ut=i.href}catch(an){Ut=o.createElement("a"),Ut.href="",Ut=Ut.href}Xt=tn.exec(Ut.toLowerCase())||[];function un(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function ln(e,t,n,r){var i={},o=e===on;function s(a){var u;return i[a]=!0,x.each(e[a]||[],function(e,a){var l=a(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):undefined:(t.dataTypes.unshift(l),s(l),!1)}),u}return s(t.dataTypes[0])||!i["*"]&&s("*")}function cn(e,t){var n,r,i=x.ajaxSettings.flatOptions||{};for(n in t)t[n]!==undefined&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,t,n){if("string"!=typeof e&&nn)return nn.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return a>=0&&(r=e.slice(a),e=e.slice(0,a)),x.isFunction(t)?(n=t,t=undefined):t&&"object"==typeof t&&(i="POST"),s.length>0&&x.ajax({url:e,type:i,dataType:"html",data:t}).done(function(e){o=arguments,s.html(r?x("<div>").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ut,type:"GET",isLocal:Kt.test(Xt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":sn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?cn(cn(e,x.ajaxSettings),t):cn(x.ajaxSettings,e)},ajaxPrefilter:un(rn),ajaxTransport:un(on),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),p=c.context||c,f=c.context&&(p.nodeType||p.jquery)?x(p):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Qt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Ut)+"").replace(Gt,"").replace(en,Xt[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=tn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===Xt[1]&&a[2]===Xt[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(Xt[3]||("http:"===Xt[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),ln(rn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Zt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Vt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Jt.test(r)?r.replace(Jt,"$1_="+Yt++):r+(Vt.test(r)?"&":"?")+"_="+Yt++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+sn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(p,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=ln(on,c,t,T)){T.readyState=1,u&&f.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>Line truncated
+187 -1
View File
@@ -1 +1,187 @@
!function(a){"use strict";a(["jquery"],function(a){function b(b){return a.isFunction(b)||a.isPlainObject(b)?b:{top:b,left:b}}var c=a.scrollTo=function(b,c,d){return a(window).scrollTo(b,c,d)};return c.defaults={axis:"xy",duration:0,limit:!0},c.window=function(b){return a(window)._scrollable()},a.fn._scrollable=function(){return this.map(function(){var b=this,c=!b.nodeName||-1!=a.inArray(b.nodeName.toLowerCase(),["iframe","#document","html","body"]);if(!c)return b;var d=(b.contentWindow||b).document||b.ownerDocument||b;return/webkit/i.test(navigator.userAgent)||"BackCompat"==d.compatMode?d.body:d.documentElement})},a.fn.scrollTo=function(d,e,f){return"object"==typeof e&&(f=e,e=0),"function"==typeof f&&(f={onAfter:f}),"max"==d&&(d=9e9),f=a.extend({},c.defaults,f),e=e||f.duration,f.queue=f.queue&&f.axis.length>1,f.queue&&(e/=2),f.offset=b(f.offset),f.over=b(f.over),this._scrollable().each(function(){function g(a){j.animate(l,e,f.easing,a&&function(){a.call(this,k,f)})}if(null!=d){var h,i=this,j=a(i),k=d,l={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}if(k=m?a(k):a(k,this),!k.length)return;case"object":(k.is||k.style)&&(h=(k=a(k)).offset())}var n=a.isFunction(f.offset)&&f.offset(i,k)||f.offset;a.each(f.axis.split(""),function(a,b){var d="x"==b?"Left":"Top",e=d.toLowerCase(),o="scroll"+d,p=i[o],q=c.max(i,b);if(h)l[o]=h[e]+(m?0:p-j.offset()[e]),f.margin&&(l[o]-=parseInt(k.css("margin"+d))||0,l[o]-=parseInt(k.css("border"+d+"Width"))||0),l[o]+=n[e]||0,f.over[e]&&(l[o]+=k["x"==b?"width":"height"]()*f.over[e]);else{var r=k[e];l[o]=r.slice&&"%"==r.slice(-1)?parseFloat(r)/100*q:r}f.limit&&/^\d+$/.test(l[o])&&(l[o]=l[o]<=0?0:Math.min(l[o],q)),!a&&f.queue&&(p!=l[o]&&g(f.onAfterFirst),delete l[o])}),g(f.onAfter)}}).end()},c.max=function(b,c){var d="x"==c?"Width":"Height",e="scroll"+d;if(!a(b).is("html,body"))return b[e]-a(b)[d.toLowerCase()]();var f="client"+d,g=b.ownerDocument.documentElement,h=b.ownerDocument.body;return Math.max(g[e],h[e])-Math.min(g[f],h[f])},c})}("function"==typeof define&&define.amd?define:function(a,b){"undefined"!=typeof module&&module.exports?module.exports=b(require("jquery")):b(jQuery)});
/*!
* jQuery.scrollTo
* Copyright (c) 2007-2014 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
* Licensed under MIT
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
* @projectDescription Easy element scrolling using jQuery.
* @author Ariel Flesler
* @version 1.4.14
*/
;(function (define) {
'use strict';
define(['jquery'], function ($) {
var $scrollTo = $.scrollTo = function( target, duration, settings ) {
return $(window).scrollTo( target, duration, settings );
};
$scrollTo.defaults = {
axis:'xy',
duration: 0,
limit:true
};
// Returns the element that needs to be animated to scroll the window.
// Kept for backwards compatibility (specially for localScroll & serialScroll)
$scrollTo.window = function( scope ) {
return $(window)._scrollable();
};
// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function() {
return this.map(function() {
var elem = this,
isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
if (!isWin)
return elem;
var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
doc.body :
doc.documentElement;
});
};
$.fn.scrollTo = function( target, duration, settings ) {
if (typeof duration == 'object') {
settings = duration;
duration = 0;
}
if (typeof settings == 'function')
settings = { onAfter:settings };
if (target == 'max')
target = 9e9;
settings = $.extend( {}, $scrollTo.defaults, settings );
// Speed is still recognized for backwards compatibility
duration = duration || settings.duration;
// Make sure the settings are given right
settings.queue = settings.queue && settings.axis.length > 1;
if (settings.queue)
// Let's keep the overall duration
duration /= 2;
settings.offset = both( settings.offset );
settings.over = both( settings.over );
return this._scrollable().each(function() {
// Null target yields nothing, just like jQuery does
if (target == null) return;
var elem = this,
$elem = $(elem),
targ = target, toff, attr = {},
win = $elem.is('html,body');
switch (typeof targ) {
// A number will pass the regex
case 'number':
case 'string':
if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
targ = both( targ );
// We are done
break;
}
// Relative/Absolute selector, no break!
targ = win ? $(targ) : $(targ, this);
if (!targ.length) return;
case 'object':
// DOMElement / jQuery
if (targ.is || targ.style)
// Get the real position of the target
toff = (targ = $(targ)).offset();
}
var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
$.each( settings.axis.split(''), function( i, axis ) {
var Pos = axis == 'x' ? 'Left' : 'Top',
pos = Pos.toLowerCase(),
key = 'scroll' + Pos,
old = elem[key],
max = $scrollTo.max(elem, axis);
if (toff) {// jQuery / DOMElement
attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
// If it's a dom element, reduce the margin
if (settings.margin) {
attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
}
attr[key] += offset[pos] || 0;
if(settings.over[pos])
// Scroll to a fraction of its width/height
attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
} else {
var val = targ[pos];
// Handle percentage values
attr[key] = val.slice && val.slice(-1) == '%' ?
parseFloat(val) / 100 * max
: val;
}
// Number or 'number'
if (settings.limit && /^\d+$/.test(attr[key]))
// Check the limits
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
// Queueing axes
if (!i && settings.queue) {
// Don't waste time animating, if there's no need.
if (old != attr[key])
// Intermediate animation
animate( settings.onAfterFirst );
// Don't animate this axis again in the next iteration.
delete attr[key];
}
});
animate( settings.onAfter );
function animate( callback ) {
$elem.animate( attr, duration, settings.easing, callback && function() {
callback.call(this, targ, settings);
});
}
}).end();
};
// Max scrolling position, works on quirks mode
// It only fails (not too badly) on IE, quirks mode.
$scrollTo.max = function( elem, axis ) {
var Dim = axis == 'x' ? 'Width' : 'Height',
scroll = 'scroll'+Dim;
if (!$(elem).is('html,body'))
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
var size = 'client' + Dim,
html = elem.ownerDocument.documentElement,
body = elem.ownerDocument.body;
return Math.max( html[scroll], body[scroll] ) - Math.min( html[size] , body[size] );
};
function both( val ) {
return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };
}
// AMD requirement
return $scrollTo;
})
}(typeof define === 'function' && define.amd ? define : function (deps, factory) {
if (typeof module !== 'undefined' && module.exports) {
// Node
module.exports = factory(require('jquery'));
} else {
factory(jQuery);
}
}));
+14879 -8
View File
File diff suppressed because it is too large. Load diff
+73 -1
View File
@@ -1 +1,73 @@
enyo.kind({name:"LeftPanel",classes:"onyx-toolbar",kind:"Scroller",style:"width: 200px;height:100%;margin:0px;",accelerated:!0,horizontal:"hidden",create:function(){this.inherited(arguments),this.$.strategy.setTranslateOptimized=!0},components:[{tag:"center",components:[{tag:"img",ontap:"openRoot",src:"rlogo-tr.png",style:"margin:0px;margin-bottom:20px;cursor:pointer"},{kind:"Group",onActivate:"buttonActivated",classes:"enyo-border-box group",defaultKind:"onyx.Button",highlander:!0,components:[{content:"Disassembler",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Disassembler",active:!0},{content:"Assembler",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Assembler"},{content:"Hexdump",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Hexdump"},{content:"Graph",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Graph"},{content:"Search",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Search"},{content:"Console",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Console"},{content:"Debugger",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Debugger"},{content:"Script",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Script"},{content:"Settings",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Settings"},{content:"Logs",classes:"onyx-dark menu-button",ontap:"openPanel",name:"Logs"},{content:"About",classes:"onyx-dark menu-button",ontap:"openPanel",name:"About"}]}]}],openRoot:function(){window.location=".."},openPanel2:function(){this.ra.setIndex(2)},openPanel:function(a){enyo.Panels.isScreenNarrow()&&this.ra.setIndex(1),a.name==this.oname&&this.ra.setIndex(1),this.oname=a.name,r2ui.selected_panel=this.oname,"Logs"===this.oname&&r2ui._log.connect(),this.openCallback&&this.openCallback(a.name)},oname:null,ra:null,oldSender:null,rowTap:function(a,b){this.oldSender&&this.oldSender.setStyle("width:100%"),a.setStyle("background-color: #202020;width:100%"),this.oldSender=a,this.openCallback&&this.openCallback(b.index)},openCallback:void 0,data:[],iter:1,refresh:function(){this.iter++}});
enyo.kind ({
name: "LeftPanel",
classes: "onyx-toolbar",
kind: "Scroller",
/* touch:true, */
style: "width: 200px;height:100%;margin:0px;",
accelerated: true,
horizontal: "hidden",
//strategyKind: "TranslateScrollStrategy",
create: function() {
this.inherited (arguments);
this.$.strategy.setTranslateOptimized = true;
},
components: [
{tag: "center", components:[
{tag: "img", ontap: "openRoot",src: "rlogo-tr.png", style: "margin:0px;margin-bottom:20px;cursor:pointer" },
{kind: "Group", onActivate:"buttonActivated", classes: "enyo-border-box group", defaultKind: "onyx.Button", highlander: true, components: [
{content: "Disassembler", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Disassembler", active: true},
{content: "Assembler", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Assembler" },
{content: "Hexdump", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Hexdump" },
{content: "Graph", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Graph" },
{content: "Search", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Search" },
{content: "Console", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Console" },
{content: "Debugger", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Debugger" },
{content: "Script", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Script" },
{content: "Settings", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Settings" },
{content: "Logs", classes: "onyx-dark menu-button", ontap:"openPanel", name: "Logs" },
{content: "About", classes: "onyx-dark menu-button" , ontap: "openPanel", name:"About"},
]}
]},
],
openRoot: function() {
window.location = "..";
},
openPanel2: function() {
this.ra.setIndex (2);
},
openPanel: function (x) {
if (enyo.Panels.isScreenNarrow())
this.ra.setIndex (1);
if (x.name == this.oname)
this.ra.setIndex (1);
this.oname = x.name;
r2ui.selected_panel = this.oname;
if (this.oname === "Logs")
r2ui._log.connect();
if (this.openCallback)
this.openCallback (x.name);
},
oname: null,
ra: null,
oldSender: null,
rowTap: function (inSender, inIndex) {
if (this.oldSender)
this.oldSender.setStyle ("width:100%"); // background of row
// TODO. use applystall
//this.$.list.render ();
inSender.setStyle ("background-color: #202020;width:100%"); // background of row
this.oldSender = inSender;
if (this.openCallback)
this.openCallback (inIndex.index); //this.data[inIndex.index]);
},
openCallback: undefined,
data: [],
iter: 1,
refresh: function () {
this.iter++;
/*
this.$.list.setCount (this.data.length);
this.$.list.refresh ();
*/
},
});
+34 -1
View File
@@ -1 +1,34 @@
enyo.kind({name:"Logs",kind:"Scroller",style:"background-color:#c0c0c0;padding-left:8px",components:[{tag:"form",attributes:{action:"javascript:#"},components:[{kind:"FittableRows",fit:!0,classes:"fittable-sample-shadow",components:[{kind:"onyx.InputDecorator",style:"margin-top:8px;background-color:#404040;width: 90%;display:inline-block",components:[{kind:"Input",style:"width:100%;color:white",value:"",onkeydown:"sendMessage",attributes:{autocapitalize:"off"},name:"input"}]},{tag:"pre",classes:"r2ui-terminal",style:"width:90%;",fit:!0,allowHtml:!0,name:"output"}]}]}],logger:null,create:function(){this.inherited(arguments),r2ui._log=this},connect:function(){var a=this.$.output;this.logger=r2.getTextLogger().on("message",function(b){a.setContent(a.getContent()+b.text+"\n")}),this.logger.autorefresh(3)},sendMessage:function(a,b){if(13===b.keyCode){var c=this.$.input.getValue();this.$.input.setValue(""),this.logger.send(c)}}});
enyo.kind ({
name: "Logs",
kind: "Scroller",
style: "background-color:#c0c0c0;padding-left:8px",
components: [
{tag: "form", attributes: {action:"javascript:#"}, components: [
{kind: "FittableRows", fit: true, classes: "fittable-sample-shadow", components: [
{kind: "onyx.InputDecorator", style: "margin-top:8px;background-color:#404040;width: 90%;display:inline-block", components: [
{kind: "Input", style:"width:100%;color:white", value: '', onkeydown: "sendMessage", attributes: {autocapitalize:"off"}, name: "input"},
]},
{tag: "pre", classes:"r2ui-terminal", style:"width:90%;", fit: true, allowHtml: true, name:"output"}
]}
]}
],
logger: null,
create: function() {
this.inherited (arguments);
r2ui._log = this;
},
connect: function() {
var out = this.$.output;
this.logger = r2.getTextLogger ().on ("message", function (msg) {
out.setContent (out.getContent() + msg.text + "\n");
});
this.logger.autorefresh (3);
},
sendMessage: function (inSender, inEvent) {
if (inEvent.keyCode === 13) {
var msg = this.$.input.getValue ();
this.$.input.setValue ("");
this.logger.send (msg);
}
}
});
+86
View File
@@ -0,0 +1,86 @@
enyo.kind ({
name: "RadareApp",
kind: "Panels",
classes: "panels enyo-unselectable",
realtimeFit: true,
fit: true,
arrangerKind: "CollapsingArranger",
components: [
{ name: "lp", kind: "LeftPanel" },
{ name: "mp", kind: "MainPanel" },
{ name: "rp", kind: "RightPanel" },
{ kind: enyo.Signals, onkeypress: "handleKeyPress" }
],
handlers: {
onTransitionFinish: "handleTransitionFinish"
},
handleTransitionFinish: function() {
if (r2ui._dis.display == "graph" && r2ui._dis.minimap) update_minimap();
},
setPanel0: function () {
this.$.RadareApp.setIndex (1);
},
create: function() {
r2.load_settings();
this.inherited (arguments);
var data = [
{ name: "Disassembler", active: true },
{ name: "Assembler" },
{ name: "Hexdump" },
{ name: "Graph" },
{ name: "Search" },
{ name: "Console" },
{ name: "Debugger" },
{ name: "Script" },
{ name: "Settings", separator: true },
{ name: "Logs" },
{ name: "About" }
];
this.$.lp.data = data;
this.$.mp.data = data;
r2ui.ra =
this.$.mp.ra =
this.$.lp.ra =
this.$.rp.ra = this;
var mp = this.$.mp;
r2ui.mp = mp;
this.$.lp.openCallback = function (idx) {
mp.openPage (idx);
};
this.$.lp.refresh ();
},
handleKeyPress: function(inSender, inEvent) {
for (var key in Config.keys) {
if (key.substring (0, 2) == "C-") {
if (inEvent.ctrlKey) {
var k = key.substring (2).charCodeAt (0);
if (inEvent.charCode == k) {
var cmd = Config.keys[key];
eval (cmd+";");
}
}
} else {
var k = key.charCodeAt (0);
if (inEvent.charCode == k) {
var cmd = Config.keys[key];
eval (cmd+";");
}
}
}
//dump (inEvent);
//alert (inEvent.ctrlKey);
// Use inEvent.charCode to detect spacebar
/*
if (inEvent.charCode === 32) {
this.$.myContent.setContent("I thought");
} else {
var key = String.fromCharCode(inEvent.charCode).toUpperCase();
this.$.myContent.setContent("Last key pressed: " + key);
}
*/
}
});
window.onload = function() {
var obj = new RadareApp ().renderInto (document.body)
}
+359 -1
View File
@@ -1 +1,359 @@
enyo.kind({name:"MainPanel",classes:"onyx",kind:"FittableRows",classes:"enyo-fit",style:"margin:0px;padding:0px;border:0px",data:null,buttonClicked:function(a){alert("let's play!")},cancelClicked:function(a){alert("nothing to see here! move along.")},inputKey:function(a,b){if(13===b.keyCode){var c=this.$.input.getValue();r2ui.opendis(c)}},goRename:function(){var a=prompt("New name?","");a&&r2.cmd("afr "+a,function(){r2ui.seek("$$",!1)})},goComment:function(){var a=prompt("Comment?","");a&&r2.cmd("CC "+a,function(){r2ui.seek("$$",!1)})},goFlag:function(){var a=prompt("Flag name?","");a&&r2.cmd("f "+a,function(){r2.update_flags(),r2ui.seek("$$",!1)})},goUnflag:function(){r2.cmd("f-$$",function(){r2.update_flags(),r2ui.seek("$$",!1)})},goAnalyze:function(){r2.cmd("af",function(){r2.update_flags(),r2ui.seek("$$",!1)})},goCopy:function(){var a=prompt("How many bytes?","");a&&a>0&&r2.cmd("y "+a,function(){r2ui.seek("$$",!1)})},goPaste:function(){r2.cmd("yy",function(){r2ui.seek("$$",!1)})},wrString:function(){var a=prompt("Text","");a&&r2.cmd("w "+a,function(){r2ui.seek("$$",!1)})},wrOpcode:function(){var a=prompt("Opcode","");a&&r2.cmd("wa "+a,function(){r2ui.seek("$$",!1)})},wrFile:function(){var a=prompt("Filename","");a&&r2.cmd("wf "+a,function(){r2ui.seek("$$",!1)})},wrHex:function(){var a=prompt("Hexpair","");a&&r2.cmd("wx "+a,function(){r2ui.seek("$$",!1)})},coCode:function(){var a=prompt("How many bytes?","");a&&r2.cmd("y "+a,function(){r2ui.seek("$$",!1)})},coString:function(){r2.cmd("Cz",function(){r2ui.seek("$$",!1)})},coData:function(){var a=prompt("How many bytes?","");a&&r2.cmd("Cd "+a,function(){r2ui.seek("$$",!1)})},setTitle:function(a){a?(this.$.title.setContent(a),this.$.title.setStyle("visibility:visible;top:8px"),this.$.extra.setStyle("visibility:hidden;")):(this.$.title.setStyle("visibility:hidden"),this.$.extra.setStyle("visibility:visible;"))},components:[{kind:"onyx.Toolbar",name:"toolbar",components:[{kind:"onyx.Button",content:"[",ontap:"openSidebar",classes:"top"},{kind:"onyx.Button",content:"]",ontap:"openSidebar2",classes:"top"},{name:"title",tag:"h2",content:"Assembler",classes:"topbox",style:"visibility:hidden;"},{name:"extra",tag:"div",classes:"topbox",components:[{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",name:"actionsButton",content:"Actions"},{kind:"onyx.Picker",name:"actionsPicker",components:[{content:"Analyze",ontap:"goAnalyze"},{content:"Rename",ontap:"goRename"},{content:"Comment",ontap:"goComment"},{content:"Flag",ontap:"goFlag"},{content:"Unflag",ontap:"goUnflag"},{content:"Copy",ontap:"goCopy"},{content:"Paste",ontap:"goPaste"}]}]},{kind:"onyx.Button",content:"<",ontap:"prevSeek",classes:"top",style:"top:10px"},{kind:"onyx.Button",content:">",ontap:"nextSeek",classes:"top",style:"top:10px"},{kind:"onyx.InputDecorator",style:"width: 200px;top:10px",classes:"top",components:[{kind:"onyx.Input",name:"input",value:"entry0",onchange:"gotoSeek",onkeydown:"inputKey"}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Convert"},{kind:"onyx.Picker",components:[{content:"Data",ontap:"coData"},{content:"Code",ontap:"coCode"},{content:"String",ontap:"coString"}]}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",content:"Write"},{kind:"onyx.Picker",components:[{content:"File",ontap:"wrFile"},{content:"Hexpair",ontap:"wrHex"},{content:"String",ontap:"wrString"},{content:"Opcode",ontap:"wrOpcode"}]}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",name:"saveButton",content:"Save",ontap:"save_project"}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",name:"switchButton",content:"Switch View",ontap:"switch_view"}]},{kind:"onyx.PickerDecorator",classes:"top",components:[{kind:"onyx.Button",name:"helpButton",content:"?",ontap:"show_popup"},{name:"basicPopup",kind:"onyx.Popup",floating:!0,centered:!0,style:"padding: 10px",components:[{name:"popupContent",allowHtml:!0,content:".."}]}]}]}]},{kind:"Panels",name:"panels",fit:!0,realtimeFit:!0,components:[]}],show_popup:function(a,b){this.$.basicPopup.show()},switch_view:function(a,b){r2ui._dis.switch_view()},save_project:function(a,b){var c=prompt("Project Name:",r2.project_name);r2.cmd(":Ps "+c,function(a){}),r2.project_name=c},create:function(){this.inherited(arguments);var a=readCookie("r2_view_mode");if(a||(a="old"),"old"===a)this.$.panels.createComponents([{kind:"DisassemblerOld",name:"pageDisassembler"},{kind:"Assembler",name:"pageAssembler"},{kind:"Hexdump",name:"pageHexdump"},{kind:"Graph",name:"pageGraph"},{kind:"Search",name:"pageSearch"},{kind:"Console",name:"pageConsole"},{kind:"Debugger",name:"pageDebugger"},{kind:"Logs",name:"pageLogs"},{kind:"Script",name:"pageScript"},{kind:"Settings",name:"pageSettings"},{kind:"About",name:"pageAbout"}]),this.$.helpButton.hide(),this.$.switchButton.hide();else{this.$.panels.createComponents([{kind:"Disassembler",name:"pageDisassembler"},{kind:"ALine truncated
enyo.kind ({
name: "MainPanel",
classes: "onyx",
kind: "FittableRows",
classes: "enyo-fit",
style: "margin:0px;padding:0px;border:0px",
//style: "background-color: #c0c0c0",
data: null,
/*
refresh: function () {
this.$.list.setCount (this.data.length);
this.$.list.refresh (); // necessary?? // inherit??
},
*/
/* callbacks */
buttonClicked: function (x) {
alert ("let's play!");
},
cancelClicked: function (x) {
alert ("nothing to see here! move along.");
},
inputKey: function (inSender, inEvent) {
if (inEvent.keyCode === 13) {
var off = this.$.input.getValue ();
// this.$.input.setValue ("");
r2ui.opendis(off);
}
},
/* menu actions */
goRename: function() {
var msg = prompt ('New name?', '');
if(msg)
r2.cmd("afr "+msg, function() {
r2ui.seek("$$", false);
});
},
goComment: function() {
var msg = prompt ('Comment?', '');
if(msg)
r2.cmd("CC "+msg, function() {
r2ui.seek("$$", false);
});
},
goFlag: function() {
var msg = prompt ('Flag name?', '');
if(msg)
r2.cmd("f "+msg, function() {
r2.update_flags();
r2ui.seek("$$", false);
});
},
goUnflag: function() {
r2.cmd("f-$$", function() {
r2.update_flags();
r2ui.seek("$$", false);
});
},
goAnalyze: function() {
r2.cmd("af", function() {
r2.update_flags();
r2ui.seek("$$", false);
});
},
goCopy: function() {
var msg = prompt ('How many bytes?', '');
if(msg && msg>0)
r2.cmd("y "+msg, function() {
r2ui.seek("$$", false);
});
},
goPaste: function() {
r2.cmd("yy", function() {
r2ui.seek("$$", false);
});
},
/*-- write */
wrString: function() {
var msg = prompt ('Text', '');
if(msg)
r2.cmd("w "+msg, function() {
r2ui.seek("$$", false);
});
},
wrOpcode: function() {
var msg = prompt ('Opcode', '');
if(msg)
r2.cmd ("wa "+msg, function() {
r2ui.seek("$$", false);
});
},
wrFile: function() {
var msg = prompt ('Filename', '');
if(msg)
r2.cmd("wf "+msg, function() {
r2ui.seek("$$", false);
});
},
wrHex: function() {
var msg = prompt ('Hexpair', '');
if(msg)
r2.cmd("wx "+msg, function() {
r2ui.seek("$$", false);
});
},
/* -- convert */
coCode: function() {
var msg = prompt ('How many bytes?', '');
if(msg)
r2.cmd("y "+msg, function() {
r2ui.seek("$$", false);
});
},
coString: function() {
r2.cmd("Cz", function() {
r2ui.seek("$$", false);
});
},
coData: function() {
var msg = prompt ('How many bytes?', '');
if(msg)
r2.cmd("Cd "+msg, function() {
r2ui.seek("$$", false);
});
},
setTitle: function (title) {
if (title) {
this.$.title.setContent (title);
this.$.title.setStyle ("visibility:visible;top:8px");
this.$.extra.setStyle ("visibility:hidden;");//position:absolute;left:48px;scroll:overflow");
} else {
this.$.title.setStyle ("visibility:hidden");
this.$.extra.setStyle ("visibility:visible;");//position:absolute;left:48px;scroll:overflow");
}
},
/* widgets dom */
components: [
{kind: "onyx.Toolbar", name: "toolbar", components: [
//{kind: "onyx.MoreToolbar", components: [
{kind: "onyx.Button", content: "[", ontap: "openSidebar", classes: "top" },
{kind: "onyx.Button", content: "]", ontap: "openSidebar2", classes: "top" },
// {kind: "onyx.Button", content: "C", ontap: "openConsole", classes: "top" },
{name: "title", tag: "h2", content: "Assembler", classes: "topbox", style: "visibility:hidden;" },
{name: "extra", tag: "div", classes: "topbox", components: [
//style: "position:absolute;top:0px;left:48px;scroll:overflow;visibility:visible", components: [
/*
{kind: "onyx.Button", content: "]", ontap: "openSidebar2", style: "padding:4px"},
*/
{kind: "onyx.PickerDecorator", classes: "top", components: [
{kind: "onyx.Button", name: "actionsButton", content: "Actions"},
{kind: "onyx.Picker", name: "actionsPicker", components: [
{content: "Analyze", ontap: "goAnalyze"},
{content: "Rename", ontap: "goRename"},
{content: "Comment", ontap: "goComment"},
{content: "Flag", ontap: "goFlag"},
{content: "Unflag", ontap: "goUnflag"},
{content: "Copy", ontap: "goCopy"},
{content: "Paste", ontap: "goPaste"}
]}
]},
{kind: "onyx.Button", content: "<", ontap: "prevSeek", classes: "top", style: "top:10px" },
{kind: "onyx.Button", content: ">", ontap: "nextSeek", classes: "top", style: "top:10px" },
{kind: "onyx.InputDecorator", style: "width: 200px;top:10px", classes: "top", components: [
{kind: "onyx.Input", name:"input", value: 'entry0', onchange: "gotoSeek", onkeydown:"inputKey" }
]},
{kind: "onyx.PickerDecorator", classes: "top", components: [
{kind: "onyx.Button", content: "Convert"},
{kind: "onyx.Picker", components: [
{content: "Data", ontap: 'coData'},
{content: "Code", ontap: 'coCode'},
{content: "String", ontap: 'coString'},
]}
]},
{kind: "onyx.PickerDecorator", classes: "top", components: [
{kind: "onyx.Button", content: "Write"},
{kind: "onyx.Picker", components: [
{content: "File", ontap: 'wrFile'},
{content: "Hexpair", ontap: 'wrHex'},
{content: "String", ontap: 'wrString'},
{content: "Opcode", ontap: 'wrOpcode'},
]}
]},
{kind: "onyx.PickerDecorator", classes: "top", components: [
{kind: "onyx.Button", name: "saveButton", content: "Save", ontap: "save_project"}
]},
{kind: "onyx.PickerDecorator", classes: "top", components: [
{kind: "onyx.Button", name: "switchButton", content: "Switch View", ontap: "switch_view"}
]},
{kind: "onyx.PickerDecorator", classes: "top", components: [
{kind: "onyx.Button", name: "helpButton", content: "?", ontap: "show_popup"},
{name: "basicPopup", kind: "onyx.Popup", floating: true, centered: true,
style: "padding: 10px", components: [
{name: "popupContent", allowHtml: true, content: ".."}
]
}
]},
]},
]},
{kind: "Panels",
name:"panels",
fit:true,
realtimeFit: true,
components: []}
],
show_popup: function(inSender, inEvent) {
this.$.basicPopup.show();
},
switch_view: function(inSender, inEvent) {
r2ui._dis.switch_view();
},
save_project: function(inSender, inEvent) {
var project_name = prompt("Project Name:", r2.project_name);
r2.cmd (":Ps " + project_name, function (x){});
r2.project_name = project_name;
},
create: function() {
this.inherited(arguments);
var mode = readCookie('r2_view_mode');
if (!mode) mode = "old";
if (mode === "old") {
this.$.panels.createComponents([
{kind:"DisassemblerOld", name: "pageDisassembler"},
{kind:"Assembler", name:"pageAssembler"},
{kind:"Hexdump", name: "pageHexdump"},
{kind:"Graph", name: "pageGraph"},
{kind:"Search", name: "pageSearch"},
{kind:"Console", name: "pageConsole"},
{kind:"Debugger", name: "pageDebugger"},
{kind:"Logs", name: "pageLogs"},
{kind:"Script", name: "pageScript"},
{kind:"Settings", name:"pageSettings"},
{kind:"About", name: "pageAbout"},
]);
this.$.helpButton.hide();
this.$.switchButton.hide();
} else {
this.$.panels.createComponents([
{kind:"Disassembler", name: "pageDisassembler"},
{kind:"Assembler", name:"pageAssembler"},
{kind:"Hexdump", name: "pageHexdump"},
{kind:"Graph", name: "pageGraph"},
{kind:"Search", name: "pageSearch"},
{kind:"Console", name: "pageConsole"},
{kind:"Debugger", name: "pageDebugger"},
{kind:"Logs", name: "pageLogs"},
{kind:"Script", name: "pageScript"},
{kind:"Settings", name:"pageSettings"},
{kind:"About", name: "pageAbout"},
]);
var helpMsg = "<table class='help'>" +
"<tr><td>h,l</td><td>Move back and forth in history</td></tr>" +
"<tr><td>j,k</td><td>Move to next or previous instruction</td></tr>" +
"<tr><td>g</td><td>Go to address</td></tr>" +
"<tr><td>n</td><td>Rename</td></tr>" +
"<tr><td>c</td><td>Define function at current address</td></tr>" +
"<tr><td>d</td><td>Remove function metadata for current address</td></tr>" +
"<tr><td>enter</td><td>When address is selected, go to address</td></tr>" +
"<tr><td>;</td><td>Add comment</td></tr>" +
"<tr><td>m</td>Toggle minimap</td></tr>" +
"<tr><td>?</td><td>Display this help</td></tr>" +
"</table>";
this.$.popupContent.setContent(helpMsg);
}
this.render();
r2ui.panels = this.$.panels;
this.$.panels.setIndex(0);
},
ra: null,
openSidebar: function() {
this.ra.setIndex (this.ra.index? 0:1);
},
openSidebar2: function() {
this.ra.setIndex (2); //(this.ra.index<2)? 2:1);
},
rendered: function() {
this.inherited(arguments);
},
openPage: function(idx) {
var str, sp = this.$.panels;
// TODO: this is just a hack
var r = -1;
switch (idx) {
case "Disassembler": r = 0; break;
case "Assembler": r = 1; break;
case "Hexdump": r = 2; break;
case "Graph": r = 3; break;
case "Search": r = 4; break;
case "Console": r = 5; break;
case "Debugger": r = 6; break;
case "Logs": r = 7; break;
case "Script": r = 8; break;
case "Settings": r = 9; break;
case "About": r = 10; break;
}
if (r==-1) {
// alert ("Unknown page");
sp.setIndex (idx);
return;
}
eval("var x = this.$.page"+idx);
switch (r) {
case 0:
case 2:
this.setTitle ();
break;
default:
this.setTitle (idx);
break;
}
//x.setContent (str);
sp.setIndex (r);
},
seekStack: [],
nextSeek: function() {
var addr = r2ui.history_next();
if (!addr) return;
r2ui.seek(addr, false);
//alert ("nxt "+addr);
},
prevSeek: function() {
var addr = r2ui.history_prev();
if (!addr) return;
r2ui.seek(addr, false);
//r2ui.history_prev (), true);
//alert ("pop "+addr);
},
gotoSeek: function() {
var addr = this.$.input.getValue();
if (addr[0]=='!') {
r2.cmd (addr.slice (1), function (x) {
alert (x);
});
} else {
r2ui.seek(addr);
// this.seekStack.push ();
}
/*
var sp = this.$.panels;
//this.openPage (this.$.input.getValue());
//sp.components[3].setContent ("JAJAJ");
this.$.page3.setContent ("content-a");
alert (sp.components[3].content);
sp.components[3].content = "JAJAJ";
sp.reflow();
sp.render ();
sp.setIndex(3);
var i = 3;
var p = sp.createComponent ({
style:"background: red",
content:i
});
p.render();
sp.reflow();
sp.setIndex(3);
*/
}
});
+593 -1
View File
@@ -1 +1,593 @@
function asyncLoop(a,b,c){var d=0,e=!1,f={next:function(){e||(a>d?(d++,b(f)):(e=!0,c()))},iteration:function(){return d-1},"break":function(){e=!0,c()}};return f.next(),f}function dump(a){var b="";for(var c in a)b+=c+"\n";alert(b)}function objtostr(a){var b="";for(var c in a)b+=c+": "+a[c]+",\n";return b}function Ajax(a,b,c,d){if("undefined"==typeof XMLHttpRequest)return!1;var e=new XMLHttpRequest;return e?(e.open(a,b,!1),e.setRequestHeader("Accept","text/plain"),e.setRequestHeader("Accept","text/html"),e.setRequestHeader("Content-Type","application/x-ww-form-urlencoded; charset=UTF-8"),e.onreadystatechange=function(a){200==e.status?d&&d(e.responseText):console.error("ajax "+e.status)},e.send(c),!0):!1}function _internal_cmd(a,b){if("undefined"!=typeof r2cmd&&(hascmd=r2cmd),hascmd){if("undefined"==typeof r2plugin)return hascmd(a,b);b(r2cmd(a))}else Ajax("GET",r2.root+"/cmd/"+encodeURI(a),"",function(a){b&&b(a)})}var r2={},backward=!1,next_curoff=0,next_lastoff=0,prev_curoff=0,prev_lastoff=0,hascmd=!1;"undefined"!=typeof module&&(module.exports=function(a){return hascmd="function"==typeof a?a:a.cmd,r2}),r2.project_name="",r2.plugin=function(){console.error("r2.plugin is not available in this environment")};try{r2plugin&&(r2.plugin=r2plugin)}catch(e){}r2.root="",r2.analAll=function(){r2.cmd("aa",function(){})},r2.analOp=function(a,b){r2.cmd("aoj 1 @ "+a,function(a){try{b(JSON.parse(a)[0])}catch(c){console.error(c),b(a)}})},r2.varMap=[],r2.argMap=[],r2.assemble=function(a,b,c){var d=a?"@"+a:"";r2.cmd('"pa '+b+'"'+d,c)},r2.disassemble=function(a,b,c){var d=a?"@"+a:"",e="pi @b:"+b+d;r2.cmd(e,c)},r2.get_hexdump=function(a,b,c){r2.cmd("px "+b+"@"+a,c)},r2.get_disasm=function(a,b,c){r2.cmd("pD "+b+"@"+a,c)},r2.get_disasm_before=function(a,b,c){var d=[];r2.cmd("pdj -"+b+"@"+a,function(a){d=JSON.parse(a)}),c(d)},r2.get_disasm_after=function(a,b,c){var d=[];r2.cmd("pdj "+b+"@"+a,function(a){d=JSON.parse(a)}),c(d)},r2.get_disasm_before_after=function(a,b,c,d){var e=[],f=[];r2.cmd("pdj "+b+" @"+a,function(a){e=JSON.parse(a)}),r2.cmd("pdj "+c+"@"+a,function(a){f=JSON.parse(a)});var g=e.concat(f);d(g)},r2.Config=function(a,b,c){return"function"!=typeof b&&b?r2.cmd("e "+a+"="+b,c):r2.cmd("e "+a,c||b),r2},r2.sections={},r2.load_mmap=function(){r2.cmdj("iSj",function(a){void 0!==a&&null!==a&&(r2.sections=a)})},r2.get_address_type=function(a){var b=parseInt(a,16);for(var c in r2.sections)if(b>=r2.sections[c].addr&&b<r2.sections[c].addr+r2.sections[c].size)return r2.sections[c].flags.indexOf("x")>-1?"instruction":"memory";return""},r2.settings={},r2.load_settings=function(){r2.cmd("e asm.arch",function(a){r2.settings["asm.arch"]=a.trim()}),r2.cmd("e asm.bits",function(a){r2.settings["asm.bits"]=a.trim()}),r2.cmd("e asm.bytes",function(a){r2.settings["asm.bytes"]=toBoolean(a.trim())}),r2.cmd("e asm.flags",function(a){r2.settings["asm.flags"]=toBoolean(a.trim())}),r2.cmd("e asm.offset",function(a){r2.settings["asm.offset"]=toBoolean(a.trim())}),r2.cmd("e asm.lines",function(a){r2.settings["asm.lines"]=toBoolean(a.trim())}),r2.cmd("e asm.xrefs",function(a){r2.settings["asm.xrefs"]=toBoolean(a.trim())}),r2.cmd("e asm.cmtright",function(a){r2.settings["asm.cmtright"]=toBoolean(a.trim())}),r2.cmd("e asm.pseudo",function(a){r2.settings["asm.pseudo"]=toBoolean(a.trim())})},r2.flags={},r2.update_flags=function(){r2.cmd("fs *;fj",function(a){var b=JSON.parse(a);if(void 0!==b&&null!==b){r2.flags={};for(var c in b){var d="0x"+b[c].offset.toString(16);if(d=address_canonicalize(d),d in r2.flags){var e=r2.flags[d];e[e.length]={name:b[c].name,size:b[c].size},r2.flags[d]=e}else r2.flags[d]=[{name:b[c].name,size:b[c].size}]}}})},r2.get_flag_address=function(a){for(var b in r2.flags)for(var c in r2.flags[b])if(a==r2.flags[b][c].name)return b;return null},r2.get_flag_names=function(a){var b=[];for(var c in r2.flags[a])b[b.length]=r2.flags[a][c].name;return b},r2.set_flag_space=function(a,b){r2.cmd("fs "+a,b)},r2.get_flags=function(a){r2.cmd("fj",function(b){a(b?JSON.parse(b):[])})},r2.get_opcodes=function(a,b,c){r2.cmd("pdj @"+a+"!"+b,function(a){c(JSON.parse(a))})},r2.get_bytes=function(a,b,c){r2.cmd("pcj @"+a+"!"+b,function(a){c(JSON.parse(a))})},r2.asm_config={},r2.store_asm_config=function(){config={},r2.cmd("e",function(a){conf=a.split("\n");for(var b in conf){var c=conf[b].split(" ");3==c.length&&0==c[0].trim().indexOf("asm.")&&(config[c[0].trim()]=c[2].trim())}r2.asm_config=config})},r2.restore_asm_config=function(){cmd="";for(var a in r2.asm_config)cmd+="e "+a+"="+r2.asm_config[a]+";";r2.cmd(cmd,function(a){})},r2.get_info=function(a){r2.cmd("ij",function(b){a(JSON.parse(b))})},r2.bin_relocs=function(a){r2.cmd("irj",function(b){a(JSON.parse(b))})},r2.bin_imports=function(a){r2.cmd("iij",function(b){a(JSON.parse(b))})},r2.bin_symbols=function(a){r2.cmd("isj",function(b){a(JSON.parse(b))})},r2.bin_sections=function(a){r2.cmd("iSj",function(b){a(JSON.parse(b))})},r2.cmds=function(a,b){function c(){void 0!=d&&0!=a.length&&(d=a[0],a=a.splice(Line truncated
/* radare2 Copyleft 2013-2014 pancake */
var r2 = {};
// TODO: avoid globals
var backward = false;
var next_curoff = 0;
var next_lastoff = 0;
var prev_curoff = 0;
var prev_lastoff = 0;
var hascmd = false;
// async helper
function asyncLoop(iterations, func, callback) {
var index = 0;
var done = false;
var loop = {
next: function() {
if (done) {
return;
}
if (index < iterations) {
index++;
func(loop);
} else {
done = true;
callback();
}
},
iteration: function() {
return index - 1;
},
break: function() {
done = true;
callback();
}
};
loop.next();
return loop;
}
if (typeof (module) !== 'undefined') {
module.exports = function(r) {
if (typeof (r) == 'function') {
hascmd = r;
} else {
hascmd = r.cmd;
}
return r2;
}
}
r2.project_name = "";
r2.plugin = function() {
console.error ("r2.plugin is not available in this environment");
}
try {
if (r2plugin) {
r2.plugin = r2plugin
}
} catch ( e ) {}
r2.root = ""; // prefix path
/* helpers */
function dump(obj) {
var x = "";
for (var a in obj) x += a + "\n";
if (typeof ('alert') != 'undefined') {
alert (x);
} else {
console.log (x);
}
}
r2.analAll = function() {
r2.cmd ("aa", function() {});
}
r2.analOp = function(addr, cb) {
r2.cmd ("aoj 1 @ " + addr, function(txt) {
try {
cb(JSON.parse (txt)[0]);
} catch ( e ) {
console.error (e)
cb (txt);
}
});
}
r2.varMap = [];
r2.argMap = [];
function objtostr(obj) {
var str = "";
for (var a in obj)
str += a + ": " + obj[a] + ",\n";
return str;
}
function Ajax(method, uri, body, fn) {
if (typeof (XMLHttpRequest) == "undefined")
return false;
var x = new XMLHttpRequest ();
if (!x)
return false;
x.open (method, uri, false);
x.setRequestHeader ('Accept', 'text/plain');
x.setRequestHeader ('Accept', 'text/html');
x.setRequestHeader ("Content-Type", "application/x-ww-form-urlencoded; charset=UTF-8");
x.onreadystatechange = function(y) {
if (x.status == 200) {
if (fn) {
fn (x.responseText);
}
} else {
console.error ("ajax " + x.status)
}
}
x.send (body);
return true;
}
r2.assemble = function(offset, opcode, fn) {
var off = offset ? "@" + offset : '';
r2.cmd ('"pa ' + opcode + '"' + off, fn);
}
r2.disassemble = function(offset, bytes, fn) {
var off = offset ? "@" + offset : '';
var str = 'pi @b:' + bytes + off;
r2.cmd (str, fn);
}
r2.get_hexdump = function(offset, length, cb) {
r2.cmd ("px " + length + "@" + offset, cb);
}
r2.get_disasm = function(offset, length, cb) {
// TODO: honor offset and length
r2.cmd ("pD " + length + "@" + offset, cb);
}
r2.get_disasm_before = function(offset, start, cb) {
var before = [];
r2.cmd("pdj -" + start + "@" + offset, function(x) {
before = JSON.parse(x);
});
cb(before);
}
r2.get_disasm_after = function(offset, end, cb) {
var after = [];
r2.cmd("pdj " + end + "@" + offset, function(x) {
after = JSON.parse(x);
});
cb(after);
}
r2.get_disasm_before_after = function(offset, start, end, cb) {
var before = [];
var after = [];
r2.cmd("pdj " + start + " @" + offset, function(x) {
before = JSON.parse(x);
});
r2.cmd("pdj " + end + "@" + offset, function(x) {
after = JSON.parse(x);
});
var opcodes = before.concat(after);
cb(opcodes);
}
r2.Config = function(k, v, fn) {
if (typeof v == 'function' || !v) { // get
r2.cmd ("e " + k, fn || v);
} else { // set
r2.cmd ("e " + k + "=" + v, fn);
}
return r2;
}
r2.sections = {};
r2.load_mmap = function() {
r2.cmdj("iSj", function(x) {
if (x !== undefined && x !== null) {
r2.sections = x;
}
});
}
r2.get_address_type = function(address) {
var offset = parseInt(address, 16);
for (var i in r2.sections) {
if (offset >= r2.sections[i].addr && offset < r2.sections[i].addr + r2.sections[i].size) {
if (r2.sections[i].flags.indexOf("x") > -1) {
return "instruction";
}
else {
return "memory";
}
}
}
return "";
}
r2.settings = {};
r2.load_settings = function() {
r2.cmd ("e asm.arch", function(x) {r2.settings['asm.arch'] = x.trim();});
r2.cmd ("e asm.bits", function(x) {r2.settings['asm.bits'] = x.trim();});
r2.cmd ("e asm.bytes", function(x) {r2.settings['asm.bytes'] = toBoolean(x.trim());});
r2.cmd ("e asm.flags", function(x) {r2.settings['asm.flags'] = toBoolean(x.trim());});
r2.cmd ("e asm.offset", function(x) {r2.settings['asm.offset'] = toBoolean(x.trim());});
r2.cmd ("e asm.lines", function(x) {r2.settings['asm.lines'] = toBoolean(x.trim());});
r2.cmd ("e asm.xrefs", function(x) {r2.settings['asm.xrefs'] = toBoolean(x.trim());});
r2.cmd ("e asm.cmtright", function(x) {r2.settings['asm.cmtright'] = toBoolean(x.trim());});
r2.cmd ("e asm.pseudo", function(x) {r2.settings['asm.pseudo'] = toBoolean(x.trim());});
// console.log("Loading settings from r2");
// console.log(r2.settings);
}
r2.flags = {};
r2.update_flags = function() {
r2.cmd ("fs *;fj", function(x) {
var fs = JSON.parse (x);
if (fs !== undefined && fs !== null) {
r2.flags = {};
for (var f in fs) {
var addr = "0x" + fs[f].offset.toString(16);
addr = address_canonicalize(addr);
if (addr in r2.flags) {
var fl = r2.flags[addr];
fl[fl.length] = { name: fs[f].name, size: fs[f].size};
r2.flags[addr] = fl;
} else {
r2.flags[addr] = [{ name: fs[f].name, size: fs[f].size}];
}
}
}
});
}
r2.get_flag_address = function(name) {
for (var f in r2.flags) {
for (var v in r2.flags[f]) {
if (name == r2.flags[f][v].name) return f;
}
}
return null;
}
r2.get_flag_names = function(offset) {
var names = [];
for (var i in r2.flags[offset]) {
names[names.length] = r2.flags[offset][i].name;
}
return names;
}
r2.set_flag_space = function(ns, fn) {
r2.cmd ("fs " + ns, fn);
}
r2.get_flags = function(fn) {
r2.cmd ("fj", function(x) {
fn (x ? JSON.parse (x) : []);
});
}
r2.get_opcodes = function(off, n, cb) {
r2.cmd ("pdj @" + off + "!" + n, function(json) {
cb (JSON.parse (json));
});
}
r2.get_bytes = function(off, n, cb) {
r2.cmd ("pcj @" + off + "!" + n, function(json) {
cb (JSON.parse (json));
});
}
r2.asm_config = {};
r2.store_asm_config = function() {
config = {};
r2.cmd ("e", function(x) {
conf = x.split("\n");
for (var prop in conf) {
var fields = conf[prop].split(" ");
if (fields.length == 3) {
// TODO: Dont know why byt e~asm. is not working so filtering here
if (fields[0].trim().indexOf("asm.") == 0) config[fields[0].trim()] = fields[2].trim();
}
}
r2.asm_config = config;
});
}
r2.restore_asm_config = function() {
cmd = "";
for (var prop in r2.asm_config) {
cmd += "e " + prop + "=" + r2.asm_config[prop] + ";";
}
r2.cmd (cmd, function(x) {});
}
r2.get_info = function(cb) {
r2.cmd ("ij", function(json) {
cb (JSON.parse (json));
});
}
r2.bin_relocs = function(cb) {
r2.cmd ("irj", function(json) {
cb (JSON.parse (json));
});
}
r2.bin_imports = function(cb) {
r2.cmd ("iij", function(json) {
cb (JSON.parse (json));
});
}
r2.bin_symbols = function(cb) {
r2.cmd ("isj", function(json) {
cb (JSON.parse (json));
});
}
r2.bin_sections = function(cb) {
r2.cmd ("iSj", function(json) {
cb (JSON.parse (json));
});
}
r2.cmds = function(cmds, cb) {
if (cmds.length == 0) return;
var cmd = cmds[0];
cmds = cmds.splice (1);
function lala() {
if (cmd == undefined || cmds.length == 0) {
return;
}
cmd = cmds[0];
cmds = cmds.splice (1);
r2.cmd (cmd, lala);
if (cb) {
cb ();
}
return;
}
r2.cmd (cmd, lala);
}
function _internal_cmd(c, cb) {
if (typeof (r2cmd) != 'undefined') {
hascmd = r2cmd;
}
if (hascmd) {
// TODO: use setTimeout for async?
if (typeof (r2plugin) != "undefined") {
// duktape
cb (r2cmd(c));
} else {
// node
return hascmd (c, cb);
}
} else {
Ajax ('GET', r2.root + "/cmd/" + encodeURI(c), '', function(x) {
if (cb) {
cb (x);
}
});
}
}
r2.cmd = function(c, cb) {
if (Array.isArray (c)) {
var res = [];
var idx = 0;
asyncLoop (c.length, function(loop) {
_internal_cmd (c[idx], function(result) {
idx = loop.iteration();
res[idx] = result.replace(/\n$/, "");
idx++;
loop.next ();
});
}, function() {
// all iterations done
cb (res);
});
} else {
_internal_cmd (c, cb);
}
}
r2.cmdj = function(c, cb) {
r2.cmd (c, function(x) {
try {
cb (JSON.parse(x));
} catch ( e ) {
cb (null);
}
});
}
r2.alive = function(cb) {
r2.cmd ("b", function(o) {
var ret = false;
if (o && o.length () > 0) {
ret = true;
}
if (cb) {
cb (o);
}
});
}
r2.getTextLogger = function(obj) {
if (typeof (obj) != "object") {
obj = {};
}
obj.last = 0;
obj.events = {};
obj.interval = null;
r2.cmd ("Tl", function(x) {
obj.last = +x;
});
obj.load = function(cb) {
r2.cmd ("Tj " + (obj.last + 1), function(ret) {
if (cb) {
cb (JSON.parse (ret));
}
});
}
obj.clear = function(cb) {
// XXX: fix l-N
r2.cmd ("T-", cb); //+obj.last, cb);
}
obj.send = function(msg, cb) {
r2.cmd ("T " + msg, cb);
}
obj.refresh = function(cb) {
obj.load (function(ret) {
//obj.last = 0;
for (var i = 0; i < ret.length; i++) {
var message = ret[i];
obj.events["message"] ({
"id": message[0],
"text": message[1]
});
if (message[0] > obj.last) {
obj.last = message[0];
}
}
if (cb) {
cb ();
}
});
}
obj.autorefresh = function(n) {
if (!n) {
if (obj.interval) {
obj.interval.stop ();
}
return;
}
function to() {
obj.refresh (function() {
//obj.clear ();
});
if (r2ui.selected_panel === "Logs")
setTimeout (to, n * 1000);
else console.log("Not in logs :(");
return true;
}
obj.interval = setTimeout (to, n * 1000);
}
obj.on = function(ev, cb) {
obj.events[ev] = cb;
return obj;
}
return obj;
}
r2.filter_asm = function(x, display) {
var curoff = backward ? prev_curoff : next_curoff;
;
var lastoff = backward ? prev_lastoff : next_lastoff;
;
var lines = x.split (/\n/g);
r2.cmd ("s", function(x) {
curoff = x;
});
for (var i = lines.length - 1; i > 0; i--) {
var a = lines[i].match (/0x([a-fA-F0-9]+)/);
if (a && a.length > 0) {
lastoff = a[0].replace (/:/g, "");
break;
}
}
if (display == "afl") {
//hasmore (false);
var z = "";
for (var i = 0; i < lines.length; i++) {
var row = lines[i].replace (/\ +/g, " ").split (/ /g);
z += row[0] + " " + row[3] + "\n";
}
x = z;
} else if (display[0] == 'f') {
//hasmore (false);
if (display[1] == 's') {
var z = "";
for (var i = 0; i < lines.length; i++) {
var row = lines[i].replace (/\ +/g, " ").split (/ /g);
var mark = row[1] == '*' ? '*' : ' ';
var space = row[2] ? row[2] : row[1];
if (!space) continue;
z += row[0] + " " + mark + " <a href=\"javascript:runcmd('fs " +
space + "')\">" + space + "</a>\n";
}
x = z;
} else {
}
} else if (display[0] == "i") {
//hasmore (false);
if (display[1]) {
var z = "";
for (var i = 0; i < lines.length; i++) {
var elems = lines[i].split (/ /g);
var name = "";
var addr = "";
for (var j = 0; j < elems.length; j++) {
var kv = elems[j].split (/=/);
if (kv[0] == "addr") {
addr = kv[1];
}
if (kv[0] == "name") {
name = kv[1];
}
if (kv[0] == "string") {
name = kv[1];
}
}
z += addr + " " + name + "\n";
}
x = z;
}
} //else hasmore (true);
function haveDisasm(x) {
if (x[0] == 'p' && x[1] == 'd') return true;
if (x.indexOf (";pd") != -1) return true;
return false;
}
if (haveDisasm (display)) {
x = x.replace (/function:/g, "<span style=color:green>function:</span>");
x = x.replace (/;(\s+)/g, ";");
x = x.replace (/;(.*)/g, "// <span style='color:#209020'>$1</span>");
x = x.replace (/(bl|goto|call)/g, "<b style='color:green'>call</b>");
x = x.replace (/(jmp|bne|beq|js|jnz|jae|jge|jbe|jg|je|jl|jz|jb|ja|jne)/g, "<b style='color:green'>$1</b>");
x = x.replace (/(dword|qword|word|byte|movzx|movsxd|cmovz|mov\ |lea\ )/g, "<b style='color:#1070d0'>$1</b>");
x = x.replace (/(hlt|leave|iretd|retn|ret)/g, "<b style='color:red'>$1</b>");
x = x.replace (/(add|sbb|sub|mul|div|shl|shr|and|not|xor|inc|dec|sar|sal)/g, "<b style='color:#d06010'>$1</b>");
x = x.replace (/(push|pop)/g, "<b style='color:#40a010'>$1</b>");
x = x.replace (/(test|cmp)/g, "<b style='color:#c04080'>$1</b>");
x = x.replace (/(outsd|out|string|invalid|int |int3|trap|main|in)/g, "<b style='color:red'>$1</b>");
x = x.replace (/nop/g, "<b style='color:blue'>nop</b>");
x = x.replace (/(sym|fcn|str|imp|loc)\.([^:<(\\\/ \|)\->]+)/g, "<a href='javascript:r2ui.seek(\"$1.$2\")'>$1.$2</a>");
}
x = x.replace (/0x([a-zA-Z0-9]+)/g, "<a href='javascript:r2ui.seek(\"0x$1\")'>0x$1</a>");
// registers
if (backward) {
prev_curoff = curoff;
prev_lastoff = lastoff;
} else {
next_curoff = curoff;
next_lastoff = lastoff;
if (!prev_curoff) {
prev_curoff = next_curoff;
}
}
return x;
}
+250 -1
View File
@@ -1 +1,250 @@
var r2ui={};r2ui.selected_panel="Disassembler",r2ui.history=[],r2ui.history_idx=0,r2ui.colors={},r2ui.load_colors=function(){r2.cmdj("ecj",function(a){for(var b in a)r2ui.colors[".ec_"+b.replace("gui.","gui_")]="rgb("+String(a[b])+")"});for(var a in document.styleSheets){var b=document.styleSheets[a],c=b.cssRules?b.cssRules:b.rules;for(var d in c)if(void 0!==c[d].selectorText&&null!==c[d].selectorText&&0===c[d].selectorText.toLowerCase().indexOf(".ec_")){var e=c[d].selectorText,f=r2ui.colors[e];void 0!==f&&null!==f?".ec_gui_background"==e||".ec_gui_alt_background"==e?c[d].style.backgroundColor=f:".ec_border"==e?c[d].style.borderColor=f:c[d].style.color=f:".ec_gui_background"==e||".ec_gui_alt_background"==e?r2ui.colors[e]=c[d].style.backgroundColor:".ec_gui_border"==e?r2ui.colors[e]=c[d].style.borderColor:r2ui.colors[e]=c[d].style.color}}},r2ui.basic_blocks={},r2ui.use_sdb=!1,r2ui.get_fcn_BB=function(a,b){if(r2ui.use_sdb){var c="webui/graph/"+a+"/"+b,d=void 0;return r2.cmd("k "+c,function(a){var b=decodeURIComponent(a).split("\n");for(var c in b){var e=b[c];if(""!==e){d={};var f=e.split(",");d.x=f[0],d.y=f[1],""!=f[2]&&void 0!==f[2]||(f[2]="transparent"),d.color=f[2].replace(/\*\*/g,",")}}}),d}return r2ui.basic_blocks[b]},r2ui.get_fcn_BBs=function(a){if(r2ui.use_sdb){var b="webui/graph/"+a+"/*",c={};return r2.cmd("k "+b,function(a){var b=decodeURIComponent(a).split("\n");for(var d in b){var e=b[d];if(""!==e){offset=e.split("=")[0],e=e.split("=")[1];var f={},g=e.split(",");f.x=g[0],f.y=g[1],""!=g[2]&&void 0!==g[2]||(g[2]="transparent"),f.color=g[2].replace(/\*\*/g,","),c[offset]=f}}}),c}return r2ui.basic_blocks},r2ui.update_fcn_BB=function(a,b,c){if(r2ui.use_sdb){var d="webui/graph/"+a+"/"+b;void 0===c.color&&(c.color="transparent");var e=c.x+","+c.y+","+c.color.replace(/,/g,"**");r2.cmd("k "+d+"="+encodeURIComponent(e),function(a){})}else r2ui.basic_blocks[b]=c},r2ui.current_fcn_offset=null,r2ui.graph=null,r2ui.console_lang="r2",r2ui.toggle_console_lang=function(){"r2"==r2ui.console_lang?r2ui.console_lang="js":"js"==r2ui.console_lang&&(r2ui.console_lang="r2"),$("#cmd_input > label").html(r2ui.console_lang)},r2ui.history_push=function(a){a!=r2ui.history_last()&&(r2ui.history_idx!=r2ui.history.length&&(r2ui.history=r2ui.history.splice(0,r2ui.history_idx)),r2ui.history_idx++,r2ui.history.push(a))},r2ui.history_pop=function(){return r2ui.history_idx==r2ui.history.length&&r2ui.history_idx--,r2ui.history.pop()},r2ui.history_last=function(){return r2ui.history.length>0?r2ui.history[r2ui.history_idx-1]:void 0},r2ui.history_prev=function(){return r2ui.history_idx>1&&r2ui.history_idx--,r2ui.history[r2ui.history_idx-1]},r2ui.history_next=function(){var a=r2ui.history[r2ui.history_idx];return r2ui.history_idx<r2ui.history.length&&r2ui.history_idx++,a},r2ui.next_instruction=function(){var a=parseInt(r2ui.history_last(),16);return r2.cmd("pdl 1",function(b){a+=parseInt(b.trim())}),"0x"+a.toString(16)},r2ui.prev_instruction=function(){var a=parseInt(r2ui.history_last(),16);return r2.cmdj("pdfj",function(b){if(void 0!==b&&null!==b)for(var c in b.ops)if(0!==c){var d=b.ops[c];if(d.offset==a){a=b.ops[c-1].offset;break}}}),"0x"+a.toString(16)},r2ui.seek=function(a,b,c){if(void 0!==a){if(0===a.indexOf("0x"))a=address_canonicalize(a);else{var d=r2.get_flag_address(a);null!==d?a=address_canonicalize(d):r2.cmd("s "+a+";s",function(b){a=address_canonicalize(b.replace("\n",""))})}b&&r2ui.history_push(a),r2.cmd("s "+a,function(){r2ui._dis.seek(a,c),r2ui._hex.seek(a,c)})}},r2ui.seek_in_graph=function(a,b){b&&r2ui.history_push(a),r2.cmd("s "+a,function(){rehighlight_iaddress(a),r2ui._hex.seek(a),r2ui._hex.scrollTo(0,0)})},r2ui.seek_prev=function(){var a=r2ui.history.pop();r2.cmd("s "+a,function(){r2ui._dis.seek(a),r2ui._dis.scrollTo(0,0),r2ui._hex.seek(a),r2ui._hex.scrollTo(0,0)})},r2ui.openpage=function(a,b){void 0===b&&(b=a,a=void 0),void 0!==a&&r2ui.seek(a,!0),2==r2ui.ra.getIndex()&&r2ui.ra.setIndex(1),r2ui.mp.openPage(b)},r2ui.opendis=function(a){r2ui.openpage(a,0)},r2ui.openhex=function(a){r2ui.openpage(a,2)};
var r2ui = {};
r2ui.selected_panel = "Disassembler";
r2ui.history = [];
r2ui.history_idx = 0;
r2ui.colors = {};
r2ui.load_colors = function () {
// change css on the fly!
r2.cmdj("ecj", function(x) {
for (var i in x) {
r2ui.colors[".ec_" + i.replace("gui.","gui_")] = "rgb(" + String(x[i]) + ")";
}
});
for (var k in document.styleSheets) {
var mysheet = document.styleSheets[k];
var myrules = mysheet.cssRules? mysheet.cssRules: mysheet.rules;
var targetrule;
for (var j in myrules) {
if (myrules[j].selectorText !== undefined && myrules[j].selectorText !== null) {
if (myrules[j].selectorText.toLowerCase().indexOf(".ec_") === 0) {
var sel = myrules[j].selectorText; //.toLowerCase().replace("gui.","gui_");
var color = r2ui.colors[sel];
if (color !== undefined && color !== null) {
if (sel == ".ec_gui_background" || sel == ".ec_gui_alt_background") {
myrules[j].style.backgroundColor = color;
} else if (sel == ".ec_border") myrules[j].style.borderColor = color;
else myrules[j].style.color = color;
} else {
if (sel == ".ec_gui_background" || sel == ".ec_gui_alt_background") r2ui.colors[sel] = myrules[j].style.backgroundColor;
else if (sel == ".ec_gui_border") r2ui.colors[sel] = myrules[j].style.borderColor;
else r2ui.colors[sel] = myrules[j].style.color;
}
}
}
}
}
};
r2ui.basic_blocks = {};
r2ui.use_sdb = false;
r2ui.get_fcn_BB = function(fcn_offset, bb_offset) {
if (r2ui.use_sdb) {
var path = "webui/graph/" + fcn_offset + "/" + bb_offset;
var bb = undefined;
r2.cmd("k " + path, function(x) {
var lines = decodeURIComponent(x).split("\n");
for (var l in lines) {
var line = lines[l];
if (line !== "") {
bb = {};
var props = line.split(",");
bb.x = props[0];
bb.y = props[1];
if (props[2] == "" || props[2] === undefined) props[2] = "transparent";
bb.color = props[2].replace(/\*\*/g, ",");
}
}
});
return bb;
} else {
return r2ui.basic_blocks[bb_offset];
}
};
r2ui.get_fcn_BBs = function(fcn_offset) {
if (r2ui.use_sdb) {
var path = "webui/graph/" + fcn_offset + "/*";
var BBs = {};
r2.cmd("k " + path, function(x) {
var lines = decodeURIComponent(x).split("\n");
for (var l in lines) {
var line = lines[l];
if (line !== "") {
offset = line.split("=")[0];
line = line.split("=")[1];
var bb = {};
var props = line.split(",");
bb.x = props[0];
bb.y = props[1];
if (props[2] == "" || props[2] === undefined) props[2] = "transparent";
bb.color = props[2].replace(/\*\*/g, ",");
BBs[offset] = bb;
}
}
});
return BBs;
} else {
return r2ui.basic_blocks;
}
};
r2ui.update_fcn_BB = function(fcn_offset, bb_offset, bbinfo) {
if (r2ui.use_sdb) {
var path = "webui/graph/" + fcn_offset + "/" + bb_offset;
if (bbinfo.color === undefined) bbinfo.color = "transparent";
var value = bbinfo.x + "," + bbinfo.y + "," + bbinfo.color.replace(/,/g, "**");
r2.cmd("k " + path + "=" + encodeURIComponent(value), function(x) { });
} else {
r2ui.basic_blocks[bb_offset] = bbinfo;
}
};
r2ui.current_fcn_offset = null;
r2ui.graph = null;
r2ui.console_lang = "r2";
r2ui.toggle_console_lang = function() {
if (r2ui.console_lang == "r2") r2ui.console_lang = "js";
else if (r2ui.console_lang == "js") r2ui.console_lang = "r2";
$("#cmd_input > label").html(r2ui.console_lang);
};
r2ui.history_push = function (x) {
if (x != r2ui.history_last()) {
if (r2ui.history_idx != r2ui.history.length)
r2ui.history = r2ui.history.splice (0,r2ui.history_idx);
r2ui.history_idx++;
r2ui.history.push (x);
}
}
r2ui.history_pop = function () {
// console.log("history pop");
if (r2ui.history_idx == r2ui.history.length) r2ui.history_idx--;
// console.log(r2ui.history_idx + "/" + r2ui.history.length);
return r2ui.history.pop();
}
r2ui.history_last = function () {
if (r2ui.history.length > 0) {
return r2ui.history[r2ui.history_idx - 1];
}
}
r2ui.history_prev = function () {
// console.log("history prev");
if (r2ui.history_idx > 1) r2ui.history_idx--;
// console.log(r2ui.history_idx + "/" + r2ui.history.length);
return r2ui.history[r2ui.history_idx - 1];
}
r2ui.history_next = function () {
// console.log("history next");
var ret = r2ui.history[r2ui.history_idx];
if (r2ui.history_idx < r2ui.history.length) r2ui.history_idx++;
// console.log(r2ui.history_idx + "/" + r2ui.history.length);
return ret;
}
r2ui.next_instruction = function() {
var offset = parseInt(r2ui.history_last(), 16);
r2.cmd ("pdl 1", function (x) {
offset += parseInt(x.trim());
});
return "0x" + offset.toString(16);
}
r2ui.prev_instruction = function() {
var offset = parseInt(r2ui.history_last(), 16);
r2.cmdj("pdfj", function (x) {
if (x !== undefined && x !== null) {
for (var i in x.ops) {
if (i === 0) continue;
var opcode = x.ops[i];
if (opcode.offset == offset) {
offset = x.ops[i-1].offset;
break;
}
}
}
});
return "0x" + offset.toString(16);;
}
r2ui.seek = function (addr, push, scroll) {
if (addr === undefined) return;
// Resolve flag in case we dont have an address
if (addr.indexOf("0x") === 0) {
addr = address_canonicalize(addr);
} else {
var a = r2.get_flag_address(addr);
if (a !== null) {
addr = address_canonicalize(a);
} else {
r2.cmd("s " + addr + ";s", function(x) {
addr = address_canonicalize(x.replace('\n',''));
});
}
}
if (push) r2ui.history_push(addr);
// if (r2ui.ra.getIndex ()==2) r2ui.ra.setIndex (1);
r2.cmd ("s " + addr, function () {
r2ui._dis.seek(addr, scroll);
r2ui._hex.seek(addr, scroll);
});
// if (r2ui._dis.tmp_address !== undefined) r2ui._dis.tmp_address = addr;
}
r2ui.seek_in_graph = function (addr, push) {
if (push) r2ui.history_push (addr);
// if (r2ui.ra.getIndex ()==2) r2ui.ra.setIndex (1);
r2.cmd ("s "+addr, function () {
rehighlight_iaddress(addr);
r2ui._hex.seek(addr);
r2ui._hex.scrollTo(0, 0);
});
}
r2ui.seek_prev = function () {
// XXX. this is only for disasm
var addr = r2ui.history.pop ();
r2.cmd("s "+addr, function () {
r2ui._dis.seek(addr);
r2ui._dis.scrollTo(0, 0);
r2ui._hex.seek(addr);
r2ui._hex.scrollTo(0, 0);
});
}
/* used from mainpanel */
r2ui.openpage = function(addr, idx) {
if (idx === undefined) {
idx = addr;
addr = undefined;
}
if (addr !== undefined) {
r2ui.seek(addr, true);
}
// What is this for?
if (r2ui.ra.getIndex()==2) r2ui.ra.setIndex(1);
r2ui.mp.openPage(idx);
}
r2ui.opendis = function (addr) {
r2ui.openpage(addr, 0);
}
r2ui.openhex = function (addr) {
r2ui.openpage(addr, 2);
}
+167 -1
View File
@@ -1 +1,167 @@
function makelist(a){for(var b="List of "+a.length+"\n\n",c=0;c<a.length;c++)b+="<a style='color:yellow' href='javascript:r2ui.opendis("+a[c].offset+")'>0x"+a[c].offset.toString(16)+"</a> "+enyo.dom.escape(a[c].name)+"\n";return b}enyo.kind({name:"RightPanel",style:"background-color:#404040;",classes:"onyx-toolbar",kind:"FittableRows",ra:null,components:[{kind:"FittableColumns",style:"margin-bottom:5px",components:[{kind:"onyx.Button",content:"[",ontap:"closeSidebar",style:"padding:8px;margin-right:8px"},{onup:"toggleScroll",style:"position:absolute;left:40px;top:0px;",kind:"onyx.MenuDecorator",onSelect:"itemSelected",components:[{content:"List elements"},{kind:"onyx.Menu",showOnTop:!0,maxHeight:290,name:"menu",style:"height:300px",components:[{content:"flags",value:"2"},{content:"flagspaces",value:"2"},{classes:"onyx-menu-divider"},{content:"strings",value:"1"},{content:"symbols",value:"1"},{content:"imports",value:"1"},{content:"relocs",value:"1"},{content:"functions",value:"1"},{content:"comments",value:"1"},{classes:"onyx-menu-divider"},{content:"registers",value:"1"},{content:"stack",value:"2"},{content:"backtrace",value:"3"}]}]}]},{kind:"Scroller",animated:!1,fit:!0,horizontal:!1,name:"scroll",components:[{tag:"pre",style:"font-size:14px",allowHtml:!0,name:"output",content:".."}]}],toggleScroll:function(){var a=this.$.menu.getShowing();this.$.scroll.setShowing(a)},rowTap:function(){},create:function(){this.inherited(arguments)},data:[],setupItem:function(a,b){var c=this.data[b.index];if(!c)return!1;var d=c.name+" "+c.offset;return console.log(d),this.$.msg.setContent(d),!0},refresh:function(){},itemSelected:function(a,b){var c=this,d=b.originator.content,e=this.$.menu.getShowing();switch(r2ui.rp=c,this.$.scroll.setShowing(!e),this.$.menu.setShowing(!1),this.$.scroll.scrollToTop(),d){case"comments":r2.cmd("CC*",function(a){a=a.replace(/0x([a-zA-Z0-9]*)/g,"<a style='color:yellow' href='javascript:r2ui.seek(\"0x$1\")'>0x$1</a>"),c.$.output.setContent(a)});break;case"functions":r2.cmd("afl",function(a){a=a.replace(/0x([a-zA-Z0-9]*)/g,"<a style='color:yellow' href='javascript:r2ui.seek(\"0x$1\")'>0x$1</a>"),c.$.output.setContent(a)});break;case"flagspaces":this.updateFlagspace();break;case"strings":r2.cmd("izj",function(a){var b=JSON.parse(a),d="";for(var e in b){var f=(+b[e].offset).toString(16);d+='<a style="color:yellow" href="javascript:r2ui.opendis(0x'+f+')">0x'+f+"</a> "+enyo.dom.escape(b[e].string)+"<br />"}c.$.output.setContent(d)});break;case"sections":r2.bin_sections(function(a){c.$.output.setContent(makelist(a))});break;case"symbols":r2.bin_symbols(function(a){c.$.output.setContent(makelist(a))});break;case"relocs":r2.bin_relocs(function(a){c.$.output.setContent(makelist(a))});break;case"imports":r2.bin_imports(function(a){c.$.output.setContent(makelist(a))});break;case"flags":r2.get_flags(function(a){c.data=a,c.$.output.setContent(makelist(a)),c.refresh()})}},closeSidebar:function(){this.ra.setIndex(1)},selectFlagspace:function(a){r2.cmd("fs "+a,function(a){r2ui.rp.updateFlagspace()})},updateFlagspace:function(){var a=r2ui.rp;r2.cmd("fsj",function(b){var c=JSON.parse(b),d="";for(var e in c){var f=c[e].name,g=c[e].selected;d+='<a style="color:yellow" href="javascript:r2ui.rp.selectFlagspace(\''+f+"')\">"+f+"</a> "+(g?" (selected)":"")+"<br />"}a.$.output.setContent(d)})}});
function makelist(x) {
var z = "List of "+x.length+"\n\n";
for (var i = 0; i<x.length; i++)
z += "<a style='color:yellow' href='javascript:r2ui.opendis("+
x[i].offset+")'>0x"+x[i].offset.toString (16) + "</a> "+ enyo.dom.escape(x[i].name)+"\n";
return z;
}
enyo.kind ({
name: "RightPanel",
style:"background-color:#404040;",
classes: "onyx-toolbar",
kind: "FittableRows",
ra: null,
components: [
{kind:"FittableColumns", style:"margin-bottom:5px", components:[
{kind: "onyx.Button", content: "[", ontap: "closeSidebar", style: "padding:8px;margin-right:8px"},
{onup:"toggleScroll", style:"position:absolute;left:40px;top:0px;", kind: "onyx.MenuDecorator", onSelect: "itemSelected", components: [
{content: "List elements" },
{kind: "onyx.Menu", showOnTop: true, maxHeight:290, name: "menu", style:"height:300px", components: [
{content: "flags", value: "2"},
{content: "flagspaces", value: "2"},
{classes: "onyx-menu-divider"},
{content: "strings", value: "1"},
{content: "symbols", value: "1"},
{content: "imports", value: "1"},
{content: "relocs", value: "1"},
{content: "functions", value: "1"},
{content: "comments", value: "1"},
{classes: "onyx-menu-divider"},
{content: "registers", value: "1"},
{content: "stack", value: "2"},
{content: "backtrace", value: "3"},
]},
]},
]},
{kind: "Scroller", animated: false, fit: true, horizontal: false, name: "scroll", components: [
/*
{kind: "FittableColumns",components:[
{kind: "List", name: "list", style:"height:400px", realtimeFit:true, onSetupItem: "setupItem", components: [
{kind: "onyx.Item", layoutKind: "HFlexLayout", style:"padding:0px", components: [
{name:"separator", tag: "hr", style:"height:1px;visibility:hidden"},
{kind: "onyx.Button", name: "msg", style: "width:100%", fit:true, active: true, ontap: "rowTap"}
]}
]},
]},
*/
{tag: "pre", style:"font-size:14px", allowHtml:true, name: "output", content:".." }
]}
],
toggleScroll: function() {
var is_visible = this.$.menu.getShowing ();
this.$.scroll.setShowing (is_visible);
},
rowTap: function () {
/* do something here */
},
create: function() {
this.inherited (arguments);
/*
this.$.list.setCount (3);
this.$.list.refresh();
*/
},
data: [],
setupItem: function (inSender, inIndex) {
var item = this.data[inIndex.index];
if (!item)
return false;
var msg = item.name + " "+item.offset;
console.log (msg);
this.$.msg.setContent (msg);
return true;
},
refresh: function () {
//this.$.list.setCount (this.data.length);
//this.$.list.refresh ();
},
itemSelected: function (inSender, inEvent) {
var self = this;
var selected = inEvent.originator.content;
var is_visible = this.$.menu.getShowing ();
r2ui.rp = self;
this.$.scroll.setShowing (!!! is_visible);
this.$.menu.setShowing (false);
this.$.scroll.scrollToTop();
//this.$.output.scrollToTop();
switch (selected) {
case "comments":
r2.cmd ("CC*", function(x) {
x = x.replace (/0x([a-zA-Z0-9]*)/g, "<a style='color:yellow' href='javascript:r2ui.seek(\"0x$1\")'>0x$1</a>");
self.$.output.setContent (x);
});
break;
case "functions":
r2.cmd ("afl", function(x) {
x = x.replace (/0x([a-zA-Z0-9]*)/g, "<a style='color:yellow' href='javascript:r2ui.seek(\"0x$1\")'>0x$1</a>");
self.$.output.setContent (x);
});
break;
case "flagspaces":
this.updateFlagspace ();
break;
case "strings":
r2.cmd ("izj", function(x) {
var s = JSON.parse (x);
var h = '';
for (var i in s) {
var off = (+s[i]['offset']).toString(16);
h += '<a style="color:yellow" href="javascript:r2ui.opendis(0x'+
off+')">0x'+off+'</a> '+enyo.dom.escape(s[i]['string'])+'<br />';
}
self.$.output.setContent (h);
});
break;
case "sections":
r2.bin_sections(function (x) {
self.$.output.setContent (makelist (x));
});
break;
case "symbols":
r2.bin_symbols(function (x) {
self.$.output.setContent (makelist (x));
});
break;
case "relocs":
r2.bin_relocs (function (x) {
self.$.output.setContent (makelist (x));
});
break;
case "imports":
r2.bin_imports (function (x) {
self.$.output.setContent (makelist (x));
});
break;
case "flags":
r2.get_flags (function (flags) {
self.data = flags;
self.$.output.setContent (makelist (flags));
self.refresh();
});
break;
}
},
closeSidebar: function() {
this.ra.setIndex (1);
},
selectFlagspace: function (x) {
r2.cmd ('fs '+x, function(x) {
r2ui.rp.updateFlagspace();
});
},
updateFlagspace: function() {
var self = r2ui.rp;
r2.cmd ("fsj", function (x) {
var s = JSON.parse (x);
var h = '';
for (var i in s) {
var nam = s[i].name;
var sel = s[i].selected;
h += '<a style="color:yellow" href="javascript:r2ui.rp.selectFlagspace(\''+
nam+'\')">'+nam+'</a> '+(sel?" (selected)":"")+'<br />';
}
self.$.output.setContent (h);
});
}
});
+55 -1
View File
@@ -1 +1,55 @@
enyo.kind({name:"Script",kind:"Scroller",style:"background-color:#c0c0c0",clear:function(){with(this.$.input)setContent(value=""),render()},demo:function(){with(this.$.input)setContent(value=['r2.disassemble (0, "9090", function(text) {'," show (text)"," show ()",' r2.assemble (0, "mov eax, 33", function (text) {'," show (text);"," });"," show (r2)","});"].join("\n")),render()},run:function(){function show(a){if(a)if("object"==typeof a){out+="{";for(var b in a){var c=a[b];out+=b+": "+c+"\n , "}out+="}"}else out+=a+"\n";else out+="\n"}var code=this.$.input.value,out="";try{eval(code),this.$.output.setContent(out)}catch(e){alert(e)}},components:[{tag:"p",style:"margin-left:10px",components:[{kind:"onyx.Button",content:"Run",classes:"sourcebutton",ontap:"run"},{kind:"onyx.Button",content:"Clear",classes:"sourcebutton",ontap:"clear"},{kind:"onyx.Button",content:"Demo",classes:"sourcebutton",ontap:"demo"}]},{kind:"onyx.TextArea",name:"input",classes:"sourcecode"},{tag:"pre",name:"output",style:"margin-left:12px"}]});
enyo.kind ({
name: "Script",
kind: "Scroller",
style: "background-color:#c0c0c0",
clear: function () {
with (this.$.input) { setContent (value = ''); render() };
},
demo: function () {
with (this.$.input) {
setContent (value = [
'r2.disassemble (0, "9090", function(text) {',
' show (text)',
' show ()',
' r2.assemble (0, "mov eax, 33", function (text) {',
' show (text);',
' });',
' show (r2)',
'});'].join ('\n'));
render();
}
},
run: function () {
var code = this.$.input.value;
var out = "";
/* helper functions */
function show(x) {
if (!x) out += "\n"; else
if (typeof x == 'object') {
out += "{";
for (var y in x) {
var v = x[y]; //(typeof x[y] == 'function')? 'function': x[y];
out += y+": "+v+"\n , ";
}
out += "}";
} else {
out += x+"\n";
}
}
try {
eval (code);
this.$.output.setContent (out);
} catch (e) {
alert (e);
}
},
components: [
{tag: "p", style:"margin-left:10px", components: [
{kind: "onyx.Button", content: "Run", classes: "sourcebutton", ontap: "run" },
{kind: "onyx.Button", content: "Clear", classes: "sourcebutton", ontap: "clear" },
{kind: "onyx.Button", content: "Demo", classes: "sourcebutton", ontap: "demo" },
]},
{kind: "onyx.TextArea", name: "input", classes: "sourcecode" },
{tag: "pre", name: "output", style:"margin-left:12px" }
]
});
+10 -1
View File
@@ -1 +1,10 @@
enyo.kind({name:"Search",kind:"Scroller",style:"background-color:#303030",components:[{tag:"center",components:[{tag:"h1",style:"color:#f0f0f0",content:"TODO: Search"}]}]});
enyo.kind ({
name: "Search",
kind: "Scroller",
style: "background-color:#303030",
components: [
{tag: "center", components: [
{tag: "h1", style: "color:#f0f0f0", content: "TODO: Search"}
]}
]
});
+190 -1
View File
@@ -1 +1,190 @@
enyo.kind({name:"Settings",classes:"panels-sample-sliding-content r2panel",kind:"Scroller",tag:"div",data:null,style:"background-color:#c0c0c0; color:black !important;padding:0px;margin:0px;border:0px;overflow:hidden",components:[{kind:"FittableRows",fit:!1,components:[{tag:"h2",content:"General"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Two panels",classes:"rowline"},{kind:"onyx.ToggleButton",name:"twopanels"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Edit keybindings",classes:"rowline"},{kind:"onyx.Button",content:"+"}]}]},{kind:"FittableRows",fit:!1,components:[{tag:"h2",content:"Target"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Arch",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",name:"arch",components:[{content:"arc"},{content:"arm"},{content:"avr"},{content:"ppc"},{content:"bf"},{content:"dalvik"},{content:"dcpu16"},{content:"i8080"},{content:"java"},{content:"m68k"},{content:"mips"},{content:"msil"},{content:"rar"},{content:"sh"},{content:"sparc"},{content:"x86",active:!0},{content:"z80"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Bits",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",name:"bits",components:[{content:"8"},{content:"16"},{content:"32",active:!0},{content:"64"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Endian",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",components:[{content:"little",active:!0},{content:"big"}]}]}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"OS",classes:"rowline"},{kind:"onyx.PickerDecorator",components:[{},{kind:"onyx.Picker",components:[{content:"linux",active:!0},{content:"darwin"},{content:"w32"},{content:"dos"}]}]}]},{tag:"h2",content:"Disassembly"},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show new view",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"use_new_view"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show bytes",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_bytes"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show offsets",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_offset"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show flags",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_flags"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show xrefs",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_xrefs"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show comments on right",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_cmtright"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Show lines",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_lines"}]},{kind:"onyx.InputDecorator",components:[{tag:"p",content:"Pseudo",classes:"rowline",ontap:"nextPanel"},{kind:"onyx.ToggleButton",name:"toggle_pseudo"}]}]},{tag:"h2",content:"Save changes?"},{tag:"div",style:"margin-left:50px",components:[{ontap:"reset",kind:"onyx.Button",style:"position:relative;left:0px",content:"Reset"},{ontap:"save",kind:"onyx.Button",style:"position:relative;left:50px",content:"Save",classes:"onyx-affirmative"}]},{tag:"div",style:"height:64px"}],load:function(){var a=this;a.$.twopanels.setActive(-1!=document.referrer.indexOf("/two")),a.$.toggle_bytes.setActive(r2.settings["asm.bytes"]),a.$.toggle_pseudo.setActive(r2.settings["asm.pseudo"]),a.$.toggle_flags.setActive(r2.settings["asm.flags"]),a.$.toggle_xrefs.setActive(r2.settings["asm.xrefs"]),a.$.toggle_cmtright.setActive(r2.settings["asm.cmtright"]),a.$.toggle_offset.setActive(r2.settings["asm.offset"]),a.$.toggle_lines.setActive(r2.settings["asm.lines"]);var b=readCookie("r2_view_mode");b||(b="old"),a.$.use_new_view.setActive("new"==b)},create:function(){this.inherited(arguments),this.load()},save:function(){var a=this.$.use_new_view.active,b=this.$.toggle_offset.active,c=this.$.arch.selected.content,d=this.$.bits.selected.content,e=this.$.toggle_bytes.active,f=this.$.toggle_pseudo.active,g=this.$.toggle_flags.active,h=this.$.toggle_lines.active,i=this.$.toggle_xrefs.active,j=this.$.toggle_cmtright.active,k=this.$.twopanels.active;r2.cmds(["e asm.offset="+b,"e asm.arch="+c,"e asm.bits="+d,"e asm.lines="+h,"e asm.bytes="+e,"e asm.flags="+g,"e asm.xrefs="+i,"e asm.cmtright="+j,"e asm.pseudo="+f]),r2.settings={use_new_view:a,"asm.arch":c,"asm.bits":d,"asm.bytes":e,"asm.flags":g,"asm.xrefs":i,"asm.cmtright":j,"asm.lines":h,"asm.pseudo":f},a?createCookie("r2_view_mode","new",7):createCookie("r2_view_mode","old",7),k?window.parent.location="/enyo/two":window.parent.location="/enyo/",r2ui.seek("$$",!1)},reset:function(){this.load()}});
enyo.kind ({
name: "Settings",
classes: "panels-sample-sliding-content r2panel",
kind: "Scroller",
tag: "div",
data: null,
style:"background-color:#c0c0c0; color:black !important;padding:0px;margin:0px;border:0px;overflow:hidden",
components: [
{kind: "FittableRows", fit: false, components: [
{tag: "h2", content: "General" },
{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Two panels", classes:"rowline" },
{kind: "onyx.ToggleButton", name: "twopanels"},
]},
{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Edit keybindings", classes:"rowline" },
{kind: "onyx.Button", content: '+'},
]}
]},
{kind: "FittableRows", fit: false, components: [
{tag: "h2", content: "Target" }
,{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Arch", classes:"rowline"},
{kind: "onyx.PickerDecorator", components: [
{},
{kind: "onyx.Picker", name: "arch", components: [
/* TODO: construct from code */
{content: "arc"},
{content: "arm"},
{content: "avr"},
{content: "ppc"},
{content: "bf"},
{content: "dalvik"},
{content: "dcpu16"},
{content: "i8080"},
{content: "java"},
{content: "m68k"},
{content: "mips"},
{content: "msil"},
{content: "rar"},
{content: "sh"},
{content: "sparc"},
{content: "x86", active: true},
{content: "z80"},
]}
]}
]}
,{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Bits", classes:"rowline"},
{kind: "onyx.PickerDecorator", components: [
{},
{kind: "onyx.Picker", name: "bits", components: [
{content: "8"},
{content: "16"},
{content: "32", active: true},
{content: "64"}
]}
]}
]}
,{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Endian", classes:"rowline"},
{kind: "onyx.PickerDecorator", components: [
{},
{kind: "onyx.Picker", components: [
{content: "little", active: true},
{content: "big"},
]}
]}
]}
,{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "OS", classes:"rowline"},
{kind: "onyx.PickerDecorator", components: [
{},
{kind: "onyx.Picker", components: [
{content: "linux", active: true},
{content: "darwin"},
{content: "w32"},
{content: "dos"},
]}
]}
]}
,{tag: "h2", content: "Disassembly" },
{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Show new view", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "use_new_view"},
]},
{kind: "onyx.InputDecorator", components: [
{tag: "p", content: "Show bytes", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_bytes"},
]}
,{kind: "onyx.InputDecorator",components: [
{tag: "p", content: "Show offsets", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_offset" },
]}
,{kind: "onyx.InputDecorator",components: [
{tag: "p", content: "Show flags", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_flags" },
]}
,{kind: "onyx.InputDecorator",components: [
{tag: "p", content: "Show xrefs", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_xrefs" },
]}
,{kind: "onyx.InputDecorator",components: [
{tag: "p", content: "Show comments on right", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_cmtright" },
]}
,{kind: "onyx.InputDecorator",components: [
{tag: "p", content: "Show lines", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_lines" },
]}
,{kind: "onyx.InputDecorator",components: [
{tag: "p", content: "Pseudo", classes:"rowline", ontap: "nextPanel"},
{kind: "onyx.ToggleButton", name: "toggle_pseudo" },
]}
]}
,{tag: "h2", content: "Save changes?" }
,{tag: "div",style:"margin-left:50px", components: [
{ontap:"reset", kind: "onyx.Button", style: "position:relative;left:0px", content: "Reset"},
{ontap:"save", kind: "onyx.Button", style: "position:relative;left:50px", content: "Save", classes: "onyx-affirmative"}
]}
,{tag: "div", style: "height:64px"}
],
load: function() {
var self = this;
self.$.twopanels.setActive (document.referrer.indexOf ("/two") != -1);
self.$.toggle_bytes.setActive(r2.settings['asm.bytes']);
self.$.toggle_pseudo.setActive(r2.settings['asm.pseudo']);
self.$.toggle_flags.setActive(r2.settings['asm.flags']);
self.$.toggle_xrefs.setActive(r2.settings['asm.xrefs']);
self.$.toggle_cmtright.setActive(r2.settings['asm.cmtright']);
self.$.toggle_offset.setActive(r2.settings['asm.offset']);
self.$.toggle_lines.setActive(r2.settings['asm.lines']);
var mode = readCookie('r2_view_mode');
if (!mode) mode = "old";
self.$.use_new_view.setActive(mode == "new");
},
create: function () {
this.inherited (arguments);
this.load();
  },
save: function() {
var use_new_view = this.$.use_new_view.active;
var show_offset = this.$.toggle_offset.active;
var arch = this.$.arch.selected.content;
var bits = this.$.bits.selected.content;
var show_bytes = this.$.toggle_bytes.active;
var show_pseudo = this.$.toggle_pseudo.active;
var show_flags = this.$.toggle_flags.active;
var show_lines = this.$.toggle_lines.active;
var show_xrefs = this.$.toggle_xrefs.active;
var comments_on_right = this.$.toggle_cmtright.active;
var twopanels = this.$.twopanels.active;
r2.cmds ([
"e asm.offset="+show_offset,
"e asm.arch="+arch,
"e asm.bits="+bits,
"e asm.lines="+show_lines,
"e asm.bytes="+show_bytes,
"e asm.flags="+show_flags,
"e asm.xrefs="+show_xrefs,
"e asm.cmtright="+comments_on_right,
"e asm.pseudo="+show_pseudo
]);
r2.settings = {
"use_new_view": use_new_view,
"asm.arch":arch,
"asm.bits":bits,
"asm.bytes":show_bytes,
"asm.flags":show_flags,
"asm.xrefs":show_xrefs,
"asm.cmtright":comments_on_right,
"asm.lines":show_lines,
"asm.pseudo":show_pseudo
}
if (use_new_view) createCookie('r2_view_mode', "new", 7);
else createCookie('r2_view_mode', "old", 7);
if (twopanels) {
window.parent.location ="/enyo/two";
} else {
window.parent.location ="/enyo/";
}
r2ui.seek("$$", false);
},
reset: function() {
this.load ();
}
});
+6 -1
View File
@@ -1 +1,6 @@
(function(){function a(a){function b(b,c,d,e,f,g){for(;f>=0&&g>f;f+=a){var h=e?e[f]:f;d=c(d,b[h],h,b)}return d}return function(c,d,e,f){d=t(d,f,4);var g=!A(c)&&s.keys(c),h=(g||c).length,i=a>0?0:h-1;return arguments.length<3&&(e=c[g?g[i]:i],i+=a),b(c,d,e,g,i,h)}}function b(a){return function(b,c,d){c=u(c,d);for(var e=z(b),f=a>0?0:e-1;f>=0&&e>f;f+=a)if(c(b[f],f,b))return f;return-1}}function c(a,b,c){return function(d,e,f){var g=0,h=z(d);if("number"==typeof f)a>0?g=f>=0?f:Math.max(f+h,g):h=f>=0?Math.min(f+1,h):f+h+1;else if(c&&f&&h)return f=c(d,e),d[f]===e?f:-1;if(e!==e)return f=b(k.call(d,g,h),s.isNaN),f>=0?f+g:-1;for(f=a>0?g:h-1;f>=0&&h>f;f+=a)if(d[f]===e)return f;return-1}}function d(a,b){var c=F.length,d=a.constructor,e=s.isFunction(d)&&d.prototype||h,f="constructor";for(s.has(a,f)&&!s.contains(b,f)&&b.push(f);c--;)f=F[c],f in a&&a[f]!==e[f]&&!s.contains(b,f)&&b.push(f)}var e=this,f=e._,g=Array.prototype,h=Object.prototype,i=Function.prototype,j=g.push,k=g.slice,l=h.toString,m=h.hasOwnProperty,n=Array.isArray,o=Object.keys,p=i.bind,q=Object.create,r=function(){},s=function(a){return a instanceof s?a:this instanceof s?void(this._wrapped=a):new s(a)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=s),exports._=s):e._=s,s.VERSION="1.8.3";var t=function(a,b,c){if(void 0===b)return a;switch(null==c?3:c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)}}return function(){return a.apply(b,arguments)}},u=function(a,b,c){return null==a?s.identity:s.isFunction(a)?t(a,b,c):s.isObject(a)?s.matcher(a):s.property(a)};s.iteratee=function(a,b){return u(a,b,1/0)};var v=function(a,b){return function(c){var d=arguments.length;if(2>d||null==c)return c;for(var e=1;d>e;e++)for(var f=arguments[e],g=a(f),h=g.length,i=0;h>i;i++){var j=g[i];b&&void 0!==c[j]||(c[j]=f[j])}return c}},w=function(a){if(!s.isObject(a))return{};if(q)return q(a);r.prototype=a;var b=new r;return r.prototype=null,b},x=function(a){return function(b){return null==b?void 0:b[a]}},y=Math.pow(2,53)-1,z=x("length"),A=function(a){var b=z(a);return"number"==typeof b&&b>=0&&y>=b};s.each=s.forEach=function(a,b,c){b=t(b,c);var d,e;if(A(a))for(d=0,e=a.length;e>d;d++)b(a[d],d,a);else{var f=s.keys(a);for(d=0,e=f.length;e>d;d++)b(a[f[d]],f[d],a)}return a},s.map=s.collect=function(a,b,c){b=u(b,c);for(var d=!A(a)&&s.keys(a),e=(d||a).length,f=Array(e),g=0;e>g;g++){var h=d?d[g]:g;f[g]=b(a[h],h,a)}return f},s.reduce=s.foldl=s.inject=a(1),s.reduceRight=s.foldr=a(-1),s.find=s.detect=function(a,b,c){var d;return d=A(a)?s.findIndex(a,b,c):s.findKey(a,b,c),void 0!==d&&-1!==d?a[d]:void 0},s.filter=s.select=function(a,b,c){var d=[];return b=u(b,c),s.each(a,function(a,c,e){b(a,c,e)&&d.push(a)}),d},s.reject=function(a,b,c){return s.filter(a,s.negate(u(b)),c)},s.every=s.all=function(a,b,c){b=u(b,c);for(var d=!A(a)&&s.keys(a),e=(d||a).length,f=0;e>f;f++){var g=d?d[f]:f;if(!b(a[g],g,a))return!1}return!0},s.some=s.any=function(a,b,c){b=u(b,c);for(var d=!A(a)&&s.keys(a),e=(d||a).length,f=0;e>f;f++){var g=d?d[f]:f;if(b(a[g],g,a))return!0}return!1},s.contains=s.includes=s.include=function(a,b,c,d){return A(a)||(a=s.values(a)),("number"!=typeof c||d)&&(c=0),s.indexOf(a,b,c)>=0},s.invoke=function(a,b){var c=k.call(arguments,2),d=s.isFunction(b);return s.map(a,function(a){var e=d?b:a[b];return null==e?e:e.apply(a,c)})},s.pluck=function(a,b){return s.map(a,s.property(b))},s.where=function(a,b){return s.filter(a,s.matcher(b))},s.findWhere=function(a,b){return s.find(a,s.matcher(b))},s.max=function(a,b,c){var d,e,f=-1/0,g=-1/0;if(null==b&&null!=a){a=A(a)?a:s.values(a);for(var h=0,i=a.length;i>h;h++)d=a[h],d>f&&(f=d)}else b=u(b,c),s.each(a,function(a,c,d){e=b(a,c,d),(e>g||e===-1/0&&f===-1/0)&&(f=a,g=e)});return f},s.min=function(a,b,c){var d,e,f=1/0,g=1/0;if(null==b&&null!=a){a=A(a)?a:s.values(a);for(var h=0,i=a.length;i>h;h++)d=a[h],f>d&&(f=d)}else b=u(b,c),s.each(a,function(a,c,d){e=b(a,c,d),(g>e||1/0===e&&1/0===f)&&(f=a,g=e)});return f},s.shuffle=function(a){for(var b,c=A(a)?a:s.values(a),d=c.length,e=Array(d),f=0;d>f;f++)b=s.random(0,f),b!==f&&(e[f]=e[b]),e[b]=c[f];return e},s.sample=function(a,b,c){return null==b||c?(A(a)||(a=s.values(a)),a[s.random(a.length-1)]):s.shuffle(a).slice(0,Math.max(0,b))},s.sortBy=function(a,b,c){return b=u(b,c),s.pluck(s.map(a,function(a,c,d){return{value:a,index:c,criteria:b(a,c,d)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var B=function(a){return function(b,c,d){var e={};return c=u(c,d),s.each(b,function(d,f){var g=c(d,f,b);a(e,d,g)}),e}};s.groupBy=B(function(a,b,c){s.has(a,c)?a[c].push(b):a[c]=[b]}),s.indexBy=B(function(a,b,c){a[c]=b}),s.countBy=B(function(a,b,c){s.has(a,c)?a[c]++:a[c]=1}),s.toArray=function(a){return a?s.isArray(a)?k.call(a):A(a)?s.Line truncated
// Underscore.js 1.8.3
// http://underscorejs.org
// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license.
(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.Line truncated
//# sourceMappingURL=underscore-min.map
-13
View File
@@ -1,13 +0,0 @@
<html>
<body style="border:0px;margin:0px;background-color:#303030">
<table style="spacing:0px;border:0px;padding:0px;width:100%;height:100%">
<tr height="100%">
<td>
<iframe style="border:0px;width:100%;height:100%;scroll:overflow" src="/enyo/"></iframe>
</td><td style="margin:0px;border:0">
<iframe style="border:0px;width:100%;height:100%;scroll:overflow" src="/enyo/#hex"></iframe>
<td>
<tr>
<table>
</body>
</html>
-1
View File
@@ -75,7 +75,6 @@
text-decoration: none;
background-color: #c0c0c0;
height: 20px;
}
.ui-tabs .ui-tabs-nav li a {