'+' "+'
'+"
"+' '+" {{config.message}}"+"
"+'
This dialog will auto-close in {{config.closeTimeout}} seconds.'+"
"+' ")}])})();
3 |
--------------------------------------------------------------------------------
/client/src/lib/angular-draganddrop.min.js:
--------------------------------------------------------------------------------
1 | !function(e){"use strict";function a(){return"ondrag"in document.createElement("a")}function n(e){e.originalEvent&&(e.dataTransfer=e.originalEvent.dataTransfer),"undefined"!=typeof e.dataTransfer&&"none"===e.dataTransfer.dropEffect&&("copy"===e.dataTransfer.effectAllowed||"move"===e.dataTransfer.effectAllowed?e.dataTransfer.dropEffect=e.dataTransfer.effectAllowed:"copyMove"!==e.dataTransfer.effectAllowed&&"copymove"!==e.dataTransfer.effectAllowed||(e.dataTransfer.dropEffect=e.ctrlKey?"copy":"move"))}if(!a())return void e.module("ang-drag-drop",[]);var r=e.module("ang-drag-drop",[]);r.directive("uiDraggable",["$parse","$rootScope","$dragImage",function(a,r,t){return function(o,d,f){function i(e){e.originalEvent&&(e.dataTransfer=e.originalEvent.dataTransfer),setTimeout(function(){d.unbind("$destroy",i)},0);var t=f.dragChannel||"defaultchannel";if(r.$broadcast("ANGULAR_DRAG_END",e,t),n(e),e.dataTransfer&&"none"!==e.dataTransfer.dropEffect){if(f.onDropSuccess){var s=a(f.onDropSuccess);o.$evalAsync(function(){s(o,{$event:e})})}}else if(e.dataTransfer&&"none"===e.dataTransfer.dropEffect&&f.onDropFailure){var l=a(f.onDropFailure);o.$evalAsync(function(){l(o,{$event:e})})}d.removeClass(c)}function s(n,r){var t;n.originalEvent&&(n.dataTransfer=n.originalEvent.dataTransfer),t=a(r),o.$apply(function(){var a,r=t(o,{$event:n});r&&e.isString(r)&&(a=document.getElementById(r),a&&n.dataTransfer.setDragImage(a,0,0))})}function l(n){n.originalEvent&&(n.dataTransfer=n.originalEvent.dataTransfer);var l=!v||u.classList.contains(g);if(l){var p=f.dragChannel||"defaultchannel",$="";f.drag&&($=o.$eval(f.drag));var m=f.dragImage||null;d.addClass(c),d.bind("$destroy",i);var T=!(document.uniqueID||window.opera);if(m&&T){var h=a(f.dragImage);o.$apply(function(){var a=h(o,{$event:n});if(a&&(e.isString(a)&&(a=t.generate(a)),a.image)){var r=a.xOffset||0,d=a.yOffset||0;n.dataTransfer.setDragImage(a.image,r,d)}})}else f.dragImageElementId&&s(n,f.dragImageElementId);var b={x:n.offsetX,y:n.offsetY},D={data:$,channel:p,offset:b},y=e.toJson(D);n.dataTransfer.setData("text",y),n.dataTransfer.effectAllowed="copyMove",r.$broadcast("ANGULAR_DRAG_START",n,p,D)}else n.preventDefault()}var g,u,v=!1,c=f.draggingClass||"on-dragging";d.attr("draggable",!1),o.$watch(f.uiDraggable,function(e){e?(d.attr("draggable",e),d.bind("dragend",i),d.bind("dragstart",l)):(d.removeAttr("draggable"),d.unbind("dragend",i),d.unbind("dragstart",l))}),e.isString(f.dragHandleClass)&&(v=!0,g=f.dragHandleClass.trim()||"drag-handle",d.bind("mousedown",function(e){u=e.target}))}}]),r.directive("uiOnDrop",["$parse","$rootScope",function(a,r){return function(t,o,d){function f(e){for(var a={x:e.offsetX,y:e.offsetY},n=e.target;n!==o[0];)if(a.x=a.x+n.offsetLeft,a.y=a.y+n.offsetTop,n=n.offsetParent,!n)return null;return a}function i(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation();var n=a(d.uiOnDragOver);return t.$evalAsync(function(){n(t,{$event:e,$channel:p})}),!1}function s(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),c--,0===c&&(t.$evalAsync(function(){b(t,{$event:e,$channel:p})}),o.addClass(m),o.removeClass(T));var n=a(d.uiOnDragLeave);t.$evalAsync(function(){n(t,{$event:e,$channel:p})})}function l(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),0===c&&(t.$evalAsync(function(){h(t,{$event:e,$channel:p})}),o.removeClass(m),o.addClass(T)),c++;var n=a(d.uiOnDragEnter);t.$evalAsync(function(){n(t,{$event:e,$channel:p})}),r.$broadcast("ANGULAR_HOVER",$)}function g(r){r.originalEvent&&(r.dataTransfer=r.originalEvent.dataTransfer),r.preventDefault&&r.preventDefault(),r.stopPropagation&&r.stopPropagation();var i=r.dataTransfer.getData("text");i=e.fromJson(i);var s=f(r),l=s?{x:s.x-i.offset.x,y:s.y-i.offset.y}:null;n(r);var g=a(d.uiOnDrop);t.$evalAsync(function(){g(t,{$data:i.data,$event:r,$channel:i.channel,$position:l})}),o.removeClass(m),c=0}function u(e,a){if("*"===a)return!0;var n=new RegExp("(\\s|[,])+("+e+")(\\s|[,])+","i");return n.test(","+a+",")}function v(e){return e.originalEvent&&(e.dataTransfer=e.originalEvent.dataTransfer),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.dataTransfer.dropEffect="none",!1}var c=0,p=d.dropChannel||"defaultchannel",$="",m=d.dragEnterClass||"on-drag-enter",T=d.dragHoverClass||"on-drag-hover",h=a(d.onDragEnter),b=a(d.onDragLeave),D=r.$on("ANGULAR_DRAG_START",function(e,n,r,f){$=r;var c=!0;if(u(r,p)||(c=!1),c&&d.dropValidate){var T=a(d.dropValidate);c=T(t,{$drop:{scope:t,element:o},$event:n,$data:f.data,$channel:f.channel})}c?(o.bind("dragover",i),o.bind("dragenter",l),o.bind("dragleave",s),o.bind("drop",g),o.addClass(m)):(o.bind("dragover",v),o.bind("dragenter",v),o.bind("dragleave",v),o.bind("drop",v),o.removeClass(m))}),y=r.$on("ANGULAR_DRAG_END",function(){o.unbind("dragover",i),o.unbind("dragenter",l),o.unbind("dragleave",s),o.unbind("drop",g),o.removeClass(T),o.removeClass(m),o.unbind("dragover",v),o.unbind("dragenter",v),o.unbind("dragleave",v),o.unbind("drop",v)});t.$on("$destroy",function(){D(),y()}),d.$observe("dropChannel",function(e){e&&(p=e)})}}]),r.constant("$dragImageConfig",{height:20,width:200,padding:10,font:"bold 11px Arial",fontColor:"#eee8d5",backgroundColor:"#93a1a1",xOffset:0,yOffset:0}),r.service("$dragImage",["$dragImageConfig",function(a){function n(e,a,n){var t=e.measureText(a).width;if(t
n.width;)a=a.substring(0,a.length-1),t=e.measureText(a+r).width;return a+r}var r="…";this.generate=function(r,t){var o=e.extend({},a,t||{}),d=document.createElement("canvas");d.height=o.height,d.width=o.width;var f=d.getContext("2d");f.fillStyle=o.backgroundColor,f.fillRect(0,0,o.width,o.height),f.font=o.font,f.fillStyle=o.fontColor;var i=n(f,r,o);f.fillText(i,4,o.padding+4);var s=new Image;return s.src=d.toDataURL(),{image:s,xOffset:o.xOffset,yOffset:o.yOffset}}}])}(angular);
2 |
--------------------------------------------------------------------------------
/client/src/lib/angular-sanitize.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | AngularJS v1.6.0-rc.0
3 | (c) 2010-2016 Google, Inc. http://angularjs.org
4 | License: MIT
5 | */
6 | (function(s,g){'use strict';function H(g){var l=[];t(l,A).chars(g);return l.join("")}var B=g.$$minErr("$sanitize"),C,l,D,E,q,A,F,t;g.module("ngSanitize",[]).provider("$sanitize",function(){function k(a,e){var b={},c=a.split(","),h;for(h=0;h/g,">")}function x(a){for(;a;){if(a.nodeType===s.Node.ELEMENT_NODE)for(var e=a.attributes,b=0,c=e.length;b"))},
10 | end:function(a){a=q(a);b||!0!==v[a]||!0===y[a]||(c(""),c(a),c(">"));a==b&&(b=!1)},chars:function(a){b||c(G(a))}}};var J=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,K=/([^#-~ |!])/g,y=k("area,br,col,hr,img,wbr"),d=k("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),r=k("rp,rt"),p=l({},r,d),d=l({},d,k("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),r=l({},r,k("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),
11 | w=k("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),z=k("script,style"),v=l({},y,d,r,p),n=k("background,cite,href,longdesc,src,xlink:href"),p=k("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),
12 | r=k("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
13 | !0),m=l({},n,r,p),f;(function(a){if(a.document&&a.document.implementation)a=a.document.implementation.createHTMLDocument("inert");else throw B("noinert");var e=(a.documentElement||a.getDocumentElement()).getElementsByTagName("body");1===e.length?f=e[0]:(e=a.createElement("html"),f=a.createElement("body"),e.appendChild(f),a.appendChild(e))})(s)});g.module("ngSanitize").filter("linky",["$sanitize",function(k){var l=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
14 | q=/^mailto:/i,x=g.$$minErr("linky"),u=g.isDefined,s=g.isFunction,t=g.isObject,y=g.isString;return function(d,g,p){function w(a){a&&m.push(H(a))}function z(a,b){var c,d=v(a);m.push("');w(b);m.push("")}if(null==d||""===d)return d;if(!y(d))throw x("notstring",d);for(var v=s(p)?p:t(p)?function(){return p}:function(){return{}},n=d,m=[],f,a;d=n.match(l);)f=d[0],d[2]||
15 | d[4]||(f=(d[3]?"http://":"mailto:")+f),a=d.index,w(n.substr(0,a)),z(f,d[0].replace(q,"")),n=n.substring(a+d[0].length);w(n);return k(m.join(""))}}])})(window,window.angular);
16 | //# sourceMappingURL=angular-sanitize.min.js.map
17 |
--------------------------------------------------------------------------------
/client/src/lib/angular-scrollspy.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2014 Magnús Örn Gylfason
3 | Licence: MIT
4 | */
5 | !function(t){"use strict";function e(){return o}var n=t.module("ngScrollSpy",[]);n.service("ScrollSpy",["$window",function(e){var n,o=function(t){var e=(t.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,t.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,void 0!==t.pageXOffset),n="CSS1Compat"===(document.compatMode||""),o=(e?t.pageXOffset:n?document.documentElement.scrollLeft:document.body.scrollLeft,e?t.pageYOffset:n?document.documentElement.scrollTop:document.body.scrollTop,{width:t.innerWidth,height:t.innerHeight,maxWidth:t.document.body.scrollWidth,maxHeight:t.document.body.scrollHeight,posX:t.scrollX||t.pageXOffset||t.document.documentElement.scrollLeft,posY:t.scrollY||t.pageYOffset||t.document.documentElement.scrollTop});return o.posX<0?(o.posX=0,o.overscrollLeft=!0):o.posX+o.width>o.maxWidth&&(o.posX=o.maxWidth-o.width,o.overscrollRight=!0),o.posY<0?(o.posY=0,o.overscrollTop=!0):o.posY+o.height>o.maxHeight&&(o.posY=o.maxHeight-o.height,o.overscrollBottom=!0),o.hasOverscroll=o.overscrollTop||o.overscrollBottom||o.overscrollLeft||o.overscrollRight,o},i=function(e,n){if(!e||!n)return t.extend({isEqual:!1,velocityX:0,velocityY:0},n);var o={posX:n.posX-e.posX,posY:n.posY-e.posY,width:n.width-e.width,height:n.height-e.height,maxWidth:n.maxWidth-e.maxWidth,maxHeight:n.maxHeight-e.maxHeight};return n.width>0&&(o.velocityX=o.posX/n.width),n.height>0&&(o.velocityY=o.posY/n.height),o.isEqual=!(0!==o.posX||0!==o.posY||0!==o.width||0!==o.height||0!==o.maxWidth||0!==o.maxHeight),o},r={},l=function(t){var l=o(e),s=i(n,l);if(!s.isEqual||l.hasOverscroll||t){for(var c in r){var a=r[c].cond;(a(l,s)||t)&&r[c].handler(l,s)}n=l}};t.element(e).on("scroll",l);var s=this,c=0;this.trigger=function(){this.isForced=!0,l(!0),this.isForced=!1},this.addHandler=function(t,e){return r[c]={cond:t,handler:e},c++,c-1},this.removeHandler=function(t){delete r[t]},this.onScroll=function(t){return s.addHandler(function(){return!0},function(e,n){t(e,n)})},this.onXScroll=function(t){return s.addHandler(function(t,e){return 0!==e.posX},function(e,n){t(e.posX,n.posX,e,n)})},this.onYScroll=function(t){return s.addHandler(function(t,e){return 0!==e.posY},function(e,n){t(e.posY,n.posY,e,n)})},this.onOverscrollHorz=function(t){return s.addHandler(function(t,e){return t.overscrollLeft||t.overscrollRight},t)},this.onOverscrollLeft=function(t){return s.addHandler(function(t,e){return t.overscrollLeft},t)},this.onOverscrollRight=function(t){return s.addHandler(function(t,e){return t.overscrollRight},t)},this.onOverscrollVert=function(t){return s.addHandler(function(t,e){return t.overscrollTop||t.overscrollBottom},t)},this.onOverscrollTop=function(t){return s.addHandler(function(t,e){return t.overscrollTop},t)},this.onOverscrollBottom=function(t){return s.addHandler(function(t,e){return t.overscrollBottom},t)}}]),n.directive("affix",["ScrollSpy",function(e){var n,o=function(t){if(!t.data("$ngScrollSpy.placeholder")){var e=t.clone();t.data("$ngScrollSpy.placeholder",e)}return t.data("$ngScrollSpy.placeholder")},i=function(t,e,n,i,r){var l=t(r[0].getBoundingClientRect());l!==e&&(l?(i.placeholder&&r.after(o(r)),r.addClass(n)):(i.placeholder&&o(r).detach(),r.removeClass(n)))},r=function(o,r,l,s){var c,a=!1,u=!1,f=!1;l=t.extend({offset:0,placeholder:!1},l),"top"===o?n=e.onYScroll(function(t){u=a,i(function(e){return a?a=c<=t+l.offset:e.top<=l.offset?(c=e.top=t:n.bottom>=o.height?(c=e.isForced&&0===t?t+n.bottom-o.height-n.height:t+n.bottom-o.height,a=!0):!1},u,r,l,s)})):"left"===o?n=e.onXScroll(function(t){u=a,i(function(e){return a?a=t>=c:e.left<=0?(c=e.left<0?t+e.left:t,a=!0):!1},u,r,l,s)}):"right"===o&&(f=!0,n=e.onXScroll(function(t,n,o){u=a,i(function(n){return a?a=c>=t:n.right>=o.width?(c=e.isForced&&0===t?t+n.right-o.width-n.width:t+n.right-o.width,a=!0):!1},u,r,l,s)})),f&&e.trigger()};return{restrict:"A",scope:{affix:"@",affixClass:"@",affixOptions:"@"},link:function(t,o,i,l){t.affix=t.affix||"top",t.affixClass=t.affixClass||"affix",t.affixOptions=t.affixOptions?t.$eval(t.affixOptions):{},r(t.affix,t.affixClass,t.affixOptions,o),t.$on("destroy",function(){e.removeHandler(n)})}}}]);var o={onRun:null,state:null,store:function(t){for(var e in t)this[e]=t[e];this.state=!0,this.run()},builder:null,setBuilder:function(t){this.builder=t,this.run()},run:function(){this.builder&&this.state&&(this.builder(),this.builder=null,this.state=null,this.onRun&&(this.onRun(),this.onRun=null))}};n.directive("pageitems",["ScrollSpy",function(n){var o=function(o,i,r){if(t.isDefined(o.selector)){o.spyElems=i[0].getElementsByClassName(o.selector),o.spies={},e().onRun=function(){o.spies[o.spyElems[0].id].set()},e().store({topMargin:function(){return 0|o.topmargin},addSpy:function(t){o.spies[t.id]=t},getSpy:function(t){return o.spies[t]},items:function(){return o.spyElems}});var l=o.spyElems,s=0|o.topmargin,c=n.onYScroll(function(t,e,i){for(var r=null,a=o.spies,u=0;u=h?(d.pos=h,null===r&&(r=d),r.pos=i.maxHeight&&(r=a[l[l.length-1].id]),r.set(),o.$on("destroy",function(){n.removeHandler(c)})})}};return{restrict:"A",scope:{selector:"@",topmargin:"@"},link:o}}]),n.directive("pagemenu",["$compile","$location","$anchorScroll",function(t,n,o){var i=function(i,r){for(var l,s=[],c=[],a=function(t){for(var e={link:t.id,text:t.textContent||t.innerText,parent:""},n=t.tagName,o=0;o=0&&n!=s[r];r--);if(0>r)s.push(n),e.push=!0,c.push(l);else for(e.pop=i-1-r;s.length>r+1;)s.pop(),c.pop()}return c.length>0&&(e.parent=c[c.length-1]),l=e.link,e},u=e().items(),f="",d=0;d';else if(h.pop)for(var p=0;p";else 0!==d&&(f+="");f+='',f+='',f+=h.text,f+=""}f+="",r.append(t(f)(i)),r.on("click",function(t){var i=t.target.hash.substring(1);n.hash(i),o(),0!==e().topMargin()&&setTimeout(function(){window.scrollTo(window.pageXOffset,window.pageYOffset-e().topMargin())},0)})};return{restrict:"E",replace:!0,template:'',link:function(t,n){e().setBuilder(function(){i(t,n)})}}}]),n.directive("pagemenuspy",["$location","$anchorScroll",function(t,n){return{restrict:"A",link:function(t,n,o){e().addSpy({id:o.pagemenuspy,parent:o.parent,set:function(){n.addClass("active");var t=e().getSpy(this.parent);t&&t.set()},clear:function(){n.removeClass("active")}})}}}])}(angular);
6 |
--------------------------------------------------------------------------------
/client/src/lib/js.cookie.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * JavaScript Cookie v2.1.2
3 | * https://github.com/js-cookie/js-cookie
4 | *
5 | * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
6 | * Released under the MIT license
7 | */
8 | ;(function (factory) {
9 | if (typeof define === 'function' && define.amd) {
10 | define(factory);
11 | } else if (typeof exports === 'object') {
12 | module.exports = factory();
13 | } else {
14 | var OldCookies = window.Cookies;
15 | var api = window.Cookies = factory();
16 | api.noConflict = function () {
17 | window.Cookies = OldCookies;
18 | return api;
19 | };
20 | }
21 | }(function () {
22 | function extend () {
23 | var i = 0;
24 | var result = {};
25 | for (; i < arguments.length; i++) {
26 | var attributes = arguments[ i ];
27 | for (var key in attributes) {
28 | result[key] = attributes[key];
29 | }
30 | }
31 | return result;
32 | }
33 |
34 | function init (converter) {
35 | function api (key, value, attributes) {
36 | var result;
37 | if (typeof document === 'undefined') {
38 | return;
39 | }
40 |
41 | // Write
42 |
43 | if (arguments.length > 1) {
44 | attributes = extend({
45 | path: '/'
46 | }, api.defaults, attributes);
47 |
48 | if (typeof attributes.expires === 'number') {
49 | var expires = new Date();
50 | expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
51 | attributes.expires = expires;
52 | }
53 |
54 | try {
55 | result = JSON.stringify(value);
56 | if (/^[\{\[]/.test(result)) {
57 | value = result;
58 | }
59 | } catch (e) {}
60 |
61 | if (!converter.write) {
62 | value = encodeURIComponent(String(value))
63 | .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
64 | } else {
65 | value = converter.write(value, key);
66 | }
67 |
68 | key = encodeURIComponent(String(key));
69 | key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
70 | key = key.replace(/[\(\)]/g, escape);
71 |
72 | return (document.cookie = [
73 | key, '=', value,
74 | attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE
75 | attributes.path && '; path=' + attributes.path,
76 | attributes.domain && '; domain=' + attributes.domain,
77 | attributes.secure ? '; secure' : ''
78 | ].join(''));
79 | }
80 |
81 | // Read
82 |
83 | if (!key) {
84 | result = {};
85 | }
86 |
87 | // To prevent the for loop in the first place assign an empty array
88 | // in case there are no cookies at all. Also prevents odd result when
89 | // calling "get()"
90 | var cookies = document.cookie ? document.cookie.split('; ') : [];
91 | var rdecode = /(%[0-9A-Z]{2})+/g;
92 | var i = 0;
93 |
94 | for (; i < cookies.length; i++) {
95 | var parts = cookies[i].split('=');
96 | var cookie = parts.slice(1).join('=');
97 |
98 | if (cookie.charAt(0) === '"') {
99 | cookie = cookie.slice(1, -1);
100 | }
101 |
102 | try {
103 | var name = parts[0].replace(rdecode, decodeURIComponent);
104 | cookie = converter.read ?
105 | converter.read(cookie, name) : converter(cookie, name) ||
106 | cookie.replace(rdecode, decodeURIComponent);
107 |
108 | if (this.json) {
109 | try {
110 | cookie = JSON.parse(cookie);
111 | } catch (e) {}
112 | }
113 |
114 | if (key === name) {
115 | result = cookie;
116 | break;
117 | }
118 |
119 | if (!key) {
120 | result[name] = cookie;
121 | }
122 | } catch (e) {}
123 | }
124 |
125 | return result;
126 | }
127 |
128 | api.set = api;
129 | api.get = function (key) {
130 | return api(key);
131 | };
132 | api.getJSON = function () {
133 | return api.apply({
134 | json: true
135 | }, [].slice.call(arguments));
136 | };
137 | api.defaults = {};
138 |
139 | api.remove = function (key, attributes) {
140 | api(key, '', extend(attributes, {
141 | expires: -1
142 | }));
143 | };
144 |
145 | api.withConverter = init;
146 |
147 | return api;
148 | }
149 |
150 | return init(function () {});
151 | }));
152 |
--------------------------------------------------------------------------------
/client/src/lib/sigma.customEdgeShapes.min.js:
--------------------------------------------------------------------------------
1 | !function(){"use strict";sigma.utils.pkg("sigma.canvas.edgehovers"),sigma.canvas.edgehovers.dashed=function(a,b,c,d,e){var f=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,g=e("prefix")||"",h=a[g+"size"]||1,i=e("edgeColor"),j=e("defaultNodeColor"),k=e("defaultEdgeColor");if(!f)switch(i){case"source":f=b.color||j;break;case"target":f=c.color||j;break;default:f=k}f="edge"===e("edgeHoverColor")?a.hover_color||f:a.hover_color||e("defaultEdgeHoverColor")||f,h*=e("edgeHoverSizeRatio"),d.save(),d.setLineDash([8,3]),d.strokeStyle=f,d.lineWidth=h,d.beginPath(),d.moveTo(b[g+"x"],b[g+"y"]),d.lineTo(c[g+"x"],c[g+"y"]),d.stroke(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edgehovers"),sigma.canvas.edgehovers.dotted=function(a,b,c,d,e){var f=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,g=e("prefix")||"",h=a[g+"size"]||1,i=e("edgeColor"),j=e("defaultNodeColor"),k=e("defaultEdgeColor");if(!f)switch(i){case"source":f=b.color||j;break;case"target":f=c.color||j;break;default:f=k}f="edge"===e("edgeHoverColor")?a.hover_color||f:a.hover_color||e("defaultEdgeHoverColor")||f,h*=e("edgeHoverSizeRatio"),d.save(),d.setLineDash([2]),d.strokeStyle=f,d.lineWidth=h,d.beginPath(),d.moveTo(b[g+"x"],b[g+"y"]),d.lineTo(c[g+"x"],c[g+"y"]),d.stroke(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edgehovers"),sigma.canvas.edgehovers.parallel=function(a,b,c,d,e){var f,g,h=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,i=e("prefix")||"",j=a[i+"size"]||1,k=e("edgeColor"),l=e("defaultNodeColor"),m=e("defaultEdgeColor"),n=b[i+"x"],o=b[i+"y"],p=c[i+"x"],q=c[i+"y"],r=sigma.utils.getDistance(n,o,p,q);if(!h)switch(k){case"source":h=b.color||l;break;case"target":h=c.color||l;break;default:h=m}h="edge"===e("edgeHoverColor")?a.hover_color||h:a.hover_color||e("defaultEdgeHoverColor")||h,j*=e("edgeHoverSizeRatio"),f=sigma.utils.getCircleIntersection(n,o,j,p,q,r),g=sigma.utils.getCircleIntersection(p,q,j,n,o,r),d.save(),d.strokeStyle=h,d.lineWidth=j,d.beginPath(),d.moveTo(f.xi,f.yi),d.lineTo(g.xi_prime,g.yi_prime),d.closePath(),d.stroke(),d.beginPath(),d.moveTo(f.xi_prime,f.yi_prime),d.lineTo(g.xi,g.yi),d.closePath(),d.stroke(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edgehovers"),sigma.canvas.edgehovers.tapered=function(a,b,c,d,e){var f=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,g=e("prefix")||"",h=a[g+"size"]||1,i=e("edgeColor"),g=e("prefix")||"",j=e("defaultNodeColor"),k=e("defaultEdgeColor"),l=b[g+"x"],m=b[g+"y"],n=c[g+"x"],o=c[g+"y"],p=sigma.utils.getDistance(l,m,n,o);if(!f)switch(i){case"source":f=b.color||j;break;case"target":f=c.color||j;break;default:f=k}f="edge"===e("edgeHoverColor")?a.hover_color||f:a.hover_color||e("defaultEdgeHoverColor")||f,h*=e("edgeHoverSizeRatio");var q=sigma.utils.getCircleIntersection(l,m,h,n,o,p);d.save(),d.globalAlpha=.65,d.fillStyle=f,d.beginPath(),d.moveTo(n,o),d.lineTo(q.xi,q.yi),d.lineTo(q.xi_prime,q.yi_prime),d.closePath(),d.fill(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edges"),sigma.canvas.edges.dashed=function(a,b,c,d,e){var f=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,g=e("prefix")||"",h=a[g+"size"]||1,i=e("edgeColor"),j=e("defaultNodeColor"),k=e("defaultEdgeColor");if(!f)switch(i){case"source":f=b.color||j;break;case"target":f=c.color||j;break;default:f=k}d.save(),d.strokeStyle=a.active?"edge"===e("edgeActiveColor")?f||k:e("defaultEdgeActiveColor"):f,d.setLineDash([8,3]),d.lineWidth=h,d.beginPath(),d.moveTo(b[g+"x"],b[g+"y"]),d.lineTo(c[g+"x"],c[g+"y"]),d.stroke(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edges"),sigma.canvas.edges.dotted=function(a,b,c,d,e){var f=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,g=e("prefix")||"",h=a[g+"size"]||1,i=e("edgeColor"),j=e("defaultNodeColor"),k=e("defaultEdgeColor");if(!f)switch(i){case"source":f=b.color||j;break;case"target":f=c.color||j;break;default:f=k}d.save(),d.strokeStyle=a.active?"edge"===e("edgeActiveColor")?f||k:e("defaultEdgeActiveColor"):f,d.setLineDash([2]),d.lineWidth=h,d.beginPath(),d.moveTo(b[g+"x"],b[g+"y"]),d.lineTo(c[g+"x"],c[g+"y"]),d.stroke(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edges"),sigma.canvas.edges.parallel=function(a,b,c,d,e){var f,g,h=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,i=e("prefix")||"",j=a[i+"size"]||1,k=e("edgeColor"),l=e("defaultNodeColor"),m=e("defaultEdgeColor"),n=b[i+"x"],o=b[i+"y"],p=c[i+"x"],q=c[i+"y"],r=sigma.utils.getDistance(n,o,p,q);if(!h)switch(k){case"source":h=b.color||l;break;case"target":h=c.color||l;break;default:h=m}f=sigma.utils.getCircleIntersection(n,o,j,p,q,r),g=sigma.utils.getCircleIntersection(p,q,j,n,o,r),d.save(),d.strokeStyle=a.active?"edge"===e("edgeActiveColor")?h||m:e("defaultEdgeActiveColor"):h,d.lineWidth=j,d.beginPath(),d.moveTo(f.xi,f.yi),d.lineTo(g.xi_prime,g.yi_prime),d.closePath(),d.stroke(),d.beginPath(),d.moveTo(f.xi_prime,f.yi_prime),d.lineTo(g.xi,g.yi),d.closePath(),d.stroke(),d.restore()}}(),function(){"use strict";sigma.utils.pkg("sigma.canvas.edges"),sigma.canvas.edges.tapered=function(a,b,c,d,e){var f=a.active?a.active_color||e("defaultEdgeActiveColor"):a.color,g=e("prefix")||"",h=a[g+"size"]||1,i=e("edgeColor"),g=e("prefix")||"",j=e("defaultNodeColor"),k=e("defaultEdgeColor"),l=b[g+"x"],m=b[g+"y"],n=c[g+"x"],o=c[g+"y"],p=sigma.utils.getDistance(l,m,n,o);if(!f)switch(i){case"source":f=b.color||j;break;case"target":f=c.color||j;break;default:f=k}var q=sigma.utils.getCircleIntersection(l,m,h,n,o,p);d.save(),d.fillStyle=a.active?"edge"===e("edgeActiveColor")?f||k:e("defaultEdgeActiveColor"):f,d.globalAlpha=.65,d.beginPath(),d.moveTo(n,o),d.lineTo(q.xi,q.yi),d.lineTo(q.xi_prime,q.yi_prime),d.closePath(),d.fill(),d.restore()}}();
--------------------------------------------------------------------------------
/client/src/lib/sigma.customShapes.min.js:
--------------------------------------------------------------------------------
1 | (function(){"use strict";var a=[],b=function(b,c,d){a.push({name:b,drawShape:c,drawBorder:d})},c=function(){return a},d=function(a){return function(b,c,d,e,f,g){g.fillStyle=f,g.beginPath(),a(b,c,d,e,g),g.closePath(),g.fill()}},e=function(a){return function(b,c,d,e,f,g){g.strokeStyle=f,g.lineWidth=e/5,g.beginPath(),a(b,c,d,e,g),g.closePath(),g.stroke()}},f=function(a,b,c,d,e){var f=45*Math.PI/180;e.moveTo(b+d*Math.sin(f),c-d*Math.cos(f));for(var g=1;4>g;g++)e.lineTo(b+Math.sin(f+2*Math.PI*g/4)*d,c-Math.cos(f+2*Math.PI*g/4)*d)};b("square",d(f),e(f));var g=function(a,b,c,d,e){e.arc(b,c,d,0,2*Math.PI,!0)};b("circle",d(g),e(g));var h=function(a,b,c,d,e){e.moveTo(b-d,c),e.lineTo(b,c-d),e.lineTo(b+d,c),e.lineTo(b,c+d)};b("diamond",d(h),e(h));var i=function(a,b,c,d,e){var f=a.cross&&a.cross.lineWeight||5;e.moveTo(b-d,c-f),e.lineTo(b-d,c+f),e.lineTo(b-f,c+f),e.lineTo(b-f,c+d),e.lineTo(b+f,c+d),e.lineTo(b+f,c+f),e.lineTo(b+d,c+f),e.lineTo(b+d,c-f),e.lineTo(b+f,c-f),e.lineTo(b+f,c-d),e.lineTo(b-f,c-d),e.lineTo(b-f,c-f)};b("cross",d(i),e(i));var j=function(a,b,c,d,e){var f=a.equilateral&&a.equilateral.numPoints||5,g=(a.equilateral&&a.equilateral.rotate||0)*Math.PI/180,h=d;e.moveTo(b+h*Math.sin(g),c-h*Math.cos(g));for(var i=1;f>i;i++)e.lineTo(b+Math.sin(g+2*Math.PI*i/f)*h,c-Math.cos(g+2*Math.PI*i/f)*h)};b("equilateral",d(j),e(j));var k=function(a,b,c,d,e){var f=a.star&&a.star.numPoints||5,g=a.star&&a.star.innerRatio||.5,h=d,i=d*g,j=Math.PI/f;e.moveTo(b,c-d);for(var k=0;f>k;k++)e.lineTo(b+Math.sin(j+2*Math.PI*k/f)*i,c-Math.cos(j+2*Math.PI*k/f)*i),e.lineTo(b+Math.sin(2*Math.PI*(k+1)/f)*h,c-Math.cos(2*Math.PI*(k+1)/f)*h)};b("star",d(k),e(k));var l=function(a,b,c,d,e,f){f.fillStyle="yellow",f.beginPath(),f.arc(b,c,d,1.25*Math.PI,0,!1),f.arc(b,c,d,0,.75*Math.PI,!1),f.lineTo(b,c),f.closePath(),f.fill(),f.fillStyle="white",f.strokeStyle="black",f.beginPath(),f.arc(b+d/3,c-d/3,d/4,0,2*Math.PI,!1),f.closePath(),f.fill(),f.stroke(),f.fillStyle="black",f.beginPath(),f.arc(b+4*d/9,c-d/3,d/8,0,2*Math.PI,!1),f.closePath(),f.fill()};b("pacman",l,null),this.ShapeLibrary={enumerate:c,version:"0.1"}}).call(this),function(a){"use strict";if("undefined"==typeof sigma)throw"sigma is not declared";if("undefined"==typeof ShapeLibrary)throw"ShapeLibrary is not declared";sigma.utils.pkg("sigma.canvas.nodes"),sigma.utils.pkg("sigma.svg.nodes");var b=a,c={},d=function(a){b=a},e=function(a,d,e,f,g){if(b&&a.image&&a.image.url){var h=a.image.url,i=a.image.h||1,j=a.image.w||1,k=a.image.scale||1,l=a.image.clip||1,m=c[h];m||(m=document.createElement("IMG"),m.src=h,m.status="loading",m.onerror=function(){console.log("error loading",h),m.status="error"},m.onload=function(){console.log("redraw on image load",h),m.status="ok",b.refresh()},c[h]=m);var n=i>j?j/i:1,o=j>i?i/j:1,p=f*k;g.save(),g.beginPath(),g.arc(d,e,f*l,0,2*Math.PI,!0),g.closePath(),g.clip(),"ok"===m.status&&g.drawImage(m,d+Math.sin(-0.7855)*p*n,e-Math.cos(-0.7855)*p*o,p*n*2*Math.sin(-0.7855)*-1,p*o*2*Math.cos(-0.7855)),g.restore()}},f=function(a,c,d){if(b&&a.image&&a.image.url){{var e=document.createElementNS(d("xmlns"),"circle"),f=document.createElementNS(d("xmlns"),"clipPath"),g=d("classPrefix")+"-clip-path-"+a.id,h=document.createElementNS(d("xmlns"),"defs"),i=document.createElementNS(d("xmlns"),"image");a.image.url}f.setAttributeNS(null,"id",g),f.appendChild(e),h.appendChild(f);var j=/MSIE [5-9]/.test(navigator.userAgent)?"":document.location.href;j=j.split("#")[0],i.setAttributeNS(null,"class",d("classPrefix")+"-node-image"),i.setAttributeNS(null,"clip-path","url("+j+"#"+g+")"),i.setAttributeNS(null,"pointer-events","none"),i.setAttributeNS("http://www.w3.org/1999/xlink","href",a.image.url),c.appendChild(h),c.appendChild(i)}},g=function(a,b,c){sigma.canvas.nodes[a]=function(a,d,f){var g=f("prefix")||"",h=a[g+"size"],i=a.color||f("defaultNodeColor"),j=a.borderColor||i,k=a[g+"x"],l=a[g+"y"];d.save(),b&&b(a,k,l,h,i,d),c&&c(a,k,l,h,j,d),e(a,k,l,h,d),d.restore()},sigma.svg.nodes[a]={create:function(a,b){var c=document.createElementNS(b("xmlns"),"g"),d=document.createElementNS(b("xmlns"),"circle");return c.setAttributeNS(null,"class",b("classPrefix")+"-node-group"),c.setAttributeNS(null,"data-node-id",a.id),d.setAttributeNS(null,"data-node-id",a.id),d.setAttributeNS(null,"class",b("classPrefix")+"-node"),d.setAttributeNS(null,"fill",a.color||b("defaultNodeColor")),c.appendChild(d),f(a,c,b),c},update:function(a,b,c){for(var d=c("classPrefix"),e=a.image.clip||1,f=a.image.h||1,g=a.image.w||1,h=c("prefix")||"",i=a.image.scale||1,j=a[h+"size"],k=a[h+"x"],l=a[h+"y"],m=i*j,n=f>g?g/f:1,o=g>f?f/g:1,p=0,q=b.childNodes;p
11 |
12 |
13 | ################## BEGIN INSTALLATION ######################
14 | #INSTALL THE DEPENDENCIES
15 | RUN apt-get update \
16 | && apt-get install --no-install-recommends -y wget libapache2-mod-wsgi python-flask python-requests unzip python-pip \
17 | && apt-get clean \
18 | && pip install bioblend==0.10.0 \
19 | && pip install fpdf
20 |
21 | #DOWNLOAD AND INSTALL THE APP CODE
22 | RUN wget -O /tmp/galaksio.zip https://github.com/sgbc/galaksio/archive/master.zip \
23 | #RUN wget -O /tmp/galaksio.zip https://github.com/OskarSLU/galaksio/archive/v0.3.zip \
24 | && unzip /tmp/galaksio.zip -d /tmp/galaksio \
25 | && mv /tmp/galaksio/*/* /usr/local/apache2/htdocs/ \
26 | && rm -r /tmp/galaksio/ \
27 | && rm /tmp/galaksio.zip \
28 | && sed -i 's/application\.launch/#application\.launch/' /usr/local/apache2/htdocs/server/launch_server.py \
29 | && sed -i 's/isDocker = False/isDocker = True/' /usr/local/apache2/htdocs/server/launch_server.py \
30 | && sed -i 's/8081/80/' /usr/local/apache2/htdocs/server/resources/example_serverconf.cfg
31 |
32 | COPY configs/entrypoint.sh /usr/bin/entrypoint.sh
33 | COPY configs/httpd.conf /usr/local/apache2/conf/httpd.conf
34 | COPY configs/galaksio.wsgi /usr/local/apache2/htdocs/galaksio.wsgi
35 |
36 | RUN chmod +x /usr/bin/entrypoint.sh \
37 | && chown -R www-data:www-data /usr/local/apache2/htdocs/
38 |
39 | ##################### INSTALLATION END #####################
40 |
41 | VOLUME ["/usr/local/apache2/htdocs/server/conf/"]
42 |
43 | EXPOSE 80
44 |
45 | ENTRYPOINT ["/usr/bin/entrypoint.sh"]
46 |
--------------------------------------------------------------------------------
/docker/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Rafa Hernandez
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/docker/README.md:
--------------------------------------------------------------------------------
1 | Galaksio Docker Image
2 | ===================
3 | The [Galaksio](https://github.com/tklingstrom/galaksio) [Docker](http://www.docker.io) Image is an easy distributable full-fledged Galaksio installation.
4 |
5 | Galaksio is a web application that simplifies the usage of the Galaxy bioinformatics platform (https://usegalaxy.eu/).
6 | Galaksio has been developed as part of the [B3Africa Project](http://www.b3africa.org/), which has received funding from the European Union’s Horizon 2020 research and innovation programme.
7 |
8 | - Citation:
9 | > Klingström T, Hernández-de-Diego R, and Bongcam-Rudloff E. Galaksio, a user friendly workflow-centric front end for Galaxy. EMBnet.journal (in revision).
10 |
11 |
12 | # Build the image
13 | The docker image for Galaksio can be found in the [docker hub](https://hub.docker.com/r/tklingstrom/galaksio/). However, you can rebuild is manually by running **docker build**.
14 |
15 | ```sh
16 | sudo docker build -t galaksio .
17 | ```
18 | Note that the current working directory must contain the Dockerfile file.
19 |
20 | ## Running the Container
21 | The recommended way for running your Galaksio docker is using the provided **docker-compose** script that resolves the dependencies and make easier to customize your instance. Alternatively you can run the docker manually.
22 |
23 | ## Quickstart
24 | This procedure starts Galaksio in a standard virtualised environment.
25 |
26 | - Install [docker](https://docs.docker.com/engine/installation/) for your system if not previously done.
27 | - `docker run -it -p 8081:80 tklingstrom/galaksio`
28 | - Galaksio will be available at [http://localhost:8081/](http://localhost:8081/)
29 |
30 | ## Using the docker-compose file
31 | Launching your Galaksio docker is really easy using docker-compose. Just download the *docker-compose.yml* file and customize the content according to your needs. There are few settings that should be change in the file, follow the instructions in the file to configure your container.
32 | To launch the container, type:
33 | ```sh
34 | sudo docker-compose up
35 | ```
36 | Using the *-d* flag you can launch the containers in background.
37 |
38 | In case you do not have the Container stored locally, docker will download it for you.
39 |
40 |
41 | ## Run manually
42 | You can run manually your containers using the following commands:
43 |
44 | ```sh
45 | sudo docker run --name galaksio -v /your/data/location/galaksio-data:/usr/local/apache2/htdocs/server/conf/ -e ADMIN_ACCOUNTS=youradminuser -e GALAXY_SERVER=https://usegalaxy.eu -e GALAXY_SERVER_URL=https://usegalaxy.eu -p 8081:80 -d tklingstrom/galaksio
46 | ```
47 |
48 | Please note that the name is likely to change as we move to an organizatio repo at Dockerhub hosted by SLU Global Bioinformatics Centre
49 |
50 | In case you do not have the Container stored locally, docker will download it for you.
51 |
52 | A short description of the parameters would be:
53 | - `docker run` will run the container for you.
54 |
55 | - `-p 8081:80` will make the port 80 (inside of the container) available on port 8081 on your host.
56 | Inside the container an Apache webserver is running on port 80 and that port can be bound to a local port on your host computer.
57 |
58 | - `tklingstrom/galaksio` is the Image name, which can be found in the [docker hub](https://hub.docker.com/r/tklingstrom/galaksio/). Please note that the name is likely to change as we move to an organizatio repo at Dockerhub hosted by SLU Global Bioinformatics Centre.
59 |
60 | - `-d` will start the docker container in daemon mode.
61 |
62 | - `-e VARIABLE_NAME=VALUE` changes the default value for a system variable.
63 | The Galaksio docker accepts the following variables that modify the behavior of the system in the docker.
64 |
65 | - **ADMIN_ACCOUNTS**, the email for the admin accounts. Using these accounts you can access to the admin page (e.g. [http://yourserver:8081/admin](http://yourserver:8081/admin)) and manipulate the settings for the system.
66 | - **GALAXY_SERVER**, the internal URL for the Galaxy server used by this Galaksio instance.
67 | - **GALAXY_SERVER_URL**, the external URL for the Galaxy server used by this Galaksio instance (usually be the same that above).
68 | - **MAX_CONTENT_LENGTH**, max size (in MB) for uploaded files (eg. a value of 300 will be 300MB).
69 |
70 | # First configuration for Galaksio
71 | By default Galaksio is configured to work with the official [Galaxy](https://usegalaxy.org) instance.This and other options can be customized through the web application. The first time that you access to your Galaksio instance you will need to configure some of the main settings.
72 |
73 | # Version log
74 | - v0.3 September 2017: First version of the docker.
75 |
--------------------------------------------------------------------------------
/docker/configs/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Apache gets grumpy about PID files pre-existing
4 | rm -f /usr/local/apache2/logs/httpd.pid
5 |
6 | #Fix problems with mounted volumes ownership
7 | chown -R www-data:www-data /usr/local/apache2/htdocs/server/conf
8 |
9 | #Launch apache
10 | httpd -DFOREGROUND
11 |
--------------------------------------------------------------------------------
/docker/configs/galaksio.wsgi:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 |
4 | sys.path.insert(0, "/usr/local/apache2/htdocs")
5 |
6 | from server.launch_server import app as application
7 |
8 |
--------------------------------------------------------------------------------
/docker/docker-compose-template-with-galaxy.yml:
--------------------------------------------------------------------------------
1 | ############################################################
2 | # Launcher for Galaxy + Galaksio container
3 | # This is a template, the following values must be replaced:
4 | # - $${INSTANCE_NAME}, name for the instance
5 | # - $${INSTANCE_PORT_1}, port number for Galaxy instance
6 | # - $${INSTANCE_PORT_2}, port number for Galaksio instance
7 | # - $${MAX_CONTENT_LENGTH}, max size (in MB) for uploaded files (eg. a value of 300 will be 300MB)
8 | # - $${ADMIN_ACCOUNTS}, list of admin email accounts for Galaxy and Galaksio (emails separated by comma)
9 | # - $${GALAXY_INSTANCE_TITLE}, custom title for the Galaxy server (shown in home page)
10 | ############################################################
11 |
12 | version: '2'
13 | services:
14 |
15 | $${INSTANCE_NAME}-galaxy:
16 | image: bgruening/galaxy-stable
17 | container_name: $${INSTANCE_NAME}-galaxy
18 | environment:
19 | - NONUSE=reports
20 | - GALAXY_CONFIG_ADMIN_USERS=$${ADMIN_ACCOUNTS}
21 | - GALAXY_CONFIG_BRAND="$${GALAXY_INSTANCE_TITLE}"
22 | depends_on:
23 | - $${INSTANCE_NAME}-galaksio-data
24 | volumes_from:
25 | - $${INSTANCE_NAME}-galaksio-data
26 | ports:
27 | - "$${INSTANCE_PORT_1}:80"
28 |
29 | $${INSTANCE_NAME}-galaksio:
30 | image: fikipollo/galaksio
31 | container_name: $${INSTANCE_NAME}-galaksio
32 | environment:
33 | - GALAXY_SERVER=http://galaxy_machine
34 | - GALAXY_SERVER_URL=http://localhost:8080
35 | - MAX_CONTENT_LENGTH=$${MAX_CONTENT_LENGTH}
36 | - ADMIN_ACCOUNTS=$${ADMIN_ACCOUNTS}
37 | links:
38 | - $${INSTANCE_NAME}-galaxy:galaxy_machine
39 | depends_on:
40 | - $${INSTANCE_NAME}-galaxy
41 | volumes_from:
42 | - $${INSTANCE_NAME}-galaksio-data
43 | ports:
44 | - "$${INSTANCE_PORT_2}:80"
45 |
46 | $${INSTANCE_NAME}-galaksio-data:
47 | image: busybox
48 | container_name: $${INSTANCE_NAME}-galaksio-data
49 | volumes:
50 | - /data/$${INSTANCE_NAME}-data/galaksio-data:/usr/local/apache2/htdocs/server/conf/
51 | - /data/$${INSTANCE_NAME}-data/galaxy-data:/export
52 | - /data/$${INSTANCE_NAME}-data/galaxy-custom-tools/:/local_tools
53 |
--------------------------------------------------------------------------------
/docker/docker-compose-template.yml:
--------------------------------------------------------------------------------
1 | ############################################################
2 | # Launcher for Galaksio container
3 | # This is a template, the following values must be replaced:
4 | # - $${INSTANCE_NAME}, name for the instance
5 | # - $${INSTANCE_PORT_1}, port number for Galaksio instance
6 | # - $${GALAXY_SERVER}, internal URL for the Galaxy server used by this Galaksio instance.
7 | # - $${GALAXY_SERVER_URL}, external URL for the Galaxy server used by this Galaksio instance (usually be the same that above).
8 | # - $${MAX_CONTENT_LENGTH}, max size (in MB) for uploaded files (eg. a value of 300 will be 300MB)
9 | # - $${ADMIN_ACCOUNTS}, list of admin email accounts for Galaxy and Galaksio (emails separated by comma)
10 | ############################################################
11 |
12 | version: '2'
13 | services:
14 |
15 | $${INSTANCE_NAME}-galaksio:
16 | image: fikipollo/galaksio
17 | container_name: $${INSTANCE_NAME}-galaksio
18 | environment:
19 | - GALAXY_SERVER=$${GALAXY_SERVER}
20 | - GALAXY_SERVER_URL=$${GALAXY_SERVER_URL}
21 | - MAX_CONTENT_LENGTH=$${MAX_CONTENT_LENGTH}
22 | - ADMIN_ACCOUNTS=$${ADMIN_ACCOUNTS}
23 | volumes_from:
24 | - $${INSTANCE_NAME}-galaksio-data
25 | ports:
26 | - "$${INSTANCE_PORT_1}:80"
27 |
28 | $${INSTANCE_NAME}-galaksio-data:
29 | image: busybox
30 | container_name: $${INSTANCE_NAME}-galaksio-data
31 | volumes:
32 | - /data/$${INSTANCE_NAME}-data/galaksio-data:/usr/local/apache2/htdocs/server/conf/
33 |
--------------------------------------------------------------------------------
/docker/docker-compose-with-galaxy.yml:
--------------------------------------------------------------------------------
1 | version: '2'
2 | services:
3 |
4 | instance1-galaxy:
5 | image: bgruening/galaxy-stable
6 | container_name: instance1-galaxy
7 | environment:
8 | - NONUSE=reports
9 | - GALAXY_CONFIG_ADMIN_USERS=myadmin@email.com
10 | - GALAXY_CONFIG_BRAND="My own Galaxy server"
11 | depends_on:
12 | - instance1-galaksio-data
13 | volumes_from:
14 | - instance1-galaksio-data
15 | ports:
16 | - "8080:80"
17 |
18 | instance1-galaksio:
19 | image: fikipollo/galaksio
20 | container_name: instance1-galaksio
21 | environment:
22 | - GALAXY_SERVER=http://galaxy_machine
23 | - GALAXY_SERVER_URL=http://localhost:8080
24 | - MAX_CONTENT_LENGTH=300
25 | - ADMIN_ACCOUNTS=myadmin@email.com
26 | links:
27 | - instance1-galaxy:galaxy_machine
28 | depends_on:
29 | - instance1-galaxy
30 | volumes_from:
31 | - instance1-galaksio-data
32 | ports:
33 | - "8081:80"
34 |
35 | instance1-galaksio-data:
36 | image: busybox
37 | container_name: instance1-galaksio-data
38 | volumes:
39 | - /data/instance1-data/galaksio-data:/usr/local/apache2/htdocs/server/conf/
40 | - /data/instance1-data/galaxy-data:/export
41 | - /data/instance1-data/galaxy-custom-tools/:/local_tools
42 |
--------------------------------------------------------------------------------
/docker/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '2'
2 | services:
3 |
4 | instance1-galaksio:
5 | image: fikipollo/galaksio
6 | container_name: instance1-galaksio
7 | environment:
8 | - GALAXY_SERVER=https://usegalaxy.eu
9 | - GALAXY_SERVER_URL=https://usegalaxy.eu
10 | - MAX_CONTENT_LENGTH=300
11 | - ADMIN_ACCOUNTS=myadmin@email.com
12 | volumes_from:
13 | - instance1-galaksio-data
14 | ports:
15 | - "8081:80"
16 |
17 | instance1-galaksio-data:
18 | image: busybox
19 | container_name: instance1-galaksio-data
20 | volumes:
21 | - /data/instance1-data/galaksio-data:/usr/local/apache2/htdocs/server/conf/
22 |
--------------------------------------------------------------------------------
/docs/1_1_galaxy.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # The Galaxy project and Galaksio
7 | ## What is Galaxy?
8 | Galaxy is an open source, web-based platform for data intensive biomedical research. If you are new to Galaxy you can find several manuals and information [here](https://galaxyproject.org/tutorials/g101/). According to Galaxy's documentation, its goal is to develop and maintain a system that enables researchers without informatics expertise to perform computational analyses through the web. A user interacts with Galaxy through the web by uploading and analyzing the data. Galaxy interacts with underlying computational infrastructure (servers that run the analyses and disks that store the data) without exposing it to the user.
9 |
10 |
11 |

12 |
13 |
14 | ## What is Galaksio?
15 | Galaksio provides a workflow-centric graphical user interface for the Galaxy Workflow Management system in order to provide an accessible and automated interface for biologists and medical researchers completing routine tasks in bioinformatics. Galaksio reduce the workload of bioinformaticians as routine tasks can be performed with minimal training using verified procedures. The presentation of workflows also provides a comprehensive overview of necessary input data and a reporting tool to export the history or workflow for later evaluation or replication.
16 |
17 |
18 |

19 |
20 |
--------------------------------------------------------------------------------
/docs/1_1_galaxy/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_1_galaxy/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/1_1_galaxy/galaksio_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_1_galaxy/galaksio_screenshot.png
--------------------------------------------------------------------------------
/docs/1_1_galaxy/galaxy_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_1_galaxy/galaxy_screenshot.png
--------------------------------------------------------------------------------
/docs/1_2_concepts.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # Some "must know" concepts
7 | - [What is a Workflow in Galaxy?](#what-is-a-workflow-in-galaxy)
8 | - [Datasets in Galaxy](#datasets-in-galaxy)
9 | - [Histories in Galaxy](#histories-in-galaxy)
10 | - [Dataset collections](#dataset-collections)
11 |
12 | Note: Part of this content has been Extracted from the [Galaxy project documentation](https://galaxyproject.org/learn).
13 |
14 | ## What is a Workflow in Galaxy?
15 | A workflow is a series of tools and dataset actions that run in sequence as a batch operation. Workflows are analyses that are intended to be executed (one ore more times) with different user-provided input datasets. Workflow can be reused over and over, not only reducing tedious work, but enhancing reproducibility by applying the same exact methods to all of your data.
16 |
17 | - Workflows can be created from scratch using the workflow editor.
18 | - Workflows can be annotated, viewed, shared, published, and imported - just like other Galaxy objects.
19 | - Any workflow that you have permissions to import, you can modify with the workflow editor.
20 |
21 | From the perspective of Galaksio, workflows must be designed by skilled users (e.g. a bioinformatician) using the Galaxy tools for workflow edition.
22 |
23 | [Learn more about workflows](https://galaxyproject.org/learn/advanced-workflow/).
24 |
25 |
26 |

27 |
Figure 1. Creating a workflow in Galaxy using the workflow editor.
28 |
29 |
30 | ## Datasets in Galaxy
31 | Datasets are the inputs and outputs of each step in an analysis project in Galaxy. The tracking information associated with Datasets in a History represent an experimental record of the methods, parameters, and other inputs.
32 |
33 | [More info](https://galaxyproject.org/learn/managing-datasets/)
34 |
35 | ## Histories in Galaxy
36 | When data is uploaded from your computer or analysis is done on existing data using Galaxy, each output from those steps generates a dataset. These datasets (and the output datasets from subsequent analysis on them) are stored by Galaxy in Histories.
37 |
38 | **The Current History**
39 |
40 | All users have one 'current' history, which can be thought of as a workspace or a current working directory in bioinformatics terms. You current history is displayed in the right hand side of the main 'Analyze Data' Galaxy interface in what is called the history panel.
41 |
42 | The history panel displays output datasets in the order in which they were created with the oldest/first shown at the bottom. As new analyses are done and new output datasets are generated, the newest datasets are added to the top of the history panel. In this way, the history panel displays the history of your analysis over time.
43 |
44 | Users that have registered an account and logged in can have many histories and the history panel allows switching between them and creating new ones. This can be useful to organize different analyses.
45 |
46 | [More info](https://galaxyproject.org/tutorials/histories/)
47 |
48 |
49 |

50 |
Figure 2. Galaxy history is simply the right panel of the interface.
51 |
52 |
53 | ## Dataset collections
54 | Collection are designed to simplify complex, multi-sample analyses. In Galaxy you perform data analyses and organize your data simply by clicking on things. In real-world analyses you never have just a few datasets, instead you have many (sometimes thousands) and Collections help manage your data to minimize the amount of clicking you have to do.
55 |
56 | [More info](https://galaxyproject.org/tutorials/collections/)
57 |
--------------------------------------------------------------------------------
/docs/1_2_concepts/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_2_concepts/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/1_2_concepts/galaxy_histories.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_2_concepts/galaxy_histories.png
--------------------------------------------------------------------------------
/docs/1_2_concepts/galaxy_workflows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_2_concepts/galaxy_workflows.png
--------------------------------------------------------------------------------
/docs/1_3_install/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_3_install/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/1_4_quick_start.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # General information
7 | **Galaksio** is a web tool that provides a simple but complete UI for using Galaxy for biologists that require bioinformatical workflows to complete their researching. Galaxy is an open source, web-based platform for data intensive biomedical research. A workflow in Galaxy is a series of tools and dataset actions that run in sequence as a batch operation.
8 |
9 | The major steps of workflow execution using Galaksio can be summarized as follows:
10 |
11 | * Log in the application using your Galaxy account or create a new one.
12 | * Upload your data to Galaksio to your Galaxy history and design your dataset collections.
13 | * Browse the publicly available workflows in Galaxy and import them to your collection.
14 | * Select a workflow to run and set the input files from your history. Optionally, customize the parameters for the tools in the workflow.
15 | * Launch the workflow execution and wait for results, or send the execution to background and continue working.
16 | * Evaluate and download the results.
17 |
18 | # Galaksio and Galaxy
19 | Galaksio is built to provide a more layered approach to Galaxy, providing a simplified user interface based on workflows and reducing the workload of bioinformaticians as routine tasks can be performed with minimal training.
20 |
21 | Galaksio uses the Galaxy API to run tools and manipulate the datasets, which means that every action in Galaksio is sent and executed in a Galaxy server. This also means that user accounts in Galaksio are the same than in Galaxy. Users can use their existing accounts in Galaxy to log in Galaksio, and new accounts created in Galaksio will be also available in the Galaxy server. By default, Galaksio will send the actions to the official Galaxy server running at [https://usegalaxy.org/](https://usegalaxy.org/). However, this option can be changed at any time by the administrator, using alternative Galaxy servers.
22 |
23 | # Galaksio or Galaxy? Target users for Galaksio
24 | Galaxy is a widely supported workflow management system that provides access to bioinformatics for experimentalists with limited expertise in programming. While researchers skilled enough in bioinformatics usually prefer command line tools, less advanced users are left on their own struggling to find and combine tools using the rich but unforgiving user interface provided by Galaxy. However, even for the most simplistic use of Galaxy, insights in bioinformatics are required in order to choose an optimal combination of tools, and set their parameters correctly.
25 |
26 | From the perspective of Galaksio, workflows implementation must be performed by skilled users (e.g. a bioinformatician) using the Galaxy tools for workflow edition. Implemented workflows are made public letting other users to reuse them. Less skilled users can access these public workflows at the "Workflows" section in Galaksio. Hence, a biologist that want to conduct his bioinformatics analysis, can search for a workflow that fullfills his requirements, and run it easily just choosing the input datasets.
27 |
28 | # What can I do with Galaksio?
29 |
30 | |Feature | Category | Implemented | Planned| |
31 | | --- | --- | :---: | :---: |
32 | |User sign-in/out | Users | X | |
33 | |User sign-up | Users | X | |
34 | |Workflow listing | Workflows | X | |
35 | |Workflow importing | Workflows | X | |
36 | |Workflow execution | Workflows | X | |
37 | |Workflow creation | Workflows | X | NO |
38 | |Simultaneous execution of workflows | Workflows | X | |
39 | |Recovering previous executions | Workflows | X | |
40 | |Help and description for tools in workflow | Workflows | X | |
41 | |Input selection and parameter configuration | Workflows | X | |
42 | |History selection | History | X | |
43 | |History creation | History | | YES |
44 | |History deletion | History | | YES |
45 | |Dataset uploading | Dataset manipulation | X | |
46 | |Dataset downloading | Dataset manipulation | X | |
47 | |Dataset deletion | Dataset manipulation | X | |
48 | |Dataset collection creation | Dataset manipulation | X | |
49 | |Dataset collection deletion | Dataset manipulation | | YES |
50 | |Tool execution | Tools | | YES |
51 |
52 | # A short use case of Galaksio
53 |
55 |
--------------------------------------------------------------------------------
/docs/1_4_quick_start/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_4_quick_start/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/1_4_quick_start/video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/1_4_quick_start/video.png
--------------------------------------------------------------------------------
/docs/2_1_users.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 |
6 | # Users in Galaksio
7 | Galaksio has been designed to share the Galaxy user system. That means that if you already have a user account in the associated Galaxy server, you won't need to create a new account. Instead, you can easily sign-in Galaksio using your Galaxy credentials and all your data in Galaxy will be accessible from Galaksio.
8 |
9 |
10 |

11 |
Figure 1. Sign-in form in Galaksio.
12 |
13 |
14 | However, if you don't have an account in Galaxy, you can easily create a new account using the sign-up form. That will take you just few seconds!
15 |
16 |
17 |

18 |
Figure 2. Creating a new account in Galaksio/Galaxy.
19 |
20 |
--------------------------------------------------------------------------------
/docs/2_1_users/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/2_1_users/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/2_1_users/galaksio_users_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/2_1_users/galaksio_users_1.png
--------------------------------------------------------------------------------
/docs/2_1_users/galaksio_users_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/2_1_users/galaksio_users_2.png
--------------------------------------------------------------------------------
/docs/3_1_histories.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 | ## Histories in Galaksio
6 | As we've already seen, in Galaxy, when data is uploaded from your computer or an analysis is done, each output file generates a dataset that is stored by Galaxy in Histories.
7 |
8 | Galaksio provides multiple tools for easily manipulating your Histories and Datasets that are accessible by clicking at the *Histories* option in the left menu bar. The *Histories* section is divided in two panels (Figure 1). The first panel displays all the histories that are saved in your Galaxy account. The history panel allows switching between them, which can be useful to organize different analyses. The second panel displays the datasets and the collections that were added to a selected history. You can browse the contents of a history by clicking on the corresponding row in the Histories table. By default, the panel displays the contents of the current history.
9 |
10 |
11 |

12 |
Figure 1. Histories management in Galaksio.
13 |
14 |
--------------------------------------------------------------------------------
/docs/3_1_histories/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_1_histories/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/3_1_histories/histories_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_1_histories/histories_1.png
--------------------------------------------------------------------------------
/docs/3_2_histories.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 | ### Managing datasets
6 | Datasets can be uploaded, downloaded or deleted from your history. Galaksio provides tools for uploading small-medium files (less than 2GB) from your disk. Use the tool "Upload new files" to open the dialog for file uploading. For bigger files you might want to use other options, such as FTP upload.
7 |
8 |
9 |

10 |
Figure 2. Uploading multiple files using the Galaksio interface.
11 |
12 |
--------------------------------------------------------------------------------
/docs/3_2_histories/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_2_histories/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/3_2_histories/histories_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_2_histories/histories_2.png
--------------------------------------------------------------------------------
/docs/3_3_histories.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 |
5 | ## Managing dataset collections
6 | When you have just a few samples - clicking through them is easy. But once you've got hundreds - it becomes very annoying. Galaxy includes Dataset collections that allow you to combine numerous datasets in a single entity that can be easily manipulated.
7 |
8 | Figures 3-5 display the creation of a "Dataset list" collection. In order to create a new dataset collection, first we need to choose the type and a name for the new collection (Figure 3). In the next step, we choose the datasets that we want to include in our new collection (Figure 4). Once we've selected all the datasets, we can confirm the creation of the new collection (Figure 5). The new collection will be displayed in the current history.
9 |
10 |
11 |

12 |
Figure 3. First we need to choose the type and a name for the new collection.
13 |
14 |
15 |
16 |

17 |
Figure 4. Then, we choose the datasets that we want to include in our new collection.
18 |
19 |
20 |
21 |

22 |
Figure 5. Finally we confirm the creation of the new collection.
23 |
24 |
25 |
26 |

27 |
Figure 6. The new collection in the current history.
28 |
29 |
--------------------------------------------------------------------------------
/docs/3_3_histories/galaksio_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_3_histories/galaksio_logo.png
--------------------------------------------------------------------------------
/docs/3_3_histories/histories_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_3_histories/histories_3.png
--------------------------------------------------------------------------------
/docs/3_3_histories/histories_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_3_histories/histories_4.png
--------------------------------------------------------------------------------
/docs/3_3_histories/histories_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_3_histories/histories_5.png
--------------------------------------------------------------------------------
/docs/3_3_histories/histories_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/3_3_histories/histories_6.png
--------------------------------------------------------------------------------
/docs/4_1_workflows.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Browsing workflows
6 | A workflow is a series of tools and dataset actions that run in sequence as a batch operation. From the perspective of Galaksio, workflows are created from scratch by skilled users (e.g. a bioinformatician) using the workflow editor in Galaxy, and published allowing other users to import and reuse them.
7 |
8 | Your collection of imported workflows, as well as the published workflows are listed in Galaksio at the "Workflows" panel. By default, this panel displays your collection of workflows (Figure 1). However, you can easily browse all the published workflows by choosing the option "Show all public workflows" (Figure 2). This option will retrieve all the published workflows in the associated Galaxy instance. Workflows can be easily filtered by using the search tools.
9 |
10 | When a workflow does not belong to your collection, you will see that there are two options available. Using the option "More details", you can access to a more detailed view of the workflow that included an overview for the planned steps. Alternatively, you can use "Import to my collection" which will copy the selected workflow to our collection.
11 |
12 |