ruote-kit 2.2.0.3 → 2.3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.txt +28 -1
 - data/CREDITS.txt +8 -2
 - data/LICENSE.txt +1 -1
 - data/Rakefile +21 -9
 - data/lib/ruote-kit.rb +13 -4
 - data/lib/ruote-kit/core_ext.rb +15 -0
 - data/lib/ruote-kit/helpers/json_helpers.rb +22 -7
 - data/lib/ruote-kit/helpers/link_helpers.rb +9 -7
 - data/lib/ruote-kit/helpers/pagination_helpers.rb +1 -2
 - data/lib/ruote-kit/helpers/render_helpers.rb +1 -1
 - data/lib/ruote-kit/public/_ruote/images/favicon.png +0 -0
 - data/lib/ruote-kit/public/_ruote/images/{ruote_buttons.png → ruote-buttons.png} +0 -0
 - data/lib/ruote-kit/public/_ruote/images/ruote.png +0 -0
 - data/lib/ruote-kit/public/_ruote/javascripts/foolbox-all.min.js +3 -0
 - data/lib/ruote-kit/public/_ruote/javascripts/jquery-1.9.1.min.js +5 -0
 - data/lib/ruote-kit/public/_ruote/javascripts/rk.js +68 -17
 - data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo-all.min.js +3 -0
 - data/lib/ruote-kit/public/_ruote/stylesheets/rk.css +82 -12
 - data/lib/ruote-kit/public/_ruote/stylesheets/ruote-buttons.png +0 -0
 - data/lib/ruote-kit/public/_ruote/stylesheets/ruote-fluo-editor.css +9 -6
 - data/lib/ruote-kit/public/_ruote/stylesheets/ruote-fluo.css +62 -0
 - data/lib/ruote-kit/resources/errors.rb +8 -3
 - data/lib/ruote-kit/resources/expressions.rb +38 -35
 - data/lib/ruote-kit/resources/participants.rb +1 -1
 - data/lib/ruote-kit/resources/processes.rb +61 -4
 - data/lib/ruote-kit/resources/workitems.rb +4 -4
 - data/lib/ruote-kit/version.rb +1 -1
 - data/lib/ruote-kit/views/_pagination.html.haml +2 -2
 - data/lib/ruote-kit/views/_tree_editor.html.haml +63 -30
 - data/lib/ruote-kit/views/error.html.haml +50 -9
 - data/lib/ruote-kit/views/errors.html.haml +1 -1
 - data/lib/ruote-kit/views/expression.html.haml +83 -33
 - data/lib/ruote-kit/views/expressions.html.haml +23 -8
 - data/lib/ruote-kit/views/http_error.html.haml +9 -2
 - data/lib/ruote-kit/views/layout.html.haml +14 -13
 - data/lib/ruote-kit/views/process.html.haml +75 -20
 - data/lib/ruote-kit/views/processes.html.haml +9 -3
 - data/lib/ruote-kit/views/processes_new.html.haml +19 -2
 - data/lib/ruote-kit/views/schedules.html.haml +2 -2
 - data/lib/ruote-kit/views/workitem.html.haml +17 -6
 - data/ruote-kit.gemspec +9 -7
 - data/spec/cases/orphan_workitem_spec.rb +141 -0
 - data/spec/core_ext_spec.rb +19 -0
 - data/spec/resources/errors_spec.rb +182 -156
 - data/spec/resources/expressions_spec.rb +497 -379
 - data/spec/resources/index_spec.rb +5 -5
 - data/spec/resources/participants_spec.rb +64 -75
 - data/spec/resources/processes_spec.rb +396 -277
 - data/spec/resources/schedules_spec.rb +92 -76
 - data/spec/resources/workitems_spec.rb +352 -343
 - data/spec/ruote-kit_configure_spec.rb +41 -13
 - data/spec/spec_helper.rb +6 -8
 - data/spec/support/link_helper.rb +11 -0
 - data/spec/webapp_helpers_spec.rb +29 -23
 - metadata +161 -180
 - data/README.rdoc +0 -313
 - data/lib/ruote-kit/public/_ruote/images/favicon.ico +0 -0
 - data/lib/ruote-kit/public/_ruote/javascripts/jquery-1.4.2.min.js +0 -154
 - data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo-editor.js +0 -548
 - data/lib/ruote-kit/public/_ruote/javascripts/ruote-fluo.js +0 -1118
 
| 
         @@ -0,0 +1,3 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /* ruote-fluo-all-2.3.1.min.js | MIT license: http://github.com/jmettraux/ruote-fluo/LICENSE.txt */
         
     | 
| 
      
 2 
     | 
    
         
            +
            var RuoteFluoEditor=function(){var p={add_child_expression:"add a child expression",cut_expression:"cut expression",moveup_expression:"move expression up",movedown_expression:"move expression down",paste_expression:"paste expression here"};var b=function(){function z(C,D,E){var B=document.createElement("a");B.callback=E;B.className="rfe_button "+C;B.setAttribute("href","");B.setAttribute("title",D);B.setAttribute("onclick","this.callback(); return false;");return B}function A(E){var B=0;var D=document.createElement("span");D.className="rfe_buttons";D.style.opacity=B;var C=f(E);E.onmouseover=function(){D.style.opacity=1;if(C.onOver){C.onOver(s(E.parentNode))}};E.onmouseout=function(){D.style.opacity=B;if(C.onOver){C.onOver(null)}};D.appendChild(z("rfe_add",RuoteFluoEditor.TEXTS.add_child_expression,function(){RuoteFluoEditor.addExpression(E.parentNode,["---",{},[]])}));if(E.parentNode.parentNode!=C){D.appendChild(z("rfe_cut",RuoteFluoEditor.TEXTS.cut_expression,function(){RuoteFluoEditor.removeExpression(E.parentNode)}));D.appendChild(z("rfe_moveup",RuoteFluoEditor.TEXTS.moveup_expression,function(){RuoteFluoEditor.moveExpression(E.parentNode,-1);D.style.opacity=B}));D.appendChild(z("rfe_movedown",RuoteFluoEditor.TEXTS.movedown_expression,function(){RuoteFluoEditor.moveExpression(E.parentNode,+1);D.style.opacity=B}));D.appendChild(z("rfe_paste",RuoteFluoEditor.TEXTS.paste_expression,function(){var F=document._rfe_clipboard;if(F){RuoteFluoEditor.insertExpression(E.parentNode,F)}}))}E.appendChild(D)}return{render:function(D,E){D=u(D);var M=E[0];var K="";if((typeof E[2][0])==="string"){K=E[2].shift()}var G=John.sfy(E[1]);var H=document.createElement("div");H.setAttribute("class","rfe_exp");D.appendChild(H);var C=document.createElement("span");C.setAttribute("class","rfe_exp_span rfe_expression_name");C.appendChild(document.createTextNode(M));H.appendChild(C);var I=document.createElement("span");I.setAttribute("class","rfe_exp_span rfe_expression_atts");I.appendChild(document.createTextNode(" "+G));H.appendChild(I);A(H);var J=function(){var O=H.parentNode;var N=O.parentNode;var P=b.parse(this.value);if(P){O.replaceChild(b.render(O,P),H);g(O)}else{N.removeChild(O);g(N)}};var B=function(N){var O=N||window.event;var P=O.charCode||O.keyCode;if(P===13){this.blur()}return false};var F=function(N){var O=N||window.event;var P=O.charCode||O.keyCode;return(P!=13)};var L=function(){H.removeChild(C);var N=document.createElement("input");N.setAttribute("type","text");N.value=M+" "+G;if(K!=""){N.value=M+" "+K+" "+G}H.replaceChild(N,I);N.onblur=J;N.onkeyup=B;N.onkeypress=F;N.focus()};C.onclick=L;I.onclick=L;return H},parse:function(C){var B=C.match(/^(\S+)(.*)$/);if((!B)||B[1].match(/^-+$/)){return null}return[B[1],John.parse("{"+B[2]+"}"),[]]},toExp:function(C){C=C.firstChild;var B=C.childNodes[0].firstChild.nodeValue;var D=C.childNodes[1].firstChild.nodeValue;return[B,John.parse("{"+D+"}"),[]]}}}();function q(z){return JSON.stringify(z)}function t(z){return q(l(z))}function a(A,z){var D="";for(var C=0;C<z;C++){D=D+"  "}D=D+A[0];var E=John.sfy(A[1]);if(E!==""){D=D+" "+E}for(var C=0,B=A[2].length;C<B;C++){D=D+"\n"+a(A[2][C],z+1)}return D}function y(z){return a(l(z),0)}function h(A,z){var D="";var E="";for(var C=0;C<z;C++){E=E+"  "}D=D+E+A[0];var F=John.sfy(A[1],{ruby:true});if(F!==""){D=D+" "+F}if(A[2].length>0){D=D+" do";for(var C=0,B=A[2].length;C<B;C++){D=D+"\n"+h(A[2][C],z+1)}D=D+"\n"+E+"end"}return D}function j(z){return h(l(z),0)}function o(z){var C=document.createElement(z[0]);for(k in z[1]){C.setAttribute(k,z[1][k])}for(var B=0,A=z[2].length;B<A;B++){C.appendChild(o(z[2][B]))}return C}function i(z){return(new XMLSerializer()).serializeToString(o(l(z)))}function m(A,B){var z=document.createElement("div");z.className="rfe_text";if(B[2].length>0){z.appendChild(document.createTextNode("end"))}A.appendChild(z)}function r(A,C){A=u(A);var z=A.lastChild;var B=v(A,C);A.replaceChild(B,z);A.appendChild(z);if(z.childNodes.length===0){z.appendChild(document.createTextNode("end"))}g(A)}function d(z){z=u(z);var A=z.parentNode;A.removeChild(z);if(A.childNodes.length===2){A.lastChild.removeChild(A.lastChild.firstChild)}document._rfe_clipboard=l(z);g(A)}function v(z,D,A){var C=document.createElement("div");C.className="rfe_expression";if(!A){C.setAttribute("style","margin-left: 14px;")}z.appendChild(C);if(!(D instanceof Array)){renderExpressionString(C,D.toString());return}b.render(C,D);for(var B=0;B<D[2].length;B++){v(C,D[2][B])}m(C,D);return C}function x(z,A){z=u(z);$(z).addClass("rfe_root");while(z.firstChild){z.removeChild(z.firstChild)}v(z,A,true);z.stack=[];z.currentTree=A}function n(z,B){z=u(z);var A=z.parentNode;if(B===-1){if(z.previousSibling.className!="rfe_expression"){return}A.insertBefore(z,z.previousSibling)}else{if(z.nextSibling.className!="rfe_expression"){return}A.insertBefore(z,z.nextSibling.nextSibling)}RuoteFluoEditor.triggerChange(A)}function e(A,B){A=u(A);var z=v(A.parentNode,B);A.parentNode.insertBefore(z,A);RuoteFluoEditor.triggerChange(A.parentNode)}function g(B){var A=f(B);var z=l(A);c(A,z);if(A.onChange){A.onChange(z)}}function c(A,z){A.stack.push(A.currentTree);A.currentTree=z}function w(A){A=u(A);if(A.stack.length<1){return}while(A.firstChild!=null){A.removeChild(A.firstChild)}var z=A.stack.pop();A.currentTree=z;v(A,z,true);if(A.onChange){A.onChange(z)}}function f(z){z=u(z);if($(z).hasClass("rfe_root")){return z}return f(z.parentNode)}function s(D,G,C){if(!G){G=f(D);C=""}if(G===D){return C.substring(1,C.length)}var A=G.childNodes;var B=-1;for(var z=0;z<A.length;z++){var F=A[z];if(F.nodeType!=1){continue}if(F.className!="rfe_expression"){continue}B+=1;var E=s(D,F,C+"_"+B);if(E!=null){return E}}return null}function l(A){var z=$(u(A));z.focus();if(!z.hasClass("rfe_expression")){z=z.children(".rfe_expression").first()}var B=b.toExp(z[0]);z.children(".rfe_expression").each(function(C,D){B[2].push(l(D))});return B}function u(z){if(z.jquery){return z[0]}if((typeof z)!=="string"){return z}if(z.match(/[\.#\[]/)){return $(z)[0]}return document.getElementById(z)}return{TEXTS:p,ExpressionHead:b,render:x,addExpression:r,removeExpression:d,moveExpression:n,insertExpression:e,triggerChange:g,undo:w,asJson:t,asRadial:y,asRuby:j,asXml:i}}();var FluoEditor=RuoteFluoEditor;$.fn.computedStyle=function(){var f=this.get(0);var b;var h={};if(window.getComputedStyle){var d=function(l,i){return i.toUpperCase()};b=window.getComputedStyle(f,null);for(var g=0,e=b.length;g<e;g++){var a=b[g];var j=a.replace(/\-([a-z])/g,d);var c=b.getPropertyValue(a);h[j]=c}return h}if(b=f.currentStyle){for(var a in b){h[a]=b[a]}return h}if(b=f.style){for(var a in b){if(typeof b[a]!="function"){h[a]=b[a]}}return h}return h};var RuoteFluo=(function(){var s="2.3.1";var j=7;var a=4;var l=this;function c(B){var y=["defs",[]];y[1].push(["marker",{id:"arrowhead",viewBox:"0 0 100 100",refX:"90",refY:"50",markerUnits:"strokeWidth",markerWidth:"10",markerHeight:"10",orient:"auto"},[["path",{"class":"fluo",d:"M 0 0 L 100 50 L 0 100 Z"}]]]);var C=["g",{id:"timer"},[["circle",{"class":"fluo",cx:"14",cy:"14",r:"14",fill:"none",stroke:"black","stroke-width":"1"}],["circle",{"class":"fluo",cx:"14",cy:"14",r:"10",fill:"none",stroke:"black","stroke-width":"1"}],["path",{id:"tt","class":"fluo",d:"M 14 05 L 14 07",fill:"none",stroke:"black","stroke-width":"1"}],]];for(var A=0;A<12;A++){var z=(A+1)*30;C[2].push(["use",{"xlink:href":"#tt",transform:"rotate("+z+", 14, 14)"}])}C[2].push(["path",{"class":"fluo",d:"M 14 10 L 14 14",fill:"none",stroke:"black","stroke-width":"1",transform:"rotate(120, 14, 14)"}]);C[2].push(["path",{"class":"fluo",d:"M 14 08 L 14 14",fill:"none",stroke:"black","stroke-width":"1"}]);y[1].push(C);f(B,y)}function q(E,C,y,D,B){C=C||"svg";y=y||{};B=B||{};var z=document.createElementNS("http://www.w3.org/2000/svg",C);Nu.each(y,function(H,G){var I=null;var F=H.match(/^([a-z]+):([a-z-]+)$/);if(F){I=F[1]}if(I==="xlink"){I="http://www.w3.org/1999/xlink"}if(G instanceof Array){G=G.join(" ")}z.setAttributeNS(I,H,G)});var A=$(z);if(D){A.append(document.createTextNode(D))}E[B.prepend?"prepend":"append"](A);if(C==="svg"){c(A)}return A}function f(D,y){var A=y[0];var z=y[1];var B=y[2]||[];if(z instanceof Array){B=z;z={}}var C=q(D,A,z);Nu.each(B,function(E){f(C,E)});return C}function n(C,A,y,B,z){if(A instanceof Array){return f(C,A)}else{return q(C,A,y,B,z)}}function o(y){if(y.width()===0){return g(y).width}else{return y.width()}}function m(y){if(y.height()===0){return g(y).height}else{return y.height()}}function t(y){return Nu.max(Nu.map(y.children(),function(z){return o($(z))}))}function v(y){return Nu.reduce(Nu.map(y.children(),function(z){return m($(z))}),0,function(A,z){return A+z})}function u(B,A){var z=n(B,"g");var C=0;Nu.each(A,function(D){var y=D;var F="";if(D instanceof Array){F=D[0];y=D[1]}var E=n(z,"text",{"class":$.trim("fluo "+F),x:0},y);C=C+m(E);E.attr("y",C)});z._width=t(z);z._height=v(z);return z}function w(z){var y=Nu.inject(z,0,function(A,B){return Nu.max([A,B._width,B._center||0])});Nu.each(z,function(B){var A=(y-B._width)/2;var C=B._center;if(C){A=(y-C)/2}i(B,A,0)})}function x(z){var y=(z.attr("transform")||"").match(/^translate\((\d+(?:\.\d+)?), (\d+(?:\.\d+)?)\)$/);if(!y){return{x:0,y:0}}return{x:parseFloat(y[1]),y:parseFloat(y[2])}}function g(y){var A=y[0].getBBox();var z=x(y);return{x:z.x,y:z.y,width:A.width,height:A.height}}function i(A,z,C){var B=x(A);A.attr("transform","translate("+(B.x+z)+", "+(B.y+C)+")")}function e(F,z,y,D,C,B){var E=null;var A=a;if(!B.bottom){E=["M",z,y,"L",D+(D>z?-1:1)*A,y,"Q",D,y,D,y+A,"L",D,C];if(B.inner){E=["M"].concat(E.slice(4))}}else{E=["M",z,y,"L",z,C-A,"Q",z,C,z+(D>z?1:-1)*A,C,"L",D,C];if(B.inner){E=E.slice(0,11)}}return n(F,"path",{"class":"fluo rounded_path",d:E,fill:"none"})}function b(y){var z=Nu.find(y[1],function(C,B){return(B===null)});if(z){z=z[0]}var A=Nu.select(y[1],function(C,B){return(B!=null)});return[z,A]}function p(K,E,z,C,y){y=y||{};var A=n(K,"g",{"class":"fluo card"});var H=(y.noCard||y.noRect)?null:n(A,"rect",{"class":"fluo"});var M=null;if(y.noCard){M={_height:0,_width:0}}else{var L=b(z);var B=[["expname",z[0]+(L[0]?" "+L[0]:"")]];Nu.each(L[1],function(O,N){B.push(O+": "+N)});M=u(A,B);i(M,a,0)}var I=M._width;if(!y.noCard){I=I+2*a}var D=n(A,"g",{"class":"fluo card_body"});i(D,I,0);var G=C(D);var J=G[0];var F=G[1];A._width=I+J+(H?a:0);A._height=Nu.max([M._height,F]);if(!y["short"]&&!y.noCard){A._height=A._height+2*a}if(H){H.attr("rx",j);H.attr("ry",j);H.attr("width",""+A._width);H.attr("height",""+A._height)}if(y.rightCentered){A._center=(A._width-J/2-a)*2}A._body=D;return A}var h={};h.text=function(A,z,y){var C=JSON.stringify(y[1]).slice(1,-1);var B=n(A,"text",{"class":"fluo text_exp"},$.trim(y[0]+" "+C));B._width=o(B);B._height=m(B)+a;B.attr("y",m(B));return B};h.any=function(A,z,y){return p(A,z,y,function(E){var C=0;var D=a;var B=0;Nu.each(y[2],function(G){var F=d(E,z+"_"+C,G);i(F,0,D);C=C+1;D=D+F._height+a;B=Nu.max([B,F._width])});return[B,D]})};h.sequence=function(B,z,y){var A=Nu.isEmpty(y[1]);return p(B,z,y,function(G){var E=0;var F=A?0:a;var C=0;var D=Nu.map(y[2],function(J){var H=d(G,z+"_"+E,J);i(H,0,F);E=E+1;F=F+H._height;C=Nu.max([C,H._width]);if(E>=y[2].length){return H}var I=n(G,"path",{"class":"fluo",d:"M 0 0 L 0 11","marker-end":"url(#arrowhead)"});i(I,0,F);F=F+11;I._width=o(I);I._height=m(I);return[H,I]});w(Nu.flatten(D));return[C,F]},{noCard:A})};h.concurrence=function(C,A,y){var E=p(C,A,y,function(I){var G=0;var F=0;var H=Nu.map(y[2],function(K){var J=d(I,A+"_"+G,K);i(J,F,a);F=F+J._width+a;G=G+1;return J._height});return[F-a,Nu.max(H)]},{noRect:true,rightCentered:true});var D=o(E._body);var z=0;var B=E._body.children().length;Nu.each(E._body.children(),function(J){z=z+1;var I=$(J);var G=o(I);var H=m(I);var F=x(I).x;e(E._body,D/2-a,0,F+G/2,a,{bottom:false,inner:z>1&&z<B});e(E._body,F+G/2,H+a,D/2-a,E._height,{bottom:true,inner:z>1&&z<B})});return E};h.wait=function(A,z,y){return p(A,z,y,function(B){var C=n(B,"use",{"xlink:href":"#timer"});return[2*a+o(C),m(C)]},{noRect:true,"short":true,rightCentered:true})};h.sleep=h.wait;Nu.each(["set","rset","unset","rewind","continue","back","break","stop","cancel","skip","jump"],function(y){h[y]=h.text});function d(B,A,z){var y=(h[z[0]]||h.any).call(l,B,A,z);y[0].id="exp_"+A;return y}function r(y){if(y.jquery){return y}if((typeof y)!=="string"){return $(y)}if(y.match(/[\.#\[]/)){return $(y)}return $("#"+y)}this.render=function(z,A,y){y=y||{};$div=r(z);$div.empty();$div[0].ruote_fluo_options=y;$div[0].ruote_fluo_definition=A;$g=d(n($div),"0",A);if(y.noOuterBorder){$g.children("rect").remove()}var H=$g._width+3;var E=$g._height+3;var F=H;var C=E;var B=y.width||y.w;var G=y.height||y.h;if(y.fit){F=$div.innerWidth()-8;C=$div.innerHeight()-8}else{if(B){F=B;C=G}}if(y.fit==="down"&&H<F){F=H;C=E}if(F<0||C<0){F=20;C=20}var D=y.preserveAspectRatio||y.par||"xMidYMin meet";$svg=$g.parent();$svg.attr("class",("ruote_fluo "+($svg.attr("class")||"")).trim());$svg[0].setAttributeNS(null,"viewBox","0 0 "+H+" "+E);$svg[0].setAttributeNS(null,"preserveAspectRatio",D);$svg.attr("width",""+F+"px");$svg.attr("height",""+C+"px");$svg.attr("data-ruote-fluo-scale",""+(F/H));return $g};this.highlight=function(E,C){var A=r(E);$("#"+A[0].id+" rect.fluo_highlight").remove();var B=$("#exp_"+C);if(B.length<1){return}var z=g(B);var y=n(B.parent(),"rect",{"class":"fluo_highlight"},null,{prepend:true});var D=parseFloat(y.computedStyle()["stroke-width"]||"3")+1;y.attr({x:z.x-D,y:z.y-D,width:z.width+2*D,height:z.height+2*D,rx:D,ry:D})};this.pin=function(y,B,G,z){G="fluo_pin fluo_pin_"+G;z=z||"wi";var I=r(y);var A=$("#exp_"+B);if(A.length<1){return}var J=g(A);var K=20;var D=10;var E=40;var H=15;var L=n(A.parent(),"g");var F=n(L,"path",{d:["M",0,H,"L",D,E,"L",K,H,"Q",D,0,0,H],"class":G});var C=n(L,"text",{"class":G,x:K/4,y:E/2},z);w([F,C]);i(L,J.x+J.width-18,J.y-20)};this.computeHeight=function(E,B){var z=r(E);var D=z.children("svg")[0].attributes.viewBox.value.split(" ");var y=parseInt(D[2],10);var A=parseInt(D[3],10);var C=y/B;return Math.round(A/C)};return this}).apply({});var Fluo=RuoteFluo;
         
     | 
| 
      
 3 
     | 
    
         
            +
            /* compressed from commit f4fab37 */
         
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
       2 
2 
     | 
    
         
             
            /* layout */
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            * {
         
     | 
| 
         @@ -22,8 +22,8 @@ body { 
     | 
|
| 
       22 
22 
     | 
    
         
             
            }
         
     | 
| 
       23 
23 
     | 
    
         
             
            #hlogo {
         
     | 
| 
       24 
24 
     | 
    
         
             
              float: left;
         
     | 
| 
       25 
     | 
    
         
            -
              margin-top:  
     | 
| 
       26 
     | 
    
         
            -
              margin-right:  
     | 
| 
      
 25 
     | 
    
         
            +
              margin-top: 17px;
         
     | 
| 
      
 26 
     | 
    
         
            +
              margin-right: 27px;
         
     | 
| 
       27 
27 
     | 
    
         
             
            }
         
     | 
| 
       28 
28 
     | 
    
         
             
            #htext {
         
     | 
| 
       29 
29 
     | 
    
         
             
              float: left;
         
     | 
| 
         @@ -90,7 +90,7 @@ table.list { 
     | 
|
| 
       90 
90 
     | 
    
         
             
            }
         
     | 
| 
       91 
91 
     | 
    
         
             
            table.list td {
         
     | 
| 
       92 
92 
     | 
    
         
             
              border: 1px solid #d0d1d3;
         
     | 
| 
       93 
     | 
    
         
            -
              padding:  
     | 
| 
      
 93 
     | 
    
         
            +
              padding: 0px 7px;
         
     | 
| 
       94 
94 
     | 
    
         
             
            }
         
     | 
| 
       95 
95 
     | 
    
         
             
            table.list thead td {
         
     | 
| 
       96 
96 
     | 
    
         
             
              text-align: center;
         
     | 
| 
         @@ -112,6 +112,9 @@ table.list td.no_padding { 
     | 
|
| 
       112 
112 
     | 
    
         
             
              padding: 0;
         
     | 
| 
       113 
113 
     | 
    
         
             
              margin: 0;
         
     | 
| 
       114 
114 
     | 
    
         
             
            }
         
     | 
| 
      
 115 
     | 
    
         
            +
            table.list.expressions {
         
     | 
| 
      
 116 
     | 
    
         
            +
              width: auto;
         
     | 
| 
      
 117 
     | 
    
         
            +
            }
         
     | 
| 
       115 
118 
     | 
    
         | 
| 
       116 
119 
     | 
    
         
             
            table.details {
         
     | 
| 
       117 
120 
     | 
    
         
             
              margin-top: 14px;
         
     | 
| 
         @@ -203,6 +206,7 @@ table.participants td { 
     | 
|
| 
       203 
206 
     | 
    
         
             
              border: 0;
         
     | 
| 
       204 
207 
     | 
    
         
             
              padding: 0;
         
     | 
| 
       205 
208 
     | 
    
         
             
              margin: 0;
         
     | 
| 
      
 209 
     | 
    
         
            +
              /*padding: 0px 3px;*/
         
     | 
| 
       206 
210 
     | 
    
         
             
            }
         
     | 
| 
       207 
211 
     | 
    
         
             
            table.participants td:last-child {
         
     | 
| 
       208 
212 
     | 
    
         
             
              padding-left: 7px;
         
     | 
| 
         @@ -241,9 +245,19 @@ div.trace { 
     | 
|
| 
       241 
245 
     | 
    
         
             
              cursor: pointer;
         
     | 
| 
       242 
246 
     | 
    
         
             
            }
         
     | 
| 
       243 
247 
     | 
    
         | 
| 
      
 248 
     | 
    
         
            +
            /* error details */
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
      
 250 
     | 
    
         
            +
            pre.details {
         
     | 
| 
      
 251 
     | 
    
         
            +
              font-family: "Menlo Regular", "Monaco", courier, monospace;
         
     | 
| 
      
 252 
     | 
    
         
            +
              font-size: 10px;
         
     | 
| 
      
 253 
     | 
    
         
            +
              margin-top: 7px;
         
     | 
| 
      
 254 
     | 
    
         
            +
              margin-bottom: 5px;
         
     | 
| 
      
 255 
     | 
    
         
            +
              line-height: 11px;
         
     | 
| 
      
 256 
     | 
    
         
            +
            }
         
     | 
| 
      
 257 
     | 
    
         
            +
             
     | 
| 
       244 
258 
     | 
    
         
             
            /* overlay */
         
     | 
| 
       245 
259 
     | 
    
         | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
      
 260 
     | 
    
         
            +
            #overlay {
         
     | 
| 
       247 
261 
     | 
    
         
             
              position: absolute;
         
     | 
| 
       248 
262 
     | 
    
         
             
              top: 0;
         
     | 
| 
       249 
263 
     | 
    
         
             
              left: 0;
         
     | 
| 
         @@ -256,15 +270,46 @@ div#overlay { 
     | 
|
| 
       256 
270 
     | 
    
         
             
              z-index: 99;
         
     | 
| 
       257 
271 
     | 
    
         
             
            }
         
     | 
| 
       258 
272 
     | 
    
         | 
| 
      
 273 
     | 
    
         
            +
            #zoom {
         
     | 
| 
      
 274 
     | 
    
         
            +
              position: absolute;
         
     | 
| 
      
 275 
     | 
    
         
            +
              top: 10%;
         
     | 
| 
      
 276 
     | 
    
         
            +
              left: 10%;
         
     | 
| 
      
 277 
     | 
    
         
            +
              right: 10%;
         
     | 
| 
      
 278 
     | 
    
         
            +
              width: 80%;
         
     | 
| 
      
 279 
     | 
    
         
            +
              /*
         
     | 
| 
      
 280 
     | 
    
         
            +
              height: auto;
         
     | 
| 
      
 281 
     | 
    
         
            +
              */
         
     | 
| 
      
 282 
     | 
    
         
            +
              min-height: 50px;
         
     | 
| 
      
 283 
     | 
    
         
            +
              background: #ffffff;
         
     | 
| 
      
 284 
     | 
    
         
            +
              z-index: 999;
         
     | 
| 
      
 285 
     | 
    
         
            +
              padding: 14px;
         
     | 
| 
      
 286 
     | 
    
         
            +
              border-radius: 15px;
         
     | 
| 
      
 287 
     | 
    
         
            +
              -webkit-border-radius: 15px;
         
     | 
| 
      
 288 
     | 
    
         
            +
              -moz-border-radius: 15px;
         
     | 
| 
      
 289 
     | 
    
         
            +
              box-shadow: 0 1px 12px #000;
         
     | 
| 
      
 290 
     | 
    
         
            +
              -webkit-box-shadow: 0 1px 12px #000;
         
     | 
| 
      
 291 
     | 
    
         
            +
              -moz-box-shadow: 0 1px 12px #000;
         
     | 
| 
      
 292 
     | 
    
         
            +
            }
         
     | 
| 
      
 293 
     | 
    
         
            +
             
     | 
| 
       259 
294 
     | 
    
         
             
            /* fluo */
         
     | 
| 
       260 
295 
     | 
    
         | 
| 
       261 
296 
     | 
    
         
             
            #fluo {
         
     | 
| 
      
 297 
     | 
    
         
            +
              margin: -3px -3px;
         
     | 
| 
       262 
298 
     | 
    
         
             
              float: right;
         
     | 
| 
      
 299 
     | 
    
         
            +
              text-align: center;
         
     | 
| 
      
 300 
     | 
    
         
            +
              width: auto;
         
     | 
| 
      
 301 
     | 
    
         
            +
            }
         
     | 
| 
      
 302 
     | 
    
         
            +
            #exp_fluo {
         
     | 
| 
      
 303 
     | 
    
         
            +
              margin: -3px -3px;
         
     | 
| 
      
 304 
     | 
    
         
            +
              float: right;
         
     | 
| 
      
 305 
     | 
    
         
            +
              text-align: center;
         
     | 
| 
      
 306 
     | 
    
         
            +
              width: auto;
         
     | 
| 
       263 
307 
     | 
    
         
             
            }
         
     | 
| 
      
 308 
     | 
    
         
            +
            /* TODO: have a fluo_svg or something class instead of this double def */
         
     | 
| 
       264 
309 
     | 
    
         | 
| 
       265 
310 
     | 
    
         
             
            /* editor */
         
     | 
| 
       266 
311 
     | 
    
         | 
| 
       267 
     | 
    
         
            -
             
     | 
| 
      
 312 
     | 
    
         
            +
            #editor {
         
     | 
| 
       268 
313 
     | 
    
         
             
              position: absolute;
         
     | 
| 
       269 
314 
     | 
    
         
             
              top: 10%;
         
     | 
| 
       270 
315 
     | 
    
         
             
              left: 10%;
         
     | 
| 
         @@ -281,16 +326,41 @@ div#editor { 
     | 
|
| 
       281 
326 
     | 
    
         
             
              -webkit-box-shadow: 0 1px 12px #000;
         
     | 
| 
       282 
327 
     | 
    
         
             
              -moz-box-shadow: 0 1px 12px #000;
         
     | 
| 
       283 
328 
     | 
    
         
             
            }
         
     | 
| 
       284 
     | 
    
         
            -
             
     | 
| 
      
 329 
     | 
    
         
            +
            #fluo_editor {
         
     | 
| 
       285 
330 
     | 
    
         
             
            }
         
     | 
| 
       286 
     | 
    
         
            -
             
     | 
| 
      
 331 
     | 
    
         
            +
            /*
         
     | 
| 
      
 332 
     | 
    
         
            +
            #editor > a.ruote_go_button {
         
     | 
| 
       287 
333 
     | 
    
         
             
              margin-left: 4px;
         
     | 
| 
       288 
334 
     | 
    
         
             
            }
         
     | 
| 
       289 
     | 
    
         
            -
             
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
       291 
     | 
    
         
            -
             
     | 
| 
      
 335 
     | 
    
         
            +
            */
         
     | 
| 
      
 336 
     | 
    
         
            +
             
     | 
| 
      
 337 
     | 
    
         
            +
            .editor_buttons {
         
     | 
| 
      
 338 
     | 
    
         
            +
              margin-top: 1.0em;
         
     | 
| 
      
 339 
     | 
    
         
            +
              margin-bottom: 0.2em;
         
     | 
| 
      
 340 
     | 
    
         
            +
            }
         
     | 
| 
      
 341 
     | 
    
         
            +
            .editor_buttons button.discard {
         
     | 
| 
      
 342 
     | 
    
         
            +
              margin-left: 0.7em;
         
     | 
| 
       292 
343 
     | 
    
         
             
            }
         
     | 
| 
       293 
344 
     | 
    
         | 
| 
      
 345 
     | 
    
         
            +
            /* badge a la Bootstrap (keep in the fridge for now) */
         
     | 
| 
      
 346 
     | 
    
         
            +
            /*
         
     | 
| 
      
 347 
     | 
    
         
            +
            .ruote_badge {
         
     | 
| 
      
 348 
     | 
    
         
            +
              -webkit-border-radius: 3px;
         
     | 
| 
      
 349 
     | 
    
         
            +
              -moz-border-radius: 3px;
         
     | 
| 
      
 350 
     | 
    
         
            +
              border-radius: 3px;
         
     | 
| 
      
 351 
     | 
    
         
            +
              display: inline-block;
         
     | 
| 
      
 352 
     | 
    
         
            +
              padding: 2px 4px;
         
     | 
| 
      
 353 
     | 
    
         
            +
              font-size: 11.844px;
         
     | 
| 
      
 354 
     | 
    
         
            +
              font-weight: bold;
         
     | 
| 
      
 355 
     | 
    
         
            +
              line-height: 14px;
         
     | 
| 
      
 356 
     | 
    
         
            +
              color: #ffffff;
         
     | 
| 
      
 357 
     | 
    
         
            +
              text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
         
     | 
| 
      
 358 
     | 
    
         
            +
              white-space: nowrap;
         
     | 
| 
      
 359 
     | 
    
         
            +
              vertical-align: baseline;
         
     | 
| 
      
 360 
     | 
    
         
            +
              background-color: #999999;
         
     | 
| 
      
 361 
     | 
    
         
            +
            }
         
     | 
| 
      
 362 
     | 
    
         
            +
            */
         
     | 
| 
      
 363 
     | 
    
         
            +
             
     | 
| 
       294 
364 
     | 
    
         
             
            /* buttons +-^vx... */
         
     | 
| 
       295 
365 
     | 
    
         | 
| 
       296 
366 
     | 
    
         
             
            a.ruote_button {
         
     | 
| 
         @@ -298,7 +368,7 @@ a.ruote_button { 
     | 
|
| 
       298 
368 
     | 
    
         
             
              margin-right: 1px;
         
     | 
| 
       299 
369 
     | 
    
         
             
              width: 12px;
         
     | 
| 
       300 
370 
     | 
    
         
             
              height: 12px;
         
     | 
| 
       301 
     | 
    
         
            -
              background: transparent url(../images/ 
     | 
| 
      
 371 
     | 
    
         
            +
              background: transparent url(../images/ruote-buttons.png) no-repeat;
         
     | 
| 
       302 
372 
     | 
    
         
             
            }
         
     | 
| 
       303 
373 
     | 
    
         
             
            a.ruote_plus_button {
         
     | 
| 
       304 
374 
     | 
    
         
             
              background-position: 0 0;
         
     | 
| 
         Binary file 
     | 
| 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
            # 
     | 
| 
      
 1 
     | 
    
         
            +
            /* @override http://127.0.0.1:3000/stylesheets/ruote-fluo-editor.css */
         
     | 
| 
      
 2 
     | 
    
         
            +
            #fluo {
         
     | 
| 
      
 3 
     | 
    
         
            +
            }
         
     | 
| 
      
 4 
     | 
    
         
            +
            #editor {
         
     | 
| 
       3 
5 
     | 
    
         
             
              font: 14px/1.4em monaco, mono;
         
     | 
| 
       4 
6 
     | 
    
         
             
              text-align: left;
         
     | 
| 
       5 
7 
     | 
    
         
             
              color: #000;
         
     | 
| 
         @@ -48,7 +50,7 @@ a.rfe_button { 
     | 
|
| 
       48 
50 
     | 
    
         
             
              margin: 0 -1px;
         
     | 
| 
       49 
51 
     | 
    
         
             
              width: 12px;
         
     | 
| 
       50 
52 
     | 
    
         
             
              height: 12px;
         
     | 
| 
       51 
     | 
    
         
            -
              background: transparent url( 
     | 
| 
      
 53 
     | 
    
         
            +
              background: transparent url(./ruote-buttons.png) no-repeat;
         
     | 
| 
       52 
54 
     | 
    
         
             
            }
         
     | 
| 
       53 
55 
     | 
    
         
             
            a.rfe_add {
         
     | 
| 
       54 
56 
     | 
    
         
             
              background-position: 0 0;
         
     | 
| 
         @@ -85,13 +87,14 @@ a.rfe_paste:hover { 
     | 
|
| 
       85 
87 
     | 
    
         
             
              font: 14px/1em monaco, mono;
         
     | 
| 
       86 
88 
     | 
    
         
             
              border: 0;
         
     | 
| 
       87 
89 
     | 
    
         
             
              padding: 0 10px;
         
     | 
| 
       88 
     | 
    
         
            -
              padding-top:  
     | 
| 
      
 90 
     | 
    
         
            +
              padding-top: 0px;
         
     | 
| 
       89 
91 
     | 
    
         
             
              margin: 0;
         
     | 
| 
       90 
92 
     | 
    
         
             
              margin-left: -11px;
         
     | 
| 
       91 
     | 
    
         
            -
              margin-bottom:  
     | 
| 
      
 93 
     | 
    
         
            +
              margin-bottom: 0px;
         
     | 
| 
       92 
94 
     | 
    
         
             
              width: 400px;
         
     | 
| 
       93 
95 
     | 
    
         
             
              background: #86e74c;
         
     | 
| 
       94 
96 
     | 
    
         
             
              border-radius: 15px;
         
     | 
| 
      
 97 
     | 
    
         
            +
              outline: none;
         
     | 
| 
       95 
98 
     | 
    
         
             
              -webkit-border-radius: 15px;
         
     | 
| 
       96 
99 
     | 
    
         
             
              -moz-border-radius: 15px;
         
     | 
| 
       97 
100 
     | 
    
         
             
            }
         
     | 
| 
         @@ -102,7 +105,7 @@ img.rfe_button { 
     | 
|
| 
       102 
105 
     | 
    
         
             
            /* safari */
         
     | 
| 
       103 
106 
     | 
    
         
             
            @media screen and (-webkit-min-device-pixel-ratio:0) {
         
     | 
| 
       104 
107 
     | 
    
         
             
            .rfe_exp > input[type="text"] {
         
     | 
| 
       105 
     | 
    
         
            -
              padding-top:  
     | 
| 
      
 108 
     | 
    
         
            +
              padding-top: 0px;
         
     | 
| 
       106 
109 
     | 
    
         
             
              margin-bottom: 0;
         
     | 
| 
       107 
110 
     | 
    
         
             
            }
         
     | 
| 
       108 
111 
     | 
    
         | 
| 
         @@ -0,0 +1,62 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            svg.ruote_fluo {
         
     | 
| 
      
 3 
     | 
    
         
            +
              padding: 10px;
         
     | 
| 
      
 4 
     | 
    
         
            +
            }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            svg rect.fluo {
         
     | 
| 
      
 7 
     | 
    
         
            +
              fill: none;
         
     | 
| 
      
 8 
     | 
    
         
            +
              stroke: black;
         
     | 
| 
      
 9 
     | 
    
         
            +
              stroke-width: 1.1px;
         
     | 
| 
      
 10 
     | 
    
         
            +
              /*
         
     | 
| 
      
 11 
     | 
    
         
            +
              rx: 14;
         
     | 
| 
      
 12 
     | 
    
         
            +
              ry: 14;
         
     | 
| 
      
 13 
     | 
    
         
            +
              */
         
     | 
| 
      
 14 
     | 
    
         
            +
            }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            svg path.fluo {
         
     | 
| 
      
 17 
     | 
    
         
            +
              stroke: black;
         
     | 
| 
      
 18 
     | 
    
         
            +
              stroke-width: 0.7px;
         
     | 
| 
      
 19 
     | 
    
         
            +
            }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            svg text {
         
     | 
| 
      
 22 
     | 
    
         
            +
              font-family: Helvetica Neue;
         
     | 
| 
      
 23 
     | 
    
         
            +
              font-size: 12px;
         
     | 
| 
      
 24 
     | 
    
         
            +
              /*
         
     | 
| 
      
 25 
     | 
    
         
            +
              fill: blue;
         
     | 
| 
      
 26 
     | 
    
         
            +
              */
         
     | 
| 
      
 27 
     | 
    
         
            +
            }
         
     | 
| 
      
 28 
     | 
    
         
            +
            svg text.text_exp {
         
     | 
| 
      
 29 
     | 
    
         
            +
              font-size: 14px;
         
     | 
| 
      
 30 
     | 
    
         
            +
            }
         
     | 
| 
      
 31 
     | 
    
         
            +
            svg text.expname {
         
     | 
| 
      
 32 
     | 
    
         
            +
              font-size: 14px;
         
     | 
| 
      
 33 
     | 
    
         
            +
              font-weight: 500;
         
     | 
| 
      
 34 
     | 
    
         
            +
            }
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            svg rect.fluo_highlight {
         
     | 
| 
      
 37 
     | 
    
         
            +
              stroke: #dedede;
         
     | 
| 
      
 38 
     | 
    
         
            +
              stroke-width: 3px;
         
     | 
| 
      
 39 
     | 
    
         
            +
              fill: none;
         
     | 
| 
      
 40 
     | 
    
         
            +
            }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            p.fluo.expname {
         
     | 
| 
      
 43 
     | 
    
         
            +
              margin-bottom: 1em;
         
     | 
| 
      
 44 
     | 
    
         
            +
            }
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            svg path.fluo_pin {
         
     | 
| 
      
 47 
     | 
    
         
            +
              height: 30px;
         
     | 
| 
      
 48 
     | 
    
         
            +
              width: 20px;
         
     | 
| 
      
 49 
     | 
    
         
            +
              stroke: black;
         
     | 
| 
      
 50 
     | 
    
         
            +
              stroke-width: 0.7px;
         
     | 
| 
      
 51 
     | 
    
         
            +
              fill: blue;
         
     | 
| 
      
 52 
     | 
    
         
            +
            }
         
     | 
| 
      
 53 
     | 
    
         
            +
            svg text.fluo_pin {
         
     | 
| 
      
 54 
     | 
    
         
            +
              font-size: 12px;
         
     | 
| 
      
 55 
     | 
    
         
            +
            }
         
     | 
| 
      
 56 
     | 
    
         
            +
            svg path.fluo_pin_workitem {
         
     | 
| 
      
 57 
     | 
    
         
            +
              fill: yellow;
         
     | 
| 
      
 58 
     | 
    
         
            +
            }
         
     | 
| 
      
 59 
     | 
    
         
            +
            svg path.fluo_pin_error {
         
     | 
| 
      
 60 
     | 
    
         
            +
              fill: red;
         
     | 
| 
      
 61 
     | 
    
         
            +
            }
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
         @@ -15,10 +15,15 @@ class RuoteKit::Application 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              get '/_ruote/errors/:id' do
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
                @error, @errors =  
     | 
| 
      
 18 
     | 
    
         
            +
                @error, @errors = fetch_err
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                return http_error(404) if @error.nil? && @errors.nil?
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
                if @error and request.accept.find { |as| as.match(/html/) }
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @process = RuoteKit.engine.process(@error.wfid)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @pins = [ [ @error.fei.expid, 'error', 'er' ] ]
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       22 
27 
     | 
    
         
             
                if @error
         
     | 
| 
       23 
28 
     | 
    
         
             
                  respond_with :error
         
     | 
| 
       24 
29 
     | 
    
         
             
                else
         
     | 
| 
         @@ -42,14 +47,14 @@ class RuoteKit::Application 
     | 
|
| 
       42 
47 
     | 
    
         
             
                RuoteKit.engine.replay_at_error(error)
         
     | 
| 
       43 
48 
     | 
    
         | 
| 
       44 
49 
     | 
    
         
             
                respond_to do |format|
         
     | 
| 
       45 
     | 
    
         
            -
                  format.html { redirect '/_ruote/errors' }
         
     | 
| 
      
 50 
     | 
    
         
            +
                  format.html { redirect url('/_ruote/errors') }
         
     | 
| 
       46 
51 
     | 
    
         
             
                  format.json { json :status, :ok }
         
     | 
| 
       47 
52 
     | 
    
         
             
                end
         
     | 
| 
       48 
53 
     | 
    
         
             
              end
         
     | 
| 
       49 
54 
     | 
    
         | 
| 
       50 
55 
     | 
    
         
             
              protected
         
     | 
| 
       51 
56 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
              def  
     | 
| 
      
 57 
     | 
    
         
            +
              def fetch_err
         
     | 
| 
       53 
58 
     | 
    
         | 
| 
       54 
59 
     | 
    
         
             
                fei = params[:id].split('!')
         
     | 
| 
       55 
60 
     | 
    
         
             
                wfid = fei.last
         
     | 
| 
         @@ -5,9 +5,7 @@ class RuoteKit::Application 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              get '/_ruote/expressions/:id' do
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                @process, @expression, fei =  
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                return http_error(404) unless @process
         
     | 
| 
      
 8 
     | 
    
         
            +
                @process, @expression, fei = fetch_pef
         
     | 
| 
       11 
9 
     | 
    
         | 
| 
       12 
10 
     | 
    
         
             
                if fei
         
     | 
| 
       13 
11 
     | 
    
         | 
| 
         @@ -16,15 +14,18 @@ class RuoteKit::Application 
     | 
|
| 
       16 
14 
     | 
    
         
             
                  etag @expression.to_h['_rev']
         
     | 
| 
       17 
15 
     | 
    
         | 
| 
       18 
16 
     | 
    
         
             
                  respond_with :expression
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       19 
18 
     | 
    
         
             
                else
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
                  return http_error(404) if @process.nil? or @process.expressions.empty?
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       21 
22 
     | 
    
         
             
                  respond_with :expressions
         
     | 
| 
       22 
23 
     | 
    
         
             
                end
         
     | 
| 
       23 
24 
     | 
    
         
             
              end
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
       25 
26 
     | 
    
         
             
              delete '/_ruote/expressions/:id' do
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                process, expression, fei =  
     | 
| 
      
 28 
     | 
    
         
            +
                process, expression, fei = fetch_pef
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
                return http_error(404) unless expression
         
     | 
| 
       30 
31 
     | 
    
         | 
| 
         @@ -37,45 +38,52 @@ class RuoteKit::Application 
     | 
|
| 
       37 
38 
     | 
    
         
             
                end
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
                respond_to do |format|
         
     | 
| 
       40 
     | 
    
         
            -
                  format.html { redirect "/_ruote/expressions/#{expression.fei.wfid}" }
         
     | 
| 
      
 41 
     | 
    
         
            +
                  format.html { redirect url("/_ruote/expressions/#{expression.fei.wfid}") }
         
     | 
| 
       41 
42 
     | 
    
         
             
                  format.json { json :status, :ok }
         
     | 
| 
       42 
43 
     | 
    
         
             
                end
         
     | 
| 
       43 
44 
     | 
    
         
             
              end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
              put '/_ruote/expressions/:id' do
         
     | 
| 
       46 
47 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                process,  
     | 
| 
      
 48 
     | 
    
         
            +
                process, exp, fei = fetch_pef
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                return http_error(404) unless  
     | 
| 
      
 50 
     | 
    
         
            +
                return http_error(404) unless exp
         
     | 
| 
       50 
51 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                check_if_match_etag( 
     | 
| 
      
 52 
     | 
    
         
            +
                check_if_match_etag(exp.to_h['_rev'])
         
     | 
| 
       52 
53 
     | 
    
         | 
| 
       53 
54 
     | 
    
         
             
                info = begin
         
     | 
| 
       54 
     | 
    
         
            -
                   
     | 
| 
      
 55 
     | 
    
         
            +
                  fetch_expression_put_info
         
     | 
| 
       55 
56 
     | 
    
         
             
                rescue Rufus::Json::ParserError => pe
         
     | 
| 
       56 
57 
     | 
    
         
             
                  return http_error(400, pe)
         
     | 
| 
       57 
58 
     | 
    
         
             
                end
         
     | 
| 
       58 
59 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                 
     | 
| 
       60 
     | 
    
         
            -
                #p params
         
     | 
| 
       61 
     | 
    
         
            -
                #p info
         
     | 
| 
       62 
     | 
    
         
            -
                #puts '-' * 80
         
     | 
| 
      
 60 
     | 
    
         
            +
                if state = info['state']
         
     | 
| 
       63 
61 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
      
 62 
     | 
    
         
            +
                  if state == 'paused'
         
     | 
| 
      
 63 
     | 
    
         
            +
                    RuoteKit.engine.pause(exp.fei, :breakpoint => info['breakpoint'])
         
     | 
| 
      
 64 
     | 
    
         
            +
                  else
         
     | 
| 
      
 65 
     | 
    
         
            +
                    RuoteKit.engine.resume(exp.fei)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
                  path = Rack::Utils.unescape(request.path_info)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  path = path + '.json' if request.media_type.match(/json/) # :-(
         
     | 
| 
       69 
70 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
                  redirect(url(path))
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                else
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  RuoteKit.engine.re_apply(exp.fei, info)
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  respond_to do |format|
         
     | 
| 
      
 78 
     | 
    
         
            +
                    format.html { redirect url("/_ruote/expressions/#{exp.fei.wfid}") }
         
     | 
| 
      
 79 
     | 
    
         
            +
                    format.json { json :status, :ok }
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
       73 
81 
     | 
    
         
             
                end
         
     | 
| 
       74 
82 
     | 
    
         
             
              end
         
     | 
| 
       75 
83 
     | 
    
         | 
| 
       76 
84 
     | 
    
         
             
              protected
         
     | 
| 
       77 
85 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
              def  
     | 
| 
      
 86 
     | 
    
         
            +
              def fetch_pef
         
     | 
| 
       79 
87 
     | 
    
         | 
| 
       80 
88 
     | 
    
         
             
                fei = params[:id].split('!')
         
     | 
| 
       81 
89 
     | 
    
         
             
                wfid = fei.last
         
     | 
| 
         @@ -91,27 +99,22 @@ class RuoteKit::Application 
     | 
|
| 
       91 
99 
     | 
    
         
             
                [ process, expression, fei ]
         
     | 
| 
       92 
100 
     | 
    
         
             
              end
         
     | 
| 
       93 
101 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
              def  
     | 
| 
      
 102 
     | 
    
         
            +
              def fetch_expression_put_info
         
     | 
| 
       95 
103 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
                if request.content_type == 'application/json' 
     | 
| 
      
 104 
     | 
    
         
            +
                if request.content_type == 'application/json'
         
     | 
| 
       97 
105 
     | 
    
         | 
| 
       98 
106 
     | 
    
         
             
                  data = Rufus::Json.decode(request.body.read)
         
     | 
| 
       99 
     | 
    
         
            -
                  if exp = data['expression']; data = exp; end
         
     | 
| 
       100 
107 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
                   
     | 
| 
      
 108 
     | 
    
         
            +
                  data['expression'] ? data['expression'] : data
         
     | 
| 
       102 
109 
     | 
    
         | 
| 
       103 
110 
     | 
    
         
             
                else
         
     | 
| 
       104 
111 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
                   
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                     
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                   
     | 
| 
       111 
     | 
    
         
            -
                    o.tree = Rufus::Json.decode(tree)
         
     | 
| 
       112 
     | 
    
         
            -
                  end
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                  o
         
     | 
| 
      
 112 
     | 
    
         
            +
                  {
         
     | 
| 
      
 113 
     | 
    
         
            +
                    'state' => params[:state],
         
     | 
| 
      
 114 
     | 
    
         
            +
                    'breakpoint' => !!params[:breakpoint],
         
     | 
| 
      
 115 
     | 
    
         
            +
                    :fields => params[:fields] ? Rufus::Json.decode(params[:fields]) : nil,
         
     | 
| 
      
 116 
     | 
    
         
            +
                    :tree => params[:tree] ? Rufus::Json.decode(params[:tree]) : nil
         
     | 
| 
      
 117 
     | 
    
         
            +
                  }
         
     | 
| 
       115 
118 
     | 
    
         
             
                end
         
     | 
| 
       116 
119 
     | 
    
         
             
              end
         
     | 
| 
       117 
120 
     | 
    
         
             
            end
         
     |