# HG changeset patch # User ymh # Date 1505477496 -7200 # Node ID cac26275af31ee534521b5b3d45000162cfe35a0 # Parent 50f5e8d2c8396150028f5bb328b56c59dc1fc492 define version V0.13.02 diff -r 50f5e8d2c839 -r cac26275af31 client/bower.json --- a/client/bower.json Fri Sep 15 14:04:42 2017 +0200 +++ b/client/bower.json Fri Sep 15 14:11:36 2017 +0200 @@ -1,6 +1,6 @@ { "name": "renkan", - "version": "00.13.01", + "version": "00.13.02", "authors": [ "IRI " ], diff -r 50f5e8d2c839 -r cac26275af31 client/package.json --- a/client/package.json Fri Sep 15 14:04:42 2017 +0200 +++ b/client/package.json Fri Sep 15 14:11:36 2017 +0200 @@ -1,6 +1,6 @@ { "name": "renkan", - "version": "00.13.01", + "version": "00.13.02", "description": "Renkan client application", "repository": { "type": "hg", diff -r 50f5e8d2c839 -r cac26275af31 server/java/build.gradle --- a/server/java/build.gradle Fri Sep 15 14:04:42 2017 +0200 +++ b/server/java/build.gradle Fri Sep 15 14:11:36 2017 +0200 @@ -2,7 +2,7 @@ apply plugin: 'maven' group = 'org.iri_research.renkan' - version = '00.13.01' + version = '00.13.02' gradle.projectsEvaluated { diff -r 50f5e8d2c839 -r cac26275af31 server/java/pom.xml --- a/server/java/pom.xml Fri Sep 15 14:04:42 2017 +0200 +++ b/server/java/pom.xml Fri Sep 15 14:11:36 2017 +0200 @@ -5,7 +5,7 @@ org.iri_research.renkan renkan pom - 00.13.01 + 00.13.02 Renkan project diff -r 50f5e8d2c839 -r cac26275af31 server/java/renkan-core/pom.xml --- a/server/java/renkan-core/pom.xml Fri Sep 15 14:04:42 2017 +0200 +++ b/server/java/renkan-core/pom.xml Fri Sep 15 14:11:36 2017 +0200 @@ -6,7 +6,7 @@ org.iri_research.renkan renkan - 00.13.01 + 00.13.02 renkan-core renkan-core diff -r 50f5e8d2c839 -r cac26275af31 server/java/renkan-management/pom.xml --- a/server/java/renkan-management/pom.xml Fri Sep 15 14:04:42 2017 +0200 +++ b/server/java/renkan-management/pom.xml Fri Sep 15 14:11:36 2017 +0200 @@ -5,7 +5,7 @@ org.iri_research.renkan renkan - 00.13.01 + 00.13.02 renkan-management diff -r 50f5e8d2c839 -r cac26275af31 server/java/renkan-web/pom.xml --- a/server/java/renkan-web/pom.xml Fri Sep 15 14:04:42 2017 +0200 +++ b/server/java/renkan-web/pom.xml Fri Sep 15 14:11:36 2017 +0200 @@ -5,7 +5,7 @@ org.iri_research.renkan renkan - 00.13.01 + 00.13.02 renkan-web war diff -r 50f5e8d2c839 -r cac26275af31 server/php/basic/public_html/static/lib/renkan/css/renkan.css --- a/server/php/basic/public_html/static/lib/renkan/css/renkan.css Fri Sep 15 14:04:42 2017 +0200 +++ b/server/php/basic/public_html/static/lib/renkan/css/renkan.css Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ /*! * _____ _ diff -r 50f5e8d2c839 -r cac26275af31 server/php/basic/public_html/static/lib/renkan/css/space-editor.css --- a/server/php/basic/public_html/static/lib/renkan/css/space-editor.css Fri Sep 15 14:04:42 2017 +0200 +++ b/server/php/basic/public_html/static/lib/renkan/css/space-editor.css Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ html { overflow: visible !important; diff -r 50f5e8d2c839 -r cac26275af31 server/php/basic/public_html/static/lib/renkan/js/renkan.js --- a/server/php/basic/public_html/static/lib/renkan/js/renkan.js Fri Sep 15 14:04:42 2017 +0200 +++ b/server/php/basic/public_html/static/lib/renkan/js/renkan.js Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ this["renkanJST"] = this["renkanJST"] || {}; @@ -470,7 +470,57 @@ var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { -__p += '

\n ×\n '; + + +function get_youtube_id(url) { + var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; + var match = url.match(regExp); + if (match && match[2].length == 11) { + return match[2]; + } else { + return false; + } +} + +function get_vimeo_id(url) { + var regExp = /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; + + var match = url.match(regExp); + + if (match){ + return match[2]; + } else { + return false; + } +} + +function get_dailymotion_id(url) { + var regExp = /^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$/; + + var match = url.match(regExp); + + if (match) { + if(match[4] !== undefined) { + return match[4]; + } + return match[2]; + } + return false; +} + +function get_facebook_id(url) { + var regExp = /^https?:\/\/www\.facebook\.com\/(?:video\.php\?v=\d+|.*?\/videos\/\d+)\/?$/; + + var match = url.match(regExp); + + if (match) { + return encodeURIComponent(url); + } + return false; +} + +; +__p += '\n

\n ×\n '; if (options.show_node_tooltip_color) { ; __p += '\n \n \n

' + +__e(renkan.translate("Link")) + +'

\n '; + } + else if(video_id = get_vimeo_id(node.uri)) { ; +__p += '\n \n

\n \n'; - } ; +'" target="_blank">' + +__e(renkan.translate("Link")) + +'

\n '; + } + else if(video_id = get_dailymotion_id(node.uri)) { ; +__p += '\n \n

' + +__e(renkan.translate("Link")) + +'

\n '; + } + else if(video_id = get_facebook_id(node.uri)) { ; +__p += '\n \n

' + +__e(renkan.translate("Video link")) + +'

\n '; + } + else { ; +__p += ' \n \n '; + } + } +; __p += '\n ' + @@ -2304,6 +2394,7 @@ "Fullscreen not supported by your browser": "Le plein écran n'est pas supporté par votre navigateur", "Title size:": "Taille :", "Title color:": "Couleur :", + "Video link": "Lien vidéo" } }; diff -r 50f5e8d2c839 -r cac26275af31 server/php/basic/public_html/static/lib/renkan/js/renkan.min.js --- a/server/php/basic/public_html/static/lib/renkan/js/renkan.min.js Fri Sep 15 14:04:42 2017 +0200 +++ b/server/php/basic/public_html/static/lib/renkan/js/renkan.min.js Fri Sep 15 14:11:36 2017 +0200 @@ -24,12 +24,12 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ -this.renkanJST=this.renkanJST||{},this.renkanJST["templates/colorpicker.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
  • ';return __p},this.renkanJST["templates/edgeeditor_readonly.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

    \n ×\n ',options.show_edge_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',edge.uri&&(__p+='\n \n '),__p+="\n "+__e(edge.title)+"\n ",edge.uri&&(__p+=" "),__p+="\n \n

    \n",options.show_edge_tooltip_uri&&edge.uri&&(__p+='\n

    \n '+__e(edge.short_uri)+"\n

    \n"),__p+="\n

    "+(null==(__t=edge.description)?"":__t)+"

    \n",options.show_edge_tooltip_nodes&&(__p+='\n

    \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

    \n

    \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

    \n"),__p+="\n",options.show_edge_tooltip_creator&&edge.has_creator&&(__p+='\n

    \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

    \n"),__p+="\n";return __p},this.renkanJST["templates/edgeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

    \n ×'+__e(renkan.translate("Edit Edge"))+"\n

    \n

    \n \n \n

    \n',options.show_edge_editor_uri&&(__p+="\n

    \n \n \n \n

    \n ',options.properties.length&&(__p+="\n

    \n \n \n

    \n")),__p+="\n",options.show_edge_editor_style&&(__p+='\n
    \n ',options.show_edge_editor_style_color&&(__p+='\n
    \n '+__e(renkan.translate("Edge color:"))+'\n
    \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Edge"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
    \n
    \n "),__p+="\n ",options.show_edge_editor_style_dash&&(__p+='\n
    \n '+__e(renkan.translate("Dash:"))+'\n \n
    \n "),__p+="\n ",options.show_edge_editor_style_thickness&&(__p+='\n
    \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(edge.thickness)+'\n +\n
    \n '),__p+="\n ",options.show_edge_editor_style_arrow&&(__p+='\n
    \n '+__e(renkan.translate("Arrow:"))+'\n \n
    \n "),__p+="\n
    \n"),__p+="\n",options.show_edge_editor_direction&&(__p+='\n

    \n '+__e(renkan.translate("Change edge direction"))+"\n

    \n"),__p+="\n",options.show_edge_editor_nodes&&(__p+='\n

    \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

    \n

    \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

    \n"),__p+="\n",options.show_edge_editor_creator&&edge.has_creator&&(__p+='\n

    \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

    \n"),__p+="\n";return __p},this.renkanJST["templates/ldtjson-bin/annotationtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
  • \n\n \n

    '+(null==(__t=htitle)?"":__t)+"

    \n

    "+(null==(__t=hdescription)?"":__t)+"

    \n

    Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

    \n
    \n
  • \n';return __p},this.renkanJST["templates/ldtjson-bin/segmenttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
  • \n\n \n

    '+(null==(__t=htitle)?"":__t)+"

    \n

    "+(null==(__t=hdescription)?"":__t)+"

    \n

    Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

    \n
    \n
  • \n';return __p},this.renkanJST["templates/ldtjson-bin/tagtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
  • \n\n \n

    '+(null==(__t=htitle)?"":__t)+'

    \n
    \n
  • \n';return __p},this.renkanJST["templates/list-bin.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='
  • \n'),__p+='\n

    \n ',url&&(__p+='\n \n '),__p+="\n "+(null==(__t=htitle)?"":__t)+"\n ",url&&(__p+=""),__p+="\n

    \n ",description&&(__p+='\n

    '+(null==(__t=hdescription)?"":__t)+"

    \n "),__p+="\n ",image&&(__p+='\n
    \n '),__p+="\n
  • \n";return __p},this.renkanJST["templates/main.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_bins&&(__p+='\n
    \n
    \n

    '+__e(translate("Select contents:"))+'

    \n
    \n \n
    \n
    \n
      \n
      \n \n
      \n
      \n \n \n
      \n
        \n
        \n'),__p+=" ",options.show_editor&&(__p+='\n
        \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

        \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n

        \n '+__e(node.short_uri)+"\n

        \n"),__p+=" ",options.show_node_tooltip_description&&(__p+='\n

        '+(null==(__t=node.description)?"":__t)+"

        \n"),__p+=" ",node.image&&options.show_node_tooltip_image&&(__p+='\n \n'),__p+=" ",node.has_creator&&options.show_node_tooltip_creator&&(__p+='\n

        \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

        \n"),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor_video.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

        \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

        \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n \n'),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='\n

        \n ×'+__e(renkan.translate("Edit Node"))+"\n

        \n

        \n \n ",__p+=options.show_node_editor_title_richtext?'\n

        '+(null==(__t=node.title)?"":__t)+"
        \n ":'\n \n ',__p+="\n

        \n",options.show_node_title_style&&(__p+='\n
        \n
        \n '+__e(renkan.translate("Title color:"))+'\n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Title"))?"":__t)+'\n
        \n
        \n '+__e(renkan.translate("Title size:"))+'\n -\n '+__e(node.title_size.toFixed(1))+'\n +\n
        \n
        \n'),__p+=" ",options.show_node_editor_uri&&(__p+="\n

        \n \n \n \n

        \n'),__p+=" ",options.change_types&&(__p+="\n

        \n \n \n

        \n"),__p+=" ",options.show_node_editor_description&&(__p+="\n

        \n \n ",__p+=options.show_node_editor_description_richtext?'\n

        '+(null==(__t=node.description)?"":__t)+"
        \n ":'\n \n ",__p+="\n

        \n"),__p+=" ",options.show_node_editor_size&&(__p+='\n

        \n '+__e(renkan.translate("Size:"))+'\n -\n '+__e(node.size)+'\n +\n

        \n'),__p+=" ",options.show_node_editor_style&&(__p+='\n
        \n ',options.show_node_editor_style_color&&(__p+='\n
        \n \n '+__e(renkan.translate("Node color:"))+'\n
        \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Node"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
        \n
        \n "),__p+="\n ",options.show_node_editor_style_dash&&(__p+='\n
        \n '+__e(renkan.translate("Dash:"))+'\n \n
        \n "),__p+="\n ",options.show_node_editor_style_thickness&&(__p+='\n
        \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(node.thickness)+'\n +\n
        \n '),__p+="\n
        \n"),__p+=" ",options.show_node_editor_image&&(__p+='\n
        \n
        \n \n ',node.clip_path&&(__p+='\n \n \n \n '),__p+="\n
        \n
        \n

        \n \n

        \n \n \n
        \n

        \n",options.allow_image_upload&&(__p+="\n

        \n \n \n

        \n')),__p+=" ",options.show_node_editor_creator&&node.has_creator&&(__p+='\n

        \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

        \n"),__p+=" ",options.change_shapes&&(__p+="\n

        \n \n \n

        \n"),__p+="\n";return __p},this.renkanJST["templates/scene.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_top_bar&&(__p+='\n
        \n
        \n ',__p+=options.editor_mode&&options.title_editable?'\n \n ':'\n

        \n '+__e(project.get("title")||translate("Untitled project"))+"\n

        \n ",__p+="\n ",options.show_user_list&&(__p+='\n
        \n
        \n ',options.show_user_color&&(__p+='\n
        \n \n ',options.user_color_editable&&(__p+='\n \n '),__p+="\n \n ",options.user_color_editable&&print(colorPicker("Rk-Editor-ColorPicker-User")),__p+="\n
        \n "),__p+='\n <unknown user>\n
        \n
          \n
          \n '),__p+="\n ",options.home_button_url&&(__p+='\n
          \n \n
          \n
          \n '+__e(translate(options.home_button_title))+"\n
          \n
          \n
          \n "),__p+="\n ",options.show_fullscreen_button&&(__p+='\n
          \n
          \n
          \n
          \n '+__e(translate("Full Screen"))+"\n
          \n
          \n
          \n "),__p+="\n ",options.editor_mode?(__p+="\n ",options.show_addnode_button&&(__p+='\n
          \n
          \n
          \n
          \n '+__e(translate("Add Node"))+"\n
          \n
          \n
          \n "),__p+="\n ",options.show_addedge_button&&(__p+='\n
          \n
          \n
          \n
          \n '+__e(translate("Add Edge"))+"\n
          \n
          \n
          \n "),__p+="\n ",options.show_export_button&&(__p+='\n
          \n
          \n
          \n
          \n '+__e(translate("Download Project"))+"\n
          \n
          \n
          \n "),__p+="\n ",options.show_save_button&&(__p+='\n
          \n
          \n
          \n
          \n
          \n
          \n '),__p+="\n ",options.show_open_button&&(__p+='\n
          \n
          \n
          \n
          \n '+__e(translate("Open Project"))+"\n
          \n
          \n
          \n "),__p+="\n ",options.show_bookmarklet&&(__p+='\n
          \n \n
          \n
          \n '+__e(translate("Renkan 'Drag-to-Add' bookmarklet"))+'\n
          \n
          \n
          \n
          \n '),__p+="\n "):(__p+="\n ",options.show_export_button&&(__p+='\n
          \n
          \n
          \n
          \n '+__e(translate("Download Project"))+'\n
          \n
          \n
          \n
          \n '),__p+="\n "),__p+="\n ",options.show_search_field&&(__p+='\n
          \n \n
          \n
          \n '),__p+="\n
          \n"),__p+='\n
          \n
          \n
          \n ',options.editor_mode&&options.save_view&&(__p+='\n
          \n '),__p+="\n ",options.save_view&&(__p+='\n
          \n ',options.hide_nodes&&(__p+='\n \t \n '),__p+=" \n "),__p+="\n \n "),__p+="\n \n\n";return __p},this.renkanJST["templates/search.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
        • '+(null==(__t=title)?"":__t)+"
        • ";return __p},this.renkanJST["templates/wikipedia-bin/resulttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
        • \n\n \n

          \n '+(null==(__t=htitle)?"":__t)+'\n

          \n

          '+(null==(__t=hdescription)?"":__t)+"

          \n
        • \n";return __p},function(a){"use strict";"object"!=typeof a.Rkns&&(a.Rkns={});var b=a.Rkns,c=b.$=a.jQuery,d=b._=a._;b.pickerColors=["#8f1919","#a80000","#d82626","#ff0000","#e87c7c","#ff6565","#f7d3d3","#fecccc","#8f5419","#a85400","#d87f26","#ff7f00","#e8b27c","#ffb265","#f7e5d3","#fee5cc","#8f8f19","#a8a800","#d8d826","#feff00","#e8e87c","#feff65","#f7f7d3","#fefecc","#198f19","#00a800","#26d826","#00ff00","#7ce87c","#65ff65","#d3f7d3","#ccfecc","#198f8f","#00a8a8","#26d8d8","#00feff","#7ce8e8","#65feff","#d3f7f7","#ccfefe","#19198f","#0000a8","#2626d8","#0000ff","#7c7ce8","#6565ff","#d3d3f7","#ccccfe","#8f198f","#a800a8","#d826d8","#ff00fe","#e87ce8","#ff65fe","#f7d3f7","#feccfe","#000000","#242424","#484848","#6d6d6d","#919191","#b6b6b6","#dadada","#ffffff"],b.__renkans=[];var e=b._BaseBin=function(a,c){if("undefined"!=typeof a){this.renkan=a,this.renkan.$.find(".Rk-Bin-Main").hide(),this.$=b.$("
        • ").addClass("Rk-Bin").appendTo(a.$.find(".Rk-Bin-List")),this.title_icon_$=b.$("").addClass("Rk-Bin-Title-Icon").appendTo(this.$);var d=this;b.$("").attr({href:"#",title:a.translate("Close bin")}).addClass("Rk-Bin-Close").html("×").appendTo(this.$).click(function(){return d.destroy(),a.$.find(".Rk-Bin-Main:visible").length||a.$.find(".Rk-Bin-Main:last").slideDown(),a.resizeBins(),!1}),b.$("").attr({href:"#",title:a.translate("Refresh bin")}).addClass("Rk-Bin-Refresh").appendTo(this.$).click(function(){return d.refresh(),!1}),this.count_$=b.$("
          ").addClass("Rk-Bin-Count").appendTo(this.$),this.title_$=b.$("

          ").addClass("Rk-Bin-Title").appendTo(this.$),this.main_$=b.$("
          ").addClass("Rk-Bin-Main").appendTo(this.$).html('

          '+a.translate("Loading, please wait")+"

          "),this.title_$.html(c.title||"(new bin)"),this.renkan.resizeBins(),c.auto_refresh&&window.setInterval(function(){d.refresh()},c.auto_refresh)}};e.prototype.destroy=function(){this.$.detach(),this.renkan.resizeBins()};var f=b.Renkan=function(a){var e=this;b.__renkans.push(this),this.options=d.defaults(a,b.defaults,{templates:d.defaults(a.templates,renkanJST)||renkanJST,node_editor_templates:d.defaults(a.node_editor_templates,b.defaults.node_editor_templates)}),this.template=this.options.templates["templates/main.html"];var f={};if(d.each(this.options.node_editor_templates,function(a,b){f[b]=e.options.templates[a],delete e.options.templates[a]}),this.options.node_editor_templates=f,d.each(this.options.property_files,function(a){b.$.getJSON(a,function(a){e.options.properties=e.options.properties.concat(a)})}),this.read_only=this.options.read_only||!this.options.editor_mode,this.router=new b.Router,this.project=new b.Models.Project,this.dataloader=new b.DataLoader.Loader(this.project,this.options),this.setCurrentUser=function(a,b){this.project.addUser({_id:a,title:b}),this.current_user=a,this.renderer.redrawUsers()},"undefined"!=typeof this.options.user_id&&(this.current_user=this.options.user_id),this.$=b.$("#"+this.options.container),this.$.addClass("Rk-Main").html(this.template(this)),this.tabs=[],this.search_engines=[],this.current_user_list=new b.Models.UsersList, -this.current_user_list.on("add remove",function(){this.renderer&&this.renderer.redrawUsers()}),this.colorPicker=function(a){var c=e.options.templates["templates/colorpicker.html"];return'
            '+b.pickerColors.map(function(a){return c({c:a})}).join("")+"
          "},this.options.show_editor&&(this.renderer=new b.Renderer.Scene(this)),this.options.search.length){var g=e.options.templates["templates/search.html"],h=this.$.find(".Rk-Search-List"),i=this.$.find(".Rk-Web-Search-Input"),j=this.$.find(".Rk-Web-Search-Form");d.each(this.options.search,function(a,c){b[a.type]&&b[a.type].Search&&e.search_engines.push(new b[a.type].Search(e,a))}),h.html(d(this.search_engines).map(function(a,b){return g({key:b,title:a.getSearchTitle(),className:a.getBgClass()})}).join("")),h.find("li").click(function(){var a=b.$(this);e.setSearchEngine(a.attr("data-key")),j.submit()}),j.submit(function(){if(i.val()){var a=e.search_engine;a.search(i.val())}return!1}),this.$.find(".Rk-Search-Current").mouseenter(function(){h.slideDown()}),this.$.find(".Rk-Search-Select").mouseleave(function(){h.hide()}),this.setSearchEngine(0)}else this.$.find(".Rk-Web-Search-Form").detach();d.each(this.options.bins,function(a){b[a.type]&&b[a.type].Bin&&e.tabs.push(new b[a.type].Bin(e,a))});var k=!1;this.$.find(".Rk-Bins").on("click",".Rk-Bin-Title,.Rk-Bin-Title-Icon",function(){var a=b.$(this).siblings(".Rk-Bin-Main");a.is(":hidden")&&(e.$.find(".Rk-Bin-Main").slideUp(),a.slideDown())}),this.options.show_editor&&this.$.find(".Rk-Bins").on("mouseover",".Rk-Bin-Item",function(a){var f=b.$(this);if(f&&c(f).attr("data-uri")){var g=e.project.get("nodes").where({uri:c(f).attr("data-uri")});d.each(g,function(a){e.renderer.highlightModel(a)})}}).mouseout(function(){e.renderer.unhighlightAll()}).on("mousemove",".Rk-Bin-Item",function(a){try{this.dragDrop()}catch(a){}}).on("touchstart",".Rk-Bin-Item",function(a){k=!1}).on("touchmove",".Rk-Bin-Item",function(a){a.preventDefault();var b=a.originalEvent.changedTouches[0],c=e.renderer.canvas_$.offset(),d=e.renderer.canvas_$.width(),f=e.renderer.canvas_$.height();if(b.pageX>=c.left&&b.pageX=c.top&&b.pageY1?a:null);c.source!==l&&(l=c.source,d.each(e.tabs,function(a){a.render(c)}))}}),this.$.find(".Rk-Bins-Search-Form").submit(function(){return!1})};f.prototype.translate=function(a){return b.i18n[this.options.language]&&b.i18n[this.options.language][a]?b.i18n[this.options.language][a]:this.options.language.length>2&&b.i18n[this.options.language.substr(0,2)]&&b.i18n[this.options.language.substr(0,2)][a]?b.i18n[this.options.language.substr(0,2)][a]:a},f.prototype.onStatusChange=function(){this.renderer.onStatusChange()},f.prototype.setSearchEngine=function(a){this.search_engine=this.search_engines[a],this.$.find(".Rk-Search-Current").attr("class","Rk-Search-Current "+this.search_engine.getBgClass());for(var b=this.search_engine.getBgClass().split(" "),c="",d=0;d"+a.translate("Drag items from this website, drop them in Renkan").replace(/ /g,"_")+"

          '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\/\\/[^\\/]*twitter\\.com\\//,s:'.tweet',n:'twitter'},{r:/https?:\\/\\/[^\\/]*google\\.[^\\/]+\\//,s:'.g',n:'google'},{r:/https?:\\/\\/[^\\/]*lemonde\\.fr\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();"},shortenText:function(a,b){return a.length>b?a.substr(0,b)+"…":a},drawEditBox:function(a,b,c,d,e,f){e.css({width:a.tooltip_width-2*a.tooltip_padding});var g=e[0].getBoundingClientRect(),h=f.$[0].getBoundingClientRect();g.bottom>h.bottom-2*a.tooltip_padding-10&&e.css({"overflow-x":"hidden","overflow-y":"scroll","max-height":h.bottom-2*a.tooltip_padding-5-g.top+"px"});var i=e.outerHeight()+2*a.tooltip_padding+5,j=b.xpaper.view.size.height-a.tooltip_margin&&(m=Math.max(paper.view.size.height-a.tooltip_margin,b.y+a.tooltip_arrow_width/2)-i),m1?a.offset[1]:a.offset[0]):null!=a.offset.x&&(c.x=a.offset.x,c.y=a.offset.y),a.offset=c}return a},toJSON:function(){return{_id:this.get("_id"),zoom_level:this.get("zoom_level"),offset:this.get("offset"),title:this.get("title"),description:this.get("description"),created_by:this.get("created_by")?this.get("created_by").get("_id"):null,hidden_nodes:this.get("hidden_nodes")}}}),i=(c.Project=d.extend({schema_version:"2",type:"project",blacklist:["saveStatus","loadingStatus"],relations:[{type:b.HasMany,key:"users",relatedModel:e,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"nodes",relatedModel:f,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"edges",relatedModel:g,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"views",relatedModel:h,reverseRelation:{key:"project",includeInJSON:"_id"}}],addUser:function(a,b){a.project=this;var c=e.findOrCreate(a);return this.get("users").push(c,b),c},addNode:function(a,b){a.project=this;var c=f.findOrCreate(a);return this.get("nodes").push(c,b),c},addEdge:function(a,b){a.project=this;var c=g.findOrCreate(a);return this.get("edges").push(c,b),c},addView:function(a,b){a.project=this;var c=h.findOrCreate(a);return this.get("views").push(c,b),c},removeNode:function(a){this.get("nodes").remove(a)},removeEdge:function(a){this.get("edges").remove(a)},validate:function(a){var b=this;_.each([].concat(a.users,a.nodes,a.edges,a.views),function(a){a&&(a.project=b)})},getSchemaVersion:function(a){var b=a;"undefined"==typeof b&&(b=this);var c=b.schema_version;return c?c:1},initialize:function(){var a=this;this.on("remove:nodes",function(b){a.get("edges").remove(a.get("edges").filter(function(a){return a.get("from")===b||a.get("to")===b}))})},toJSON:function(){var a=_.clone(this.attributes);for(var c in a)(a[c]instanceof b.Model||a[c]instanceof b.Collection||a[c]instanceof d)&&(a[c]=a[c].toJSON());return _.omit(a,this.blacklist)}}),c.RosterUser=b.Model.extend({type:"roster_user",idAttribute:"_id",constructor:function(a){"undefined"!=typeof a&&(a._id=a._id||a.id||c.getUID(this),a.title=a.title||"(untitled "+this.type+")",a.description=a.description||"",a.uri=a.uri||"",a.project=a.project||null,a.site_id=a.site_id||0,"function"==typeof this.prepare&&(a=this.prepare(a))),b.Model.prototype.constructor.call(this,a)},validate:function(){if(!this.type)return"object has no type"},prepare:function(a){return a.color=a.color||"#666666",a},toJSON:function(){return{_id:this.get("_id"),title:this.get("title"),uri:this.get("uri"),description:this.get("description"),color:this.get("color"),project:null!=this.get("project")?this.get("project").get("id"):null,site_id:this.get("site_id")}}}));c.UsersList=b.Collection.extend({model:i})}(window),Rkns.defaults={language:navigator.language||navigator.userLanguage||"en",container:"renkan",search:[],bins:[],static_url:"",popup_editor:!0,editor_panel:"editor-panel",show_bins:!0,properties:[],show_editor:!0,read_only:!1,editor_mode:!0,manual_save:!1,show_top_bar:!0,default_user_color:"#303030",size_bug_fix:!1,force_resize:!1,allow_double_click:!0,double_click_open_url:!0,simple_click_open_url:!1,zoom_on_scroll:!0,element_delete_delay:0,autoscale_padding:50,resize:!0,show_zoom:!0,save_view:!0,view_force_autoscale:!0,view_show_hiddennodes:!0,default_index_view:-1,url_parameters:!0,update_url:!0,show_search_field:!0,show_user_list:!0,user_name_editable:!0,user_color_editable:!0,title_editable:!0,show_user_color:!0,show_save_button:!0,show_export_button:!0,show_open_button:!1,show_addnode_button:!0,show_addedge_button:!0,show_bookmarklet:!0,show_fullscreen_button:!0,home_button_url:!1,home_button_title:"Home",show_minimap:!0,minimap_width:160,minimap_height:120,minimap_padding:20,minimap_background_color:"#ffffff",minimap_border_color:"#cccccc",minimap_highlight_color:"#ffff00",minimap_highlight_weight:5,buttons_background:"#202020",buttons_label_color:"#c000c0",buttons_label_font_size:9,ghost_opacity:.3,default_dash_array:[4,5],show_node_circles:!0,clip_node_images:!0,node_images_fill_mode:!1,node_size_base:25,node_stroke_width:2,node_stroke_max_width:12,selected_node_stroke_width:4,selected_node_stroke_max_width:24,node_stroke_witdh_scale:5,node_title_size_min:0,node_title_size_max:5,node_title_size_step:.1,node_fill_color:"#ffffff",highlighted_node_fill_color:"#ffff00",node_title_color:"#000000",node_label_distance:5,node_label_max_length:60,label_untitled_nodes:"(untitled)",hide_nodes:!0,change_shapes:!0,change_types:!0,node_editor_templates:{default:"templates/nodeeditor_readonly.html",video:"templates/nodeeditor_video.html"},edge_stroke_width:2,edge_stroke_max_width:12,selected_edge_stroke_width:4,selected_edge_stroke_max_width:24,edge_stroke_witdh_scale:5,edge_label_distance:0,edge_label_max_length:20,edge_arrow_length:18,edge_arrow_width:12,edge_arrow_max_width:32,edge_gap_in_bundles:12,highlighted_edge_color:"#ffff00",label_untitled_edges:"",tooltip_width:275,tooltip_padding:10,tooltip_margin:15,tooltip_arrow_length:20,tooltip_arrow_width:40,tooltip_top_color:"#f0f0f0",tooltip_bottom_color:"#d0d0d0",tooltip_border_color:"#808080",tooltip_border_width:1,tooltip_opacity:.8,richtext_editor_config:{toolbarGroups:[{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"clipboard",groups:["clipboard","undo"]},"/",{name:"styles"}],removePlugins:"colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates"},show_node_title_style:!0,show_node_editor_uri:!0,show_node_editor_title:!0,show_node_editor_title_richtext:!0,show_node_editor_description:!0,show_node_editor_description_richtext:!0,show_node_editor_size:!0,show_node_editor_style:!0,show_node_editor_style_color:!0,show_node_editor_style_dash:!0,show_node_editor_style_thickness:!0,show_node_editor_image:!0,show_node_editor_creator:!0,allow_image_upload:!0,uploaded_image_max_kb:500,show_node_tooltip_uri:!0,show_node_tooltip_description:!0,show_node_tooltip_color:!0,show_node_tooltip_image:!0,show_node_tooltip_creator:!0,show_edge_editor_uri:!0,show_edge_editor_style:!0,show_edge_editor_style_color:!0,show_edge_editor_style_dash:!0,show_edge_editor_style_thickness:!0,show_edge_editor_style_arrow:!0,show_edge_editor_direction:!0,show_edge_editor_nodes:!0,show_edge_editor_creator:!0,show_edge_tooltip_uri:!0,show_edge_tooltip_color:!0,show_edge_tooltip_nodes:!0,show_edge_tooltip_creator:!0},Rkns.i18n={fr:{"Edit Node":"Édition d’un nœud","Edit Edge":"Édition d’un lien","Title:":"Titre :","URI:":"URI :","Description:":"Description :","From:":"De :","To:":"Vers :",Image:"Image","Image URL:":"URL d'Image","Choose Image File:":"Choisir un fichier image","Full Screen":"Mode plein écran","Add Node":"Ajouter un nœud","Add Edge":"Ajouter un lien","Save Project":"Enregistrer le projet","Open Project":"Ouvrir un projet","Auto-save enabled":"Enregistrement automatique activé","Connection lost":"Connexion perdue","Created by:":"Créé par :","Zoom In":"Agrandir l’échelle","Zoom Out":"Rapetisser l’échelle",Edit:"Éditer",Remove:"Supprimer","Cancel deletion":"Annuler la suppression","Link to another node":"Créer un lien",Enlarge:"Agrandir",Shrink:"Rétrécir","Click on the background canvas to add a node":"Cliquer sur le fond du graphe pour rajouter un nœud","Click on a first node to start the edge":"Cliquer sur un premier nœud pour commencer le lien","Click on a second node to complete the edge":"Cliquer sur un second nœud pour terminer le lien",Wikipedia:"Wikipédia","Wikipedia in ":"Wikipédia en ",French:"Français",English:"Anglais",Japanese:"Japonais","Untitled project":"Projet sans titre","Lignes de Temps":"Lignes de Temps","Loading, please wait":"Chargement en cours, merci de patienter","Edge color:":"Couleur :","Dash:":"Point. :","Thickness:":"Epaisseur :","Arrow:":"Flèche :","Node color:":"Couleur :","Choose color":"Choisir une couleur","Change edge direction":"Changer le sens du lien","Do you really wish to remove node ":"Voulez-vous réellement supprimer le nœud ","Do you really wish to remove edge ":"Voulez-vous réellement supprimer le lien ","This file is not an image":"Ce fichier n'est pas une image","Image size must be under ":"L'image doit peser moins de ","Size:":"Taille :",KB:"ko","Choose from vocabulary:":"Choisir dans un vocabulaire :","SKOS Documentation properties":"SKOS: Propriétés documentaires","has note":"a pour note","has example":"a pour exemple","has definition":"a pour définition","SKOS Semantic relations":"SKOS: Relations sémantiques","has broader":"a pour concept plus large","has narrower":"a pour concept plus étroit","has related":"a pour concept apparenté","Dublin Core Metadata":"Métadonnées Dublin Core","has contributor":"a pour contributeur",covers:"couvre","created by":"créé par","has date":"a pour date","published by":"édité par","has source":"a pour source","has subject":"a pour sujet","Dragged resource":"Ressource glisée-déposée","Search the Web":"Rechercher en ligne","Search in Bins":"Rechercher dans les chutiers","Close bin":"Fermer le chutier","Refresh bin":"Rafraîchir le chutier","(untitled)":"(sans titre)","Select contents:":"Sélectionner des contenus :","Drag items from this website, drop them in Renkan":"Glissez des éléments de ce site web vers Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.":"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan","Shapes available":"Formes disponibles",Circle:"Cercle",Square:"Carré",Diamond:"Losange",Hexagone:"Hexagone",Ellipse:"Ellipse",Star:"Étoile",Cloud:"Nuage",Triangle:"Triangle",Polygon:"Polygone","Zoom Fit":"Ajuster le Zoom","Download Project":"Télécharger le projet","Save view":"Sauver la vue","View saved view":"Restaurer la Vue","Renkan 'Drag-to-Add' bookmarklet":"Renkan 'Deplacer-Pour-Ajouter' Signet","(unknown user)":"(non authentifié)","":"","Search in graph":"Rechercher dans carte","Search in ":"Chercher dans ","Show hidden nodes":"Montrer les noeuds cachés","Show neighbors":"Montrer les voisins",Hide:"Cacher","Fullscreen not supported by your browser":"Le plein écran n'est pas supporté par votre navigateur","Title size:":"Taille :","Title color:":"Couleur :"}},Rkns.jsonIO=function(a,b){var c=a.project;"undefined"==typeof b.http_method&&(b.http_method="PUT");var d=function(){c.set({loadingStatus:!0}),Rkns.$.getJSON(b.url,function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})})},e=function(){c.set({saveStatus:2});var d=c.toJSON();a.read_only||Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(d),success:function(a,b,d){c.set({saveStatus:0})}})},f=Rkns._.throttle(function(){setTimeout(e,100)},1e3);c.on("add:nodes add:edges add:users add:views",function(a){a.on("change remove",function(a){f()}),f()}),c.on("change",function(){1===c.changedAttributes.length&&c.hasChanged("saveStatus")||f()}),d()},Rkns.jsonIOSaveOnClick=function(a,b){var c=a.project,d=!1,e=function(){return"Project not saved"};"undefined"==typeof b.http_method&&(b.http_method="POST");var f=function(){var d={},e=/id=([^&#?=]+)/,f=document.location.hash.match(e);f&&(d.id=f[1]),Rkns.$.ajax({url:b.url,data:d,beforeSend:function(){c.set({loadingStatus:!0})},success:function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})}})},g=function(){c.set("saved_at",new Date);var a=c.toJSON();Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(a),beforeSend:function(){c.set({saveStatus:2})},success:function(a,b,f){$(window).off("beforeunload",e),d=!1,c.set({saveStatus:0})}})},h=function(){c.set({saveStatus:1});var a=c.get("title");a&&c.get("nodes").length?$(".Rk-Save-Button").removeClass("disabled"):$(".Rk-Save-Button").addClass("disabled"),a&&$(".Rk-PadTitle").css("border-color","#333333"),d||(d=!0,$(window).on("beforeunload",e))};f(),c.on("add:nodes add:edges add:users change",function(a){a.on("change remove",function(a){1===a.changedAttributes.length&&a.hasChanged("saveStatus")||h()}),1===c.changedAttributes.length&&c.hasChanged("saveStatus")||h()}),a.renderer.save=function(){$(".Rk-Save-Button").hasClass("disabled")?c.get("title")||$(".Rk-PadTitle").css("border-color","#ff0000"):g()}},function(a){"use strict";var b=a._,c=a.Ldt={},d=(c.Bin=function(a,b){if(b.ldt_type){var d=c[b.ldt_type+"Bin"];if(d)return new d(a,b)}console.error("No such LDT Bin Type")},c.ProjectBin=a.Utils.inherit(a._BaseBin));d.prototype._init=function(a,b){this.renkan=a,this.tagTemplate=a.options.templates["templates/ldtjson-bin/tagtemplate.html"],this.annotationTemplate=a.options.templates["templates/ldtjson-bin/annotationtemplate.html"],this.proj_id=b.project_id,this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.title_$.html(b.title),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},d.prototype.render=function(c){function d(a){var c=b(a).escape();return f.isempty?c:f.replace(c,"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}var f=c||a.Utils.regexpFromTextOrArray(),g="
        • Tags

        • ",h=this.data.meta["dc:title"],i=this,j=0;i.title_$.text('LDT Project: "'+h+'"'),b.map(i.data.tags,function(a){var b=a.meta["dc:title"];(f.isempty||f.test(b))&&(j++,g+=i.tagTemplate({ldt_platform:i.ldt_platform,title:b,htitle:d(b),encodedtitle:encodeURIComponent(b),static_url:i.renkan.options.static_url}))}),g+="
        • Annotations

        • ",b.map(i.data.annotations,function(a){var b=a.content.description,c=a.content.title.replace(b,"");if(f.isempty||f.test(c)||f.test(b)){j++;var h=a.end-a.begin,k=a.content&&a.content.img&&a.content.img.src?a.content.img.src:h?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";g+=i.annotationTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(a.begin),end:e(a.end),duration:e(h),mediaid:a.media,annotationid:a.id,image:k,static_url:i.renkan.options.static_url})}}),this.main_$.html(g),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()},d.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/ldt/cljson/id/"+this.proj_id,dataType:"jsonp",success:function(a){b.data=a,b.render()}})};var e=c.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"};e.prototype.getBgClass=function(){return"Rk-Ldt-Icon"},e.prototype.getSearchTitle=function(){return this.renkan.translate("Lignes de Temps")},e.prototype.search=function(a){this.renkan.tabs.push(new f(this.renkan,{search:a}))};var f=c.ResultsBin=a.Utils.inherit(a._BaseBin);f.prototype._init=function(a,b){this.renkan=a,this.segmentTemplate=a.options.templates["templates/ldtjson-bin/segmenttemplate.html"],this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.max_results=b.max_results||50,this.search=b.search,this.title_$.html('Lignes de Temps: "'+b.search+'"'),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},f.prototype.render=function(c){function d(a){return g.replace(b(a).escape(),"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}if(this.data){var f=c||a.Utils.regexpFromTextOrArray(),g=f.isempty?a.Utils.regexpFromTextOrArray(this.search):f,h="",i=this,j=0;b.each(this.data.objects,function(a){var b=a.abstract,c=a.title;if(f.isempty||f.test(c)||f.test(b)){j++;var g=a.duration,k=a.start_ts,l=+a.duration+k,m=g?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";h+=i.segmentTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(k),end:e(l),duration:e(g),mediaid:a.iri_id,annotationid:a.element_id,image:m})}}),this.main_$.html(h),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()}},f.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/api/ldt/1.0/segments/search/",data:{format:"jsonp",q:this.search,limit:this.max_results},dataType:"jsonp",success:function(a){b.data=a,b.render()}})}}(window.Rkns),Rkns.ResourceList={},Rkns.ResourceList.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.ResourceList.Bin.prototype._init=function(a,b){this.renkan=a,this.resultTemplate=a.options.templates["templates/list-bin.html"],this.title_$.html(b.title),b.list&&(this.data=b.list),this.refresh()},Rkns.ResourceList.Bin.prototype.render=function(a){function b(a){var b=_(a).escape();return c.isempty?b:c.replace(b,"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d="",e=this,f=0;Rkns._.each(this.data,function(a){var g;if("string"==typeof a)if(/^(https?:\/\/|www)/.test(a))g={url:a};else{g={title:a.replace(/[:,]?\s?(https?:\/\/|www)[\d\w\/.&?=#%-_]+\s?/,"").trim()};var h=a.match(/(https?:\/\/|www)[\d\w\/.&?=#%-_]+/);h&&(g.url=h[0]),g.title.length>80&&(g.description=g.title,g.title=g.title.replace(/^(.{30,60})\s.+$/,"$1…"))}else g=a;var i=g.title||(g.url||"").replace(/^https?:\/\/(www\.)?/,"").replace(/^(.{40}).+$/,"$1…"),j=g.url||"",k=g.description||"",l=g.image||"";j&&!/^https?:\/\//.test(j)&&(j="http://"+j),(c.isempty||c.test(i)||c.test(k))&&(f++,d+=e.resultTemplate({url:j,title:i,htitle:b(i),image:l,description:k,hdescription:b(k),static_url:e.renkan.options.static_url}))}),e.main_$.html(d),!c.isempty&&f?this.count_$.text(f).show():this.count_$.hide(),c.isempty||f?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.ResourceList.Bin.prototype.refresh=function(){this.data&&this.render()},Rkns.Wikipedia={},Rkns.Wikipedia.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"},Rkns.Wikipedia.Search.prototype.getBgClass=function(){ -return"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-"+this.lang},Rkns.Wikipedia.Search.prototype.getSearchTitle=function(){var a={fr:"French",en:"English",ja:"Japanese"};return a[this.lang]?this.renkan.translate("Wikipedia in ")+this.renkan.translate(a[this.lang]):this.renkan.translate("Wikipedia")+" ["+this.lang+"]"},Rkns.Wikipedia.Search.prototype.search=function(a){this.renkan.tabs.push(new Rkns.Wikipedia.Bin(this.renkan,{lang:this.lang,search:a}))},Rkns.Wikipedia.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.Wikipedia.Bin.prototype._init=function(a,b){this.renkan=a,this.search=b.search,this.resultTemplate=a.options.templates["templates/wikipedia-bin/resulttemplate.html"],this.lang=b.lang||"en",this.title_icon_$.addClass("Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-"+this.lang),this.title_$.html(this.search).addClass("Rk-Wikipedia-Title"),this.refresh()},Rkns.Wikipedia.Bin.prototype.render=function(a){function b(a){return d.replace(_(a).escape(),"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d=c.isempty?Rkns.Utils.regexpFromTextOrArray(this.search):c,e="",f=this,g=0;Rkns._.each(this.data.query.search,function(a){var d=a.title,h="http://"+f.lang+".wikipedia.org/wiki/"+encodeURI(d.replace(/ /g,"_")),i=Rkns.$("
          ").html(a.snippet).text();(c.isempty||c.test(d)||c.test(i))&&(g++,e+=f.resultTemplate({url:h,title:d,htitle:b(d),description:i,hdescription:b(i),static_url:f.renkan.options.static_url}))}),f.main_$.html(e),!c.isempty&&g?this.count_$.text(g).show():this.count_$.hide(),c.isempty||g?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.Wikipedia.Bin.prototype.refresh=function(){var a=this;Rkns.$.ajax({url:"http://"+a.lang+".wikipedia.org/w/api.php?action=query&list=search&srsearch="+encodeURIComponent(this.search)+"&format=json",dataType:"jsonp",success:function(b){a.data=b,a.render()}})},define("renderer/baserepresentation",["jquery","underscore"],function(a,b){"use strict";var c=function(a,c){if("undefined"!=typeof a&&(this.renderer=a,this.renkan=a.renkan,this.project=a.renkan.project,this.options=a.renkan.options,this.model=c,this.model)){var d=this;this._changeBinding=function(){d.redraw({change:!0})},this._removeBinding=function(){a.removeRepresentation(d),b.defer(function(){a.redraw()})},this._selectBinding=function(){d.select()},this._unselectBinding=function(){d.unselect()},this.model.on("change",this._changeBinding),this.model.on("remove",this._removeBinding),this.model.on("select",this._selectBinding),this.model.on("unselect",this._unselectBinding)}};return b(c.prototype).extend({_super:function(a){return c.prototype[a].apply(this,Array.prototype.slice.call(arguments,1))},redraw:function(){},moveTo:function(){},show:function(){return"BaseRepresentation.show"},hide:function(){},select:function(){this.model&&this.model.trigger("selected")},unselect:function(){this.model&&this.model.trigger("unselected")},highlight:function(){},unhighlight:function(){},mousedown:function(){},mouseup:function(){this.model&&this.model.trigger("clicked")},destroy:function(){this.model&&(this.model.off("change",this._changeBinding),this.model.off("remove",this._removeBinding),this.model.off("select",this._selectBinding),this.model.off("unselect",this._unselectBinding))}}).value(),c}),define("requtils",[],function(a,b){"use strict";return{getUtils:function(){return window.Rkns.Utils},getRenderer:function(){return window.Rkns.Renderer}}}),define("renderer/basebutton",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({moveTo:function(a){this.sector.moveTo(a)},show:function(){this.sector.show()},hide:function(){this.sector&&this.sector.hide()},select:function(){this.sector.select()},unselect:function(a){this.sector.unselect(),(!a||a!==this.source_representation&&a.source_representation!==this.source_representation)&&this.source_representation.unselect()},destroy:function(){this.sector.destroy()}}).value(),f}),define("renderer/shapebuilder",[],function(){"use strict";var a="M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z",b={circle:{getShape:function(){return new paper.Path.Circle([0,0],1)},getImageShape:function(a,b){return new paper.Path.Circle(a,b)}},rectangle:{getShape:function(){return new paper.Path.Rectangle([-2,-2],[2,2])},getImageShape:function(a,b){return new paper.Path.Rectangle([-b,-b],[2*b,2*b])}},ellipse:{getShape:function(){return new paper.Path.Ellipse(new paper.Rectangle([-2,-1],[2,1]))},getImageShape:function(a,b){return new paper.Path.Ellipse(new paper.Rectangle([-b,-b/2],[2*b,b]))}},polygon:{getShape:function(){return new paper.Path.RegularPolygon([0,0],6,1)},getImageShape:function(a,b){return new paper.Path.RegularPolygon(a,6,b)}},diamond:{getShape:function(){var a=new paper.Path.Rectangle([-Math.SQRT2,-Math.SQRT2],[Math.SQRT2,Math.SQRT2]);return a.rotate(45),a},getImageShape:function(a,b){var c=new paper.Path.Rectangle([-b*Math.SQRT2/2,-b*Math.SQRT2/2],[b*Math.SQRT2,b*Math.SQRT2]);return c.rotate(45),c}},star:{getShape:function(){return new paper.Path.Star([0,0],8,1,.7)},getImageShape:function(a,b){return new paper.Path.Star(a,8,1*b,.7*b)}},cloud:{getShape:function(){var b=new paper.Path(a);return b},getImageShape:function(b,c){var d=new paper.Path(a);return d.scale(c),d.translate(b),d}},triangle:{getShape:function(){return new paper.Path.RegularPolygon([0,0],3,1)},getImageShape:function(a,b){var c=new paper.Path.RegularPolygon([0,0],3,1);return c.scale(b),c.translate(a),c}},svg:function(a){return{getShape:function(){return new paper.Path(a)},getImageShape:function(a,b){return new paper.Path}}}},c=function(a){return null!==a&&"undefined"!=typeof a||(a="circle"),"svg:"===a.substr(0,4)?b.svg(a.substr(4)):(a in b||(a="circle"),b[a])};return c.builders=b,c}),define("renderer/noderepr",["jquery","underscore","requtils","renderer/baserepresentation","renderer/shapebuilder"],function(a,b,c,d,e){"use strict";var f=c.getUtils(),g=f.inherit(d);return b(g.prototype).extend({_init:function(){if(this.renderer.node_layer.activate(),this.type="Node",this.buildShape(),this.hidden=!1,this.ghost=!1,this.options.show_node_circles?(this.circle.strokeWidth=this.options.node_stroke_width,this.h_ratio=1):this.h_ratio=0,this.title=a('
          ').appendTo(this.renderer.labels_$),this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.NodeEditButton(this.renderer,null),new b.NodeRemoveButton(this.renderer,null),new b.NodeLinkButton(this.renderer,null),new b.NodeEnlargeButton(this.renderer,null),new b.NodeShrinkButton(this.renderer,null)],this.options.hide_nodes&&this.normal_buttons.push(new b.NodeHideButton(this.renderer,null),new b.NodeShowButton(this.renderer,null)),this.pending_delete_buttons=[new b.NodeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d$1'));var m=this.model.get("style")||{title_size:1,"title-color":"#00000"},n=m.title_size||1,o=m.title_color||this.options.node_title_color,p={"line-height":"1em"};1!==n&&(p["font-size"]=n.toFixed(1)+"em"),"#000000"!==o&&(p.color=o);var q=a("").css(p).html(l);this.title.empty().append(q);var r=this._getStrokeWidth();this.title.css({left:this.paper_coords.x,top:this.paper_coords.y+this.circle_radius*this.h_ratio+this.options.node_label_distance+.5*r,opacity:h});var s=this.model.has("style")&&this.model.get("style").color||(this.model.get("created_by")||f._USER_PLACEHOLDER(this.renkan)).get("color"),t=this.model.has("style")&&this.model.get("style").dash?this.options.default_dash_array:null;this.circle.strokeWidth=r,this.circle.strokeColor=s,this.circle.dashArray=t;var u=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(u)});var v=this.img;if(this.img=this.model.get("image"),this.img&&this.img!==v&&(this.showImage(),this.circle&&this.circle.sendToBack()),this.node_image&&!this.img&&(this.node_image.remove(),delete this.node_image),this.renderer.minimap){this.minimap_circle.fillColor=s;var w=this.renderer.toMinimapCoords(d),x=this.renderer.minimap.scale*e,y=new paper.Size([x,x]);this.minimap_circle.fitBounds(w.subtract(y),y.multiply(2))}if(!("undefined"!=typeof c&&"dontRedrawEdges"in c&&c.dontRedrawEdges)){var z=this;b.each(this.project.get("edges").filter(function(a){return a.get("to")===z.model||a.get("from")===z.model}),function(a,b,c){var d=z.renderer.getRepresentationByModel(a);d&&"undefined"!=typeof d.from_representation&&"undefined"!=typeof d.from_representation.paper_coords&&"undefined"!=typeof d.to_representation&&"undefined"!=typeof d.to_representation.paper_coords&&d.redraw()})}this.ghost?this.show(!0):this.hidden&&this.hide()},showImage:function(){var b=null;"undefined"==typeof this.renderer.image_cache[this.img]?(b=new Image,this.renderer.image_cache[this.img]=b,b.src=this.img):b=this.renderer.image_cache[this.img];var c=this;if(b.width){this.node_image&&this.node_image.remove(),this.renderer.node_layer.activate();var d=b.width,e=b.height,f=this.model.get("clip_path"),g="undefined"!=typeof f&&f,h=null,i=null,j=null;if(g){h=new paper.Path;var k=f.match(/[a-z][^a-z]+/gi)||[],l=[0,0],m=1/0,n=1/0,o=-(1/0),p=-(1/0),q=function(a,b){var c=a.slice(1).map(function(a,c){var f=parseFloat(a),g=c%2;return f=g?(f-.5)*e:(f-.5)*d,b&&(f+=l[g]),g?(n=Math.min(n,f),p=Math.max(p,f)):(m=Math.min(m,f),o=Math.max(o,f)),f});return l=c.slice(-2),c};k.forEach(function(a){var b=a.match(/([a-z]|[0-9.-]+)/gi)||[""];switch(b[0]){case"M":h.moveTo(q(b));break;case"m":h.moveTo(q(b,!0));break;case"L":h.lineTo(q(b));break;case"l":h.lineTo(q(b,!0));break;case"C":h.cubicCurveTo(q(b));break;case"c":h.cubicCurveTo(q(b,!0));break;case"Q":h.quadraticCurveTo(q(b));break;case"q":h.quadraticCurveTo(q(b,!0))}}),i=Math[this.options.node_images_fill_mode?"min":"max"](o-m,p-n)/2,j=new paper.Point((o+m)/2,(p+n)/2),this.options.show_node_circles||(this.h_ratio=(p-n)/(2*i))}else i=Math[this.options.node_images_fill_mode?"min":"max"](d,e)/2,j=new paper.Point(0,0),this.options.show_node_circles||(this.h_ratio=e/(2*i));var r=new paper.Raster(b);if(r.locked=!0,g&&(r=new paper.Group(h,r),r.opacity=.99,r.clipped=!0,h.__representation=this),this.options.clip_node_images){var s=this.shapeBuilder.getImageShape(j,i);r=new paper.Group(s,r),r.opacity=.99,r.clipped=!0,s.__representation=this}this.image_delta=j.divide(i),this.node_image=r,this.node_image.__representation=c,this.node_image.scale(this.circle_radius/i),this.node_image.position=this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius)),this.node_image.insertAbove(this.circle)}else a(b).on("load",function(){c.showImage()})},paperShift:function(a){this.options.editor_mode?this.renkan.read_only||(this.is_dragging=!0,this.paper_coords=this.paper_coords.add(a),this.redraw()):this.renderer.view.paperShift(a)},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("NodeEditor",null);a.source_representation=this,a.draw()},select:function(){clearTimeout(this.hide_timeout),this.selected=!0,this.circle.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&!this.hidden&&this.active_buttons.forEach(function(a){a.show()});var b=this.model.get("uri");b&&a(".Rk-Bin-Item").each(function(){var c=a(this);c.attr("data-uri")===b&&c.addClass("selected")}),this.options.editor_mode||this.openEditor(),this.renderer.minimap&&(this.minimap_circle.strokeWidth=this.options.minimap_highlight_weight,this.minimap_circle.strokeColor=this.options.minimap_highlight_color),this.hidden?this.show(!0):this.showNeighbors(!0),this._super("select")},hideButtons:function(){this.all_buttons.forEach(function(a){a.hide()}),delete this.buttonTimeout},unselect:function(b){if(!b||b.source_representation!==this){this.selected=!1;var c=this;this.buttons_timeout=setTimeout(function(){c.hideButtons()},200),this.circle.strokeWidth=this._getStrokeWidth(),a(".Rk-Bin-Item").removeClass("selected"),this.renderer.minimap&&(this.minimap_circle.strokeColor=void 0),this.hidden?(this.renderer.removeRepresentationsOfType("editor"),this.hide()):this.hideNeighbors(!0),this._super("unselect")}},hide_delay:function(){var a=this;this.hide_timeout=setTimeout(function(){a.hide()},1e3)},hide:function(){var a=this;this.ghost=!1,this.hidden=!0,"undefined"!=typeof this.node_image&&(this.node_image.opacity=0),this.hideButtons(),this.circle.opacity=0,this.title.css("opacity",0),this.minimap_circle.opacity=0,b.each(this.project.get("edges").filter(function(b){return b.get("to")===a.model||b.get("from")===a.model}),function(b,c,d){var e=a.renderer.getRepresentationByModel(b);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.hide()}),this.hideNeighbors(!1)},show:function(a){var c=this;this.ghost=a,this.ghost?("undefined"!=typeof this.node_image&&(this.node_image.opacity=this.options.ghost_opacity),this.circle.opacity=this.options.ghost_opacity,this.title.css("opacity",this.options.ghost_opacity),this.minimap_circle.opacity=this.options.ghost_opacity):(this.minimap_circle.opacity=1,this.hidden=!1,this.redraw()),b.each(this.project.get("edges").filter(function(a){return a.get("to")===c.model||a.get("from")===c.model}),function(a,b,d){var e=c.renderer.getRepresentationByModel(a);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.show(c.ghost)})},hideNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));f&&f.ghost&&(a?f.hide_delay():f.hide())})},showNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));if(f&&f.hidden&&(f.show(a),!a)){var g=c.renderer.view.hiddenNodes.indexOf(f.model.id);g!==-1&&c.renderer.view.hiddenNodes.splice(g,1)}})},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},saveCoords:function(){var a=this.renderer.toModelCoords(this.paper_coords),b={position:{x:a.x,y:a.y}};this.renderer.isEditable()&&this.model.set(b)},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){if(this.renderer.is_dragging&&this.renderer.isEditable())this.saveCoords();else if(this.hidden){var c=this.renderer.view.hiddenNodes.indexOf(this.model.id);c!==-1&&this.renderer.view.hiddenNodes.splice(c,1),this.show(!1),this.select()}else b||this.model.get("delete_scheduled")||this.openEditor(),this.model.trigger("clicked");this.renderer.click_target=null,this.renderer.is_dragging=!1,this.is_dragging=!1},destroy:function(a){this._super("destroy"),this.all_buttons.forEach(function(a){a.destroy()}),this.circle.remove(),this.title.remove(),this.renderer.minimap&&this.minimap_circle.remove(),this.node_image&&this.node_image.remove()}}).value(),g}),define("renderer/edge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){if(this.renderer.edge_layer.activate(),this.type="Edge",this.hidden=!1,this.ghost=!1,this.highlighted=!1,this.from_representation=this.renderer.getRepresentationByModel(this.model.get("from")),this.to_representation=this.renderer.getRepresentationByModel(this.model.get("to")),this.bundle=this.renderer.addToBundles(this),this.line=new paper.Path,this.line.add([0,0],[0,0],[0,0]),this.line.__representation=this,this.line.strokeWidth=this.options.edge_stroke_width,this.arrow_scale=1,this.arrow=new paper.Path,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.pivot=new paper.Point([this.options.edge_arrow_length/2,this.options.edge_arrow_width/2]),this.arrow.__representation=this,this.text=a('
          ').appendTo(this.renderer.labels_$),this.arrow_angle=0,this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.EdgeEditButton(this.renderer,null),new b.EdgeRemoveButton(this.renderer,null)],this.pending_delete_buttons=[new b.EdgeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d90&&(r-=180,s=s.multiply(-1)),r<-90&&(r+=180,s=s.multiply(-1));var x=this.model.get("title")||this.renkan.translate(this.options.label_untitled_edges)||"";x=e.shortenText(x,this.options.node_label_max_length),"object"==typeof this.highlighted?this.text.html(this.highlighted.replace(b(x).escape(),'$1')):this.text.text(x);var y=this.paper_coords.add(s);this.text.css({left:y.x,top:y.y,transform:"rotate("+r+"deg)","-moz-transform":"rotate("+r+"deg)","-webkit-transform":"rotate("+r+"deg)",opacity:d}),this.text_angle=r;var z=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(z)}),this.renderer.minimap&&(this.minimap_line.strokeColor=u,this.minimap_line.segments[0].point=this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position"))),this.minimap_line.segments[1].point=this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position"))))}},hide:function(){this.hidden=!0,this.ghost=!1,this.text.hide(),this.line.visible=!1,this.arrow.visible=!1,this.minimap_line.visible=!1},show:function(a){this.ghost=a,this.ghost?(this.text.css("opacity",.3),this.line.opacity=.3,this.arrow.opacity=.3,this.minimap_line.opacity=.3):(this.hidden=!1,this.text.css("opacity",1),this.line.opacity=1,this.arrow.opacity=1,this.minimap_line.opacity=1),this.text.show(),this.line.visible=!0,this.arrow.visible=!0,this.minimap_line.visible=!0,this.redraw()},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("EdgeEditor",null);a.source_representation=this,a.draw()},select:function(){this.selected=!0,this.line.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&this.active_buttons.forEach(function(a){a.show()}),this.options.editor_mode||this.openEditor(),this._super("select")},unselect:function(a){a&&a.source_representation===this||(this.selected=!1,this.options.editor_mode&&this.all_buttons.forEach(function(a){a.hide()}),this.hidden&&this.renderer.removeRepresentationsOfType("editor"),this.line.strokeWidth=this._getStrokeWidth(),this._super("unselect"))},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){!this.renkan.read_only&&this.renderer.is_dragging?(this.from_representation.saveCoords(),this.to_representation.saveCoords(),this.from_representation.is_dragging=!1,this.to_representation.is_dragging=!1):(b||this.openEditor(),this.model.trigger("clicked")),this.renderer.click_target=null,this.renderer.is_dragging=!1},paperShift:function(a){this.options.editor_mode?this.options.read_only||(this.from_representation.paperShift(a),this.to_representation.paperShift(a)):this.renderer.paperShift(a)},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},destroy:function(){this._super("destroy"),this.line.remove(),this.arrow.remove(),this.text.remove(),this.renderer.minimap&&this.minimap_line.remove(),this.all_buttons.forEach(function(a){a.destroy()});var a=this;this.bundle.edges=b.reject(this.bundle.edges,function(b){return a===b})}}).value(),f}),define("renderer/tempedge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.edge_layer.activate(),this.type="Temp-edge",this.origin=e.OriginEnum.NONE;var a=(this.project.get("users").get(this.renkan.current_user)||e._USER_PLACEHOLDER(this.renkan)).get("color");this.line=new paper.Path,this.line.strokeColor=a,this.line.dashArray=[4,2],this.line.strokeWidth=this.options.selected_edge_stroke_width,this.line.add([0,0],[0,0]),this.line.__representation=this,this.arrow=new paper.Path,this.arrow.fillColor=a,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.__representation=this,this.arrow_angle=0},redraw:function(){var a=this.from_representation.paper_coords,b=this.end_pos,c=b.subtract(a).angle,d=a.add(b).divide(2);this.line.segments[0].point=a,this.line.segments[1].point=b,this.arrow.rotate(c-this.arrow_angle),this.arrow.position=d,this.arrow_angle=c},paperShift:function(a){if(!this.renderer.isEditable())return this.renderer.removeRepresentation(_this),void paper.view.draw();this.end_pos=this.end_pos.add(a);var b=paper.project.hitTest(this.end_pos);this.renderer.findTarget(b),this.redraw()},mouseup:function(a,b){var c=paper.project.hitTest(a.point),d=this.from_representation.model,f=!0;if(c&&"undefined"!=typeof c.item.__representation){var g=c.item.__representation;if("Node"===g.type.substr(0,4)){var h=g.model||g.source_representation.model;if(d!==h){var i={id:e.getUID("edge"),created_by:this.renkan.current_user,from:d,to:h,origin:this.origin};this.renderer.isEditable()&&this.project.addEdge(i)}}(d===g.model||g.source_representation&&g.source_representation.model===d)&&(f=!1,this.renderer.is_dragging=!0)}f&&(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentation(this),paper.view.draw())},destroy:function(){this.arrow.remove(),this.line.remove()}}).value(),f}),define("renderer/baseeditor",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.buttons_layer.activate(),this.type="editor",this.editor_block=new paper.Path;var c=b.map(b.range(8),function(){return[0,0]});this.editor_block.add.apply(this.editor_block,c),this.editor_block.strokeWidth=this.options.tooltip_border_width,this.editor_block.strokeColor=this.options.tooltip_border_color,this.editor_block.opacity=this.options.tooltip_opacity,this.editor_$=a("
          ").appendTo(this.renderer.editor_$).css({position:"absolute",opacity:this.options.tooltip_opacity}).hide()},destroy:function(){this.editor_block.remove(),this.editor_$.remove()}}).value(),f}),define("renderer/nodeeditor",["jquery","underscore","requtils","renderer/baseeditor","renderer/shapebuilder","ckeditor-core"],function(a,b,c,d,e,f){"use strict";var g=c.getUtils(),h=g.inherit(d);return b(h.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/nodeeditor.html"],this.readOnlyTemplate=this.options.node_editor_templates},draw:function(){var c=this.source_representation.model,d=c.get("created_by")||g._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate[c.get("type")]||this.readOnlyTemplate.default,i=this.options.static_url+"img/image-placeholder.png",j=c.get("size")||0;this.editor_$.html(h({node:{_id:c.get("_id"),has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),type:c.get("type")||"default",short_uri:g.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),image:c.get("image")||"",image_placeholder:i,color:c.has("style")&&c.get("style").color||d.get("color"),title_size:c.has("style")&&c.get("style").title_size||1,title_color:c.has("style")&&c.get("style").title_color||this.options.node_title_color, -thickness:c.has("style")&&c.get("style").thickness||1,dash:c.has("style")&&c.get("style").dash?"checked":"",clip_path:c.get("clip_path")||!1,created_by_color:d.get("color"),created_by_title:d.get("title"),size:(j>0?"+":"")+j,shape:c.get("shape")||"circle"},renkan:this.renkan,options:this.options,shortenText:g.shortenText,shapes:b(e.builders).omit("svg").keys().value(),types:b(this.options.node_editor_templates).keys().value()})),this.redraw();var k=this,l=!(!this.renderer.isEditable()||!k.options.show_node_editor_description_richtext)&&f.inline("Rk-Edit-Description-"+c.get("_id"),k.options.richtext_editor_config),m=!(!this.renderer.isEditable()||!k.options.show_node_editor_title_richtext)&&f.inline("Rk-Edit-Title-"+c.get("_id"),k.options.richtext_editor_config),n=function(){k.renderer.removeRepresentation(k),paper.view.draw()};if(k.cleanEditor=function(){k.editor_$.off("keyup"),k.editor_$.find("input, textarea, select").off("change keyup paste"),k.editor_$.find(".Rk-Edit-Image-File").off("change"),k.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").off("hover"),k.editor_$.find(".Rk-Edit-Size-Btn").off("click"),k.editor_$.find(".Rk-Edit-Image-Del").off("click"),k.editor_$.find(".Rk-Edit-ColorPicker").find("li").off("hover click"),k.editor_$.find(".Rk-CloseX").off("click"),k.editor_$.find(".Rk-Edit-Goto").off("click"),k.options.show_node_editor_description_richtext&&l&&(l.focusManager.blur(!0),l.destroy()),k.options.show_node_editor_title_richtext&&m&&(m.focusManager.blur(!0),m.destroy())},this.editor_$.find(".Rk-CloseX").click(function(a){a.preventDefault(),n()}),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var o=b.debounce(function(){b.defer(function(){if(k.renderer.isEditable()){var a={};if(k.options.show_node_editor_uri&&(a.uri=k.editor_$.find(".Rk-Edit-URI").val(),k.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#")),k.options.show_node_editor_image&&(a.image=k.editor_$.find(".Rk-Edit-Image").val(),k.editor_$.find(".Rk-Edit-ImgPreview").attr("src",a.image||i)),k.options.show_node_editor_description&&(k.options.show_node_editor_description_richtext?l&&l.checkDirty()&&(a.description=l.getData(),l.resetDirty()):a.description=k.editor_$.find(".Rk-Edit-Description").val()),k.options.show_node_editor_title&&(k.options.show_node_editor_title_richtext?m&&m.checkDirty()&&(a.title=m.getData(),m.resetDirty()):a.title=k.editor_$.find(".Rk-Edit-Title").val()),k.options.show_node_editor_style){var d=k.editor_$.find(".Rk-Edit-Dash").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d})}k.options.change_shapes&&c.get("shape")!==k.editor_$.find(".Rk-Edit-Shape").val()&&(a.shape=k.editor_$.find(".Rk-Edit-Shape").val()),k.options.change_types&&c.get("type")!==k.editor_$.find(".Rk-Edit-Type").val()&&(a.type=k.editor_$.find(".Rk-Edit-Type").val()),c.set(a),k.redraw()}else n()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&n()}),this.editor_$.find("input, textarea, select").on("change keyup paste",o),k.options.show_node_editor_description&&k.options.show_node_editor_description_richtext&&l&&(l.on("change",o),l.on("blur",o)),k.options.show_node_editor_title&&k.options.show_node_editor_title_richtext&&m&&(m.on("change",o),m.on("blur",o)),k.options.allow_image_upload&&this.editor_$.find(".Rk-Edit-Image-File").change(function(){if(this.files.length){var a=this.files[0],b=new FileReader;if("image"!==a.type.substr(0,5))return void alert(k.renkan.translate("This file is not an image"));if(a.size>1024*k.options.uploaded_image_max_kb)return void alert(k.renkan.translate("Image size must be under ")+k.options.uploaded_image_max_kb+k.renkan.translate("KB"));b.onload=function(a){k.editor_$.find(".Rk-Edit-Image").val(a.target.result),o()},b.readAsDataURL(a)}}),this.editor_$.find(".Rk-Edit-Title")[0].focus();var p=k.editor_$.find(".Rk-Editor-ColorPicker-Node");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),p.show()},function(a){a.preventDefault(),p.hide()}),p.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||g._USER_PLACEHOLDER(k.renkan)).get("color"))}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),p.hide(),paper.view.draw()):n()});var q=function(a){if(k.renderer.isEditable()){var b=a+(c.get("size")||0);k.editor_$.find("#Rk-Edit-Size-Value").text((b>0?"+":"")+b),c.set("size",b),paper.view.draw()}else n()};this.editor_$.find("#Rk-Edit-Size-Down").click(function(){return q(-1),!1}),this.editor_$.find("#Rk-Edit-Size-Up").click(function(){return q(1),!1});var r=function(a){if(k.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>k.options.node_stroke_witdh_scale&&(e=k.options.node_stroke_witdh_scale),e!==d&&(k.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else n()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return r(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return r(1),!1});var s=function(a){var d=k.options.node_title_size_min,e=k.options.node_title_size_max;if(k.renderer.isEditable()){var f=c.has("style")&&c.get("style").title_size||1,g=a+f;ge&&(g=e),g!==f&&(k.editor_$.find("#Rk-Edit-Title-Size-Value").text(g.toFixed(1)),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_size:g})),paper.view.draw())}else n()},t=k.editor_$.find(".Rk-Editor-ColorPicker-Title");this.editor_$.find(".Rk-Editor-p-title-color").hover(function(a){a.preventDefault(),t.show()},function(a){a.preventDefault(),t.hide()}),t.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault();var b=c.has("style")&&c.get("style").title_color||k.options.node_fill_color;k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",b)}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_color:a(this).attr("data-color")})),t.hide(),paper.view.draw()):n()}),this.editor_$.find("#Rk-Edit-Title-Size-Down").click(function(){var a=k.options.node_title_size_step;return s(-a),!1}),this.editor_$.find("#Rk-Edit-Title-Size-Up").click(function(){var a=k.options.node_title_size_step;return s(a),!1}),this.editor_$.find(".Rk-Edit-Image-Del").click(function(){return k.editor_$.find(".Rk-Edit-Image").val(""),o(),!1})}else if("object"==typeof this.source_representation.highlighted){var u=this.source_representation.highlighted.replace(b(c.get("title")).escape(),'$1');this.editor_$.find(".Rk-Display-Title"+(c.get("uri")?" a":"")).html(u),this.options.show_node_tooltip_description&&this.editor_$.find(".Rk-Display-Description").html(this.source_representation.highlighted.replace(b(c.get("description")).escape(),'$1'))}this.editor_$.find("img").load(function(){k.redraw()})},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;g.drawEditBox(this.options,a,this.editor_block,.75*this.source_representation.circle_radius,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()},destroy:function(){"undefined"!=typeof this.cleanEditor&&this.cleanEditor(),this.editor_block.remove(),this.editor_$.remove()}}).value(),h}),define("renderer/edgeeditor",["jquery","underscore","requtils","renderer/baseeditor"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/edgeeditor.html"],this.readOnlyTemplate=this.options.templates["templates/edgeeditor_readonly.html"]},draw:function(){var c=this.source_representation.model,d=c.get("from"),f=c.get("to"),g=c.get("created_by")||e._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate;this.editor_$.html(h({edge:{has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),short_uri:e.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),color:c.has("style")&&c.get("style").color||g.get("color"),dash:c.has("style")&&c.get("style").dash?"checked":"",arrow:c.has("style")&&c.get("style").arrow||!c.has("style")||"undefined"==typeof c.get("style").arrow?"checked":"",thickness:c.has("style")&&c.get("style").thickness||1,from_title:d.get("title"),to_title:f.get("title"),from_color:d.has("style")&&d.get("style").color||(d.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),to_color:f.has("style")&&f.get("style").color||(f.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),created_by_color:g.get("color"),created_by_title:g.get("title")},renkan:this.renkan,shortenText:e.shortenText,options:this.options})),this.redraw();var i=this,j=function(){i.renderer.removeRepresentation(i),i.editor_$.find(".Rk-Edit-Size-Btn").off("click"),paper.view.draw()};if(this.editor_$.find(".Rk-CloseX").click(j),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var k=b.debounce(function(){b.defer(function(){if(i.renderer.isEditable()){var a={title:i.editor_$.find(".Rk-Edit-Title").val()};if(i.options.show_edge_editor_uri&&(a.uri=i.editor_$.find(".Rk-Edit-URI").val()),i.options.show_node_editor_style){var d=i.editor_$.find(".Rk-Edit-Dash").is(":checked"),e=i.editor_$.find(".Rk-Edit-Arrow").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d,arrow:e})}i.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#"),c.set(a),paper.view.draw()}else j()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&j()}),this.editor_$.find("input").on("keyup change paste",k),this.editor_$.find(".Rk-Edit-Vocabulary").change(function(){var b=a(this),c=b.val();c&&(i.editor_$.find(".Rk-Edit-Title").val(b.find(":selected").text()),i.editor_$.find(".Rk-Edit-URI").val(c),k())}),this.editor_$.find(".Rk-Edit-Direction").click(function(){i.renderer.isEditable()?(c.set({from:c.get("to"),to:c.get("from")}),i.draw()):j()});var l=i.editor_$.find(".Rk-Editor-ColorPicker-Edge");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),l.show()},function(a){a.preventDefault(),l.hide()}),l.find("li").hover(function(b){b.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||e._USER_PLACEHOLDER(i.renkan)).get("color"))}).click(function(d){d.preventDefault(),i.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),l.hide(),paper.view.draw()):j()});var m=function(a){if(i.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>i.options.node_stroke_witdh_scale&&(e=i.options.node_stroke_witdh_scale),e!==d&&(i.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else j()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return m(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return m(1),!1})}},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;e.drawEditBox(this.options,a,this.editor_block,5,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()}}).value(),f}),define("renderer/nodebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({setSectorSize:function(){var a=this.source_representation.circle_radius;a!==this.lastSectorInner&&(this.sector&&this.sector.destroy(),this.sector=this.renderer.drawSector(this,1+a,e._NODE_BUTTON_WIDTH+a,this.startAngle,this.endAngle,1,this.imageName,this.renkan.translate(this.text)),this.lastSectorInner=a)},unselect:function(){d.prototype.unselect.apply(this,Array.prototype.slice.call(arguments,1)),this.source_representation&&this.source_representation.buttons_timeout&&(clearTimeout(this.source_representation.buttons_timeout),this.source_representation.hideButtons())},select:function(){this.source_representation&&this.source_representation.buttons_timeout&&clearTimeout(this.source_representation.buttons_timeout),this.sector.select()}}).value(),f}),define("renderer/nodeeditbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-edit-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-125:-135,this.endAngle=this.options.hide_nodes?-55:-45,this.imageName="edit",this.text="Edit"},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/noderemovebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-remove-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-10:0,this.endAngle=this.options.hide_nodes?45:90,this.imageName="remove",this.text="Remove"},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove node ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeNode(this.source_representation.model)}}).value(),f}),define("renderer/nodehidebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-hide-button",this.lastSectorInner=0,this.startAngle=45,this.endAngle=90,this.imageName="hide",this.text="Hide"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.renderer.view.addHiddenNode(this.source_representation.model)}}).value(),f}),define("renderer/nodeshowbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-show-button",this.lastSectorInner=0,this.startAngle=90,this.endAngle=135,this.imageName="show",this.text="Show neighbors"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.source_representation.showNeighbors(!1)}}).value(),f}),define("renderer/noderevertbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-revert-button",this.lastSectorInner=0,this.startAngle=-135,this.endAngle=135,this.imageName="revert",this.text="Cancel deletion"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/nodelinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-link-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?135:90,this.endAngle=this.options.hide_nodes?190:180,this.imageName="link",this.text="Link to another node"},mousedown:function(a,b){if(this.renderer.isEditable()){var c=this.renderer.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]);this.renderer.click_target=null,this.renderer.removeRepresentationsOfType("editor"),this.renderer.addTempEdge(this.source_representation,d,e.OriginEnum.EDGE_BUTTON_CIRCLE)}}}).value(),f}),define("renderer/nodeenlargebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-enlarge-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-55:-45,this.endAngle=this.options.hide_nodes?-10:0,this.imageName="enlarge",this.text="Enlarge"},mouseup:function(){var a=1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/nodeshrinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-shrink-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-170:-180,this.endAngle=this.options.hide_nodes?-125:-135,this.imageName="shrink",this.text="Shrink"},mouseup:function(){var a=-1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/edgeeditbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-edit-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-270,-90,1,"edit",this.renkan.translate("Edit"))},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/edgeremovebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-remove-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-90,90,1,"remove",this.renkan.translate("Remove"))},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove edge ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeEdge(this.source_representation.model)}}).value(),f}),define("renderer/edgerevertbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-revert-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-135,135,1,"revert",this.renkan.translate("Cancel deletion"))},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/miniframe",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({paperShift:function(a){this.renderer.offset=this.renderer.offset.subtract(a.divide(this.renderer.minimap.scale).multiply(this.renderer.scale)),this.renderer.redraw()},mouseup:function(a){this.renderer.click_target=null,this.renderer.is_dragging=!1}}).value(),f}),define("renderer/scene",["jquery","underscore","filesaver","requtils","renderer/miniframe","screenfull"],function(a,b,c,d,e,f){"use strict";var g=d.getUtils(),h=function(c){this.renkan=c,this.$=a(".Rk-Render"),this.representations=[],this.$.html(c.options.templates["templates/scene.html"](c)),this.onStatusChange(),this.canvas_$=this.$.find(".Rk-Canvas"),this.labels_$=this.$.find(".Rk-Labels"),c.options.popup_editor?this.editor_$=this.$.find(".Rk-Editor"):this.editor_$=a("#"+c.options.editor_panel),this.notif_$=this.$.find(".Rk-Notifications"),paper.setup(this.canvas_$[0]),this.totalScroll=0,this.mouse_down=!1,this.click_target=null,this.selected_target=null,this.edge_layer=new paper.Layer,this.node_layer=new paper.Layer,this.buttons_layer=new paper.Layer,this.delete_list=[],this.redrawActive=!1,c.options.show_minimap&&(this.minimap={background_layer:new paper.Layer,edge_layer:new paper.Layer,node_layer:new paper.Layer,node_group:new paper.Group,size:new paper.Size(c.options.minimap_width,c.options.minimap_height)},this.minimap.background_layer.activate(),this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle=new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.rectangle.fillColor=c.options.minimap_background_color,this.minimap.rectangle.strokeColor=c.options.minimap_border_color,this.minimap.rectangle.strokeWidth=4,this.minimap.offset=new paper.Point(this.minimap.size.divide(2)),this.minimap.scale=.1,this.minimap.node_layer.activate(),this.minimap.cliprectangle=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.cliprectangle),this.minimap.node_group.clipped=!0,this.minimap.miniframe=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.miniframe),this.minimap.miniframe.fillColor="#c0c0ff",this.minimap.miniframe.opacity=.3,this.minimap.miniframe.strokeColor="#000080",this.minimap.miniframe.strokeWidth=2,this.minimap.miniframe.__representation=new e(this,null)),this.throttledPaperDraw=b(function(){paper.view.draw()}).throttle(100).value(),this.bundles=[],this.click_mode=!1;var d=this,h=!0,i=1,j=!1,k=0,l=0,m=0;this.image_cache={},this.icon_cache={},["edit","remove","hide","show","link","enlarge","shrink","revert"].forEach(function(a){var b=new Image;b.src=c.options.static_url+"img/"+a+".png",d.icon_cache[a]=b});var n=b.throttle(function(a,b){d.onMouseMove(a,b)},g._MOUSEMOVE_RATE);this.canvas_$.on({mousedown:function(a){a.preventDefault(),d.onMouseDown(a,!1)},mousemove:function(a){a.preventDefault(),n(a,!1)},mouseup:function(a){a.preventDefault(),d.onMouseUp(a,!1)},mousewheel:function(a,b){c.options.zoom_on_scroll&&(a.preventDefault(),h&&d.onScroll(a,b))},touchstart:function(a){a.preventDefault();var b=a.originalEvent.touches[0];c.options.allow_double_click&&new Date-m0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show(),this.$.find(".Rk-CurrentUser").mouseenter(function(){d.$.find(".Rk-UserList").slideDown()}),this.$.find(".Rk-Users").mouseleave(function(){d.$.find(".Rk-UserList").slideUp()}),f.enabled?(o(".Rk-FullScreen-Button","fullScreen"),document.addEventListener(f.raw.fullscreenchange,function(){setTimeout(function(){var a=d.$.width(),b=d.$.height();d.renkan.options.show_top_bar&&(b-=d.$.find(".Rk-TopBar").height()),d.renkan.options.show_bins&&this.renkan.$.find(".Rk-Bins").position().left>0&&(a-=this.renkan.$.find(".Rk-Bins").width()),paper.view.viewSize=new paper.Size([a,b]),d.resize(d.currentWidth,a,d.currentHeight,b),d.currentWidth=a,d.currentHeight=b,f.isFullscreen||(paper.view.onResize=function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)})},600)})):(this.$.find(".Rk-FullScreen-Button").addClass("disabled"),this.$.find(".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents").html(this.renkan.translate("Fullscreen not supported by your browser"))),o(".Rk-AddNode-Button","addNodeBtn"),o(".Rk-AddEdge-Button","addEdgeBtn"),o(".Rk-Save-Button","save"),o(".Rk-Open-Button","open"),o(".Rk-Export-Button","exportProject"),this.$.find(".Rk-Bookmarklet-Button").attr("href","javascript:"+g._BOOKMARKLET_CODE(c)).click(function(){return d.notif_$.text(c.translate("Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.")).fadeIn().delay(5e3).fadeOut(),!1}),this.$.find(".Rk-TopBar-Button").mouseover(function(){a(this).find(".Rk-TopBar-Tooltip").show()}).mouseout(function(){a(this).find(".Rk-TopBar-Tooltip").hide()}),o(".Rk-Fold-Bins","foldBins"),paper.view.on("resize",function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)});var p=b.throttle(function(){d.redraw()},50);this.addRepresentations("Node",this.renkan.project.get("nodes")),this.addRepresentations("Edge",this.renkan.project.get("edges")),this.renkan.project.on("change:title",function(){d.$.find(".Rk-PadTitle").val(c.project.get("title")).prop("title",c.project.get("title"))}),this.$.find(".Rk-PadTitle").on("keyup input paste",function(){c.project.set({title:a(this).val()})});var q=b.throttle(function(){d.redrawUsers()},100);if(q(),this.renkan.project.on("change:saveStatus",function(){switch(d.renkan.project.get("saveStatus")){case 0:d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("saved");break;case 1:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("to-save");break;case 2:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").addClass("saving")}}),this.renkan.project.on("loaded",function(){d.renkan.options.url_parameters?Backbone.history.start():d.fixSize(),d.redrawActive=!0,p()}),this.renkan.router.on("router",function(a){d.setViewParameters(a)}),this.renkan.project.on("change:loadingStatus",function(){if(d.renkan.project.get("loadingStatus")){d.$.find(".loader").addClass("run"),setTimeout(function(){d.$.find(".loader").hide(250)},3e3)}}),this.renkan.project.on("add:users remove:users",q),this.renkan.project.on("add:views remove:views",function(a){d.renkan.project.get("views").length>1?d.$.find(".Rk-ZoomSetSaved").show():d.$.find(".Rk-ZoomSetSaved").hide()}),this.renkan.project.on("add:nodes",function(a){d.addRepresentation("Node",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("add:edges",function(a){d.addRepresentation("Edge",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("change:title",function(a,b){var c=d.$.find(".Rk-PadTitle");c.is("input")?c.val()!==b&&c.val(b):c.text(b)}),c.options.size_bug_fix){var r="number"==typeof c.options.size_bug_fix?c.options.size_bug_fix:500;window.setTimeout(function(){d.fixSize()},r)}if(c.options.force_resize&&a(window).resize(function(){d.autoScale()}),c.options.show_user_list&&c.options.user_color_editable){var s=this.$.find(".Rk-Users .Rk-Edit-ColorPicker-Wrapper"),t=this.$.find(".Rk-Users .Rk-Editor-ColorPicker-User");s.hover(function(a){d.isEditable()&&(a.preventDefault(),t.show())},function(a){a.preventDefault(),t.hide()}),t.find("li").mouseenter(function(b){d.isEditable()&&(b.preventDefault(),d.$.find(".Rk-CurrentUser-Color").css("background",a(this).attr("data-color")))})}if(c.options.show_search_field){var u="";this.$.find(".Rk-GraphSearch-Field").on("keyup change paste input",function(){var b=a(this),e=b.val();if(e!==u)if(u=e,e.length<2)c.project.get("nodes").each(function(a){d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){d.getRepresentationByModel(a).unhighlight()});else{var f=g.regexpFromTextOrArray(e);c.project.get("nodes").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()})}})}this.redraw(),window.setInterval(function(){var a=(new Date).valueOf();d.delete_list.forEach(function(b){if(a>=b.time){var d=c.project.get("nodes").findWhere({delete_scheduled:b.id});d&&project.removeNode(d),d=c.project.get("edges").findWhere({delete_scheduled:b.id}),d&&project.removeEdge(d)}}),d.delete_list=d.delete_list.filter(function(a){return c.project.get("nodes").findWhere({delete_scheduled:a.id})||c.project.get("edges").findWhere({delete_scheduled:a.id})})},500),this.minimap&&window.setInterval(function(){d.rescaleMinimap()},2e3)};return b(h.prototype).extend({fixSize:function(){"undefined"==typeof this.view&&(this.view=this.addRepresentation("View",this.renkan.project.get("views").last())),this.view.autoScale()},drawSector:function(b,c,d,e,f,g,h,i){var j=this.renkan.options,k=e*Math.PI/180,l=f*Math.PI/180,m=this.icon_cache[h],n=-Math.sin(k),o=Math.cos(k),p=Math.cos(k)*c+g*n,q=Math.sin(k)*c+g*o,r=Math.cos(k)*d+g*n,s=Math.sin(k)*d+g*o,t=-Math.sin(l),u=Math.cos(l),v=Math.cos(l)*c-g*t,w=Math.sin(l)*c-g*u,x=Math.cos(l)*d-g*t,y=Math.sin(l)*d-g*u,z=(c+d)/2,A=(k+l)/2,B=Math.cos(A)*z,C=Math.sin(A)*z,D=Math.cos(A)*c,E=Math.cos(A)*d,F=Math.sin(A)*c,G=Math.sin(A)*d,H=Math.cos(A)*(d+3),I=Math.sin(A)*(d+j.buttons_label_font_size)+j.buttons_label_font_size/2;this.buttons_layer.activate();var J=new paper.Path;J.add([p,q]),J.arcTo([D,F],[v,w]),J.lineTo([x,y]),J.arcTo([E,G],[r,s]),J.fillColor=j.buttons_background,J.opacity=.5, -J.closed=!0,J.__representation=b;var K=new paper.PointText(H,I);K.characterStyle={fontSize:j.buttons_label_font_size,fillColor:j.buttons_label_color},H>2?K.paragraphStyle.justification="left":H<-2?K.paragraphStyle.justification="right":K.paragraphStyle.justification="center",K.visible=!1;var L=!1,M=new paper.Point(-200,-200),N=new paper.Group([J,K]),O=N.position,P=new paper.Point([B,C]),Q=new paper.Point(0,0);K.content=i,N.pivot=N.bounds.center,N.visible=!1,N.position=M;var R={show:function(){L=!0,N.position=Q.add(O),N.visible=!0},moveTo:function(a){Q=a,L&&(N.position=a.add(O))},hide:function(){L=!1,N.visible=!1,N.position=M},select:function(){J.opacity=.8,K.visible=!0},unselect:function(){J.opacity=.5,K.visible=!1},destroy:function(){N.remove()}},S=function(){var a=new paper.Raster(m);a.position=P.add(N.position).subtract(O),a.locked=!0,N.addChild(a)};return m.width?S():a(m).on("load",S),R},addToBundles:function(a){var c=b(this.bundles).find(function(b){return b.from===a.from_representation&&b.to===a.to_representation||b.from===a.to_representation&&b.to===a.from_representation});return"undefined"!=typeof c?c.edges.push(a):(c={from:a.from_representation,to:a.to_representation,edges:[a],getPosition:function(a){var c=a.from_representation===this.from?1:-1;return c*(b(this.edges).indexOf(a)-(this.edges.length-1)/2)}},this.bundles.push(c)),c},isEditable:function(){return this.renkan.options.editor_mode&&!this.renkan.read_only},onStatusChange:function(){var a=this.$.find(".Rk-Save-Button"),b=a.find(".Rk-TopBar-Tooltip-Contents");this.renkan.read_only?(a.removeClass("disabled Rk-Save-Online").addClass("Rk-Save-ReadOnly"),b.text(this.renkan.translate("Connection lost"))):this.renkan.options.manual_save?(a.removeClass("Rk-Save-ReadOnly Rk-Save-Online"),b.text(this.renkan.translate("Save Project"))):(a.removeClass("disabled Rk-Save-ReadOnly").addClass("Rk-Save-Online"),b.text(this.renkan.translate("Auto-save enabled"))),this.redrawUsers()},redrawMiniframe:function(){var a=this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),b=this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));this.minimap.miniframe.fitBounds(a,b)},rescaleMinimap:function(){var a=this.renkan.project.get("nodes");if(a.length>1){var b=a.map(function(a){return a.get("position").x}),c=a.map(function(a){return a.get("position").y}),d=Math.min.apply(Math,b),e=Math.min.apply(Math,c),f=Math.max.apply(Math,b),g=Math.max.apply(Math,c),h=Math.min(.8*this.view.scale*this.renkan.options.minimap_width/paper.view.bounds.width,.8*this.view.scale*this.renkan.options.minimap_height/paper.view.bounds.height,(this.renkan.options.minimap_width-2*this.renkan.options.minimap_padding)/(f-d),(this.renkan.options.minimap_height-2*this.renkan.options.minimap_padding)/(g-e));this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([(f+d)/2,(g+e)/2]).multiply(h)),this.minimap.scale=h}1===a.length&&(this.minimap.scale=.1,this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([a.at(0).get("position").x,a.at(0).get("position").y]).multiply(this.minimap.scale))),this.redraw()},toPaperCoords:function(a){return a.multiply(this.view.scale).add(this.view.offset)},toMinimapCoords:function(a){return a.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft)},toModelCoords:function(a){return a.subtract(this.view.offset).divide(this.view.scale)},addRepresentation:function(a,b){var c=d.getRenderer()[a],e=new c(this,b);return this.representations.push(e),e},addRepresentations:function(a,b){var c=this;b.forEach(function(b){c.addRepresentation(a,b)})},userTemplate:b.template('
        • <%=name%>
        • '),redrawUsers:function(){if(this.renkan.options.show_user_list){var b=[].concat((this.renkan.project.current_user_list||{}).models||[],(this.renkan.project.get("users")||{}).models||[]),c="",d=this.$.find(".Rk-Users"),e=d.find(".Rk-CurrentUser-Name"),f=d.find(".Rk-Edit-ColorPicker li"),g=d.find(".Rk-CurrentUser-Color"),h=this;e.off("click").text(this.renkan.translate("")),f.off("mouseleave click"),b.forEach(function(b){b.get("_id")===h.renkan.current_user?(e.text(b.get("title")),g.css("background",b.get("color")),h.isEditable()&&(h.renkan.options.user_name_editable&&e.click(function(){var c=a(this),d=a("").val(b.get("title")).blur(function(){b.set("title",a(this).val()),h.redrawUsers(),h.redraw()});c.empty().html(d),d.select()}),h.renkan.options.user_color_editable&&f.click(function(c){c.preventDefault(),h.isEditable()&&b.set("color",a(this).attr("data-color")),a(this).parent().hide()}).mouseleave(function(){g.css("background",b.get("color"))}))):c+=h.userTemplate({name:b.get("title"),background:b.get("color")})}),d.find(".Rk-UserList").html(c)}},removeRepresentation:function(a){a.destroy(),this.representations=b.reject(this.representations,function(b){return b===a})},getRepresentationByModel:function(a){if(a)return b.find(this.representations,function(b){return b.model===a})},removeRepresentationsOfType:function(a){var c=b.filter(this.representations,function(b){return b.type===a}),d=this;b.each(c,function(a){d.removeRepresentation(a)})},highlightModel:function(a){var b=this.getRepresentationByModel(a);b&&b.highlight()},unhighlightAll:function(a){b.each(this.representations,function(a){a.unhighlight()})},unselectAll:function(a){b.each(this.representations,function(a){a.unselect()})},redraw:function(){this.redrawActive&&(b.each(this.representations,function(a){a.redraw({dontRedrawEdges:!0})}),this.minimap&&"undefined"!=typeof this.view&&this.redrawMiniframe(),paper.view.draw())},resize:function(a,b,c,d){var e;this.minimap&&(this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.cliprectangle.fitBounds(this.minimap.topleft,this.minimap.size));var f=d/c,g=b/a;e=dg._MIN_DRAG_DISTANCE&&(this.is_dragging=!0);var e=paper.project.hitTest(c);this.is_dragging?this.click_target&&"function"==typeof this.click_target.paperShift?this.click_target.paperShift(d):this.view.paperShift(d):this.findTarget(e),paper.view.draw()},onMouseDown:function(b,c){var d=this.canvas_$.offset(),e=new paper.Point([b.pageX-d.left,b.pageY-d.top]);if(this.last_point=e,this.mouse_down=!0,!this.click_target||"Temp-edge"!==this.click_target.type){this.removeRepresentationsOfType("editor"),this.is_dragging=!1;var f=paper.project.hitTest(e);if(f&&"undefined"!=typeof f.item.__representation)this.click_target=f.item.__representation,this.click_target.mousedown(b,c);else if(this.click_target=null,this.isEditable()&&this.click_mode===g._CLICKMODE_ADDNODE){var h=this.toModelCoords(e),i={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:h.x,y:h.y},origin:g.OriginEnum.NODE_BUTTON},j=this.renkan.project.addNode(i);this.getRepresentationByModel(j).openEditor()}}this.click_mode&&(this.isEditable()&&this.click_mode===g._CLICKMODE_STARTEDGE&&this.click_target&&"Node"===this.click_target.type?(this.removeRepresentationsOfType("editor"),this.addTempEdge(this.click_target,e,g.OriginEnum.EDGE_BUTTON_BAR),this.click_mode=g._CLICKMODE_ENDEDGE,this.notif_$.fadeOut(function(){a(this).html(this.renkan.translate("Click on a second node to complete the edge")).fadeIn()})):(this.notif_$.hide(),this.click_mode=!1)),paper.view.draw()},onMouseUp:function(a,b){if(this.mouse_down=!1,this.click_target){var c=this.canvas_$.offset();this.click_target.mouseup({point:new paper.Point([a.pageX-c.left,a.pageY-c.top])},b)}else this.click_target=null,this.is_dragging=!1,b&&this.unselectAll(),this.view.updateUrl();paper.view.draw()},onScroll:function(a,b){if(this.totalScroll+=b,Math.abs(this.totalScroll)>=1){var c=this.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]).subtract(this.view.offset).multiply(Math.SQRT2-1);this.totalScroll>0?this.view.setScale(this.view.scale*Math.SQRT2,this.view.offset.subtract(d)):this.view.setScale(this.view.scale*Math.SQRT1_2,this.view.offset.add(d.divide(Math.SQRT2))),this.totalScroll=0}},onClick:function(a){if(!this.isEditable()){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);!this._open_uri_cb&&this.renkan.options.simple_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&(this._node_click_open_url=setTimeout(function(){window.open(d.item.__representation.model.get("uri"),"_blank"),this._node_click_open_url=null}.bind(this),200))}},onDoubleClick:function(a){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);if(!this.isEditable())return void(this.renkan.options.double_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&window.open(d.item.__representation.model.get("uri"),"_blank"));if(this.isEditable()&&(!d||"undefined"==typeof d.item.__representation)){var e=this.toModelCoords(c),f={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:e.x,y:e.y},origin:g.OriginEnum.NODE_DOUBLE_CLICK},h=this.renkan.project.addNode(f);this.getRepresentationByModel(h).openEditor()}paper.view.draw()},defaultDropHandler:function(b){var c={},d="";switch(b["text/x-iri-specific-site"]){case"twitter":d=a("
          ").html(b["text/x-iri-selected-html"]);var e=d.find(".tweet");c.title=this.renkan.translate("Tweet by ")+e.attr("data-name"),c.uri="http://twitter.com/"+e.attr("data-screen-name")+"/status/"+e.attr("data-tweet-id"),c.image=e.find(".avatar").attr("src"),c.description=e.find(".js-tweet-text:first").text();break;case"google":d=a("
          ").html(b["text/x-iri-selected-html"]),c.title=d.find("h3:first").text().trim(),c.uri=d.find("h3 a").attr("href"),c.description=d.find(".st:first").text().trim();break;default:b["text/x-iri-source-uri"]&&(c.uri=b["text/x-iri-source-uri"])}if((b["text/plain"]||b["text/x-iri-selected-text"])&&(c.description=(b["text/plain"]||b["text/x-iri-selected-text"]).replace(/[\s\n]+/gm," ").trim()),b["text/html"]||b["text/x-iri-selected-html"]){d=a("
          ").html(b["text/html"]||b["text/x-iri-selected-html"]);var f=d.find("image");f.length&&(c.image=f.attr("xlink:href"));var g=d.find("path");g.length&&(c.clipPath=g.attr("d"));var h=d.find("img");h.length&&(c.image=h[0].src);var i=d.find("a");i.length&&(c.uri=i[0].href),c.title=d.find("[title]").attr("title")||c.title,c.description=d.text().replace(/[\s\n]+/gm," ").trim()}b["text/uri-list"]&&(c.uri=b["text/uri-list"]),b["text/x-moz-url"]&&!c.title&&(c.title=(b["text/x-moz-url"].split("\n")[1]||"").trim(),c.title===c.uri&&(c.title=!1)),b["text/x-iri-source-title"]&&!c.title&&(c.title=b["text/x-iri-source-title"]),(b["text/html"]||b["text/x-iri-selected-html"])&&(d=a("
          ").html(b["text/html"]||b["text/x-iri-selected-html"]),c.image=d.find("[data-image]").attr("data-image")||c.image,c.uri=d.find("[data-uri]").attr("data-uri")||c.uri,c.title=d.find("[data-title]").attr("data-title")||c.title,c.description=d.find("[data-description]").attr("data-description")||c.description,c.clipPath=d.find("[data-clip-path]").attr("data-clip-path")||c.clipPath),c.title||(c.title=this.renkan.translate("Dragged resource"));for(var j=["title","description","uri","image"],k=0;k=3){var c=b.view.split(","),d={project:this.renkan.project,offset:{x:parseFloat(c[0]),y:parseFloat(c[1])},zoom_level:parseFloat(c[2])};this.view.setScale(d.zoom_level,new paper.Point(d.offset))}"undefined"!=typeof b.view&&"autoscale"===b.view&&this.view.autoScale(),"undefined"!=typeof b.viewsNodes&&("true"===b.viewsNodes?(this.view.hiddenNodes=(this.view.params.hidden_nodes||[]).concat(),this.view.hideNodes()):this.view.showNodes(!1)),this.unhighlightAll(),"undefined"!=typeof b.node&&b.node&&this.highlightModel(this.renkan.project.get("nodes").get(b.node)),"undefined"!=typeof b.edge&&b.edge&&this.highlightModel(this.renkan.project.get("edges").get(b.edge))},validViewIndex:function(a){var b=parseInt(a),c=0;return c=b<0?this.renkan.project.get("views").length+b:b,"undefined"==typeof this.renkan.project.get("views").at(b)&&(c=0),c},foldBins:function(){var a,b=this.$.find(".Rk-Fold-Bins"),c=this.renkan.$.find(".Rk-Bins"),d=0,e=this,f=e.canvas_$.width();c.position().left<0?(d=new paper.Point([-c.width()/2,0]),c.animate({left:0},250),this.$.animate({left:300},250,function(){var a=e.$.width();paper.view.viewSize=new paper.Size([a,e.canvas_$.height()])}),a=f-c.width()0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show()},redraw:function(a){},initWithParams:function(){var a=this;a.options.view_force_autoscale?this.autoScale():a.setScale(a.params.zoom_level,new paper.Point(a.params.offset)),a.options.hide_nodes&&!a.options.view_show_hiddennodes?(a.hiddenNodes=(a.params.hidden_nodes||[]).concat(),a.hideNodes()):a.showNodes(!1)},saveView:function(){var a=this,b={x:a.offset.x,y:a.offset.y};a.model=a.renkan.project.addView({zoom_level:a.scale,offset:b,hidden_nodes:a.hiddenNodes.concat()}),a.params={zoom_level:a.model.get("zoom_level"),offset:a.model.get("offset"),hidden_nodes:a.model.get("hidden_nodes")},this.$.find(".Rk-ZoomSetSaved").show(),a.updateUrl()},addHiddenNode:function(a){this.hideNode(a),this.hiddenNodes.push(a.id),this.updateUrl()},hideNode:function(a){"undefined"!=typeof this.renderer.getRepresentationByModel(a)&&this.renderer.getRepresentationByModel(a).hide()},hideNodes:function(){var a=this;this.hiddenNodes.forEach(function(b,c){var d=a.renkan.project.get("nodes").get(b);return"undefined"!=typeof d?a.hideNode(a.renkan.project.get("nodes").get(b)):void a.hiddenNodes.splice(c,1)}),paper.view.draw()},showNodes:function(a){var b=this;this.hiddenNodes.forEach(function(c){b.renderer.getRepresentationByModel(b.renkan.project.get("nodes").get(c)).show(a)}),a||(this.hiddenNodes=[]),paper.view.draw()},setScale:function(a,b){a/this.initialScale>e._MIN_SCALE&&a/this.initialScale1){var c=b.map(function(a){return a.get("position").x}),d=b.map(function(a){return a.get("position").y}),e=Math.min.apply(Math,c),f=Math.min.apply(Math,d),g=Math.max.apply(Math,c),h=Math.max.apply(Math,d),i=Math.min((paper.view.size.width-2*this.renkan.options.autoscale_padding)/(g-e),(paper.view.size.height-2*this.renkan.options.autoscale_padding)/(h-f));this.initialScale=i,"undefined"!=typeof a&&parseFloat(a.zoom_level)>0&&parseFloat(a.offset.x)>0&&parseFloat(a.offset.y)>0?this.setScale(parseFloat(a.zoom_level),new paper.Point(parseFloat(a.offset.x),parseFloat(a.offset.y))):this.setScale(i,paper.view.center.subtract(new paper.Point([(g+e)/2,(h+f)/2]).multiply(i)))}1===b.length&&this.setScale(1,paper.view.center.subtract(new paper.Point([b.at(0).get("position").x,b.at(0).get("position").y])))},paperShift:function(a){this.offset=this.offset.add(a),this.renderer.redraw()},updateUrl:function(){if(this.options.url_parameters&&this.options.update_url){var b={},c=Backbone.history.getFragment().split("?");c.length>1&&c[1].split("&").forEach(function(a){var c=a.split("=");b[c[0]]=decodeURIComponent(c[1])}),b.view=Math.round(1e3*this.offset.x)/1e3+","+Math.round(1e3*this.offset.y)/1e3+","+Math.round(1e3*this.scale)/1e3,this.renkan.project.get("views").indexOf(this.model)>-1?(b.viewIndex=this.renkan.project.get("views").indexOf(this.model),b.viewIndex===this.renkan.project.get("views").length-1&&(b.viewIndex=-1)):b.viewIndex&&delete b.viewIndex,this.renkan.router.navigate("?"+decodeURIComponent(a.param(b)),{trigger:!1,replace:!0})}},destroy:function(a){this._super("destroy"),this.showNodes(!1)}}).value(),f}),"function"==typeof require.config&&require.config({paths:{jquery:"../lib/jquery/jquery",underscore:"../lib/lodash/lodash",filesaver:"../lib/FileSaver/FileSaver",requtils:"require-utils","jquery-private":"jquery-private","ckeditor-core":"../lib/ckeditor/ckeditor",screenfull:"../lib/screenfull/screenfull-umd"},map:{"*":{jquery:"jquery-private"},"jquery-private":{jquery:"jquery"}},shim:{"ckeditor-core":{exports:"CKEDITOR"}}}),require(["renderer/baserepresentation","renderer/basebutton","renderer/noderepr","renderer/edge","renderer/tempedge","renderer/baseeditor","renderer/nodeeditor","renderer/edgeeditor","renderer/nodebutton","renderer/nodeeditbutton","renderer/noderemovebutton","renderer/nodehidebutton","renderer/nodeshowbutton","renderer/noderevertbutton","renderer/nodelinkbutton","renderer/nodeenlargebutton","renderer/nodeshrinkbutton","renderer/edgeeditbutton","renderer/edgeremovebutton","renderer/edgerevertbutton","renderer/miniframe","renderer/scene","renderer/viewrepr"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){"use strict";var x=window.Rkns;"undefined"==typeof x.Renderer&&(x.Renderer={});var y=x.Renderer;y._BaseRepresentation=a,y._BaseButton=b,y.Node=c,y.Edge=d,y.View=w,y.TempEdge=e,y._BaseEditor=f,y.NodeEditor=g,y.EdgeEditor=h,y._NodeButton=i,y.NodeEditButton=j,y.NodeRemoveButton=k,y.NodeHideButton=l,y.NodeShowButton=m,y.NodeRevertButton=n,y.NodeLinkButton=o,y.NodeEnlargeButton=p,y.NodeShrinkButton=q,y.EdgeEditButton=r,y.EdgeRemoveButton=s,y.EdgeRevertButton=t,y.MiniFrame=u,y.Scene=v,startRenkan()}),define("main-renderer",function(){}),define("jquery-private",["jquery"],function(a){"use strict";return a.noConflict(!0)}); +this.renkanJST=this.renkanJST||{},this.renkanJST["templates/colorpicker.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
        • ';return __p},this.renkanJST["templates/edgeeditor_readonly.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

          \n ×\n ',options.show_edge_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',edge.uri&&(__p+='\n \n '),__p+="\n "+__e(edge.title)+"\n ",edge.uri&&(__p+=" "),__p+="\n \n

          \n",options.show_edge_tooltip_uri&&edge.uri&&(__p+='\n

          \n '+__e(edge.short_uri)+"\n

          \n"),__p+="\n

          "+(null==(__t=edge.description)?"":__t)+"

          \n",options.show_edge_tooltip_nodes&&(__p+='\n

          \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

          \n

          \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

          \n"),__p+="\n",options.show_edge_tooltip_creator&&edge.has_creator&&(__p+='\n

          \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

          \n"),__p+="\n";return __p},this.renkanJST["templates/edgeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

          \n ×'+__e(renkan.translate("Edit Edge"))+"\n

          \n

          \n \n \n

          \n',options.show_edge_editor_uri&&(__p+="\n

          \n \n \n \n

          \n ',options.properties.length&&(__p+="\n

          \n \n \n

          \n")),__p+="\n",options.show_edge_editor_style&&(__p+='\n
          \n ',options.show_edge_editor_style_color&&(__p+='\n
          \n '+__e(renkan.translate("Edge color:"))+'\n
          \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Edge"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
          \n
          \n "),__p+="\n ",options.show_edge_editor_style_dash&&(__p+='\n
          \n '+__e(renkan.translate("Dash:"))+'\n \n
          \n "),__p+="\n ",options.show_edge_editor_style_thickness&&(__p+='\n
          \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(edge.thickness)+'\n +\n
          \n '),__p+="\n ",options.show_edge_editor_style_arrow&&(__p+='\n
          \n '+__e(renkan.translate("Arrow:"))+'\n \n
          \n "),__p+="\n
          \n"),__p+="\n",options.show_edge_editor_direction&&(__p+='\n

          \n '+__e(renkan.translate("Change edge direction"))+"\n

          \n"),__p+="\n",options.show_edge_editor_nodes&&(__p+='\n

          \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

          \n

          \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

          \n"),__p+="\n",options.show_edge_editor_creator&&edge.has_creator&&(__p+='\n

          \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

          \n"),__p+="\n";return __p},this.renkanJST["templates/ldtjson-bin/annotationtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
        • \n\n \n

          '+(null==(__t=htitle)?"":__t)+"

          \n

          "+(null==(__t=hdescription)?"":__t)+"

          \n

          Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

          \n
          \n
        • \n';return __p},this.renkanJST["templates/ldtjson-bin/segmenttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
        • \n\n \n

          '+(null==(__t=htitle)?"":__t)+"

          \n

          "+(null==(__t=hdescription)?"":__t)+"

          \n

          Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

          \n
          \n
        • \n';return __p},this.renkanJST["templates/ldtjson-bin/tagtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
        • \n\n \n

          '+(null==(__t=htitle)?"":__t)+'

          \n
          \n
        • \n';return __p},this.renkanJST["templates/list-bin.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='
        • \n'),__p+='\n

          \n ',url&&(__p+='\n \n '),__p+="\n "+(null==(__t=htitle)?"":__t)+"\n ",url&&(__p+=""),__p+="\n

          \n ",description&&(__p+='\n

          '+(null==(__t=hdescription)?"":__t)+"

          \n "),__p+="\n ",image&&(__p+='\n
          \n '),__p+="\n
        • \n";return __p},this.renkanJST["templates/main.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_bins&&(__p+='\n
          \n
          \n

          '+__e(translate("Select contents:"))+'

          \n
          \n \n
          \n
          \n
            \n
            \n \n
            \n
            \n \n \n
            \n
              \n
              \n'),__p+=" ",options.show_editor&&(__p+='\n
              \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

              \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n

              \n '+__e(node.short_uri)+"\n

              \n"),__p+=" ",options.show_node_tooltip_description&&(__p+='\n

              '+(null==(__t=node.description)?"":__t)+"

              \n"),__p+=" ",node.image&&options.show_node_tooltip_image&&(__p+='\n \n'),__p+=" ",node.has_creator&&options.show_node_tooltip_creator&&(__p+='\n

              \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

              \n"),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor_video.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}function get_youtube_id(a){var b=/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/,c=a.match(b);return!(!c||11!=c[2].length)&&c[2]}function get_vimeo_id(a){var b=/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,c=a.match(b);return!!c&&c[2]}function get_dailymotion_id(a){var b=/^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$/,c=a.match(b);return!!c&&(void 0!==c[4]?c[4]:c[2])}function get_facebook_id(a){var b=/^https?:\/\/www\.facebook\.com\/(?:video\.php\?v=\d+|.*?\/videos\/\d+)\/?$/,c=a.match(b);return!!c&&encodeURIComponent(a)}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj){if(__p+='\n

              \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

              \n",node.uri&&options.show_node_tooltip_uri){var video_id=!1;__p+=(video_id=get_youtube_id(node.uri))?'\n \n

              '+__e(renkan.translate("Link"))+"

              \n ":(video_id=get_vimeo_id(node.uri))?'\n \n

              '+__e(renkan.translate("Link"))+"

              \n ":(video_id=get_dailymotion_id(node.uri))?'\n \n

              '+__e(renkan.translate("Link"))+"

              \n ":(video_id=get_facebook_id(node.uri))?'\n \n

              '+__e(renkan.translate("Video link"))+"

              \n ":' \n \n '}__p+='\n '+__e(renkan.translate("Link to the node"))+"\n"}return __p},this.renkanJST["templates/nodeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='\n

              \n ×'+__e(renkan.translate("Edit Node"))+"\n

              \n

              \n \n ",__p+=options.show_node_editor_title_richtext?'\n

              '+(null==(__t=node.title)?"":__t)+"
              \n ":'\n \n ',__p+="\n

              \n",options.show_node_title_style&&(__p+='\n
              \n
              \n '+__e(renkan.translate("Title color:"))+'\n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Title"))?"":__t)+'\n
              \n
              \n '+__e(renkan.translate("Title size:"))+'\n -\n '+__e(node.title_size.toFixed(1))+'\n +\n
              \n
              \n'),__p+=" ",options.show_node_editor_uri&&(__p+="\n

              \n \n \n \n

              \n'),__p+=" ",options.change_types&&(__p+="\n

              \n \n \n

              \n"),__p+=" ",options.show_node_editor_description&&(__p+="\n

              \n \n ",__p+=options.show_node_editor_description_richtext?'\n

              '+(null==(__t=node.description)?"":__t)+"
              \n ":'\n \n ",__p+="\n

              \n"),__p+=" ",options.show_node_editor_size&&(__p+='\n

              \n '+__e(renkan.translate("Size:"))+'\n -\n '+__e(node.size)+'\n +\n

              \n'),__p+=" ",options.show_node_editor_style&&(__p+='\n
              \n ',options.show_node_editor_style_color&&(__p+='\n
              \n \n '+__e(renkan.translate("Node color:"))+'\n
              \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Node"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
              \n
              \n "),__p+="\n ",options.show_node_editor_style_dash&&(__p+='\n
              \n '+__e(renkan.translate("Dash:"))+'\n \n
              \n "),__p+="\n ",options.show_node_editor_style_thickness&&(__p+='\n
              \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(node.thickness)+'\n +\n
              \n '),__p+="\n
              \n"),__p+=" ",options.show_node_editor_image&&(__p+='\n
              \n
              \n \n ',node.clip_path&&(__p+='\n \n \n \n '),__p+="\n
              \n
              \n

              \n \n

              \n \n \n
              \n

              \n",options.allow_image_upload&&(__p+="\n

              \n \n \n

              \n')),__p+=" ",options.show_node_editor_creator&&node.has_creator&&(__p+='\n

              \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

              \n"),__p+=" ",options.change_shapes&&(__p+="\n

              \n \n \n

              \n"),__p+="\n";return __p},this.renkanJST["templates/scene.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_top_bar&&(__p+='\n
              \n
              \n ',__p+=options.editor_mode&&options.title_editable?'\n \n ':'\n

              \n '+__e(project.get("title")||translate("Untitled project"))+"\n

              \n ",__p+="\n ",options.show_user_list&&(__p+='\n
              \n
              \n ',options.show_user_color&&(__p+='\n
              \n \n ',options.user_color_editable&&(__p+='\n \n '),__p+="\n \n ",options.user_color_editable&&print(colorPicker("Rk-Editor-ColorPicker-User")),__p+="\n
              \n "),__p+='\n <unknown user>\n
              \n
                \n
                \n '),__p+="\n ",options.home_button_url&&(__p+='\n
                \n \n
                \n
                \n '+__e(translate(options.home_button_title))+"\n
                \n
                \n
                \n "),__p+="\n ",options.show_fullscreen_button&&(__p+='\n
                \n
                \n
                \n
                \n '+__e(translate("Full Screen"))+"\n
                \n
                \n
                \n "),__p+="\n ",options.editor_mode?(__p+="\n ",options.show_addnode_button&&(__p+='\n
                \n
                \n
                \n
                \n '+__e(translate("Add Node"))+"\n
                \n
                \n
                \n "),__p+="\n ",options.show_addedge_button&&(__p+='\n
                \n
                \n
                \n
                \n '+__e(translate("Add Edge"))+"\n
                \n
                \n
                \n "),__p+="\n ",options.show_export_button&&(__p+='\n
                \n
                \n
                \n
                \n '+__e(translate("Download Project"))+"\n
                \n
                \n
                \n "),__p+="\n ",options.show_save_button&&(__p+='\n
                \n
                \n
                \n
                \n
                \n
                \n '),__p+="\n ",options.show_open_button&&(__p+='\n
                \n
                \n
                \n
                \n '+__e(translate("Open Project"))+"\n
                \n
                \n
                \n "),__p+="\n ",options.show_bookmarklet&&(__p+='\n
                \n \n
                \n
                \n '+__e(translate("Renkan 'Drag-to-Add' bookmarklet"))+'\n
                \n
                \n
                \n
                \n '),__p+="\n "):(__p+="\n ",options.show_export_button&&(__p+='\n
                \n
                \n
                \n
                \n '+__e(translate("Download Project"))+'\n
                \n
                \n
                \n
                \n '),__p+="\n "),__p+="\n ",options.show_search_field&&(__p+='\n
                \n \n
                \n
                \n '),__p+="\n
                \n"),__p+='\n
                \n
                \n
                \n ',options.editor_mode&&options.save_view&&(__p+='\n
                \n '),__p+="\n ",options.save_view&&(__p+='\n
                \n ',options.hide_nodes&&(__p+='\n \t \n '),__p+=" \n "),__p+="\n
                \n "),__p+="\n \n\n";return __p},this.renkanJST["templates/search.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
              • '+(null==(__t=title)?"":__t)+"
              • ";return __p},this.renkanJST["templates/wikipedia-bin/resulttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
              • \n\n \n

                \n '+(null==(__t=htitle)?"":__t)+'\n

                \n

                '+(null==(__t=hdescription)?"":__t)+"

                \n
              • \n";return __p},function(a){"use strict";"object"!=typeof a.Rkns&&(a.Rkns={});var b=a.Rkns,c=b.$=a.jQuery,d=b._=a._;b.pickerColors=["#8f1919","#a80000","#d82626","#ff0000","#e87c7c","#ff6565","#f7d3d3","#fecccc","#8f5419","#a85400","#d87f26","#ff7f00","#e8b27c","#ffb265","#f7e5d3","#fee5cc","#8f8f19","#a8a800","#d8d826","#feff00","#e8e87c","#feff65","#f7f7d3","#fefecc","#198f19","#00a800","#26d826","#00ff00","#7ce87c","#65ff65","#d3f7d3","#ccfecc","#198f8f","#00a8a8","#26d8d8","#00feff","#7ce8e8","#65feff","#d3f7f7","#ccfefe","#19198f","#0000a8","#2626d8","#0000ff","#7c7ce8","#6565ff","#d3d3f7","#ccccfe","#8f198f","#a800a8","#d826d8","#ff00fe","#e87ce8","#ff65fe","#f7d3f7","#feccfe","#000000","#242424","#484848","#6d6d6d","#919191","#b6b6b6","#dadada","#ffffff"],b.__renkans=[];var e=b._BaseBin=function(a,c){if("undefined"!=typeof a){this.renkan=a,this.renkan.$.find(".Rk-Bin-Main").hide(),this.$=b.$("
              • ").addClass("Rk-Bin").appendTo(a.$.find(".Rk-Bin-List")),this.title_icon_$=b.$("").addClass("Rk-Bin-Title-Icon").appendTo(this.$);var d=this;b.$("").attr({href:"#", +title:a.translate("Close bin")}).addClass("Rk-Bin-Close").html("×").appendTo(this.$).click(function(){return d.destroy(),a.$.find(".Rk-Bin-Main:visible").length||a.$.find(".Rk-Bin-Main:last").slideDown(),a.resizeBins(),!1}),b.$("").attr({href:"#",title:a.translate("Refresh bin")}).addClass("Rk-Bin-Refresh").appendTo(this.$).click(function(){return d.refresh(),!1}),this.count_$=b.$("
                ").addClass("Rk-Bin-Count").appendTo(this.$),this.title_$=b.$("

                ").addClass("Rk-Bin-Title").appendTo(this.$),this.main_$=b.$("
                ").addClass("Rk-Bin-Main").appendTo(this.$).html('

                '+a.translate("Loading, please wait")+"

                "),this.title_$.html(c.title||"(new bin)"),this.renkan.resizeBins(),c.auto_refresh&&window.setInterval(function(){d.refresh()},c.auto_refresh)}};e.prototype.destroy=function(){this.$.detach(),this.renkan.resizeBins()};var f=b.Renkan=function(a){var e=this;b.__renkans.push(this),this.options=d.defaults(a,b.defaults,{templates:d.defaults(a.templates,renkanJST)||renkanJST,node_editor_templates:d.defaults(a.node_editor_templates,b.defaults.node_editor_templates)}),this.template=this.options.templates["templates/main.html"];var f={};if(d.each(this.options.node_editor_templates,function(a,b){f[b]=e.options.templates[a],delete e.options.templates[a]}),this.options.node_editor_templates=f,d.each(this.options.property_files,function(a){b.$.getJSON(a,function(a){e.options.properties=e.options.properties.concat(a)})}),this.read_only=this.options.read_only||!this.options.editor_mode,this.router=new b.Router,this.project=new b.Models.Project,this.dataloader=new b.DataLoader.Loader(this.project,this.options),this.setCurrentUser=function(a,b){this.project.addUser({_id:a,title:b}),this.current_user=a,this.renderer.redrawUsers()},"undefined"!=typeof this.options.user_id&&(this.current_user=this.options.user_id),this.$=b.$("#"+this.options.container),this.$.addClass("Rk-Main").html(this.template(this)),this.tabs=[],this.search_engines=[],this.current_user_list=new b.Models.UsersList,this.current_user_list.on("add remove",function(){this.renderer&&this.renderer.redrawUsers()}),this.colorPicker=function(a){var c=e.options.templates["templates/colorpicker.html"];return'
                  '+b.pickerColors.map(function(a){return c({c:a})}).join("")+"
                "},this.options.show_editor&&(this.renderer=new b.Renderer.Scene(this)),this.options.search.length){var g=e.options.templates["templates/search.html"],h=this.$.find(".Rk-Search-List"),i=this.$.find(".Rk-Web-Search-Input"),j=this.$.find(".Rk-Web-Search-Form");d.each(this.options.search,function(a,c){b[a.type]&&b[a.type].Search&&e.search_engines.push(new b[a.type].Search(e,a))}),h.html(d(this.search_engines).map(function(a,b){return g({key:b,title:a.getSearchTitle(),className:a.getBgClass()})}).join("")),h.find("li").click(function(){var a=b.$(this);e.setSearchEngine(a.attr("data-key")),j.submit()}),j.submit(function(){if(i.val()){var a=e.search_engine;a.search(i.val())}return!1}),this.$.find(".Rk-Search-Current").mouseenter(function(){h.slideDown()}),this.$.find(".Rk-Search-Select").mouseleave(function(){h.hide()}),this.setSearchEngine(0)}else this.$.find(".Rk-Web-Search-Form").detach();d.each(this.options.bins,function(a){b[a.type]&&b[a.type].Bin&&e.tabs.push(new b[a.type].Bin(e,a))});var k=!1;this.$.find(".Rk-Bins").on("click",".Rk-Bin-Title,.Rk-Bin-Title-Icon",function(){var a=b.$(this).siblings(".Rk-Bin-Main");a.is(":hidden")&&(e.$.find(".Rk-Bin-Main").slideUp(),a.slideDown())}),this.options.show_editor&&this.$.find(".Rk-Bins").on("mouseover",".Rk-Bin-Item",function(a){var f=b.$(this);if(f&&c(f).attr("data-uri")){var g=e.project.get("nodes").where({uri:c(f).attr("data-uri")});d.each(g,function(a){e.renderer.highlightModel(a)})}}).mouseout(function(){e.renderer.unhighlightAll()}).on("mousemove",".Rk-Bin-Item",function(a){try{this.dragDrop()}catch(a){}}).on("touchstart",".Rk-Bin-Item",function(a){k=!1}).on("touchmove",".Rk-Bin-Item",function(a){a.preventDefault();var b=a.originalEvent.changedTouches[0],c=e.renderer.canvas_$.offset(),d=e.renderer.canvas_$.width(),f=e.renderer.canvas_$.height();if(b.pageX>=c.left&&b.pageX=c.top&&b.pageY1?a:null);c.source!==l&&(l=c.source,d.each(e.tabs,function(a){a.render(c)}))}}),this.$.find(".Rk-Bins-Search-Form").submit(function(){return!1})};f.prototype.translate=function(a){return b.i18n[this.options.language]&&b.i18n[this.options.language][a]?b.i18n[this.options.language][a]:this.options.language.length>2&&b.i18n[this.options.language.substr(0,2)]&&b.i18n[this.options.language.substr(0,2)][a]?b.i18n[this.options.language.substr(0,2)][a]:a},f.prototype.onStatusChange=function(){this.renderer.onStatusChange()},f.prototype.setSearchEngine=function(a){this.search_engine=this.search_engines[a],this.$.find(".Rk-Search-Current").attr("class","Rk-Search-Current "+this.search_engine.getBgClass());for(var b=this.search_engine.getBgClass().split(" "),c="",d=0;d"+a.translate("Drag items from this website, drop them in Renkan").replace(/ /g,"_")+"

                '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\/\\/[^\\/]*twitter\\.com\\//,s:'.tweet',n:'twitter'},{r:/https?:\\/\\/[^\\/]*google\\.[^\\/]+\\//,s:'.g',n:'google'},{r:/https?:\\/\\/[^\\/]*lemonde\\.fr\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();"},shortenText:function(a,b){return a.length>b?a.substr(0,b)+"…":a},drawEditBox:function(a,b,c,d,e,f){e.css({width:a.tooltip_width-2*a.tooltip_padding});var g=e[0].getBoundingClientRect(),h=f.$[0].getBoundingClientRect();g.bottom>h.bottom-2*a.tooltip_padding-10&&e.css({"overflow-x":"hidden","overflow-y":"scroll","max-height":h.bottom-2*a.tooltip_padding-5-g.top+"px"});var i=e.outerHeight()+2*a.tooltip_padding+5,j=b.xpaper.view.size.height-a.tooltip_margin&&(m=Math.max(paper.view.size.height-a.tooltip_margin,b.y+a.tooltip_arrow_width/2)-i),m1?a.offset[1]:a.offset[0]):null!=a.offset.x&&(c.x=a.offset.x,c.y=a.offset.y),a.offset=c}return a},toJSON:function(){return{_id:this.get("_id"),zoom_level:this.get("zoom_level"),offset:this.get("offset"),title:this.get("title"),description:this.get("description"),created_by:this.get("created_by")?this.get("created_by").get("_id"):null,hidden_nodes:this.get("hidden_nodes")}}}),i=(c.Project=d.extend({schema_version:"2",type:"project",blacklist:["saveStatus","loadingStatus"],relations:[{type:b.HasMany,key:"users",relatedModel:e,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"nodes",relatedModel:f,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"edges",relatedModel:g,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"views",relatedModel:h,reverseRelation:{key:"project",includeInJSON:"_id"}}],addUser:function(a,b){a.project=this;var c=e.findOrCreate(a);return this.get("users").push(c,b),c},addNode:function(a,b){a.project=this;var c=f.findOrCreate(a);return this.get("nodes").push(c,b),c},addEdge:function(a,b){a.project=this;var c=g.findOrCreate(a);return this.get("edges").push(c,b),c},addView:function(a,b){a.project=this;var c=h.findOrCreate(a);return this.get("views").push(c,b),c},removeNode:function(a){this.get("nodes").remove(a)},removeEdge:function(a){this.get("edges").remove(a)},validate:function(a){var b=this;_.each([].concat(a.users,a.nodes,a.edges,a.views),function(a){a&&(a.project=b)})},getSchemaVersion:function(a){var b=a;"undefined"==typeof b&&(b=this);var c=b.schema_version;return c?c:1},initialize:function(){var a=this;this.on("remove:nodes",function(b){a.get("edges").remove(a.get("edges").filter(function(a){return a.get("from")===b||a.get("to")===b}))})},toJSON:function(){var a=_.clone(this.attributes);for(var c in a)(a[c]instanceof b.Model||a[c]instanceof b.Collection||a[c]instanceof d)&&(a[c]=a[c].toJSON());return _.omit(a,this.blacklist)}}),c.RosterUser=b.Model.extend({type:"roster_user",idAttribute:"_id",constructor:function(a){"undefined"!=typeof a&&(a._id=a._id||a.id||c.getUID(this),a.title=a.title||"(untitled "+this.type+")",a.description=a.description||"",a.uri=a.uri||"",a.project=a.project||null,a.site_id=a.site_id||0,"function"==typeof this.prepare&&(a=this.prepare(a))),b.Model.prototype.constructor.call(this,a)},validate:function(){if(!this.type)return"object has no type"},prepare:function(a){return a.color=a.color||"#666666",a},toJSON:function(){return{_id:this.get("_id"),title:this.get("title"),uri:this.get("uri"),description:this.get("description"),color:this.get("color"),project:null!=this.get("project")?this.get("project").get("id"):null,site_id:this.get("site_id")}}}));c.UsersList=b.Collection.extend({model:i})}(window),Rkns.defaults={language:navigator.language||navigator.userLanguage||"en",container:"renkan",search:[],bins:[],static_url:"",popup_editor:!0,editor_panel:"editor-panel",show_bins:!0,properties:[],show_editor:!0,read_only:!1,editor_mode:!0,manual_save:!1,show_top_bar:!0,default_user_color:"#303030",size_bug_fix:!1,force_resize:!1,allow_double_click:!0,double_click_open_url:!0,simple_click_open_url:!1,zoom_on_scroll:!0,element_delete_delay:0,autoscale_padding:50,resize:!0,show_zoom:!0,save_view:!0,view_force_autoscale:!0,view_show_hiddennodes:!0,default_index_view:-1,url_parameters:!0,update_url:!0,show_search_field:!0,show_user_list:!0,user_name_editable:!0,user_color_editable:!0,title_editable:!0,show_user_color:!0,show_save_button:!0,show_export_button:!0,show_open_button:!1,show_addnode_button:!0,show_addedge_button:!0,show_bookmarklet:!0,show_fullscreen_button:!0,home_button_url:!1,home_button_title:"Home",show_minimap:!0,minimap_width:160,minimap_height:120,minimap_padding:20,minimap_background_color:"#ffffff",minimap_border_color:"#cccccc",minimap_highlight_color:"#ffff00",minimap_highlight_weight:5,buttons_background:"#202020",buttons_label_color:"#c000c0",buttons_label_font_size:9,ghost_opacity:.3,default_dash_array:[4,5],show_node_circles:!0,clip_node_images:!0,node_images_fill_mode:!1,node_size_base:25,node_stroke_width:2,node_stroke_max_width:12,selected_node_stroke_width:4,selected_node_stroke_max_width:24,node_stroke_witdh_scale:5,node_title_size_min:0,node_title_size_max:5,node_title_size_step:.1,node_fill_color:"#ffffff",highlighted_node_fill_color:"#ffff00",node_title_color:"#000000",node_label_distance:5,node_label_max_length:60,label_untitled_nodes:"(untitled)",hide_nodes:!0,change_shapes:!0,change_types:!0,node_editor_templates:{default:"templates/nodeeditor_readonly.html",video:"templates/nodeeditor_video.html"},edge_stroke_width:2,edge_stroke_max_width:12,selected_edge_stroke_width:4,selected_edge_stroke_max_width:24,edge_stroke_witdh_scale:5,edge_label_distance:0,edge_label_max_length:20,edge_arrow_length:18,edge_arrow_width:12,edge_arrow_max_width:32,edge_gap_in_bundles:12,highlighted_edge_color:"#ffff00",label_untitled_edges:"",tooltip_width:275,tooltip_padding:10,tooltip_margin:15,tooltip_arrow_length:20,tooltip_arrow_width:40,tooltip_top_color:"#f0f0f0",tooltip_bottom_color:"#d0d0d0",tooltip_border_color:"#808080",tooltip_border_width:1,tooltip_opacity:.8,richtext_editor_config:{toolbarGroups:[{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"clipboard",groups:["clipboard","undo"]},"/",{name:"styles"}],removePlugins:"colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates"},show_node_title_style:!0,show_node_editor_uri:!0,show_node_editor_title:!0,show_node_editor_title_richtext:!0,show_node_editor_description:!0,show_node_editor_description_richtext:!0,show_node_editor_size:!0,show_node_editor_style:!0,show_node_editor_style_color:!0,show_node_editor_style_dash:!0,show_node_editor_style_thickness:!0,show_node_editor_image:!0,show_node_editor_creator:!0,allow_image_upload:!0,uploaded_image_max_kb:500,show_node_tooltip_uri:!0,show_node_tooltip_description:!0,show_node_tooltip_color:!0,show_node_tooltip_image:!0,show_node_tooltip_creator:!0,show_edge_editor_uri:!0,show_edge_editor_style:!0,show_edge_editor_style_color:!0,show_edge_editor_style_dash:!0,show_edge_editor_style_thickness:!0,show_edge_editor_style_arrow:!0,show_edge_editor_direction:!0,show_edge_editor_nodes:!0,show_edge_editor_creator:!0,show_edge_tooltip_uri:!0,show_edge_tooltip_color:!0,show_edge_tooltip_nodes:!0,show_edge_tooltip_creator:!0},Rkns.i18n={fr:{"Edit Node":"Édition d’un nœud","Edit Edge":"Édition d’un lien","Title:":"Titre :","URI:":"URI :","Description:":"Description :","From:":"De :","To:":"Vers :",Image:"Image","Image URL:":"URL d'Image","Choose Image File:":"Choisir un fichier image","Full Screen":"Mode plein écran","Add Node":"Ajouter un nœud","Add Edge":"Ajouter un lien","Save Project":"Enregistrer le projet","Open Project":"Ouvrir un projet","Auto-save enabled":"Enregistrement automatique activé","Connection lost":"Connexion perdue","Created by:":"Créé par :","Zoom In":"Agrandir l’échelle","Zoom Out":"Rapetisser l’échelle",Edit:"Éditer",Remove:"Supprimer","Cancel deletion":"Annuler la suppression","Link to another node":"Créer un lien",Enlarge:"Agrandir",Shrink:"Rétrécir","Click on the background canvas to add a node":"Cliquer sur le fond du graphe pour rajouter un nœud","Click on a first node to start the edge":"Cliquer sur un premier nœud pour commencer le lien","Click on a second node to complete the edge":"Cliquer sur un second nœud pour terminer le lien",Wikipedia:"Wikipédia","Wikipedia in ":"Wikipédia en ",French:"Français",English:"Anglais",Japanese:"Japonais","Untitled project":"Projet sans titre","Lignes de Temps":"Lignes de Temps","Loading, please wait":"Chargement en cours, merci de patienter","Edge color:":"Couleur :","Dash:":"Point. :","Thickness:":"Epaisseur :","Arrow:":"Flèche :","Node color:":"Couleur :","Choose color":"Choisir une couleur","Change edge direction":"Changer le sens du lien","Do you really wish to remove node ":"Voulez-vous réellement supprimer le nœud ","Do you really wish to remove edge ":"Voulez-vous réellement supprimer le lien ","This file is not an image":"Ce fichier n'est pas une image","Image size must be under ":"L'image doit peser moins de ","Size:":"Taille :",KB:"ko","Choose from vocabulary:":"Choisir dans un vocabulaire :","SKOS Documentation properties":"SKOS: Propriétés documentaires","has note":"a pour note","has example":"a pour exemple","has definition":"a pour définition","SKOS Semantic relations":"SKOS: Relations sémantiques","has broader":"a pour concept plus large","has narrower":"a pour concept plus étroit","has related":"a pour concept apparenté","Dublin Core Metadata":"Métadonnées Dublin Core","has contributor":"a pour contributeur",covers:"couvre","created by":"créé par","has date":"a pour date","published by":"édité par","has source":"a pour source","has subject":"a pour sujet","Dragged resource":"Ressource glisée-déposée","Search the Web":"Rechercher en ligne","Search in Bins":"Rechercher dans les chutiers","Close bin":"Fermer le chutier","Refresh bin":"Rafraîchir le chutier","(untitled)":"(sans titre)","Select contents:":"Sélectionner des contenus :","Drag items from this website, drop them in Renkan":"Glissez des éléments de ce site web vers Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.":"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan","Shapes available":"Formes disponibles",Circle:"Cercle",Square:"Carré",Diamond:"Losange",Hexagone:"Hexagone",Ellipse:"Ellipse",Star:"Étoile",Cloud:"Nuage",Triangle:"Triangle",Polygon:"Polygone","Zoom Fit":"Ajuster le Zoom","Download Project":"Télécharger le projet","Save view":"Sauver la vue","View saved view":"Restaurer la Vue","Renkan 'Drag-to-Add' bookmarklet":"Renkan 'Deplacer-Pour-Ajouter' Signet","(unknown user)":"(non authentifié)","":"","Search in graph":"Rechercher dans carte","Search in ":"Chercher dans ","Show hidden nodes":"Montrer les noeuds cachés","Show neighbors":"Montrer les voisins",Hide:"Cacher","Fullscreen not supported by your browser":"Le plein écran n'est pas supporté par votre navigateur","Title size:":"Taille :","Title color:":"Couleur :","Video link":"Lien vidéo"}},Rkns.jsonIO=function(a,b){var c=a.project;"undefined"==typeof b.http_method&&(b.http_method="PUT");var d=function(){c.set({loadingStatus:!0}),Rkns.$.getJSON(b.url,function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})})},e=function(){c.set({saveStatus:2});var d=c.toJSON();a.read_only||Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(d),success:function(a,b,d){c.set({saveStatus:0})}})},f=Rkns._.throttle(function(){setTimeout(e,100)},1e3);c.on("add:nodes add:edges add:users add:views",function(a){a.on("change remove",function(a){f()}),f()}),c.on("change",function(){1===c.changedAttributes.length&&c.hasChanged("saveStatus")||f()}),d()},Rkns.jsonIOSaveOnClick=function(a,b){var c=a.project,d=!1,e=function(){return"Project not saved"};"undefined"==typeof b.http_method&&(b.http_method="POST");var f=function(){var d={},e=/id=([^&#?=]+)/,f=document.location.hash.match(e);f&&(d.id=f[1]),Rkns.$.ajax({url:b.url,data:d,beforeSend:function(){c.set({loadingStatus:!0})},success:function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})}})},g=function(){c.set("saved_at",new Date);var a=c.toJSON();Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(a),beforeSend:function(){c.set({saveStatus:2})},success:function(a,b,f){$(window).off("beforeunload",e),d=!1,c.set({saveStatus:0})}})},h=function(){c.set({saveStatus:1});var a=c.get("title");a&&c.get("nodes").length?$(".Rk-Save-Button").removeClass("disabled"):$(".Rk-Save-Button").addClass("disabled"),a&&$(".Rk-PadTitle").css("border-color","#333333"),d||(d=!0,$(window).on("beforeunload",e))};f(),c.on("add:nodes add:edges add:users change",function(a){a.on("change remove",function(a){1===a.changedAttributes.length&&a.hasChanged("saveStatus")||h()}),1===c.changedAttributes.length&&c.hasChanged("saveStatus")||h()}),a.renderer.save=function(){$(".Rk-Save-Button").hasClass("disabled")?c.get("title")||$(".Rk-PadTitle").css("border-color","#ff0000"):g()}},function(a){"use strict";var b=a._,c=a.Ldt={},d=(c.Bin=function(a,b){if(b.ldt_type){var d=c[b.ldt_type+"Bin"];if(d)return new d(a,b)}console.error("No such LDT Bin Type")},c.ProjectBin=a.Utils.inherit(a._BaseBin));d.prototype._init=function(a,b){this.renkan=a,this.tagTemplate=a.options.templates["templates/ldtjson-bin/tagtemplate.html"],this.annotationTemplate=a.options.templates["templates/ldtjson-bin/annotationtemplate.html"],this.proj_id=b.project_id,this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.title_$.html(b.title),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},d.prototype.render=function(c){function d(a){var c=b(a).escape();return f.isempty?c:f.replace(c,"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}var f=c||a.Utils.regexpFromTextOrArray(),g="
              • Tags

              • ",h=this.data.meta["dc:title"],i=this,j=0;i.title_$.text('LDT Project: "'+h+'"'),b.map(i.data.tags,function(a){var b=a.meta["dc:title"];(f.isempty||f.test(b))&&(j++,g+=i.tagTemplate({ldt_platform:i.ldt_platform,title:b,htitle:d(b),encodedtitle:encodeURIComponent(b),static_url:i.renkan.options.static_url}))}),g+="
              • Annotations

              • ",b.map(i.data.annotations,function(a){var b=a.content.description,c=a.content.title.replace(b,"");if(f.isempty||f.test(c)||f.test(b)){j++;var h=a.end-a.begin,k=a.content&&a.content.img&&a.content.img.src?a.content.img.src:h?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";g+=i.annotationTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(a.begin),end:e(a.end),duration:e(h),mediaid:a.media,annotationid:a.id,image:k,static_url:i.renkan.options.static_url})}}),this.main_$.html(g),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()},d.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/ldt/cljson/id/"+this.proj_id,dataType:"jsonp",success:function(a){b.data=a,b.render()}})};var e=c.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"};e.prototype.getBgClass=function(){return"Rk-Ldt-Icon"},e.prototype.getSearchTitle=function(){return this.renkan.translate("Lignes de Temps")},e.prototype.search=function(a){this.renkan.tabs.push(new f(this.renkan,{search:a}))};var f=c.ResultsBin=a.Utils.inherit(a._BaseBin);f.prototype._init=function(a,b){this.renkan=a,this.segmentTemplate=a.options.templates["templates/ldtjson-bin/segmenttemplate.html"],this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.max_results=b.max_results||50,this.search=b.search,this.title_$.html('Lignes de Temps: "'+b.search+'"'),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},f.prototype.render=function(c){function d(a){return g.replace(b(a).escape(),"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}if(this.data){var f=c||a.Utils.regexpFromTextOrArray(),g=f.isempty?a.Utils.regexpFromTextOrArray(this.search):f,h="",i=this,j=0;b.each(this.data.objects,function(a){var b=a.abstract,c=a.title;if(f.isempty||f.test(c)||f.test(b)){j++;var g=a.duration,k=a.start_ts,l=+a.duration+k,m=g?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";h+=i.segmentTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b, +hdescription:d(b),start:e(k),end:e(l),duration:e(g),mediaid:a.iri_id,annotationid:a.element_id,image:m})}}),this.main_$.html(h),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()}},f.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/api/ldt/1.0/segments/search/",data:{format:"jsonp",q:this.search,limit:this.max_results},dataType:"jsonp",success:function(a){b.data=a,b.render()}})}}(window.Rkns),Rkns.ResourceList={},Rkns.ResourceList.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.ResourceList.Bin.prototype._init=function(a,b){this.renkan=a,this.resultTemplate=a.options.templates["templates/list-bin.html"],this.title_$.html(b.title),b.list&&(this.data=b.list),this.refresh()},Rkns.ResourceList.Bin.prototype.render=function(a){function b(a){var b=_(a).escape();return c.isempty?b:c.replace(b,"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d="",e=this,f=0;Rkns._.each(this.data,function(a){var g;if("string"==typeof a)if(/^(https?:\/\/|www)/.test(a))g={url:a};else{g={title:a.replace(/[:,]?\s?(https?:\/\/|www)[\d\w\/.&?=#%-_]+\s?/,"").trim()};var h=a.match(/(https?:\/\/|www)[\d\w\/.&?=#%-_]+/);h&&(g.url=h[0]),g.title.length>80&&(g.description=g.title,g.title=g.title.replace(/^(.{30,60})\s.+$/,"$1…"))}else g=a;var i=g.title||(g.url||"").replace(/^https?:\/\/(www\.)?/,"").replace(/^(.{40}).+$/,"$1…"),j=g.url||"",k=g.description||"",l=g.image||"";j&&!/^https?:\/\//.test(j)&&(j="http://"+j),(c.isempty||c.test(i)||c.test(k))&&(f++,d+=e.resultTemplate({url:j,title:i,htitle:b(i),image:l,description:k,hdescription:b(k),static_url:e.renkan.options.static_url}))}),e.main_$.html(d),!c.isempty&&f?this.count_$.text(f).show():this.count_$.hide(),c.isempty||f?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.ResourceList.Bin.prototype.refresh=function(){this.data&&this.render()},Rkns.Wikipedia={},Rkns.Wikipedia.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"},Rkns.Wikipedia.Search.prototype.getBgClass=function(){return"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-"+this.lang},Rkns.Wikipedia.Search.prototype.getSearchTitle=function(){var a={fr:"French",en:"English",ja:"Japanese"};return a[this.lang]?this.renkan.translate("Wikipedia in ")+this.renkan.translate(a[this.lang]):this.renkan.translate("Wikipedia")+" ["+this.lang+"]"},Rkns.Wikipedia.Search.prototype.search=function(a){this.renkan.tabs.push(new Rkns.Wikipedia.Bin(this.renkan,{lang:this.lang,search:a}))},Rkns.Wikipedia.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.Wikipedia.Bin.prototype._init=function(a,b){this.renkan=a,this.search=b.search,this.resultTemplate=a.options.templates["templates/wikipedia-bin/resulttemplate.html"],this.lang=b.lang||"en",this.title_icon_$.addClass("Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-"+this.lang),this.title_$.html(this.search).addClass("Rk-Wikipedia-Title"),this.refresh()},Rkns.Wikipedia.Bin.prototype.render=function(a){function b(a){return d.replace(_(a).escape(),"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d=c.isempty?Rkns.Utils.regexpFromTextOrArray(this.search):c,e="",f=this,g=0;Rkns._.each(this.data.query.search,function(a){var d=a.title,h="http://"+f.lang+".wikipedia.org/wiki/"+encodeURI(d.replace(/ /g,"_")),i=Rkns.$("
                ").html(a.snippet).text();(c.isempty||c.test(d)||c.test(i))&&(g++,e+=f.resultTemplate({url:h,title:d,htitle:b(d),description:i,hdescription:b(i),static_url:f.renkan.options.static_url}))}),f.main_$.html(e),!c.isempty&&g?this.count_$.text(g).show():this.count_$.hide(),c.isempty||g?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.Wikipedia.Bin.prototype.refresh=function(){var a=this;Rkns.$.ajax({url:"http://"+a.lang+".wikipedia.org/w/api.php?action=query&list=search&srsearch="+encodeURIComponent(this.search)+"&format=json",dataType:"jsonp",success:function(b){a.data=b,a.render()}})},define("renderer/baserepresentation",["jquery","underscore"],function(a,b){"use strict";var c=function(a,c){if("undefined"!=typeof a&&(this.renderer=a,this.renkan=a.renkan,this.project=a.renkan.project,this.options=a.renkan.options,this.model=c,this.model)){var d=this;this._changeBinding=function(){d.redraw({change:!0})},this._removeBinding=function(){a.removeRepresentation(d),b.defer(function(){a.redraw()})},this._selectBinding=function(){d.select()},this._unselectBinding=function(){d.unselect()},this.model.on("change",this._changeBinding),this.model.on("remove",this._removeBinding),this.model.on("select",this._selectBinding),this.model.on("unselect",this._unselectBinding)}};return b(c.prototype).extend({_super:function(a){return c.prototype[a].apply(this,Array.prototype.slice.call(arguments,1))},redraw:function(){},moveTo:function(){},show:function(){return"BaseRepresentation.show"},hide:function(){},select:function(){this.model&&this.model.trigger("selected")},unselect:function(){this.model&&this.model.trigger("unselected")},highlight:function(){},unhighlight:function(){},mousedown:function(){},mouseup:function(){this.model&&this.model.trigger("clicked")},destroy:function(){this.model&&(this.model.off("change",this._changeBinding),this.model.off("remove",this._removeBinding),this.model.off("select",this._selectBinding),this.model.off("unselect",this._unselectBinding))}}).value(),c}),define("requtils",[],function(a,b){"use strict";return{getUtils:function(){return window.Rkns.Utils},getRenderer:function(){return window.Rkns.Renderer}}}),define("renderer/basebutton",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({moveTo:function(a){this.sector.moveTo(a)},show:function(){this.sector.show()},hide:function(){this.sector&&this.sector.hide()},select:function(){this.sector.select()},unselect:function(a){this.sector.unselect(),(!a||a!==this.source_representation&&a.source_representation!==this.source_representation)&&this.source_representation.unselect()},destroy:function(){this.sector.destroy()}}).value(),f}),define("renderer/shapebuilder",[],function(){"use strict";var a="M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z",b={circle:{getShape:function(){return new paper.Path.Circle([0,0],1)},getImageShape:function(a,b){return new paper.Path.Circle(a,b)}},rectangle:{getShape:function(){return new paper.Path.Rectangle([-2,-2],[2,2])},getImageShape:function(a,b){return new paper.Path.Rectangle([-b,-b],[2*b,2*b])}},ellipse:{getShape:function(){return new paper.Path.Ellipse(new paper.Rectangle([-2,-1],[2,1]))},getImageShape:function(a,b){return new paper.Path.Ellipse(new paper.Rectangle([-b,-b/2],[2*b,b]))}},polygon:{getShape:function(){return new paper.Path.RegularPolygon([0,0],6,1)},getImageShape:function(a,b){return new paper.Path.RegularPolygon(a,6,b)}},diamond:{getShape:function(){var a=new paper.Path.Rectangle([-Math.SQRT2,-Math.SQRT2],[Math.SQRT2,Math.SQRT2]);return a.rotate(45),a},getImageShape:function(a,b){var c=new paper.Path.Rectangle([-b*Math.SQRT2/2,-b*Math.SQRT2/2],[b*Math.SQRT2,b*Math.SQRT2]);return c.rotate(45),c}},star:{getShape:function(){return new paper.Path.Star([0,0],8,1,.7)},getImageShape:function(a,b){return new paper.Path.Star(a,8,1*b,.7*b)}},cloud:{getShape:function(){var b=new paper.Path(a);return b},getImageShape:function(b,c){var d=new paper.Path(a);return d.scale(c),d.translate(b),d}},triangle:{getShape:function(){return new paper.Path.RegularPolygon([0,0],3,1)},getImageShape:function(a,b){var c=new paper.Path.RegularPolygon([0,0],3,1);return c.scale(b),c.translate(a),c}},svg:function(a){return{getShape:function(){return new paper.Path(a)},getImageShape:function(a,b){return new paper.Path}}}},c=function(a){return null!==a&&"undefined"!=typeof a||(a="circle"),"svg:"===a.substr(0,4)?b.svg(a.substr(4)):(a in b||(a="circle"),b[a])};return c.builders=b,c}),define("renderer/noderepr",["jquery","underscore","requtils","renderer/baserepresentation","renderer/shapebuilder"],function(a,b,c,d,e){"use strict";var f=c.getUtils(),g=f.inherit(d);return b(g.prototype).extend({_init:function(){if(this.renderer.node_layer.activate(),this.type="Node",this.buildShape(),this.hidden=!1,this.ghost=!1,this.options.show_node_circles?(this.circle.strokeWidth=this.options.node_stroke_width,this.h_ratio=1):this.h_ratio=0,this.title=a('
                ').appendTo(this.renderer.labels_$),this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.NodeEditButton(this.renderer,null),new b.NodeRemoveButton(this.renderer,null),new b.NodeLinkButton(this.renderer,null),new b.NodeEnlargeButton(this.renderer,null),new b.NodeShrinkButton(this.renderer,null)],this.options.hide_nodes&&this.normal_buttons.push(new b.NodeHideButton(this.renderer,null),new b.NodeShowButton(this.renderer,null)),this.pending_delete_buttons=[new b.NodeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d$1'));var m=this.model.get("style")||{title_size:1,"title-color":"#00000"},n=m.title_size||1,o=m.title_color||this.options.node_title_color,p={"line-height":"1em"};1!==n&&(p["font-size"]=n.toFixed(1)+"em"),"#000000"!==o&&(p.color=o);var q=a("").css(p).html(l);this.title.empty().append(q);var r=this._getStrokeWidth();this.title.css({left:this.paper_coords.x,top:this.paper_coords.y+this.circle_radius*this.h_ratio+this.options.node_label_distance+.5*r,opacity:h});var s=this.model.has("style")&&this.model.get("style").color||(this.model.get("created_by")||f._USER_PLACEHOLDER(this.renkan)).get("color"),t=this.model.has("style")&&this.model.get("style").dash?this.options.default_dash_array:null;this.circle.strokeWidth=r,this.circle.strokeColor=s,this.circle.dashArray=t;var u=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(u)});var v=this.img;if(this.img=this.model.get("image"),this.img&&this.img!==v&&(this.showImage(),this.circle&&this.circle.sendToBack()),this.node_image&&!this.img&&(this.node_image.remove(),delete this.node_image),this.renderer.minimap){this.minimap_circle.fillColor=s;var w=this.renderer.toMinimapCoords(d),x=this.renderer.minimap.scale*e,y=new paper.Size([x,x]);this.minimap_circle.fitBounds(w.subtract(y),y.multiply(2))}if(!("undefined"!=typeof c&&"dontRedrawEdges"in c&&c.dontRedrawEdges)){var z=this;b.each(this.project.get("edges").filter(function(a){return a.get("to")===z.model||a.get("from")===z.model}),function(a,b,c){var d=z.renderer.getRepresentationByModel(a);d&&"undefined"!=typeof d.from_representation&&"undefined"!=typeof d.from_representation.paper_coords&&"undefined"!=typeof d.to_representation&&"undefined"!=typeof d.to_representation.paper_coords&&d.redraw()})}this.ghost?this.show(!0):this.hidden&&this.hide()},showImage:function(){var b=null;"undefined"==typeof this.renderer.image_cache[this.img]?(b=new Image,this.renderer.image_cache[this.img]=b,b.src=this.img):b=this.renderer.image_cache[this.img];var c=this;if(b.width){this.node_image&&this.node_image.remove(),this.renderer.node_layer.activate();var d=b.width,e=b.height,f=this.model.get("clip_path"),g="undefined"!=typeof f&&f,h=null,i=null,j=null;if(g){h=new paper.Path;var k=f.match(/[a-z][^a-z]+/gi)||[],l=[0,0],m=1/0,n=1/0,o=-(1/0),p=-(1/0),q=function(a,b){var c=a.slice(1).map(function(a,c){var f=parseFloat(a),g=c%2;return f=g?(f-.5)*e:(f-.5)*d,b&&(f+=l[g]),g?(n=Math.min(n,f),p=Math.max(p,f)):(m=Math.min(m,f),o=Math.max(o,f)),f});return l=c.slice(-2),c};k.forEach(function(a){var b=a.match(/([a-z]|[0-9.-]+)/gi)||[""];switch(b[0]){case"M":h.moveTo(q(b));break;case"m":h.moveTo(q(b,!0));break;case"L":h.lineTo(q(b));break;case"l":h.lineTo(q(b,!0));break;case"C":h.cubicCurveTo(q(b));break;case"c":h.cubicCurveTo(q(b,!0));break;case"Q":h.quadraticCurveTo(q(b));break;case"q":h.quadraticCurveTo(q(b,!0))}}),i=Math[this.options.node_images_fill_mode?"min":"max"](o-m,p-n)/2,j=new paper.Point((o+m)/2,(p+n)/2),this.options.show_node_circles||(this.h_ratio=(p-n)/(2*i))}else i=Math[this.options.node_images_fill_mode?"min":"max"](d,e)/2,j=new paper.Point(0,0),this.options.show_node_circles||(this.h_ratio=e/(2*i));var r=new paper.Raster(b);if(r.locked=!0,g&&(r=new paper.Group(h,r),r.opacity=.99,r.clipped=!0,h.__representation=this),this.options.clip_node_images){var s=this.shapeBuilder.getImageShape(j,i);r=new paper.Group(s,r),r.opacity=.99,r.clipped=!0,s.__representation=this}this.image_delta=j.divide(i),this.node_image=r,this.node_image.__representation=c,this.node_image.scale(this.circle_radius/i),this.node_image.position=this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius)),this.node_image.insertAbove(this.circle)}else a(b).on("load",function(){c.showImage()})},paperShift:function(a){this.options.editor_mode?this.renkan.read_only||(this.is_dragging=!0,this.paper_coords=this.paper_coords.add(a),this.redraw()):this.renderer.view.paperShift(a)},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("NodeEditor",null);a.source_representation=this,a.draw()},select:function(){clearTimeout(this.hide_timeout),this.selected=!0,this.circle.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&!this.hidden&&this.active_buttons.forEach(function(a){a.show()});var b=this.model.get("uri");b&&a(".Rk-Bin-Item").each(function(){var c=a(this);c.attr("data-uri")===b&&c.addClass("selected")}),this.options.editor_mode||this.openEditor(),this.renderer.minimap&&(this.minimap_circle.strokeWidth=this.options.minimap_highlight_weight,this.minimap_circle.strokeColor=this.options.minimap_highlight_color),this.hidden?this.show(!0):this.showNeighbors(!0),this._super("select")},hideButtons:function(){this.all_buttons.forEach(function(a){a.hide()}),delete this.buttonTimeout},unselect:function(b){if(!b||b.source_representation!==this){this.selected=!1;var c=this;this.buttons_timeout=setTimeout(function(){c.hideButtons()},200),this.circle.strokeWidth=this._getStrokeWidth(),a(".Rk-Bin-Item").removeClass("selected"),this.renderer.minimap&&(this.minimap_circle.strokeColor=void 0),this.hidden?(this.renderer.removeRepresentationsOfType("editor"),this.hide()):this.hideNeighbors(!0),this._super("unselect")}},hide_delay:function(){var a=this;this.hide_timeout=setTimeout(function(){a.hide()},1e3)},hide:function(){var a=this;this.ghost=!1,this.hidden=!0,"undefined"!=typeof this.node_image&&(this.node_image.opacity=0),this.hideButtons(),this.circle.opacity=0,this.title.css("opacity",0),this.minimap_circle.opacity=0,b.each(this.project.get("edges").filter(function(b){return b.get("to")===a.model||b.get("from")===a.model}),function(b,c,d){var e=a.renderer.getRepresentationByModel(b);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.hide()}),this.hideNeighbors(!1)},show:function(a){var c=this;this.ghost=a,this.ghost?("undefined"!=typeof this.node_image&&(this.node_image.opacity=this.options.ghost_opacity),this.circle.opacity=this.options.ghost_opacity,this.title.css("opacity",this.options.ghost_opacity),this.minimap_circle.opacity=this.options.ghost_opacity):(this.minimap_circle.opacity=1,this.hidden=!1,this.redraw()),b.each(this.project.get("edges").filter(function(a){return a.get("to")===c.model||a.get("from")===c.model}),function(a,b,d){var e=c.renderer.getRepresentationByModel(a);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.show(c.ghost)})},hideNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));f&&f.ghost&&(a?f.hide_delay():f.hide())})},showNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));if(f&&f.hidden&&(f.show(a),!a)){var g=c.renderer.view.hiddenNodes.indexOf(f.model.id);g!==-1&&c.renderer.view.hiddenNodes.splice(g,1)}})},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},saveCoords:function(){var a=this.renderer.toModelCoords(this.paper_coords),b={position:{x:a.x,y:a.y}};this.renderer.isEditable()&&this.model.set(b)},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){if(this.renderer.is_dragging&&this.renderer.isEditable())this.saveCoords();else if(this.hidden){var c=this.renderer.view.hiddenNodes.indexOf(this.model.id);c!==-1&&this.renderer.view.hiddenNodes.splice(c,1),this.show(!1),this.select()}else b||this.model.get("delete_scheduled")||this.openEditor(),this.model.trigger("clicked");this.renderer.click_target=null,this.renderer.is_dragging=!1,this.is_dragging=!1},destroy:function(a){this._super("destroy"),this.all_buttons.forEach(function(a){a.destroy()}),this.circle.remove(),this.title.remove(),this.renderer.minimap&&this.minimap_circle.remove(),this.node_image&&this.node_image.remove()}}).value(),g}),define("renderer/edge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){if(this.renderer.edge_layer.activate(),this.type="Edge",this.hidden=!1,this.ghost=!1,this.highlighted=!1,this.from_representation=this.renderer.getRepresentationByModel(this.model.get("from")),this.to_representation=this.renderer.getRepresentationByModel(this.model.get("to")),this.bundle=this.renderer.addToBundles(this),this.line=new paper.Path,this.line.add([0,0],[0,0],[0,0]),this.line.__representation=this,this.line.strokeWidth=this.options.edge_stroke_width,this.arrow_scale=1,this.arrow=new paper.Path,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.pivot=new paper.Point([this.options.edge_arrow_length/2,this.options.edge_arrow_width/2]),this.arrow.__representation=this,this.text=a('
                ').appendTo(this.renderer.labels_$),this.arrow_angle=0,this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.EdgeEditButton(this.renderer,null),new b.EdgeRemoveButton(this.renderer,null)],this.pending_delete_buttons=[new b.EdgeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d90&&(r-=180,s=s.multiply(-1)),r<-90&&(r+=180,s=s.multiply(-1));var x=this.model.get("title")||this.renkan.translate(this.options.label_untitled_edges)||"";x=e.shortenText(x,this.options.node_label_max_length),"object"==typeof this.highlighted?this.text.html(this.highlighted.replace(b(x).escape(),'$1')):this.text.text(x);var y=this.paper_coords.add(s);this.text.css({left:y.x,top:y.y,transform:"rotate("+r+"deg)","-moz-transform":"rotate("+r+"deg)","-webkit-transform":"rotate("+r+"deg)",opacity:d}),this.text_angle=r;var z=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(z)}),this.renderer.minimap&&(this.minimap_line.strokeColor=u,this.minimap_line.segments[0].point=this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position"))),this.minimap_line.segments[1].point=this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position"))))}},hide:function(){this.hidden=!0,this.ghost=!1,this.text.hide(),this.line.visible=!1,this.arrow.visible=!1,this.minimap_line.visible=!1},show:function(a){this.ghost=a,this.ghost?(this.text.css("opacity",.3),this.line.opacity=.3,this.arrow.opacity=.3,this.minimap_line.opacity=.3):(this.hidden=!1,this.text.css("opacity",1),this.line.opacity=1,this.arrow.opacity=1,this.minimap_line.opacity=1),this.text.show(),this.line.visible=!0,this.arrow.visible=!0,this.minimap_line.visible=!0,this.redraw()},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("EdgeEditor",null);a.source_representation=this,a.draw()},select:function(){this.selected=!0,this.line.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&this.active_buttons.forEach(function(a){a.show()}),this.options.editor_mode||this.openEditor(),this._super("select")},unselect:function(a){a&&a.source_representation===this||(this.selected=!1,this.options.editor_mode&&this.all_buttons.forEach(function(a){a.hide()}),this.hidden&&this.renderer.removeRepresentationsOfType("editor"),this.line.strokeWidth=this._getStrokeWidth(),this._super("unselect"))},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){!this.renkan.read_only&&this.renderer.is_dragging?(this.from_representation.saveCoords(),this.to_representation.saveCoords(),this.from_representation.is_dragging=!1,this.to_representation.is_dragging=!1):(b||this.openEditor(),this.model.trigger("clicked")),this.renderer.click_target=null,this.renderer.is_dragging=!1},paperShift:function(a){this.options.editor_mode?this.options.read_only||(this.from_representation.paperShift(a),this.to_representation.paperShift(a)):this.renderer.paperShift(a)},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},destroy:function(){this._super("destroy"),this.line.remove(),this.arrow.remove(),this.text.remove(),this.renderer.minimap&&this.minimap_line.remove(),this.all_buttons.forEach(function(a){a.destroy()});var a=this;this.bundle.edges=b.reject(this.bundle.edges,function(b){return a===b})}}).value(),f}),define("renderer/tempedge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.edge_layer.activate(),this.type="Temp-edge",this.origin=e.OriginEnum.NONE;var a=(this.project.get("users").get(this.renkan.current_user)||e._USER_PLACEHOLDER(this.renkan)).get("color");this.line=new paper.Path,this.line.strokeColor=a,this.line.dashArray=[4,2],this.line.strokeWidth=this.options.selected_edge_stroke_width,this.line.add([0,0],[0,0]),this.line.__representation=this,this.arrow=new paper.Path,this.arrow.fillColor=a,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.__representation=this,this.arrow_angle=0},redraw:function(){var a=this.from_representation.paper_coords,b=this.end_pos,c=b.subtract(a).angle,d=a.add(b).divide(2);this.line.segments[0].point=a,this.line.segments[1].point=b,this.arrow.rotate(c-this.arrow_angle),this.arrow.position=d,this.arrow_angle=c},paperShift:function(a){if(!this.renderer.isEditable())return this.renderer.removeRepresentation(_this),void paper.view.draw();this.end_pos=this.end_pos.add(a);var b=paper.project.hitTest(this.end_pos);this.renderer.findTarget(b),this.redraw()},mouseup:function(a,b){var c=paper.project.hitTest(a.point),d=this.from_representation.model,f=!0;if(c&&"undefined"!=typeof c.item.__representation){var g=c.item.__representation;if("Node"===g.type.substr(0,4)){var h=g.model||g.source_representation.model;if(d!==h){var i={id:e.getUID("edge"),created_by:this.renkan.current_user,from:d,to:h,origin:this.origin};this.renderer.isEditable()&&this.project.addEdge(i)}}(d===g.model||g.source_representation&&g.source_representation.model===d)&&(f=!1,this.renderer.is_dragging=!0)}f&&(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentation(this), +paper.view.draw())},destroy:function(){this.arrow.remove(),this.line.remove()}}).value(),f}),define("renderer/baseeditor",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.buttons_layer.activate(),this.type="editor",this.editor_block=new paper.Path;var c=b.map(b.range(8),function(){return[0,0]});this.editor_block.add.apply(this.editor_block,c),this.editor_block.strokeWidth=this.options.tooltip_border_width,this.editor_block.strokeColor=this.options.tooltip_border_color,this.editor_block.opacity=this.options.tooltip_opacity,this.editor_$=a("
                ").appendTo(this.renderer.editor_$).css({position:"absolute",opacity:this.options.tooltip_opacity}).hide()},destroy:function(){this.editor_block.remove(),this.editor_$.remove()}}).value(),f}),define("renderer/nodeeditor",["jquery","underscore","requtils","renderer/baseeditor","renderer/shapebuilder","ckeditor-core"],function(a,b,c,d,e,f){"use strict";var g=c.getUtils(),h=g.inherit(d);return b(h.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/nodeeditor.html"],this.readOnlyTemplate=this.options.node_editor_templates},draw:function(){var c=this.source_representation.model,d=c.get("created_by")||g._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate[c.get("type")]||this.readOnlyTemplate.default,i=this.options.static_url+"img/image-placeholder.png",j=c.get("size")||0;this.editor_$.html(h({node:{_id:c.get("_id"),has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),type:c.get("type")||"default",short_uri:g.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),image:c.get("image")||"",image_placeholder:i,color:c.has("style")&&c.get("style").color||d.get("color"),title_size:c.has("style")&&c.get("style").title_size||1,title_color:c.has("style")&&c.get("style").title_color||this.options.node_title_color,thickness:c.has("style")&&c.get("style").thickness||1,dash:c.has("style")&&c.get("style").dash?"checked":"",clip_path:c.get("clip_path")||!1,created_by_color:d.get("color"),created_by_title:d.get("title"),size:(j>0?"+":"")+j,shape:c.get("shape")||"circle"},renkan:this.renkan,options:this.options,shortenText:g.shortenText,shapes:b(e.builders).omit("svg").keys().value(),types:b(this.options.node_editor_templates).keys().value()})),this.redraw();var k=this,l=!(!this.renderer.isEditable()||!k.options.show_node_editor_description_richtext)&&f.inline("Rk-Edit-Description-"+c.get("_id"),k.options.richtext_editor_config),m=!(!this.renderer.isEditable()||!k.options.show_node_editor_title_richtext)&&f.inline("Rk-Edit-Title-"+c.get("_id"),k.options.richtext_editor_config),n=function(){k.renderer.removeRepresentation(k),paper.view.draw()};if(k.cleanEditor=function(){k.editor_$.off("keyup"),k.editor_$.find("input, textarea, select").off("change keyup paste"),k.editor_$.find(".Rk-Edit-Image-File").off("change"),k.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").off("hover"),k.editor_$.find(".Rk-Edit-Size-Btn").off("click"),k.editor_$.find(".Rk-Edit-Image-Del").off("click"),k.editor_$.find(".Rk-Edit-ColorPicker").find("li").off("hover click"),k.editor_$.find(".Rk-CloseX").off("click"),k.editor_$.find(".Rk-Edit-Goto").off("click"),k.options.show_node_editor_description_richtext&&l&&(l.focusManager.blur(!0),l.destroy()),k.options.show_node_editor_title_richtext&&m&&(m.focusManager.blur(!0),m.destroy())},this.editor_$.find(".Rk-CloseX").click(function(a){a.preventDefault(),n()}),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var o=b.debounce(function(){b.defer(function(){if(k.renderer.isEditable()){var a={};if(k.options.show_node_editor_uri&&(a.uri=k.editor_$.find(".Rk-Edit-URI").val(),k.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#")),k.options.show_node_editor_image&&(a.image=k.editor_$.find(".Rk-Edit-Image").val(),k.editor_$.find(".Rk-Edit-ImgPreview").attr("src",a.image||i)),k.options.show_node_editor_description&&(k.options.show_node_editor_description_richtext?l&&l.checkDirty()&&(a.description=l.getData(),l.resetDirty()):a.description=k.editor_$.find(".Rk-Edit-Description").val()),k.options.show_node_editor_title&&(k.options.show_node_editor_title_richtext?m&&m.checkDirty()&&(a.title=m.getData(),m.resetDirty()):a.title=k.editor_$.find(".Rk-Edit-Title").val()),k.options.show_node_editor_style){var d=k.editor_$.find(".Rk-Edit-Dash").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d})}k.options.change_shapes&&c.get("shape")!==k.editor_$.find(".Rk-Edit-Shape").val()&&(a.shape=k.editor_$.find(".Rk-Edit-Shape").val()),k.options.change_types&&c.get("type")!==k.editor_$.find(".Rk-Edit-Type").val()&&(a.type=k.editor_$.find(".Rk-Edit-Type").val()),c.set(a),k.redraw()}else n()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&n()}),this.editor_$.find("input, textarea, select").on("change keyup paste",o),k.options.show_node_editor_description&&k.options.show_node_editor_description_richtext&&l&&(l.on("change",o),l.on("blur",o)),k.options.show_node_editor_title&&k.options.show_node_editor_title_richtext&&m&&(m.on("change",o),m.on("blur",o)),k.options.allow_image_upload&&this.editor_$.find(".Rk-Edit-Image-File").change(function(){if(this.files.length){var a=this.files[0],b=new FileReader;if("image"!==a.type.substr(0,5))return void alert(k.renkan.translate("This file is not an image"));if(a.size>1024*k.options.uploaded_image_max_kb)return void alert(k.renkan.translate("Image size must be under ")+k.options.uploaded_image_max_kb+k.renkan.translate("KB"));b.onload=function(a){k.editor_$.find(".Rk-Edit-Image").val(a.target.result),o()},b.readAsDataURL(a)}}),this.editor_$.find(".Rk-Edit-Title")[0].focus();var p=k.editor_$.find(".Rk-Editor-ColorPicker-Node");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),p.show()},function(a){a.preventDefault(),p.hide()}),p.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||g._USER_PLACEHOLDER(k.renkan)).get("color"))}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),p.hide(),paper.view.draw()):n()});var q=function(a){if(k.renderer.isEditable()){var b=a+(c.get("size")||0);k.editor_$.find("#Rk-Edit-Size-Value").text((b>0?"+":"")+b),c.set("size",b),paper.view.draw()}else n()};this.editor_$.find("#Rk-Edit-Size-Down").click(function(){return q(-1),!1}),this.editor_$.find("#Rk-Edit-Size-Up").click(function(){return q(1),!1});var r=function(a){if(k.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>k.options.node_stroke_witdh_scale&&(e=k.options.node_stroke_witdh_scale),e!==d&&(k.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else n()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return r(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return r(1),!1});var s=function(a){var d=k.options.node_title_size_min,e=k.options.node_title_size_max;if(k.renderer.isEditable()){var f=c.has("style")&&c.get("style").title_size||1,g=a+f;ge&&(g=e),g!==f&&(k.editor_$.find("#Rk-Edit-Title-Size-Value").text(g.toFixed(1)),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_size:g})),paper.view.draw())}else n()},t=k.editor_$.find(".Rk-Editor-ColorPicker-Title");this.editor_$.find(".Rk-Editor-p-title-color").hover(function(a){a.preventDefault(),t.show()},function(a){a.preventDefault(),t.hide()}),t.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault();var b=c.has("style")&&c.get("style").title_color||k.options.node_fill_color;k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",b)}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_color:a(this).attr("data-color")})),t.hide(),paper.view.draw()):n()}),this.editor_$.find("#Rk-Edit-Title-Size-Down").click(function(){var a=k.options.node_title_size_step;return s(-a),!1}),this.editor_$.find("#Rk-Edit-Title-Size-Up").click(function(){var a=k.options.node_title_size_step;return s(a),!1}),this.editor_$.find(".Rk-Edit-Image-Del").click(function(){return k.editor_$.find(".Rk-Edit-Image").val(""),o(),!1})}else if("object"==typeof this.source_representation.highlighted){var u=this.source_representation.highlighted.replace(b(c.get("title")).escape(),'$1');this.editor_$.find(".Rk-Display-Title"+(c.get("uri")?" a":"")).html(u),this.options.show_node_tooltip_description&&this.editor_$.find(".Rk-Display-Description").html(this.source_representation.highlighted.replace(b(c.get("description")).escape(),'$1'))}this.editor_$.find("img").load(function(){k.redraw()})},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;g.drawEditBox(this.options,a,this.editor_block,.75*this.source_representation.circle_radius,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()},destroy:function(){"undefined"!=typeof this.cleanEditor&&this.cleanEditor(),this.editor_block.remove(),this.editor_$.remove()}}).value(),h}),define("renderer/edgeeditor",["jquery","underscore","requtils","renderer/baseeditor"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/edgeeditor.html"],this.readOnlyTemplate=this.options.templates["templates/edgeeditor_readonly.html"]},draw:function(){var c=this.source_representation.model,d=c.get("from"),f=c.get("to"),g=c.get("created_by")||e._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate;this.editor_$.html(h({edge:{has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),short_uri:e.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),color:c.has("style")&&c.get("style").color||g.get("color"),dash:c.has("style")&&c.get("style").dash?"checked":"",arrow:c.has("style")&&c.get("style").arrow||!c.has("style")||"undefined"==typeof c.get("style").arrow?"checked":"",thickness:c.has("style")&&c.get("style").thickness||1,from_title:d.get("title"),to_title:f.get("title"),from_color:d.has("style")&&d.get("style").color||(d.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),to_color:f.has("style")&&f.get("style").color||(f.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),created_by_color:g.get("color"),created_by_title:g.get("title")},renkan:this.renkan,shortenText:e.shortenText,options:this.options})),this.redraw();var i=this,j=function(){i.renderer.removeRepresentation(i),i.editor_$.find(".Rk-Edit-Size-Btn").off("click"),paper.view.draw()};if(this.editor_$.find(".Rk-CloseX").click(j),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var k=b.debounce(function(){b.defer(function(){if(i.renderer.isEditable()){var a={title:i.editor_$.find(".Rk-Edit-Title").val()};if(i.options.show_edge_editor_uri&&(a.uri=i.editor_$.find(".Rk-Edit-URI").val()),i.options.show_node_editor_style){var d=i.editor_$.find(".Rk-Edit-Dash").is(":checked"),e=i.editor_$.find(".Rk-Edit-Arrow").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d,arrow:e})}i.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#"),c.set(a),paper.view.draw()}else j()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&j()}),this.editor_$.find("input").on("keyup change paste",k),this.editor_$.find(".Rk-Edit-Vocabulary").change(function(){var b=a(this),c=b.val();c&&(i.editor_$.find(".Rk-Edit-Title").val(b.find(":selected").text()),i.editor_$.find(".Rk-Edit-URI").val(c),k())}),this.editor_$.find(".Rk-Edit-Direction").click(function(){i.renderer.isEditable()?(c.set({from:c.get("to"),to:c.get("from")}),i.draw()):j()});var l=i.editor_$.find(".Rk-Editor-ColorPicker-Edge");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),l.show()},function(a){a.preventDefault(),l.hide()}),l.find("li").hover(function(b){b.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||e._USER_PLACEHOLDER(i.renkan)).get("color"))}).click(function(d){d.preventDefault(),i.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),l.hide(),paper.view.draw()):j()});var m=function(a){if(i.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>i.options.node_stroke_witdh_scale&&(e=i.options.node_stroke_witdh_scale),e!==d&&(i.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else j()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return m(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return m(1),!1})}},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;e.drawEditBox(this.options,a,this.editor_block,5,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()}}).value(),f}),define("renderer/nodebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({setSectorSize:function(){var a=this.source_representation.circle_radius;a!==this.lastSectorInner&&(this.sector&&this.sector.destroy(),this.sector=this.renderer.drawSector(this,1+a,e._NODE_BUTTON_WIDTH+a,this.startAngle,this.endAngle,1,this.imageName,this.renkan.translate(this.text)),this.lastSectorInner=a)},unselect:function(){d.prototype.unselect.apply(this,Array.prototype.slice.call(arguments,1)),this.source_representation&&this.source_representation.buttons_timeout&&(clearTimeout(this.source_representation.buttons_timeout),this.source_representation.hideButtons())},select:function(){this.source_representation&&this.source_representation.buttons_timeout&&clearTimeout(this.source_representation.buttons_timeout),this.sector.select()}}).value(),f}),define("renderer/nodeeditbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-edit-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-125:-135,this.endAngle=this.options.hide_nodes?-55:-45,this.imageName="edit",this.text="Edit"},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/noderemovebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-remove-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-10:0,this.endAngle=this.options.hide_nodes?45:90,this.imageName="remove",this.text="Remove"},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove node ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeNode(this.source_representation.model)}}).value(),f}),define("renderer/nodehidebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-hide-button",this.lastSectorInner=0,this.startAngle=45,this.endAngle=90,this.imageName="hide",this.text="Hide"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.renderer.view.addHiddenNode(this.source_representation.model)}}).value(),f}),define("renderer/nodeshowbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-show-button",this.lastSectorInner=0,this.startAngle=90,this.endAngle=135,this.imageName="show",this.text="Show neighbors"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.source_representation.showNeighbors(!1)}}).value(),f}),define("renderer/noderevertbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-revert-button",this.lastSectorInner=0,this.startAngle=-135,this.endAngle=135,this.imageName="revert",this.text="Cancel deletion"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/nodelinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-link-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?135:90,this.endAngle=this.options.hide_nodes?190:180,this.imageName="link",this.text="Link to another node"},mousedown:function(a,b){if(this.renderer.isEditable()){var c=this.renderer.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]);this.renderer.click_target=null,this.renderer.removeRepresentationsOfType("editor"),this.renderer.addTempEdge(this.source_representation,d,e.OriginEnum.EDGE_BUTTON_CIRCLE)}}}).value(),f}),define("renderer/nodeenlargebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-enlarge-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-55:-45,this.endAngle=this.options.hide_nodes?-10:0,this.imageName="enlarge",this.text="Enlarge"},mouseup:function(){var a=1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/nodeshrinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-shrink-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-170:-180,this.endAngle=this.options.hide_nodes?-125:-135,this.imageName="shrink",this.text="Shrink"},mouseup:function(){var a=-1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/edgeeditbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-edit-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-270,-90,1,"edit",this.renkan.translate("Edit"))},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/edgeremovebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-remove-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-90,90,1,"remove",this.renkan.translate("Remove"))},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove edge ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeEdge(this.source_representation.model)}}).value(),f}),define("renderer/edgerevertbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-revert-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-135,135,1,"revert",this.renkan.translate("Cancel deletion"))},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/miniframe",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({paperShift:function(a){this.renderer.offset=this.renderer.offset.subtract(a.divide(this.renderer.minimap.scale).multiply(this.renderer.scale)),this.renderer.redraw()},mouseup:function(a){this.renderer.click_target=null,this.renderer.is_dragging=!1}}).value(),f}),define("renderer/scene",["jquery","underscore","filesaver","requtils","renderer/miniframe","screenfull"],function(a,b,c,d,e,f){"use strict";var g=d.getUtils(),h=function(c){this.renkan=c,this.$=a(".Rk-Render"),this.representations=[],this.$.html(c.options.templates["templates/scene.html"](c)),this.onStatusChange(),this.canvas_$=this.$.find(".Rk-Canvas"),this.labels_$=this.$.find(".Rk-Labels"),c.options.popup_editor?this.editor_$=this.$.find(".Rk-Editor"):this.editor_$=a("#"+c.options.editor_panel),this.notif_$=this.$.find(".Rk-Notifications"),paper.setup(this.canvas_$[0]),this.totalScroll=0,this.mouse_down=!1,this.click_target=null,this.selected_target=null,this.edge_layer=new paper.Layer,this.node_layer=new paper.Layer,this.buttons_layer=new paper.Layer,this.delete_list=[],this.redrawActive=!1,c.options.show_minimap&&(this.minimap={background_layer:new paper.Layer,edge_layer:new paper.Layer,node_layer:new paper.Layer,node_group:new paper.Group,size:new paper.Size(c.options.minimap_width,c.options.minimap_height)},this.minimap.background_layer.activate(),this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle=new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.rectangle.fillColor=c.options.minimap_background_color,this.minimap.rectangle.strokeColor=c.options.minimap_border_color,this.minimap.rectangle.strokeWidth=4,this.minimap.offset=new paper.Point(this.minimap.size.divide(2)),this.minimap.scale=.1,this.minimap.node_layer.activate(),this.minimap.cliprectangle=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.cliprectangle),this.minimap.node_group.clipped=!0,this.minimap.miniframe=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.miniframe),this.minimap.miniframe.fillColor="#c0c0ff",this.minimap.miniframe.opacity=.3,this.minimap.miniframe.strokeColor="#000080",this.minimap.miniframe.strokeWidth=2,this.minimap.miniframe.__representation=new e(this,null)),this.throttledPaperDraw=b(function(){paper.view.draw()}).throttle(100).value(),this.bundles=[],this.click_mode=!1;var d=this,h=!0,i=1,j=!1,k=0,l=0,m=0;this.image_cache={},this.icon_cache={},["edit","remove","hide","show","link","enlarge","shrink","revert"].forEach(function(a){var b=new Image;b.src=c.options.static_url+"img/"+a+".png",d.icon_cache[a]=b});var n=b.throttle(function(a,b){d.onMouseMove(a,b)},g._MOUSEMOVE_RATE);this.canvas_$.on({mousedown:function(a){a.preventDefault(),d.onMouseDown(a,!1)},mousemove:function(a){a.preventDefault(),n(a,!1)},mouseup:function(a){a.preventDefault(),d.onMouseUp(a,!1)},mousewheel:function(a,b){c.options.zoom_on_scroll&&(a.preventDefault(),h&&d.onScroll(a,b))},touchstart:function(a){a.preventDefault();var b=a.originalEvent.touches[0];c.options.allow_double_click&&new Date-m0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show(),this.$.find(".Rk-CurrentUser").mouseenter(function(){d.$.find(".Rk-UserList").slideDown()}),this.$.find(".Rk-Users").mouseleave(function(){d.$.find(".Rk-UserList").slideUp()}),f.enabled?(o(".Rk-FullScreen-Button","fullScreen"),document.addEventListener(f.raw.fullscreenchange,function(){setTimeout(function(){var a=d.$.width(),b=d.$.height();d.renkan.options.show_top_bar&&(b-=d.$.find(".Rk-TopBar").height()),d.renkan.options.show_bins&&this.renkan.$.find(".Rk-Bins").position().left>0&&(a-=this.renkan.$.find(".Rk-Bins").width()),paper.view.viewSize=new paper.Size([a,b]),d.resize(d.currentWidth,a,d.currentHeight,b),d.currentWidth=a,d.currentHeight=b,f.isFullscreen||(paper.view.onResize=function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)})},600)})):(this.$.find(".Rk-FullScreen-Button").addClass("disabled"),this.$.find(".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents").html(this.renkan.translate("Fullscreen not supported by your browser"))),o(".Rk-AddNode-Button","addNodeBtn"),o(".Rk-AddEdge-Button","addEdgeBtn"),o(".Rk-Save-Button","save"),o(".Rk-Open-Button","open"),o(".Rk-Export-Button","exportProject"),this.$.find(".Rk-Bookmarklet-Button").attr("href","javascript:"+g._BOOKMARKLET_CODE(c)).click(function(){return d.notif_$.text(c.translate("Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.")).fadeIn().delay(5e3).fadeOut(),!1}),this.$.find(".Rk-TopBar-Button").mouseover(function(){a(this).find(".Rk-TopBar-Tooltip").show()}).mouseout(function(){a(this).find(".Rk-TopBar-Tooltip").hide()}),o(".Rk-Fold-Bins","foldBins"),paper.view.on("resize",function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)});var p=b.throttle(function(){d.redraw()},50);this.addRepresentations("Node",this.renkan.project.get("nodes")),this.addRepresentations("Edge",this.renkan.project.get("edges")),this.renkan.project.on("change:title",function(){d.$.find(".Rk-PadTitle").val(c.project.get("title")).prop("title",c.project.get("title"))}),this.$.find(".Rk-PadTitle").on("keyup input paste",function(){c.project.set({title:a(this).val()})});var q=b.throttle(function(){d.redrawUsers()},100);if(q(),this.renkan.project.on("change:saveStatus",function(){switch(d.renkan.project.get("saveStatus")){case 0:d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("saved");break;case 1:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("to-save");break;case 2:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").addClass("saving")}}),this.renkan.project.on("loaded",function(){d.renkan.options.url_parameters?Backbone.history.start():d.fixSize(),d.redrawActive=!0,p()}),this.renkan.router.on("router",function(a){d.setViewParameters(a)}),this.renkan.project.on("change:loadingStatus",function(){if(d.renkan.project.get("loadingStatus")){d.$.find(".loader").addClass("run"),setTimeout(function(){d.$.find(".loader").hide(250)},3e3)}}),this.renkan.project.on("add:users remove:users",q),this.renkan.project.on("add:views remove:views",function(a){d.renkan.project.get("views").length>1?d.$.find(".Rk-ZoomSetSaved").show():d.$.find(".Rk-ZoomSetSaved").hide()}),this.renkan.project.on("add:nodes",function(a){d.addRepresentation("Node",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("add:edges",function(a){d.addRepresentation("Edge",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("change:title",function(a,b){var c=d.$.find(".Rk-PadTitle");c.is("input")?c.val()!==b&&c.val(b):c.text(b)}),c.options.size_bug_fix){var r="number"==typeof c.options.size_bug_fix?c.options.size_bug_fix:500;window.setTimeout(function(){d.fixSize()},r)}if(c.options.force_resize&&a(window).resize(function(){d.autoScale()}),c.options.show_user_list&&c.options.user_color_editable){var s=this.$.find(".Rk-Users .Rk-Edit-ColorPicker-Wrapper"),t=this.$.find(".Rk-Users .Rk-Editor-ColorPicker-User");s.hover(function(a){d.isEditable()&&(a.preventDefault(),t.show())},function(a){a.preventDefault(),t.hide()}),t.find("li").mouseenter(function(b){d.isEditable()&&(b.preventDefault(),d.$.find(".Rk-CurrentUser-Color").css("background",a(this).attr("data-color")))})}if(c.options.show_search_field){var u="";this.$.find(".Rk-GraphSearch-Field").on("keyup change paste input",function(){ +var b=a(this),e=b.val();if(e!==u)if(u=e,e.length<2)c.project.get("nodes").each(function(a){d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){d.getRepresentationByModel(a).unhighlight()});else{var f=g.regexpFromTextOrArray(e);c.project.get("nodes").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()})}})}this.redraw(),window.setInterval(function(){var a=(new Date).valueOf();d.delete_list.forEach(function(b){if(a>=b.time){var d=c.project.get("nodes").findWhere({delete_scheduled:b.id});d&&project.removeNode(d),d=c.project.get("edges").findWhere({delete_scheduled:b.id}),d&&project.removeEdge(d)}}),d.delete_list=d.delete_list.filter(function(a){return c.project.get("nodes").findWhere({delete_scheduled:a.id})||c.project.get("edges").findWhere({delete_scheduled:a.id})})},500),this.minimap&&window.setInterval(function(){d.rescaleMinimap()},2e3)};return b(h.prototype).extend({fixSize:function(){"undefined"==typeof this.view&&(this.view=this.addRepresentation("View",this.renkan.project.get("views").last())),this.view.autoScale()},drawSector:function(b,c,d,e,f,g,h,i){var j=this.renkan.options,k=e*Math.PI/180,l=f*Math.PI/180,m=this.icon_cache[h],n=-Math.sin(k),o=Math.cos(k),p=Math.cos(k)*c+g*n,q=Math.sin(k)*c+g*o,r=Math.cos(k)*d+g*n,s=Math.sin(k)*d+g*o,t=-Math.sin(l),u=Math.cos(l),v=Math.cos(l)*c-g*t,w=Math.sin(l)*c-g*u,x=Math.cos(l)*d-g*t,y=Math.sin(l)*d-g*u,z=(c+d)/2,A=(k+l)/2,B=Math.cos(A)*z,C=Math.sin(A)*z,D=Math.cos(A)*c,E=Math.cos(A)*d,F=Math.sin(A)*c,G=Math.sin(A)*d,H=Math.cos(A)*(d+3),I=Math.sin(A)*(d+j.buttons_label_font_size)+j.buttons_label_font_size/2;this.buttons_layer.activate();var J=new paper.Path;J.add([p,q]),J.arcTo([D,F],[v,w]),J.lineTo([x,y]),J.arcTo([E,G],[r,s]),J.fillColor=j.buttons_background,J.opacity=.5,J.closed=!0,J.__representation=b;var K=new paper.PointText(H,I);K.characterStyle={fontSize:j.buttons_label_font_size,fillColor:j.buttons_label_color},H>2?K.paragraphStyle.justification="left":H<-2?K.paragraphStyle.justification="right":K.paragraphStyle.justification="center",K.visible=!1;var L=!1,M=new paper.Point(-200,-200),N=new paper.Group([J,K]),O=N.position,P=new paper.Point([B,C]),Q=new paper.Point(0,0);K.content=i,N.pivot=N.bounds.center,N.visible=!1,N.position=M;var R={show:function(){L=!0,N.position=Q.add(O),N.visible=!0},moveTo:function(a){Q=a,L&&(N.position=a.add(O))},hide:function(){L=!1,N.visible=!1,N.position=M},select:function(){J.opacity=.8,K.visible=!0},unselect:function(){J.opacity=.5,K.visible=!1},destroy:function(){N.remove()}},S=function(){var a=new paper.Raster(m);a.position=P.add(N.position).subtract(O),a.locked=!0,N.addChild(a)};return m.width?S():a(m).on("load",S),R},addToBundles:function(a){var c=b(this.bundles).find(function(b){return b.from===a.from_representation&&b.to===a.to_representation||b.from===a.to_representation&&b.to===a.from_representation});return"undefined"!=typeof c?c.edges.push(a):(c={from:a.from_representation,to:a.to_representation,edges:[a],getPosition:function(a){var c=a.from_representation===this.from?1:-1;return c*(b(this.edges).indexOf(a)-(this.edges.length-1)/2)}},this.bundles.push(c)),c},isEditable:function(){return this.renkan.options.editor_mode&&!this.renkan.read_only},onStatusChange:function(){var a=this.$.find(".Rk-Save-Button"),b=a.find(".Rk-TopBar-Tooltip-Contents");this.renkan.read_only?(a.removeClass("disabled Rk-Save-Online").addClass("Rk-Save-ReadOnly"),b.text(this.renkan.translate("Connection lost"))):this.renkan.options.manual_save?(a.removeClass("Rk-Save-ReadOnly Rk-Save-Online"),b.text(this.renkan.translate("Save Project"))):(a.removeClass("disabled Rk-Save-ReadOnly").addClass("Rk-Save-Online"),b.text(this.renkan.translate("Auto-save enabled"))),this.redrawUsers()},redrawMiniframe:function(){var a=this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),b=this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));this.minimap.miniframe.fitBounds(a,b)},rescaleMinimap:function(){var a=this.renkan.project.get("nodes");if(a.length>1){var b=a.map(function(a){return a.get("position").x}),c=a.map(function(a){return a.get("position").y}),d=Math.min.apply(Math,b),e=Math.min.apply(Math,c),f=Math.max.apply(Math,b),g=Math.max.apply(Math,c),h=Math.min(.8*this.view.scale*this.renkan.options.minimap_width/paper.view.bounds.width,.8*this.view.scale*this.renkan.options.minimap_height/paper.view.bounds.height,(this.renkan.options.minimap_width-2*this.renkan.options.minimap_padding)/(f-d),(this.renkan.options.minimap_height-2*this.renkan.options.minimap_padding)/(g-e));this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([(f+d)/2,(g+e)/2]).multiply(h)),this.minimap.scale=h}1===a.length&&(this.minimap.scale=.1,this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([a.at(0).get("position").x,a.at(0).get("position").y]).multiply(this.minimap.scale))),this.redraw()},toPaperCoords:function(a){return a.multiply(this.view.scale).add(this.view.offset)},toMinimapCoords:function(a){return a.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft)},toModelCoords:function(a){return a.subtract(this.view.offset).divide(this.view.scale)},addRepresentation:function(a,b){var c=d.getRenderer()[a],e=new c(this,b);return this.representations.push(e),e},addRepresentations:function(a,b){var c=this;b.forEach(function(b){c.addRepresentation(a,b)})},userTemplate:b.template('
              • <%=name%>
              • '),redrawUsers:function(){if(this.renkan.options.show_user_list){var b=[].concat((this.renkan.project.current_user_list||{}).models||[],(this.renkan.project.get("users")||{}).models||[]),c="",d=this.$.find(".Rk-Users"),e=d.find(".Rk-CurrentUser-Name"),f=d.find(".Rk-Edit-ColorPicker li"),g=d.find(".Rk-CurrentUser-Color"),h=this;e.off("click").text(this.renkan.translate("")),f.off("mouseleave click"),b.forEach(function(b){b.get("_id")===h.renkan.current_user?(e.text(b.get("title")),g.css("background",b.get("color")),h.isEditable()&&(h.renkan.options.user_name_editable&&e.click(function(){var c=a(this),d=a("").val(b.get("title")).blur(function(){b.set("title",a(this).val()),h.redrawUsers(),h.redraw()});c.empty().html(d),d.select()}),h.renkan.options.user_color_editable&&f.click(function(c){c.preventDefault(),h.isEditable()&&b.set("color",a(this).attr("data-color")),a(this).parent().hide()}).mouseleave(function(){g.css("background",b.get("color"))}))):c+=h.userTemplate({name:b.get("title"),background:b.get("color")})}),d.find(".Rk-UserList").html(c)}},removeRepresentation:function(a){a.destroy(),this.representations=b.reject(this.representations,function(b){return b===a})},getRepresentationByModel:function(a){if(a)return b.find(this.representations,function(b){return b.model===a})},removeRepresentationsOfType:function(a){var c=b.filter(this.representations,function(b){return b.type===a}),d=this;b.each(c,function(a){d.removeRepresentation(a)})},highlightModel:function(a){var b=this.getRepresentationByModel(a);b&&b.highlight()},unhighlightAll:function(a){b.each(this.representations,function(a){a.unhighlight()})},unselectAll:function(a){b.each(this.representations,function(a){a.unselect()})},redraw:function(){this.redrawActive&&(b.each(this.representations,function(a){a.redraw({dontRedrawEdges:!0})}),this.minimap&&"undefined"!=typeof this.view&&this.redrawMiniframe(),paper.view.draw())},resize:function(a,b,c,d){var e;this.minimap&&(this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.cliprectangle.fitBounds(this.minimap.topleft,this.minimap.size));var f=d/c,g=b/a;e=dg._MIN_DRAG_DISTANCE&&(this.is_dragging=!0);var e=paper.project.hitTest(c);this.is_dragging?this.click_target&&"function"==typeof this.click_target.paperShift?this.click_target.paperShift(d):this.view.paperShift(d):this.findTarget(e),paper.view.draw()},onMouseDown:function(b,c){var d=this.canvas_$.offset(),e=new paper.Point([b.pageX-d.left,b.pageY-d.top]);if(this.last_point=e,this.mouse_down=!0,!this.click_target||"Temp-edge"!==this.click_target.type){this.removeRepresentationsOfType("editor"),this.is_dragging=!1;var f=paper.project.hitTest(e);if(f&&"undefined"!=typeof f.item.__representation)this.click_target=f.item.__representation,this.click_target.mousedown(b,c);else if(this.click_target=null,this.isEditable()&&this.click_mode===g._CLICKMODE_ADDNODE){var h=this.toModelCoords(e),i={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:h.x,y:h.y},origin:g.OriginEnum.NODE_BUTTON},j=this.renkan.project.addNode(i);this.getRepresentationByModel(j).openEditor()}}this.click_mode&&(this.isEditable()&&this.click_mode===g._CLICKMODE_STARTEDGE&&this.click_target&&"Node"===this.click_target.type?(this.removeRepresentationsOfType("editor"),this.addTempEdge(this.click_target,e,g.OriginEnum.EDGE_BUTTON_BAR),this.click_mode=g._CLICKMODE_ENDEDGE,this.notif_$.fadeOut(function(){a(this).html(this.renkan.translate("Click on a second node to complete the edge")).fadeIn()})):(this.notif_$.hide(),this.click_mode=!1)),paper.view.draw()},onMouseUp:function(a,b){if(this.mouse_down=!1,this.click_target){var c=this.canvas_$.offset();this.click_target.mouseup({point:new paper.Point([a.pageX-c.left,a.pageY-c.top])},b)}else this.click_target=null,this.is_dragging=!1,b&&this.unselectAll(),this.view.updateUrl();paper.view.draw()},onScroll:function(a,b){if(this.totalScroll+=b,Math.abs(this.totalScroll)>=1){var c=this.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]).subtract(this.view.offset).multiply(Math.SQRT2-1);this.totalScroll>0?this.view.setScale(this.view.scale*Math.SQRT2,this.view.offset.subtract(d)):this.view.setScale(this.view.scale*Math.SQRT1_2,this.view.offset.add(d.divide(Math.SQRT2))),this.totalScroll=0}},onClick:function(a){if(!this.isEditable()){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);!this._open_uri_cb&&this.renkan.options.simple_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&(this._node_click_open_url=setTimeout(function(){window.open(d.item.__representation.model.get("uri"),"_blank"),this._node_click_open_url=null}.bind(this),200))}},onDoubleClick:function(a){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);if(!this.isEditable())return void(this.renkan.options.double_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&window.open(d.item.__representation.model.get("uri"),"_blank"));if(this.isEditable()&&(!d||"undefined"==typeof d.item.__representation)){var e=this.toModelCoords(c),f={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:e.x,y:e.y},origin:g.OriginEnum.NODE_DOUBLE_CLICK},h=this.renkan.project.addNode(f);this.getRepresentationByModel(h).openEditor()}paper.view.draw()},defaultDropHandler:function(b){var c={},d="";switch(b["text/x-iri-specific-site"]){case"twitter":d=a("
                ").html(b["text/x-iri-selected-html"]);var e=d.find(".tweet");c.title=this.renkan.translate("Tweet by ")+e.attr("data-name"),c.uri="http://twitter.com/"+e.attr("data-screen-name")+"/status/"+e.attr("data-tweet-id"),c.image=e.find(".avatar").attr("src"),c.description=e.find(".js-tweet-text:first").text();break;case"google":d=a("
                ").html(b["text/x-iri-selected-html"]),c.title=d.find("h3:first").text().trim(),c.uri=d.find("h3 a").attr("href"),c.description=d.find(".st:first").text().trim();break;default:b["text/x-iri-source-uri"]&&(c.uri=b["text/x-iri-source-uri"])}if((b["text/plain"]||b["text/x-iri-selected-text"])&&(c.description=(b["text/plain"]||b["text/x-iri-selected-text"]).replace(/[\s\n]+/gm," ").trim()),b["text/html"]||b["text/x-iri-selected-html"]){d=a("
                ").html(b["text/html"]||b["text/x-iri-selected-html"]);var f=d.find("image");f.length&&(c.image=f.attr("xlink:href"));var g=d.find("path");g.length&&(c.clipPath=g.attr("d"));var h=d.find("img");h.length&&(c.image=h[0].src);var i=d.find("a");i.length&&(c.uri=i[0].href),c.title=d.find("[title]").attr("title")||c.title,c.description=d.text().replace(/[\s\n]+/gm," ").trim()}b["text/uri-list"]&&(c.uri=b["text/uri-list"]),b["text/x-moz-url"]&&!c.title&&(c.title=(b["text/x-moz-url"].split("\n")[1]||"").trim(),c.title===c.uri&&(c.title=!1)),b["text/x-iri-source-title"]&&!c.title&&(c.title=b["text/x-iri-source-title"]),(b["text/html"]||b["text/x-iri-selected-html"])&&(d=a("
                ").html(b["text/html"]||b["text/x-iri-selected-html"]),c.image=d.find("[data-image]").attr("data-image")||c.image,c.uri=d.find("[data-uri]").attr("data-uri")||c.uri,c.title=d.find("[data-title]").attr("data-title")||c.title,c.description=d.find("[data-description]").attr("data-description")||c.description,c.clipPath=d.find("[data-clip-path]").attr("data-clip-path")||c.clipPath),c.title||(c.title=this.renkan.translate("Dragged resource"));for(var j=["title","description","uri","image"],k=0;k=3){var c=b.view.split(","),d={project:this.renkan.project,offset:{x:parseFloat(c[0]),y:parseFloat(c[1])},zoom_level:parseFloat(c[2])};this.view.setScale(d.zoom_level,new paper.Point(d.offset))}"undefined"!=typeof b.view&&"autoscale"===b.view&&this.view.autoScale(),"undefined"!=typeof b.viewsNodes&&("true"===b.viewsNodes?(this.view.hiddenNodes=(this.view.params.hidden_nodes||[]).concat(),this.view.hideNodes()):this.view.showNodes(!1)),this.unhighlightAll(),"undefined"!=typeof b.node&&b.node&&this.highlightModel(this.renkan.project.get("nodes").get(b.node)),"undefined"!=typeof b.edge&&b.edge&&this.highlightModel(this.renkan.project.get("edges").get(b.edge))},validViewIndex:function(a){var b=parseInt(a),c=0;return c=b<0?this.renkan.project.get("views").length+b:b,"undefined"==typeof this.renkan.project.get("views").at(b)&&(c=0),c},foldBins:function(){var a,b=this.$.find(".Rk-Fold-Bins"),c=this.renkan.$.find(".Rk-Bins"),d=0,e=this,f=e.canvas_$.width();c.position().left<0?(d=new paper.Point([-c.width()/2,0]),c.animate({left:0},250),this.$.animate({left:300},250,function(){var a=e.$.width();paper.view.viewSize=new paper.Size([a,e.canvas_$.height()])}),a=f-c.width()0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show()},redraw:function(a){},initWithParams:function(){var a=this;a.options.view_force_autoscale?this.autoScale():a.setScale(a.params.zoom_level,new paper.Point(a.params.offset)),a.options.hide_nodes&&!a.options.view_show_hiddennodes?(a.hiddenNodes=(a.params.hidden_nodes||[]).concat(),a.hideNodes()):a.showNodes(!1)},saveView:function(){var a=this,b={x:a.offset.x,y:a.offset.y};a.model=a.renkan.project.addView({zoom_level:a.scale,offset:b,hidden_nodes:a.hiddenNodes.concat()}),a.params={zoom_level:a.model.get("zoom_level"),offset:a.model.get("offset"),hidden_nodes:a.model.get("hidden_nodes")},this.$.find(".Rk-ZoomSetSaved").show(),a.updateUrl()},addHiddenNode:function(a){this.hideNode(a),this.hiddenNodes.push(a.id),this.updateUrl()},hideNode:function(a){"undefined"!=typeof this.renderer.getRepresentationByModel(a)&&this.renderer.getRepresentationByModel(a).hide()},hideNodes:function(){var a=this;this.hiddenNodes.forEach(function(b,c){var d=a.renkan.project.get("nodes").get(b);return"undefined"!=typeof d?a.hideNode(a.renkan.project.get("nodes").get(b)):void a.hiddenNodes.splice(c,1)}),paper.view.draw()},showNodes:function(a){var b=this;this.hiddenNodes.forEach(function(c){b.renderer.getRepresentationByModel(b.renkan.project.get("nodes").get(c)).show(a)}),a||(this.hiddenNodes=[]),paper.view.draw()},setScale:function(a,b){a/this.initialScale>e._MIN_SCALE&&a/this.initialScale1){var c=b.map(function(a){return a.get("position").x}),d=b.map(function(a){return a.get("position").y}),e=Math.min.apply(Math,c),f=Math.min.apply(Math,d),g=Math.max.apply(Math,c),h=Math.max.apply(Math,d),i=Math.min((paper.view.size.width-2*this.renkan.options.autoscale_padding)/(g-e),(paper.view.size.height-2*this.renkan.options.autoscale_padding)/(h-f));this.initialScale=i,"undefined"!=typeof a&&parseFloat(a.zoom_level)>0&&parseFloat(a.offset.x)>0&&parseFloat(a.offset.y)>0?this.setScale(parseFloat(a.zoom_level),new paper.Point(parseFloat(a.offset.x),parseFloat(a.offset.y))):this.setScale(i,paper.view.center.subtract(new paper.Point([(g+e)/2,(h+f)/2]).multiply(i)))}1===b.length&&this.setScale(1,paper.view.center.subtract(new paper.Point([b.at(0).get("position").x,b.at(0).get("position").y])))},paperShift:function(a){this.offset=this.offset.add(a),this.renderer.redraw()},updateUrl:function(){if(this.options.url_parameters&&this.options.update_url){var b={},c=Backbone.history.getFragment().split("?");c.length>1&&c[1].split("&").forEach(function(a){var c=a.split("=");b[c[0]]=decodeURIComponent(c[1])}),b.view=Math.round(1e3*this.offset.x)/1e3+","+Math.round(1e3*this.offset.y)/1e3+","+Math.round(1e3*this.scale)/1e3,this.renkan.project.get("views").indexOf(this.model)>-1?(b.viewIndex=this.renkan.project.get("views").indexOf(this.model),b.viewIndex===this.renkan.project.get("views").length-1&&(b.viewIndex=-1)):b.viewIndex&&delete b.viewIndex,this.renkan.router.navigate("?"+decodeURIComponent(a.param(b)),{trigger:!1,replace:!0})}},destroy:function(a){this._super("destroy"),this.showNodes(!1)}}).value(),f}),"function"==typeof require.config&&require.config({paths:{jquery:"../lib/jquery/jquery",underscore:"../lib/lodash/lodash",filesaver:"../lib/FileSaver/FileSaver",requtils:"require-utils","jquery-private":"jquery-private","ckeditor-core":"../lib/ckeditor/ckeditor",screenfull:"../lib/screenfull/screenfull-umd"},map:{"*":{jquery:"jquery-private"},"jquery-private":{jquery:"jquery"}},shim:{"ckeditor-core":{exports:"CKEDITOR"}}}),require(["renderer/baserepresentation","renderer/basebutton","renderer/noderepr","renderer/edge","renderer/tempedge","renderer/baseeditor","renderer/nodeeditor","renderer/edgeeditor","renderer/nodebutton","renderer/nodeeditbutton","renderer/noderemovebutton","renderer/nodehidebutton","renderer/nodeshowbutton","renderer/noderevertbutton","renderer/nodelinkbutton","renderer/nodeenlargebutton","renderer/nodeshrinkbutton","renderer/edgeeditbutton","renderer/edgeremovebutton","renderer/edgerevertbutton","renderer/miniframe","renderer/scene","renderer/viewrepr"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){"use strict";var x=window.Rkns;"undefined"==typeof x.Renderer&&(x.Renderer={});var y=x.Renderer;y._BaseRepresentation=a,y._BaseButton=b,y.Node=c,y.Edge=d,y.View=w,y.TempEdge=e,y._BaseEditor=f,y.NodeEditor=g,y.EdgeEditor=h,y._NodeButton=i,y.NodeEditButton=j,y.NodeRemoveButton=k,y.NodeHideButton=l,y.NodeShowButton=m,y.NodeRevertButton=n,y.NodeLinkButton=o,y.NodeEnlargeButton=p,y.NodeShrinkButton=q,y.EdgeEditButton=r,y.EdgeRemoveButton=s,y.EdgeRevertButton=t,y.MiniFrame=u,y.Scene=v,startRenkan()}),define("main-renderer",function(){}),define("jquery-private",["jquery"],function(a){"use strict";return a.noConflict(!0)}); //# sourceMappingURL=renkan.min.js.map \ No newline at end of file diff -r 50f5e8d2c839 -r cac26275af31 server/php/basic/public_html/static/lib/renkan/js/renkan.min.js.map --- a/server/php/basic/public_html/static/lib/renkan/js/renkan.min.js.map Fri Sep 15 14:04:42 2017 +0200 +++ b/server/php/basic/public_html/static/lib/renkan/js/renkan.min.js.map Fri Sep 15 14:11:36 2017 +0200 @@ -1,1 +1,1 @@ -{"version":3,"sources":["templates.js","../../js/main.js","../../js/router.js","../../js/dataloader.js","../../js/models.js","../../js/defaults.js","../../js/i18n.js","../../js/full-json.js","../../js/save-once.js","../../js/ldtjson-bin.js","../../js/list-bin.js","../../js/wikipedia-bin.js","paper-renderer.js"],"names":["this","obj","__t","__p","__e","_","escape","print","__j","call","arguments","Array","prototype","join","options","show_edge_tooltip_color","edge","color","uri","title","show_edge_tooltip_uri","short_uri","show_edge_tooltip_nodes","renkan","translate","from_color","shortenText","from_title","to_color","to_title","show_edge_tooltip_creator","has_creator","created_by_color","created_by_title","show_edge_editor_uri","properties","length","each","ontology","label","property","show_edge_editor_style","show_edge_editor_style_color","colorPicker","show_edge_editor_style_dash","dash","show_edge_editor_style_thickness","thickness","show_edge_editor_style_arrow","arrow","show_edge_editor_direction","show_edge_editor_nodes","show_edge_editor_creator","Rkns","Utils","getFullURL","image","description","static_url","url","show_bins","show_editor","show_node_tooltip_color","node","show_node_tooltip_uri","show_node_tooltip_description","show_node_tooltip_image","show_node_tooltip_creator","_id","show_node_editor_title_richtext","show_node_title_style","title_color","title_size","toFixed","show_node_editor_uri","change_types","types","type","charAt","toUpperCase","substring","show_node_editor_description","show_node_editor_description_richtext","show_node_editor_size","size","show_node_editor_style","show_node_editor_style_color","show_node_editor_style_dash","show_node_editor_style_thickness","show_node_editor_image","image_placeholder","clip_path","allow_image_upload","show_node_editor_creator","change_shapes","shapes","shape","show_top_bar","editor_mode","title_editable","project","get","show_user_list","show_user_color","user_color_editable","home_button_url","home_button_title","show_fullscreen_button","show_addnode_button","show_addedge_button","show_export_button","show_save_button","show_open_button","show_bookmarklet","show_search_field","resize","show_zoom","save_view","hide_nodes","root","$","jQuery","pickerColors","__renkans","_BaseBin","_renkan","_opts","find","hide","addClass","appendTo","title_icon_$","_this","attr","href","html","click","destroy","slideDown","resizeBins","refresh","count_$","title_$","main_$","auto_refresh","window","setInterval","detach","Renkan","push","defaults","templates","renkanJST","node_editor_templates","template","types_templates","value","key","property_files","f","getJSON","data","concat","read_only","router","Router","Models","Project","dataloader","DataLoader","Loader","setCurrentUser","user_id","user_name","addUser","current_user","renderer","redrawUsers","container","tabs","search_engines","current_user_list","UsersList","on","pickerClass","_tmpl","map","c","Renderer","Scene","search","_select","_input","_form","_search","_key","Search","getSearchTitle","className","getBgClass","_el","setSearchEngine","submit","val","search_engine","mouseenter","mouseleave","bins","_bin","Bin","elementDropped","_mainDiv","siblings","is","slideUp","_e","_t","_models","where","_model","highlightModel","mouseout","unhighlightAll","e","dragDrop","err","preventDefault","touch","originalEvent","changedTouches","off","canvas_$","offset","w","width","h","height","pageX","left","pageY","top","onMouseMove","div","document","createElement","appendChild","cloneNode","dropData","text/html","innerHTML","onMouseDown","onMouseUp","dataTransfer","setData","lastsearch","lastval","regexpFromTextOrArray","source","tab","render","_text","i18n","language","substr","onStatusChange","listClasses","split","classes","i","_d","outerHeight","css","getUUID4","replace","r","Math","random","v","toString","OriginEnum","o","Object","freeze","NONE","NODE_BUTTON","NODE_DOUBLE_CLICK","NODE_DROP_EXT","NODE_DROP_BIN","EDGE_BUTTON_BAR","EDGE_BUTTON_CIRCLE","getUID","pad","n","Date","ID_AUTO_INCREMENT","ID_BASE","getUTCFullYear","getUTCMonth","getUTCDate","_base","_n","_uidbase","test","img","Image","src","res","inherit","_baseClass","_callbefore","_class","_arg","apply","slice","_init","_initialized","extend","replaceText","makeReplaceFunc","l","k","charsrx","txt","toLowerCase","remrx","j","remsrc","charsub","getSource","inp","removeChars","String","fromCharCode","RegExp","_textOrArray","testrx","replacerx","isempty","_replace","text","_MIN_DRAG_DISTANCE","_NODE_BUTTON_WIDTH","_EDGE_BUTTON_INNER","_EDGE_BUTTON_OUTER","_CLICKMODE_ADDNODE","_CLICKMODE_STARTEDGE","_CLICKMODE_ENDEDGE","_NODE_SIZE_STEP","LN2","_MIN_SCALE","_MAX_SCALE","_MOUSEMOVE_RATE","_DOUBLETAP_DELAY","_DOUBLETAP_DISTANCE","_USER_PLACEHOLDER","default_user_color","_BOOKMARKLET_CODE","_maxlength","drawEditBox","_options","_coords","_path","_xmargin","_selector","tooltip_width","tooltip_padding","rect","getBoundingClientRect","container_rect","bottom","overflow-x","overflow-y","max-height","_height","_isLeft","x","paper","view","center","_left","tooltip_arrow_length","_right","_top","y","tooltip_margin","max","tooltip_arrow_width","min","_bottom","segments","point","add","fillColor","Color","Gradient","tooltip_top_color","tooltip_bottom_color","increaseBrightness","hex","percent","parseInt","g","b","Backbone","routes","","index","parameters","result","forEach","part","item","decodeURIComponent","trigger","converters","from1to2","len","nodes","style","edges","schema_version","dataConverters","convert","schemaVersionFrom","getSchemaVersion","schemaVersionTo","converterName","load","set","validate","guid","RenkanModel","RelationalModel","idAttribute","constructor","id","prepare","addReference","_propName","_list","_default","_element","User","toJSON","Node","relations","HasOne","relatedModel","created_by","position","Edge","from","to","View","isArray","zoom_level","hidden_nodes","RosterUser","blacklist","HasMany","reverseRelation","includeInJSON","_props","_user","findOrCreate","addNode","_node","addEdge","_edge","addView","_view","removeNode","remove","removeEdge","_project","users","views","_item","t","version","initialize","filter","json","clone","attributes","Model","Collection","omit","site_id","model","navigator","userLanguage","popup_editor","editor_panel","manual_save","size_bug_fix","force_resize","allow_double_click","double_click_open_url","simple_click_open_url","zoom_on_scroll","element_delete_delay","autoscale_padding","view_force_autoscale","view_show_hiddennodes","default_index_view","url_parameters","update_url","user_name_editable","show_minimap","minimap_width","minimap_height","minimap_padding","minimap_background_color","minimap_border_color","minimap_highlight_color","minimap_highlight_weight","buttons_background","buttons_label_color","buttons_label_font_size","ghost_opacity","default_dash_array","show_node_circles","clip_node_images","node_images_fill_mode","node_size_base","node_stroke_width","node_stroke_max_width","selected_node_stroke_width","selected_node_stroke_max_width","node_stroke_witdh_scale","node_title_size_min","node_title_size_max","node_title_size_step","node_fill_color","highlighted_node_fill_color","node_title_color","node_label_distance","node_label_max_length","label_untitled_nodes","default","video","edge_stroke_width","edge_stroke_max_width","selected_edge_stroke_width","selected_edge_stroke_max_width","edge_stroke_witdh_scale","edge_label_distance","edge_label_max_length","edge_arrow_length","edge_arrow_width","edge_arrow_max_width","edge_gap_in_bundles","highlighted_edge_color","label_untitled_edges","tooltip_border_color","tooltip_border_width","tooltip_opacity","richtext_editor_config","toolbarGroups","name","groups","removePlugins","show_node_editor_title","uploaded_image_max_kb","fr","Edit Node","Edit Edge","Title:","URI:","Description:","From:","To:","Image URL:","Choose Image File:","Full Screen","Add Node","Add Edge","Save Project","Open Project","Auto-save enabled","Connection lost","Created by:","Zoom In","Zoom Out","Edit","Remove","Cancel deletion","Link to another node","Enlarge","Shrink","Click on the background canvas to add a node","Click on a first node to start the edge","Click on a second node to complete the edge","Wikipedia","Wikipedia in ","French","English","Japanese","Untitled project","Lignes de Temps","Loading, please wait","Edge color:","Dash:","Thickness:","Arrow:","Node color:","Choose color","Change edge direction","Do you really wish to remove node ","Do you really wish to remove edge ","This file is not an image","Image size must be under ","Size:","KB","Choose from vocabulary:","SKOS Documentation properties","has note","has example","has definition","SKOS Semantic relations","has broader","has narrower","has related","Dublin Core Metadata","has contributor","covers","created by","has date","published by","has source","has subject","Dragged resource","Search the Web","Search in Bins","Close bin","Refresh bin","(untitled)","Select contents:","Drag items from this website, drop them in Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.","Shapes available","Circle","Square","Diamond","Hexagone","Ellipse","Star","Cloud","Triangle","Polygon","Zoom Fit","Download Project","Save view","View saved view","Renkan 'Drag-to-Add' bookmarklet","(unknown user)","","Search in graph","Search in ","Show hidden nodes","Show neighbors","Hide","Fullscreen not supported by your browser","Title size:","Title color:","jsonIO","_proj","http_method","_load","loadingStatus","_data","saveStatus","_save","ajax","contentType","JSON","stringify","success","textStatus","jqXHR","_thrSave","throttle","setTimeout","changedAttributes","hasChanged","jsonIOSaveOnClick","_saveWarn","_onLeave","getdata","rx","matches","location","hash","match","beforeSend","_checkLeave","removeClass","save","hasClass","Ldt","ProjectBin","ldt_type","Resclass","console","error","tagTemplate","annotationTemplate","proj_id","project_id","ldt_platform","searchbase","highlight","convertTC","_ms","_res","_totalSeconds","abs","floor","_hours","_minutes","_seconds","_html","_projtitle","meta","count","tags","_tag","_title","htitle","encodedtitle","encodeURIComponent","annotations","_annotation","_description","content","_duration","end","begin","_img","hdescription","start","duration","mediaid","media","annotationid","show","dataType","lang","_q","ResultsBin","segmentTemplate","max_results","highlightrx","objects","_segment","abstract","_begin","start_ts","_end","iri_id","element_id","format","q","limit","ResourceList","resultTemplate","list","trim","_match","langs","en","ja","query","_result","encodeURI","snippet","define","_BaseRepresentation","_renderer","_changeBinding","redraw","change","_removeBinding","removeRepresentation","defer","_selectBinding","select","_unselectBinding","unselect","_super","_func","moveTo","unhighlight","mousedown","mouseup","getUtils","getRenderer","requtils","BaseRepresentation","_BaseButton","_pos","sector","_newTarget","source_representation","cloud_path","builders","circle","getShape","Path","getImageShape","radius","rectangle","Rectangle","ellipse","polygon","RegularPolygon","diamond","d","SQRT2","rotate","star","cloud","path","scale","triangle","svg","ShapeBuilder","NodeRepr","node_layer","activate","buildShape","hidden","ghost","strokeWidth","h_ratio","labels_$","normal_buttons","NodeEditButton","NodeRemoveButton","NodeLinkButton","NodeEnlargeButton","NodeShrinkButton","NodeHideButton","NodeShowButton","pending_delete_buttons","NodeRevertButton","all_buttons","active_buttons","last_circle_radius","minimap","minimap_circle","__representation","miniframe","node_group","addChild","_getStrokeWidth","has","_getSelectedStrokeWidth","changed","shapeBuilder","sendToBack","_model_coords","Point","_baseRadius","exp","is_dragging","paper_coords","toPaperCoords","circle_radius","setSectorSize","node_image","subtract","image_delta","multiply","old_act_btn","opacity","dashArray","selected","isEditable","highlighted","clean_title","textContent","innerText","node_style","title-color","text_size","text_color","text_style","line-height","text_node","empty","append","_strokeWidth","_color","_dash","strokeColor","_pc","lastImage","showImage","minipos","toMinimapCoords","miniradius","minisize","Size","fitBounds","dontRedrawEdges","ed","repr","getRepresentationByModel","from_representation","to_representation","_image","image_cache","clipPath","hasClipPath","_clip","baseRadius","centerPoint","instructions","lastCoords","minX","Infinity","minY","maxX","maxY","transformCoords","tabc","relative","newCoords","parseFloat","isY","instr","coords","lineTo","cubicCurveTo","quadraticCurveTo","_raster","Raster","locked","Group","clipped","_circleClip","divide","insertAbove","paperShift","_delta","openEditor","removeRepresentationsOfType","_editor","addRepresentation","draw","clearTimeout","hide_timeout","_uri","showNeighbors","hideButtons","buttons_timeout","undefined","hideNeighbors","hide_delay","delay","indexNode","hiddenNodes","indexOf","splice","textToReplace","hlvalue","throttledPaperDraw","saveCoords","toModelCoords","_event","_isTouch","unselectAll","click_target","edge_layer","bundle","addToBundles","line","arrow_scale","pivot","arrow_angle","EdgeEditButton","EdgeRemoveButton","EdgeRevertButton","minimap_line","_getArrowScale","_opacity","_arrow_scale","_p0a","_p1a","_v","_r","_u","_ortho","_group_pos","getPosition","_p0b","_p1b","_a","angle","_textdelta","_handle","visible","handleIn","handleOut","bounds","_textpos","transform","-moz-transform","-webkit-transform","text_angle","reject","TempEdge","origin","_p0","_p1","end_pos","_c","_hitResult","hitTest","findTarget","_endDrag","_target","_destmodel","_BaseEditor","buttons_layer","editor_block","_pts","range","editor_$","BaseEditor","CKEditor","NodeEditor","readOnlyTemplate","_created_by","_template","_image_placeholder","_size","keys","editorInstance","inline","editorInstanceTitle","closeEditor","cleanEditor","focusManager","blur","onFieldChange","debounce","checkDirty","getData","resetDirty","assign","keyCode","files","FileReader","alert","onload","target","readAsDataURL","focus","_picker","hover","shiftSize","_newsize","shiftThickness","_oldThickness","_newThickness","shiftTitleSize","_oldTitleSize","_newTitleSize","_pickerTitle","step","titlehtml","EdgeEditor","_from_model","_to_model","BaseButton","_NodeButton","sectorInner","lastSectorInner","drawSector","startAngle","endAngle","imageName","NodeButton","delid","delete_list","time","valueOf","confirm","addHiddenNode","unset","_off","_point","addTempEdge","MiniFrame","filesaver","Screenfull","representations","notif_$","setup","totalScroll","mouse_down","selected_target","Layer","redrawActive","background_layer","topleft","bottomRight","cliprectangle","bundles","click_mode","_allowScroll","_originalScale","_zooming","_lastTapX","_lastTapY","_lastTap","icon_cache","imgname","throttledMouseMove","mousemove","mousewheel","onScroll","touchstart","_touches","touches","pow","onDoubleClick","touchmove","_newScale","_scaleRatio","_newOffset","setScale","touchend","onClick","dblclick","dragover","dragenter","dragleave","drop","parse","bindClick","selector","fname","evt","enabled","addEventListener","raw","fullscreenchange","widthAft","heightAft","viewSize","currentWidth","currentHeight","isFullscreen","onResize","newWidth","_width","newHeight","prevHeight","delta","prevWidth","fadeIn","fadeOut","mouseover","_thRedraw","addRepresentations","prop","_thRedrawUsers","history","fixSize","_params","setViewParameters","el","_delay","autoScale","$cpwrapper","$cplist","$this","rxs","_now","findWhere","delete_scheduled","rescaleMinimap","last","_repr","_inR","_outR","_startAngle","_endAngle","_padding","_imgname","_caption","_startRads","PI","_endRads","_startdx","sin","_startdy","cos","_startXIn","_startYIn","_startXOut","_startYOut","_enddx","_enddy","_endXIn","_endYIn","_endXOut","_endYOut","_centerR","_centerRads","_centerX","_centerY","_centerXIn","_centerXOut","_centerYIn","_centerYOut","_textX","_textY","arcTo","closed","PointText","characterStyle","fontSize","paragraphStyle","justification","_visible","_restPos","_grp","_imgdelta","_currentPos","_edgeRepr","_bundle","_er","_dir","savebtn","tip","redrawMiniframe","bottomright","_xx","_yy","_minx","_miny","_maxx","_maxy","_scale","at","_type","RendererType","_collection","userTemplate","allUsers","models","ulistHtml","$userpanel","$name","$cpitems","$colorsquare","$input","parent","background","_representation","_representations","_ratio","ratioH","ratioW","resizeZoom","_from","_origin","_tmpEdge","last_point","updateUrl","_scrolldelta","SQRT1_2","_open_uri_cb","_node_click_open_url","open","bind","defaultDropHandler","newNode","tweetdiv","_svgimgs","_svgpaths","_imgs","_as","fields","drop_enhancer","jsondata","drop_handler","_nodedata","fullScreen","toggle","addNodeBtn","addEdgeBtn","exportProject","projectJSON","projectId","fileNameToSaveAs","space_id","objId","idsMap","projectJSONStr","blob","Blob","isEmptyObject","validViewIndex","viewIndex","viewParams","params","viewsNodes","hideNodes","showNodes","_index","validIndex","foldBins","sizeAft","foldBinsButton","sizeBef","animate","ViewRepr","initialScale","initWithParams","saveView","hideNode","_offset","zoomOut","zoomIn","deltaW","deltaH","force_view","getFragment","round","navigate","param","require","config","paths","jquery","underscore","jquery-private","ckeditor-core","screenfull","*","shim","exports","startRenkan","jq","noConflict"],"mappings":"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","file":"renkan.min.js","sourcesContent":["this[\"renkanJST\"] = this[\"renkanJST\"] || {};\n\nthis[\"renkanJST\"][\"templates/colorpicker.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
              • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor_readonly.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                \\n ×\\n ';\n if (options.show_edge_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (edge.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n__e(edge.title) +\n'\\n ';\n if (edge.uri) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n

                \\n';\n if (options.show_edge_tooltip_uri && edge.uri) { ;\n__p += '\\n

                \\n ' +\n__e( edge.short_uri ) +\n'\\n

                \\n';\n } ;\n__p += '\\n

                ' +\n((__t = (edge.description)) == null ? '' : __t) +\n'

                \\n';\n if (options.show_edge_tooltip_nodes) { ;\n__p += '\\n

                \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                \\n

                \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_tooltip_creator && edge.has_creator) { ;\n__p += '\\n

                \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                \\n ×' +\n__e(renkan.translate(\"Edit Edge\")) +\n'\\n

                \\n

                \\n \\n \\n

                \\n';\n if (options.show_edge_editor_uri) { ;\n__p += '\\n

                \\n \\n \\n \\n

                \\n ';\n if (options.properties.length) { ;\n__p += '\\n

                \\n \\n \\n

                \\n';\n } } ;\n__p += '\\n';\n if (options.show_edge_editor_style) { ;\n__p += '\\n
                \\n ';\n if (options.show_edge_editor_style_color) { ;\n__p += '\\n
                \\n ' +\n__e(renkan.translate(\"Edge color:\")) +\n'\\n
                \\n ;\">\\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Edge') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                \\n
                \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_dash) { ;\n__p += '\\n
                \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_thickness) { ;\n__p += '\\n
                \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e( edge.thickness ) +\n'\\n +\\n
                \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_arrow) { ;\n__p += '\\n
                \\n ' +\n__e(renkan.translate(\"Arrow:\")) +\n'\\n \\n
                \\n ';\n } ;\n__p += '\\n
                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_direction) { ;\n__p += '\\n

                \\n ' +\n__e( renkan.translate(\"Change edge direction\") ) +\n'\\n

                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_nodes) { ;\n__p += '\\n

                \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                \\n

                \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n %-edge.to_color%>;\">\\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_creator && edge.has_creator) { ;\n__p += '\\n

                \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n ;\">\\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/annotationtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
              • \\n\\n \\n

                ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                \\n

                ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                \\n

                Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                \\n
                \\n
              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/segmenttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
              • \\n\\n \\n

                ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                \\n

                ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                \\n

                Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                \\n
                \\n
              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/tagtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
              • \\n\\n \\n

                ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                \\n
                \\n
              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/list-bin.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
              • \\n';\n } ;\n__p += '\\n

                \\n ';\n if (url) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n ';\n if (url) { ;\n__p += '';\n } ;\n__p += '\\n

                \\n ';\n if (description) { ;\n__p += '\\n

                ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                \\n ';\n } ;\n__p += '\\n ';\n if (image) { ;\n__p += '\\n
                \\n ';\n } ;\n__p += '\\n
              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/main.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_bins) { ;\n__p += '\\n
                \\n
                \\n

                ' +\n__e( translate(\"Select contents:\")) +\n'

                \\n
                \\n \\n
                \\n
                \\n
                  \\n
                  \\n \\n
                  \\n
                  \\n \\n \\n
                  \\n
                    \\n
                    \\n';\n } ;\n__p += ' ';\n if (options.show_editor) { ;\n__p += '\\n
                    \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                    \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n

                    \\n ' +\n__e(node.short_uri) +\n'\\n

                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_tooltip_description) { ;\n__p += '\\n

                    ' +\n((__t = (node.description)) == null ? '' : __t) +\n'

                    \\n';\n } ;\n__p += ' ';\n if (node.image && options.show_node_tooltip_image) { ;\n__p += '\\n \\n';\n } ;\n__p += ' ';\n if (node.has_creator && options.show_node_tooltip_creator) { ;\n__p += '\\n

                    \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                    \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor_video.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                    \\n ×\\n ';\n if (options.show_node_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                    \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n //TODO: change class to id ;\n__p += '\\n

                    \\n ×' +\n__e(renkan.translate(\"Edit Node\")) +\n'\\n

                    \\n

                    \\n \\n ';\n if (options.show_node_editor_title_richtext) { ;\n__p += '\\n

                    ' +\n((__t = (node.title)) == null ? '' : __t) +\n'
                    \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                    \\n';\n if (options.show_node_title_style) { ;\n__p += '\\n
                    \\n
                    \\n ' +\n__e(renkan.translate(\"Title color:\")) +\n'\\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Title') )) == null ? '' : __t) +\n'\\n
                    \\n
                    \\n ' +\n__e(renkan.translate(\"Title size:\")) +\n'\\n -\\n ' +\n__e(node.title_size.toFixed(1)) +\n'\\n +\\n
                    \\n
                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_uri) { ;\n__p += '\\n

                    \\n \\n \\n \\n

                    \\n';\n } ;\n__p += ' ';\n if (options.change_types) { ;\n__p += '\\n

                    \\n \\n \\n

                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_description) { ;\n__p += '\\n

                    \\n \\n ';\n if (options.show_node_editor_description_richtext) { ;\n__p += '\\n

                    ' +\n((__t = (node.description)) == null ? '' : __t) +\n'
                    \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_size) { ;\n__p += '\\n

                    \\n ' +\n__e(renkan.translate(\"Size:\")) +\n'\\n -\\n ' +\n__e(node.size) +\n'\\n +\\n

                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_style) { ;\n__p += '\\n
                    \\n ';\n if (options.show_node_editor_style_color) { ;\n__p += '\\n
                    \\n \\n ' +\n__e(renkan.translate(\"Node color:\")) +\n'\\n
                    \\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Node') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                    \\n
                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_dash) { ;\n__p += '\\n
                    \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_thickness) { ;\n__p += '\\n
                    \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e(node.thickness) +\n'\\n +\\n
                    \\n ';\n } ;\n__p += '\\n
                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_image) { ;\n__p += '\\n
                    \\n
                    \\n \\n ';\n if (node.clip_path) { ;\n__p += '\\n \\n \\n \\n ';\n };\n__p += '\\n
                    \\n
                    \\n

                    \\n \\n

                    \\n \\n \\n
                    \\n

                    \\n';\n if (options.allow_image_upload) { ;\n__p += '\\n

                    \\n \\n \\n

                    \\n';\n };\n\n } ;\n__p += ' ';\n if (options.show_node_editor_creator && node.has_creator) { ;\n__p += '\\n

                    \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                    \\n';\n } ;\n__p += ' ';\n if (options.change_shapes) { ;\n__p += '\\n

                    \\n \\n \\n

                    \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/scene.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_top_bar) { ;\n__p += '\\n
                    \\n
                    \\n ';\n if (!options.editor_mode || !options.title_editable) { ;\n__p += '\\n

                    \\n ' +\n__e( project.get(\"title\") || translate(\"Untitled project\")) +\n'\\n

                    \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (options.show_user_list) { ;\n__p += '\\n
                    \\n
                    \\n ';\n if (options.show_user_color) { ;\n__p += '\\n
                    \\n \\n ';\n if (options.user_color_editable) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (options.user_color_editable) { print(colorPicker('Rk-Editor-ColorPicker-User')) } ;\n__p += '\\n
                    \\n ';\n } ;\n__p += '\\n <unknown user>\\n
                    \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.home_button_url) {;\n__p += '\\n
                      \\n \\n
                      \\n
                      \\n ' +\n__e( translate(options.home_button_title) ) +\n'\\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_fullscreen_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n ' +\n__e(translate(\"Full Screen\")) +\n'\\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.editor_mode) { ;\n__p += '\\n ';\n if (options.show_addnode_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n ' +\n__e(translate(\"Add Node\")) +\n'\\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_addedge_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n ' +\n__e(translate(\"Add Edge\")) +\n'\\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_save_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_open_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n ' +\n__e(translate(\"Open Project\")) +\n'\\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_bookmarklet) { ;\n__p += '\\n
                      \\n \\n
                      \\n
                      \\n ' +\n__e(translate(\"Renkan \\'Drag-to-Add\\' bookmarklet\")) +\n'\\n
                      \\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n } else { ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                      \\n
                      \\n
                      \\n
                      \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                      \\n
                      \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n }; ;\n__p += '\\n ';\n if (options.show_search_field) { ;\n__p += '\\n
                      \\n \\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n
                      \\n';\n } ;\n__p += '\\n
                      \\n
                      \\n
                      \\n ';\n if (options.editor_mode && options.save_view) { ;\n__p += '\\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.save_view) { ;\n__p += '\\n
                      \\n ';\n if (options.hide_nodes) { ;\n__p += '\\n \\t \\n ';\n } ;\n__p += ' \\n ';\n } ;\n__p += '\\n
                      \\n ';\n } ;\n__p += '\\n \\n\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/search.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                    • ' +\n((__t = ( title )) == null ? '' : __t) +\n'
                    • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/wikipedia-bin/resulttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                    • \\n\\n \\n

                      \\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n

                      \\n

                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                      \\n
                    • \\n';\n\n}\nreturn __p\n};","/* Declaring the Renkan Namespace Rkns and Default values */\n\n(function(root) {\n\n \"use strict\";\n\n if (typeof root.Rkns !== \"object\") {\n root.Rkns = {};\n }\n\n var Rkns = root.Rkns;\n var $ = Rkns.$ = root.jQuery;\n var _ = Rkns._ = root._;\n\n Rkns.pickerColors = [\"#8f1919\", \"#a80000\", \"#d82626\", \"#ff0000\", \"#e87c7c\", \"#ff6565\", \"#f7d3d3\", \"#fecccc\",\n \"#8f5419\", \"#a85400\", \"#d87f26\", \"#ff7f00\", \"#e8b27c\", \"#ffb265\", \"#f7e5d3\", \"#fee5cc\",\n \"#8f8f19\", \"#a8a800\", \"#d8d826\", \"#feff00\", \"#e8e87c\", \"#feff65\", \"#f7f7d3\", \"#fefecc\",\n \"#198f19\", \"#00a800\", \"#26d826\", \"#00ff00\", \"#7ce87c\", \"#65ff65\", \"#d3f7d3\", \"#ccfecc\",\n \"#198f8f\", \"#00a8a8\", \"#26d8d8\", \"#00feff\", \"#7ce8e8\", \"#65feff\", \"#d3f7f7\", \"#ccfefe\",\n \"#19198f\", \"#0000a8\", \"#2626d8\", \"#0000ff\", \"#7c7ce8\", \"#6565ff\", \"#d3d3f7\", \"#ccccfe\",\n \"#8f198f\", \"#a800a8\", \"#d826d8\", \"#ff00fe\", \"#e87ce8\", \"#ff65fe\", \"#f7d3f7\", \"#feccfe\",\n \"#000000\", \"#242424\", \"#484848\", \"#6d6d6d\", \"#919191\", \"#b6b6b6\", \"#dadada\", \"#ffffff\"\n ];\n\n Rkns.__renkans = [];\n\n var _BaseBin = Rkns._BaseBin = function(_renkan, _opts) {\n if (typeof _renkan !== \"undefined\") {\n this.renkan = _renkan;\n this.renkan.$.find(\".Rk-Bin-Main\").hide();\n this.$ = Rkns.$('
                    • ')\n .addClass(\"Rk-Bin\")\n .appendTo(_renkan.$.find(\".Rk-Bin-List\"));\n this.title_icon_$ = Rkns.$('')\n .addClass(\"Rk-Bin-Title-Icon\")\n .appendTo(this.$);\n\n var _this = this;\n\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Close bin\")\n })\n .addClass(\"Rk-Bin-Close\")\n .html('×')\n .appendTo(this.$)\n .click(function() {\n _this.destroy();\n if (!_renkan.$.find(\".Rk-Bin-Main:visible\").length) {\n _renkan.$.find(\".Rk-Bin-Main:last\").slideDown();\n }\n _renkan.resizeBins();\n return false;\n });\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Refresh bin\")\n })\n .addClass(\"Rk-Bin-Refresh\")\n .appendTo(this.$)\n .click(function() {\n _this.refresh();\n return false;\n });\n this.count_$ = Rkns.$('
                      ')\n .addClass(\"Rk-Bin-Count\")\n .appendTo(this.$);\n this.title_$ = Rkns.$('

                      ')\n .addClass(\"Rk-Bin-Title\")\n .appendTo(this.$);\n this.main_$ = Rkns.$('
                      ')\n .addClass(\"Rk-Bin-Main\")\n .appendTo(this.$)\n .html('

                      ' + _renkan.translate(\"Loading, please wait\") + '

                      ');\n this.title_$.html(_opts.title || '(new bin)');\n this.renkan.resizeBins();\n\n if (_opts.auto_refresh) {\n window.setInterval(function() {\n _this.refresh();\n }, _opts.auto_refresh);\n }\n }\n };\n\n _BaseBin.prototype.destroy = function() {\n this.$.detach();\n this.renkan.resizeBins();\n };\n\n /* Point of entry */\n\n var Renkan = Rkns.Renkan = function(_opts) {\n var _this = this;\n\n Rkns.__renkans.push(this);\n\n this.options = _.defaults(_opts, Rkns.defaults, {\n templates: _.defaults(_opts.templates, renkanJST) || renkanJST,\n node_editor_templates: _.defaults(_opts.node_editor_templates, Rkns.defaults.node_editor_templates)\n });\n this.template = this.options.templates['templates/main.html'];\n\n var types_templates = {};\n _.each(this.options.node_editor_templates, function(value, key) {\n types_templates[key] = _this.options.templates[value];\n delete _this.options.templates[value];\n });\n this.options.node_editor_templates = types_templates;\n\n _.each(this.options.property_files, function(f) {\n Rkns.$.getJSON(f, function(data) {\n _this.options.properties = _this.options.properties.concat(data);\n });\n });\n\n this.read_only = this.options.read_only || !this.options.editor_mode;\n\n this.router = new Rkns.Router();\n\n this.project = new Rkns.Models.Project();\n this.dataloader = new Rkns.DataLoader.Loader(this.project, this.options);\n\n this.setCurrentUser = function(user_id, user_name) {\n this.project.addUser({\n _id: user_id,\n title: user_name\n });\n this.current_user = user_id;\n this.renderer.redrawUsers();\n };\n\n if (typeof this.options.user_id !== \"undefined\") {\n this.current_user = this.options.user_id;\n }\n this.$ = Rkns.$(\"#\" + this.options.container);\n this.$\n .addClass(\"Rk-Main\")\n .html(this.template(this));\n\n this.tabs = [];\n this.search_engines = [];\n\n this.current_user_list = new Rkns.Models.UsersList();\n\n this.current_user_list.on(\"add remove\", function() {\n if (this.renderer) {\n this.renderer.redrawUsers();\n }\n });\n\n this.colorPicker = function(pickerClass) {\n var _tmpl = _this.options.templates['templates/colorpicker.html'];\n return '
                        ' + Rkns.pickerColors.map(function(c) {\n return _tmpl({\n c: c\n });\n }).join(\"\") + '
                      ';\n };\n\n if (this.options.show_editor) {\n this.renderer = new Rkns.Renderer.Scene(this);\n }\n\n if (!this.options.search.length) {\n this.$.find(\".Rk-Web-Search-Form\").detach();\n } else {\n var _tmpl = _this.options.templates['templates/search.html'],\n _select = this.$.find(\".Rk-Search-List\"),\n _input = this.$.find(\".Rk-Web-Search-Input\"),\n _form = this.$.find(\".Rk-Web-Search-Form\");\n _.each(this.options.search, function(_search, _key) {\n if (Rkns[_search.type] && Rkns[_search.type].Search) {\n _this.search_engines.push(new Rkns[_search.type].Search(_this, _search));\n }\n });\n _select.html(\n _(this.search_engines).map(function(_search, _key) {\n return _tmpl({\n key: _key,\n title: _search.getSearchTitle(),\n className: _search.getBgClass()\n });\n }).join(\"\")\n );\n _select.find(\"li\").click(function() {\n var _el = Rkns.$(this);\n _this.setSearchEngine(_el.attr(\"data-key\"));\n _form.submit();\n });\n _form.submit(function() {\n if (_input.val()) {\n var _search = _this.search_engine;\n _search.search(_input.val());\n }\n return false;\n });\n this.$.find(\".Rk-Search-Current\").mouseenter(\n function() {\n _select.slideDown();\n }\n );\n this.$.find(\".Rk-Search-Select\").mouseleave(\n function() {\n _select.hide();\n }\n );\n this.setSearchEngine(0);\n }\n _.each(this.options.bins, function(_bin) {\n if (Rkns[_bin.type] && Rkns[_bin.type].Bin) {\n _this.tabs.push(new Rkns[_bin.type].Bin(_this, _bin));\n }\n });\n\n var elementDropped = false;\n\n this.$.find(\".Rk-Bins\")\n .on(\"click\", \".Rk-Bin-Title,.Rk-Bin-Title-Icon\", function() {\n var _mainDiv = Rkns.$(this).siblings(\".Rk-Bin-Main\");\n if (_mainDiv.is(\":hidden\")) {\n _this.$.find(\".Rk-Bin-Main\").slideUp();\n _mainDiv.slideDown();\n }\n });\n\n if (this.options.show_editor) {\n\n this.$.find(\".Rk-Bins\").on(\"mouseover\", \".Rk-Bin-Item\", function(_e) {\n var _t = Rkns.$(this);\n if (_t && $(_t).attr(\"data-uri\")) {\n var _models = _this.project.get(\"nodes\").where({\n uri: $(_t).attr(\"data-uri\")\n });\n _.each(_models, function(_model) {\n _this.renderer.highlightModel(_model);\n });\n }\n }).mouseout(function() {\n _this.renderer.unhighlightAll();\n }).on(\"mousemove\", \".Rk-Bin-Item\", function(e) {\n try {\n this.dragDrop();\n } catch (err) {}\n }).on(\"touchstart\", \".Rk-Bin-Item\", function(e) {\n elementDropped = false;\n }).on(\"touchmove\", \".Rk-Bin-Item\", function(e) {\n e.preventDefault();\n var touch = e.originalEvent.changedTouches[0],\n off = _this.renderer.canvas_$.offset(),\n w = _this.renderer.canvas_$.width(),\n h = _this.renderer.canvas_$.height();\n if (touch.pageX >= off.left && touch.pageX < (off.left + w) && touch.pageY >= off.top && touch.pageY < (off.top + h)) {\n if (elementDropped) {\n _this.renderer.onMouseMove(touch, true);\n } else {\n elementDropped = true;\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n _this.renderer.dropData({\n \"text/html\": div.innerHTML\n }, touch);\n _this.renderer.onMouseDown(touch, true);\n }\n }\n }).on(\"touchend\", \".Rk-Bin-Item\", function(e) {\n if (elementDropped) {\n _this.renderer.onMouseUp(e.originalEvent.changedTouches[0], true);\n }\n elementDropped = false;\n }).on(\"dragstart\", \".Rk-Bin-Item\", function(e) {\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n try {\n e.originalEvent.dataTransfer.setData(\"text/html\", div.innerHTML);\n } catch (err) {\n e.originalEvent.dataTransfer.setData(\"text\", div.innerHTML);\n }\n });\n\n }\n\n Rkns.$(window).resize(function() {\n _this.resizeBins();\n });\n\n var lastsearch = false,\n lastval = '';\n\n this.$.find(\".Rk-Bins-Search-Input\").on(\"change keyup paste input\", function() {\n var val = Rkns.$(this).val();\n if (val === lastval) {\n return;\n }\n var search = Rkns.Utils.regexpFromTextOrArray(val.length > 1 ? val : null);\n if (search.source === lastsearch) {\n return;\n }\n lastsearch = search.source;\n _.each(_this.tabs, function(tab) {\n tab.render(search);\n });\n\n });\n this.$.find(\".Rk-Bins-Search-Form\").submit(function() {\n return false;\n });\n };\n\n Renkan.prototype.translate = function(_text) {\n if (Rkns.i18n[this.options.language] && Rkns.i18n[this.options.language][_text]) {\n return Rkns.i18n[this.options.language][_text];\n }\n if (this.options.language.length > 2 && Rkns.i18n[this.options.language.substr(0, 2)] && Rkns.i18n[this.options.language.substr(0, 2)][_text]) {\n return Rkns.i18n[this.options.language.substr(0, 2)][_text];\n }\n return _text;\n };\n\n Renkan.prototype.onStatusChange = function() {\n this.renderer.onStatusChange();\n };\n\n Renkan.prototype.setSearchEngine = function(_key) {\n this.search_engine = this.search_engines[_key];\n this.$.find(\".Rk-Search-Current\").attr(\"class\", \"Rk-Search-Current \" + this.search_engine.getBgClass());\n var listClasses = this.search_engine.getBgClass().split(\" \");\n var classes = \"\";\n for (var i = 0; i < listClasses.length; i++) {\n classes += \".\" + listClasses[i];\n }\n this.$.find(\".Rk-Web-Search-Input.Rk-Search-Input\").attr(\"placeholder\", this.translate(\"Search in \") + this.$.find(\".Rk-Search-List \" + classes).html());\n };\n\n Renkan.prototype.resizeBins = function() {\n var _d = +this.$.find(\".Rk-Bins-Head\").outerHeight();\n this.$.find(\".Rk-Bin-Title:visible\").each(function() {\n _d += Rkns.$(this).outerHeight();\n });\n this.$.find(\".Rk-Bin-Main\").css({\n height: this.$.find(\".Rk-Bins\").height() - _d\n });\n };\n\n /* Utility functions */\n var getUUID4 = function() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n Rkns.Utils = {\n\n OriginEnum: (function(o) { return (Object.freeze && Object.freeze(o)) || o; }) ({\n NONE: 0,\n NODE_BUTTON: 1,\n NODE_DOUBLE_CLICK: 2,\n NODE_DROP_EXT: 3,\n NODE_DROP_BIN: 4,\n EDGE_BUTTON_BAR: 256,\n EDGE_BUTTON_CIRCLE: 512\n }),\n\n getUUID4: getUUID4,\n getUID: (function() {\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n var _d = new Date(),\n ID_AUTO_INCREMENT = 0,\n ID_BASE = _d.getUTCFullYear() + '-' +\n pad(_d.getUTCMonth() + 1) + '-' +\n pad(_d.getUTCDate()) + '-' +\n getUUID4();\n return function(_base) {\n var _n = (++ID_AUTO_INCREMENT).toString(16),\n _uidbase = (typeof _base === \"undefined\" ? \"\" : _base + \"-\");\n while (_n.length < 4) {\n _n = '0' + _n;\n }\n return _uidbase + ID_BASE + '-' + _n;\n };\n })(),\n getFullURL: function(url) {\n\n if (typeof(url) === 'undefined' || url == null) {\n return \"\";\n }\n if (/https?:\\/\\//.test(url)) {\n return url;\n }\n var img = new Image();\n img.src = url;\n var res = img.src;\n img.src = null;\n return res;\n\n },\n inherit: function(_baseClass, _callbefore) {\n\n var _class = function(_arg) {\n if (typeof _callbefore === \"function\") {\n _callbefore.apply(this, Array.prototype.slice.call(arguments, 0));\n }\n _baseClass.apply(this, Array.prototype.slice.call(arguments, 0));\n if (typeof this._init === \"function\" && !this._initialized) {\n this._init.apply(this, Array.prototype.slice.call(arguments, 0));\n this._initialized = true;\n }\n };\n _.extend(_class.prototype, _baseClass.prototype);\n\n return _class;\n\n },\n regexpFromTextOrArray: (function() {\n var charsub = [\n '[aáàâä]',\n '[cç]',\n '[eéèêë]',\n '[iíìîï]',\n '[oóòôö]',\n '[uùûü]'\n ],\n removeChars = [\n String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \"【\", \"】\", \"、\", \"・\", \"‥\", \"。\", \"「\", \"」\", \"『\", \"』\", \"〜\", \":\", \"!\", \"?\", \" \",\n \",\", \" \", \";\", \"(\", \")\", \".\", \"*\", \"+\", \"\\\\\", \"?\", \"|\", \"{\", \"}\", \"[\", \"]\", \"^\", \"#\", \"/\"\n ],\n remsrc = \"[\\\\\" + removeChars.join(\"\\\\\") + \"]\",\n remrx = new RegExp(remsrc, \"gm\"),\n charsrx = _.map(charsub, function(c) {\n return new RegExp(c);\n });\n\n function replaceText(_text) {\n var txt = _text.toLowerCase().replace(remrx, \"\"),\n src = \"\";\n\n function makeReplaceFunc(l) {\n return function(k, v) {\n l = l.replace(charsrx[k], v);\n };\n }\n for (var j = 0; j < txt.length; j++) {\n if (j) {\n src += remsrc + \"*\";\n }\n var l = txt[j];\n _.each(charsub, makeReplaceFunc(l));\n src += l;\n }\n return src;\n }\n\n function getSource(inp) {\n switch (typeof inp) {\n case \"string\":\n return replaceText(inp);\n case \"object\":\n var src = '';\n _.each(inp, function(v) {\n var res = getSource(v);\n if (res) {\n if (src) {\n src += '|';\n }\n src += res;\n }\n });\n return src;\n }\n return '';\n }\n\n return function(_textOrArray) {\n var source = getSource(_textOrArray);\n if (source) {\n var testrx = new RegExp(source, \"im\"),\n replacerx = new RegExp('(' + source + ')', \"igm\");\n return {\n isempty: false,\n source: source,\n test: function(_t) {\n return testrx.test(_t);\n },\n replace: function(_text, _replace) {\n return _text.replace(replacerx, _replace);\n }\n };\n } else {\n return {\n isempty: true,\n source: '',\n test: function() {\n return true;\n },\n replace: function(_text) {\n return text;\n }\n };\n }\n };\n })(),\n /* The minimum distance (in pixels) the mouse has to move to consider an element was dragged */\n _MIN_DRAG_DISTANCE: 2,\n /* Distance between the inner and outer radius of buttons that appear when hovering on a node */\n _NODE_BUTTON_WIDTH: 40,\n\n _EDGE_BUTTON_INNER: 2,\n _EDGE_BUTTON_OUTER: 40,\n /* Constants used to know if a specific action is to be performed when clicking on the canvas */\n _CLICKMODE_ADDNODE: 1,\n _CLICKMODE_STARTEDGE: 2,\n _CLICKMODE_ENDEDGE: 4,\n /* Node size step: Used to calculate the size change when clicking the +/- buttons */\n _NODE_SIZE_STEP: Math.LN2 / 4,\n _MIN_SCALE: 1 / 20,\n _MAX_SCALE: 20,\n _MOUSEMOVE_RATE: 80,\n _DOUBLETAP_DELAY: 800,\n /* Maximum distance in pixels (squared, to reduce calculations)\n * between two taps when double-tapping on a touch terminal */\n _DOUBLETAP_DISTANCE: 20 * 20,\n /* A placeholder so a default colour is displayed when a node has a null value for its user property */\n _USER_PLACEHOLDER: function(_renkan) {\n return {\n color: _renkan.options.default_user_color,\n title: _renkan.translate(\"(unknown user)\"),\n get: function(attr) {\n return this[attr] || false;\n }\n };\n },\n /* The code for the \"Drag and Add Bookmarklet\", slightly minified and with whitespaces removed, though\n * it doesn't seem that it's still a requirement in newer browsers (i.e. the ones compatibles with canvas drawing)\n */\n _BOOKMARKLET_CODE: function(_renkan) {\n return \"(function(a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r){a=document;b=a.body;c=a.location.href;j='draggable';m='text/x-iri-';d=a.createElement('div');d.innerHTML='\" +\n _renkan.translate(\"Drag items from this website, drop them in Renkan\").replace(/ /g, \"_\") +\n \"

                      '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\\\/\\\\/[^\\\\/]*twitter\\\\.com\\\\//,s:'.tweet',n:'twitter'},{r:/https?:\\\\/\\\\/[^\\\\/]*google\\\\.[^\\\\/]+\\\\//,s:'.g',n:'google'},{r:/https?:\\\\/\\\\/[^\\\\/]*lemonde\\\\.fr\\\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();\";\n },\n /* Shortens text to the required length then adds ellipsis */\n shortenText: function(_text, _maxlength) {\n return (_text.length > _maxlength ? (_text.substr(0, _maxlength) + '…') : _text);\n },\n /* Drawing an edit box with an arrow and positioning the edit box according to the position of the node/edge being edited\n * Called by Rkns.Renderer.NodeEditor and Rkns.Renderer.EdgeEditor */\n drawEditBox: function(_options, _coords, _path, _xmargin, _selector, _renkan) {\n _selector.css({\n width: (_options.tooltip_width - 2 * _options.tooltip_padding)\n });\n \n var rect = _selector[0].getBoundingClientRect();\n var container_rect = _renkan.$[0].getBoundingClientRect();\n\n if(rect.bottom > (container_rect.bottom - 2 * _options.tooltip_padding - 10)) {\n _selector.css({\n 'overflow-x': 'hidden',\n 'overflow-y': 'scroll',\n 'max-height':(container_rect.bottom - 2 * _options.tooltip_padding - 5 - rect.top) + 'px'\n });\n }\n\n var _height = _selector.outerHeight() + 2 * _options.tooltip_padding + 5,\n _isLeft = (_coords.x < paper.view.center.x ? 1 : -1),\n _left = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length),\n _right = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length + _options.tooltip_width),\n _top = _coords.y - _height / 2;\n if (_top + _height > (paper.view.size.height - _options.tooltip_margin)) {\n _top = Math.max(paper.view.size.height - _options.tooltip_margin, _coords.y + _options.tooltip_arrow_width / 2) - _height;\n }\n if (_top < _options.tooltip_margin) {\n _top = Math.min(_options.tooltip_margin, _coords.y - _options.tooltip_arrow_width / 2);\n }\n var _bottom = _top + _height;\n /* jshint laxbreak:true */\n _path.segments[0].point = _path.segments[7].point = _coords.add([_isLeft * _xmargin, 0]);\n _path.segments[1].point.x = _path.segments[2].point.x = _path.segments[5].point.x = _path.segments[6].point.x = _left;\n _path.segments[3].point.x = _path.segments[4].point.x = _right;\n _path.segments[2].point.y = _path.segments[3].point.y = _top;\n _path.segments[4].point.y = _path.segments[5].point.y = _bottom;\n _path.segments[1].point.y = _coords.y - _options.tooltip_arrow_width / 2;\n _path.segments[6].point.y = _coords.y + _options.tooltip_arrow_width / 2;\n _path.fillColor = new paper.Color(new paper.Gradient([_options.tooltip_top_color, _options.tooltip_bottom_color]), [0, _top], [0, _bottom]);\n\n _selector.css({\n left: (_options.tooltip_padding + Math.min(_left, _right)),\n top: (_options.tooltip_padding + _top)\n });\n \n return _path;\n },\n // from http://stackoverflow.com/a/6444043\n increaseBrightness: function (hex, percent){\n // strip the leading # if it's there\n hex = hex.replace(/^\\s*#|\\s*$/g, '');\n\n // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`\n if(hex.length === 3){\n hex = hex.replace(/(.)/g, '$1$1');\n }\n\n var r = parseInt(hex.substr(0, 2), 16),\n g = parseInt(hex.substr(2, 2), 16),\n b = parseInt(hex.substr(4, 2), 16);\n\n return '#' +\n ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);\n }\n };\n})(window);\n\n/* END main.js */\n","(function(root) {\n \"use strict\";\n \n var Backbone = root.Backbone;\n \n var Router = root.Rkns.Router = Backbone.Router.extend({\n routes: {\n '': 'index'\n },\n \n index: function (parameters) {\n \n var result = {};\n if (parameters !== null){\n parameters.split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n this.trigger('router', result); \n } \n });\n\n})(window);","(function(root) {\n\n \"use strict\";\n\n var DataLoader = root.Rkns.DataLoader = {\n converters: {\n from1to2: function(data) {\n\n var i, len;\n if(typeof data.nodes !== 'undefined') {\n for(i=0, len=data.nodes.length; i 1 ? options.offset[1]\n : options.offset[0];\n }\n else if (options.offset.x != null) {\n offset.x = options.offset.x;\n offset.y = options.offset.y;\n }\n options.offset = offset;\n }\n return options;\n },\n toJSON : function() {\n return {\n _id : this.get('_id'),\n zoom_level : this.get('zoom_level'),\n offset : this.get('offset'),\n title : this.get('title'),\n description : this.get('description'),\n created_by : this.get('created_by') ? this.get('created_by')\n .get('_id') : null,\n hidden_nodes: this.get('hidden_nodes')\n // Don't need project id\n };\n }\n });\n\n // PROJECT\n var Project = Models.Project = RenkanModel.extend({\n schema_version : '2',\n type : 'project',\n blacklist : [ 'saveStatus', 'loadingStatus'],\n relations : [ {\n type : Backbone.HasMany,\n key : 'users',\n relatedModel : User,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'nodes',\n relatedModel : Node,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'edges',\n relatedModel : Edge,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'views',\n relatedModel : View,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n } ],\n addUser : function(_props, _options) {\n _props.project = this;\n var _user = User.findOrCreate(_props);\n this.get('users').push(_user, _options);\n return _user;\n },\n addNode : function(_props, _options) {\n _props.project = this;\n var _node = Node.findOrCreate(_props);\n this.get('nodes').push(_node, _options);\n return _node;\n },\n addEdge : function(_props, _options) {\n _props.project = this;\n var _edge = Edge.findOrCreate(_props);\n this.get('edges').push(_edge, _options);\n return _edge;\n },\n addView : function(_props, _options) {\n _props.project = this;\n // TODO: check if need to replace with create only\n var _view = View.findOrCreate(_props);\n // TODO: Should we remember only one view?\n this.get('views').push(_view, _options);\n return _view;\n },\n removeNode : function(_model) {\n this.get('nodes').remove(_model);\n },\n removeEdge : function(_model) {\n this.get('edges').remove(_model);\n },\n validate : function(options) {\n var _project = this;\n _.each(\n [].concat(options.users, options.nodes, options.edges,options.views),\n function(_item) {\n if (_item) {\n _item.project = _project;\n }\n }\n );\n },\n getSchemaVersion : function(data) {\n var t = data;\n if(typeof(t) === 'undefined') {\n t = this;\n }\n var version = t.schema_version;\n if(!version) {\n return 1;\n }\n else {\n return version;\n }\n },\n // Add event handler to remove edges when a node is removed\n initialize : function() {\n var _this = this;\n this.on('remove:nodes', function(_node) {\n _this.get('edges').remove(\n _this.get('edges').filter(\n function(_edge) {\n return _edge.get('from') === _node ||\n _edge.get('to') === _node;\n }));\n });\n },\n toJSON : function() {\n var json = _.clone(this.attributes);\n for ( var attr in json) {\n if ((json[attr] instanceof Backbone.Model) ||\n (json[attr] instanceof Backbone.Collection) ||\n (json[attr] instanceof RenkanModel)) {\n json[attr] = json[attr].toJSON();\n }\n }\n return _.omit(json, this.blacklist);\n }\n });\n\n var RosterUser = Models.RosterUser = Backbone.Model\n .extend({\n type : 'roster_user',\n idAttribute : '_id',\n\n constructor : function(options) {\n\n if (typeof options !== 'undefined') {\n options._id = options._id ||\n options.id ||\n Models.getUID(this);\n options.title = options.title || '(untitled ' + this.type + ')';\n options.description = options.description || '';\n options.uri = options.uri || '';\n options.project = options.project || null;\n options.site_id = options.site_id || 0;\n\n if (typeof this.prepare === 'function') {\n options = this.prepare(options);\n }\n }\n Backbone.Model.prototype.constructor.call(this, options);\n },\n\n validate : function() {\n if (!this.type) {\n return 'object has no type';\n }\n },\n\n prepare : function(options) {\n options.color = options.color || '#666666';\n return options;\n },\n\n toJSON : function() {\n return {\n _id : this.get('_id'),\n title : this.get('title'),\n uri : this.get('uri'),\n description : this.get('description'),\n color : this.get('color'),\n project : (this.get('project') != null) ? this.get(\n 'project').get('id') : null,\n site_id : this.get('site_id')\n };\n }\n });\n\n var UsersList = Models.UsersList = Backbone.Collection.extend({\n model : RosterUser\n });\n\n})(window);\n","Rkns.defaults = {\n\n language: (navigator.language || navigator.userLanguage || \"en\"),\n /* GUI Language */\n container: \"renkan\",\n /* GUI Container DOM element ID */\n search: [],\n /* List of Search Engines */\n bins: [],\n /* List of Bins */\n static_url: \"\",\n /* URL for static resources */\n popup_editor: true,\n /* show the node editor as a popup inside the renkan view */\n editor_panel: 'editor-panel',\n /* GUI continer DOM element ID of the editor panel */\n show_bins: true,\n /* Show bins in left column */\n properties: [],\n /* Semantic properties for edges */\n show_editor: true,\n /* Show the graph editor... Setting this to \"false\" only shows the bins part ! */\n read_only: false,\n /* Allows editing of renkan without changing the rest of the GUI. Can be switched on/off on the fly to block/enable editing */\n editor_mode: true,\n /* Switch for Publish/Edit GUI. If editor_mode is false, read_only will be true. */\n manual_save: false,\n /* In snapshot mode, clicking on the floppy will save a snapshot. Otherwise, it will show the connection status */\n show_top_bar: true,\n /* Show the top bar, (title, buttons, users) */\n default_user_color: \"#303030\",\n size_bug_fix: false,\n /* Resize the canvas after load (fixes a bug on iPad and FF Mac) */\n force_resize: false,\n allow_double_click: true,\n /* Allows Double Click to create a node on an empty background */\n double_click_open_url: true,\n /* In read_only mode open node uri in new window with a double click */\n simple_click_open_url: false,\n /* In read_only mode open node uri in new window with a simple click (do not disable the double click) */\n zoom_on_scroll: true,\n /* Allows to use the scrollwheel to zoom */\n element_delete_delay: 0,\n /* Delay between clicking on the bin on an element and really deleting it\n Set to 0 for delete confirm */\n autoscale_padding: 50,\n resize: true,\n\n /* zoom options */\n show_zoom: true,\n /* show zoom buttons */\n save_view: true,\n /* show buttons to save view */\n view_force_autoscale: true,\n /* Force autoscale when the Renkan is loaded */\n view_show_hiddennodes: true,\n /* Show all the node when the Renkan is loaded */\n default_index_view: -1,\n\n /* URL parsing */\n url_parameters: true,\n /* accept or not hash parameters in the url */\n update_url: true,\n /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */\n /* Considered as false if url_parameters is false */\n\n\n /* TOP BAR BUTTONS */\n show_search_field: true,\n show_user_list: true,\n /* show the user list */\n user_name_editable: true,\n /* allow the edition of the user name */\n user_color_editable: true,\n /* allow the edition of the user color */\n title_editable: true,\n /* allow the edition of the renkan title */\n show_user_color: true,\n /* show user colors in the list */\n show_save_button: true,\n show_export_button: true,\n show_open_button: false,\n show_addnode_button: true,\n show_addedge_button: true,\n show_bookmarklet: true,\n show_fullscreen_button: true,\n home_button_url: false,\n home_button_title: \"Home\",\n\n /* MINI-MAP OPTIONS */\n\n show_minimap: true,\n /* Show a small map at the bottom right */\n minimap_width: 160,\n minimap_height: 120,\n minimap_padding: 20,\n minimap_background_color: \"#ffffff\",\n minimap_border_color: \"#cccccc\",\n minimap_highlight_color: \"#ffff00\",\n minimap_highlight_weight: 5,\n\n\n /* EDGE/NODE COMMON OPTIONS */\n\n buttons_background: \"#202020\",\n buttons_label_color: \"#c000c0\",\n buttons_label_font_size: 9,\n\n ghost_opacity : 0.3,\n /* opacity when the hidden element is revealed */\n default_dash_array : [4, 5],\n /* dash line genometry */\n\n /* NODE DISPLAY OPTIONS */\n\n show_node_circles: true,\n /* Show circles for nodes */\n clip_node_images: true,\n /* Constraint node images to circles */\n node_images_fill_mode: false,\n /* Set to false for \"letterboxing\" (height/width of node adapted to show full image)\n Set to true for \"crop\" (adapted to fill circle) */\n node_size_base: 25,\n node_stroke_width: 2,\n node_stroke_max_width: 12,\n selected_node_stroke_width: 4,\n selected_node_stroke_max_width: 24,\n node_stroke_witdh_scale: 5,\n node_title_size_min: 0,\n /* minimum relative size for node title (in graph) */\n node_title_size_max: 5,\n /* maximum relative size for node title (in graph) */\n node_title_size_step: 0.1,\n /* step for relative size for node title (in graph) */\n node_fill_color: \"#ffffff\",\n /* default color to fill node background */\n highlighted_node_fill_color: \"#ffff00\",\n /* default color to fill highlighted node background */\n node_title_color: \"#000000\",\n /* default title color */\n node_label_distance: 5,\n /* Vertical distance between node and label */\n node_label_max_length: 60,\n /* Maximum displayed text length */\n label_untitled_nodes: \"(untitled)\",\n /* Label to display on untitled nodes */\n hide_nodes: true,\n /* allow hide/show nodes */\n change_shapes: true,\n /* Change shapes enabled */\n change_types: true,\n /* Change type enabled */\n\n /* NODE EDITOR TEMPLATE*/\n\n node_editor_templates: {\n \"default\": \"templates/nodeeditor_readonly.html\",\n \"video\": \"templates/nodeeditor_video.html\"\n },\n\n /* EDGE DISPLAY OPTIONS */\n\n edge_stroke_width: 2,\n edge_stroke_max_width: 12,\n selected_edge_stroke_width: 4,\n selected_edge_stroke_max_width: 24,\n edge_stroke_witdh_scale: 5,\n\n edge_label_distance: 0,\n edge_label_max_length: 20,\n edge_arrow_length: 18,\n edge_arrow_width: 12,\n edge_arrow_max_width: 32,\n edge_gap_in_bundles: 12,\n highlighted_edge_color: \"#ffff00\",\n label_untitled_edges: \"\",\n\n /* CONTEXTUAL DISPLAY (TOOLTIP OR EDITOR) OPTIONS */\n\n tooltip_width: 275,\n tooltip_padding: 10,\n tooltip_margin: 15,\n tooltip_arrow_length : 20,\n tooltip_arrow_width : 40,\n tooltip_top_color: \"#f0f0f0\",\n tooltip_bottom_color: \"#d0d0d0\",\n tooltip_border_color: \"#808080\",\n tooltip_border_width: 1,\n tooltip_opacity: 0.8,\n\n richtext_editor_config: {\n toolbarGroups: [\n { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n { name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n '/',\n\t { name: 'styles'},\n ],\n removePlugins : 'colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates',\n },\n\n /* NODE EDITOR OPTIONS */\n\n show_node_title_style: true,\n show_node_editor_uri: true,\n show_node_editor_title: true,\n show_node_editor_title_richtext: true,\n show_node_editor_description: true,\n show_node_editor_description_richtext: true,\n show_node_editor_size: true,\n show_node_editor_style: true, // show node title style editor\n show_node_editor_style_color: true,\n show_node_editor_style_dash: true,\n show_node_editor_style_thickness: true,\n show_node_editor_image: true,\n show_node_editor_creator: true,\n allow_image_upload: true,\n uploaded_image_max_kb: 500,\n\n\n /* NODE TOOLTIP OPTIONS */\n\n show_node_tooltip_uri: true,\n show_node_tooltip_description: true,\n show_node_tooltip_color: true,\n show_node_tooltip_image: true,\n show_node_tooltip_creator: true,\n\n /* EDGE EDITOR OPTIONS */\n\n show_edge_editor_uri: true,\n show_edge_editor_style: true,\n show_edge_editor_style_color: true,\n show_edge_editor_style_dash: true,\n show_edge_editor_style_thickness: true,\n show_edge_editor_style_arrow: true,\n show_edge_editor_direction: true,\n show_edge_editor_nodes: true,\n show_edge_editor_creator: true,\n\n /* EDGE TOOLTIP OPTIONS */\n\n show_edge_tooltip_uri: true,\n show_edge_tooltip_color: true,\n show_edge_tooltip_nodes: true,\n show_edge_tooltip_creator: true,\n\n};\n","Rkns.i18n = {\n fr: {\n \"Edit Node\": \"Édition d’un nœud\",\n \"Edit Edge\": \"Édition d’un lien\",\n \"Title:\": \"Titre :\",\n \"URI:\": \"URI :\",\n \"Description:\": \"Description :\",\n \"From:\": \"De :\",\n \"To:\": \"Vers :\",\n \"Image\": \"Image\",\n \"Image URL:\": \"URL d'Image\",\n \"Choose Image File:\": \"Choisir un fichier image\",\n \"Full Screen\": \"Mode plein écran\",\n \"Add Node\": \"Ajouter un nœud\",\n \"Add Edge\": \"Ajouter un lien\",\n \"Save Project\": \"Enregistrer le projet\",\n \"Open Project\": \"Ouvrir un projet\",\n \"Auto-save enabled\": \"Enregistrement automatique activé\",\n \"Connection lost\": \"Connexion perdue\",\n \"Created by:\": \"Créé par :\",\n \"Zoom In\": \"Agrandir l’échelle\",\n \"Zoom Out\": \"Rapetisser l’échelle\",\n \"Edit\": \"Éditer\",\n \"Remove\": \"Supprimer\",\n \"Cancel deletion\": \"Annuler la suppression\",\n \"Link to another node\": \"Créer un lien\",\n \"Enlarge\": \"Agrandir\",\n \"Shrink\": \"Rétrécir\",\n \"Click on the background canvas to add a node\": \"Cliquer sur le fond du graphe pour rajouter un nœud\",\n \"Click on a first node to start the edge\": \"Cliquer sur un premier nœud pour commencer le lien\",\n \"Click on a second node to complete the edge\": \"Cliquer sur un second nœud pour terminer le lien\",\n \"Wikipedia\": \"Wikipédia\",\n \"Wikipedia in \": \"Wikipédia en \",\n \"French\": \"Français\",\n \"English\": \"Anglais\",\n \"Japanese\": \"Japonais\",\n \"Untitled project\": \"Projet sans titre\",\n \"Lignes de Temps\": \"Lignes de Temps\",\n \"Loading, please wait\": \"Chargement en cours, merci de patienter\",\n \"Edge color:\": \"Couleur :\",\n \"Dash:\": \"Point. :\",\n \"Thickness:\": \"Epaisseur :\",\n \"Arrow:\": \"Flèche :\",\n \"Node color:\": \"Couleur :\",\n \"Choose color\": \"Choisir une couleur\",\n \"Change edge direction\": \"Changer le sens du lien\",\n \"Do you really wish to remove node \": \"Voulez-vous réellement supprimer le nœud \",\n \"Do you really wish to remove edge \": \"Voulez-vous réellement supprimer le lien \",\n \"This file is not an image\": \"Ce fichier n'est pas une image\",\n \"Image size must be under \": \"L'image doit peser moins de \",\n \"Size:\": \"Taille :\",\n \"KB\": \"ko\",\n \"Choose from vocabulary:\": \"Choisir dans un vocabulaire :\",\n \"SKOS Documentation properties\": \"SKOS: Propriétés documentaires\",\n \"has note\": \"a pour note\",\n \"has example\": \"a pour exemple\",\n \"has definition\": \"a pour définition\",\n \"SKOS Semantic relations\": \"SKOS: Relations sémantiques\",\n \"has broader\": \"a pour concept plus large\",\n \"has narrower\": \"a pour concept plus étroit\",\n \"has related\": \"a pour concept apparenté\",\n \"Dublin Core Metadata\": \"Métadonnées Dublin Core\",\n \"has contributor\": \"a pour contributeur\",\n \"covers\": \"couvre\",\n \"created by\": \"créé par\",\n \"has date\": \"a pour date\",\n \"published by\": \"édité par\",\n \"has source\": \"a pour source\",\n \"has subject\": \"a pour sujet\",\n \"Dragged resource\": \"Ressource glisée-déposée\",\n \"Search the Web\": \"Rechercher en ligne\",\n \"Search in Bins\": \"Rechercher dans les chutiers\",\n \"Close bin\": \"Fermer le chutier\",\n \"Refresh bin\": \"Rafraîchir le chutier\",\n \"(untitled)\": \"(sans titre)\",\n \"Select contents:\": \"Sélectionner des contenus :\",\n \"Drag items from this website, drop them in Renkan\": \"Glissez des éléments de ce site web vers Renkan\",\n \"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\": \"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan\",\n \"Shapes available\": \"Formes disponibles\",\n \"Circle\": \"Cercle\",\n \"Square\": \"Carré\",\n \"Diamond\": \"Losange\",\n \"Hexagone\": \"Hexagone\",\n \"Ellipse\": \"Ellipse\",\n \"Star\": \"Étoile\",\n \"Cloud\": \"Nuage\",\n \"Triangle\": \"Triangle\",\n \"Polygon\": \"Polygone\",\n \"Zoom Fit\": \"Ajuster le Zoom\",\n \"Download Project\": \"Télécharger le projet\",\n \"Save view\": \"Sauver la vue\",\n \"View saved view\": \"Restaurer la Vue\",\n \"Renkan \\'Drag-to-Add\\' bookmarklet\": \"Renkan \\'Deplacer-Pour-Ajouter\\' Signet\",\n \"(unknown user)\":\"(non authentifié)\",\n \"\":\"\",\n \"Search in graph\":\"Rechercher dans carte\",\n \"Search in \" : \"Chercher dans \",\n \"Show hidden nodes\": \"Montrer les noeuds cachés\",\n \"Show neighbors\": \"Montrer les voisins\",\n \"Hide\": \"Cacher\",\n \"Fullscreen not supported by your browser\": \"Le plein écran n'est pas supporté par votre navigateur\",\n \"Title size:\": \"Taille :\",\n \"Title color:\": \"Couleur :\",\n }\n};\n","/* Saves the Full JSON at each modification */\n\nRkns.jsonIO = function(_renkan, _opts) {\n var _proj = _renkan.project;\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'PUT';\n }\n var _load = function() {\n _proj.set({\n loadingStatus : true\n });\n Rkns.$.getJSON(_opts.url, function(_data) {\n _renkan.dataloader.load(_data);\n \n _proj.set({\n loadingStatus : false\n });\n _proj.set({\n saveStatus : 0\n });\n });\n };\n var _save = function() {\n _proj.set({\n saveStatus : 2\n });\n var _data = _proj.toJSON();\n if (!_renkan.read_only) {\n Rkns.$.ajax({\n type : _opts.http_method,\n url : _opts.url,\n contentType : \"application/json\",\n data : JSON.stringify(_data),\n success : function(data, textStatus, jqXHR) {\n _proj.set({\n saveStatus : 0\n });\n }\n });\n }\n\n };\n var _thrSave = Rkns._.throttle(function() {\n setTimeout(_save, 100);\n }, 1000);\n \n //TODO: Rearrange to avoid the 2 firts PUT due to a change in the project model\n // Take car of setting up the listener correctly to listen the save action on the view\n _proj.on(\"add:nodes add:edges add:users add:views\", function(_model) {\n _model.on(\"change remove\", function(_model) {\n _thrSave();\n });\n _thrSave();\n });\n _proj.on(\"change\", function() {\n if (!(_proj.changedAttributes.length === 1 && _proj\n .hasChanged('saveStatus'))) {\n _thrSave();\n }\n });\n\n _load();\n};\n","/* Saves the Full JSON once */\n\nRkns.jsonIOSaveOnClick = function(_renkan, _opts) {\n var _proj = _renkan.project,\n _saveWarn = false,\n _onLeave = function() {\n return \"Project not saved\";\n };\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'POST';\n }\n var _load = function() {\n var getdata = {},\n rx = /id=([^&#?=]+)/,\n matches = document.location.hash.match(rx);\n if (matches) {\n getdata.id = matches[1];\n }\n Rkns.$.ajax({\n url: _opts.url,\n data: getdata,\n beforeSend: function(){\n \t_proj.set({loadingStatus:true});\n },\n success: function(_data) {\n _renkan.dataloader.load(_data);\n _proj.set({loadingStatus:false});\n _proj.set({saveStatus:0});\n }\n });\n };\n var _save = function() {\n _proj.set(\"saved_at\", new Date());\n var _data = _proj.toJSON();\n Rkns.$.ajax({\n type: _opts.http_method,\n url: _opts.url,\n contentType: \"application/json\",\n data: JSON.stringify(_data),\n beforeSend: function(){\n \t_proj.set({saveStatus:2});\n },\n success: function(data, textStatus, jqXHR) {\n $(window).off(\"beforeunload\", _onLeave);\n _saveWarn = false;\n _proj.set({saveStatus:0});\n //document.location.hash = \"#id=\" + data.id;\n //$(\".Rk-Notifications\").text(\"Saved as \"+document.location.href).fadeIn().delay(2000).fadeOut();\n }\n });\n };\n var _checkLeave = function() {\n \t_proj.set({saveStatus:1});\n\n var title = _proj.get(\"title\");\n if (title && _proj.get(\"nodes\").length) {\n $(\".Rk-Save-Button\").removeClass(\"disabled\");\n } else {\n $(\".Rk-Save-Button\").addClass(\"disabled\");\n }\n if (title) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#333333\");\n }\n if (!_saveWarn) {\n _saveWarn = true;\n $(window).on(\"beforeunload\", _onLeave);\n }\n };\n _load();\n _proj.on(\"add:nodes add:edges add:users change\", function(_model) {\n\t _model.on(\"change remove\", function(_model) {\n\t \tif(!(_model.changedAttributes.length === 1 && _model.hasChanged('saveStatus'))) {\n\t \t\t_checkLeave();\n\t \t}\n\t });\n\t\tif(!(_proj.changedAttributes.length === 1 && _proj.hasChanged('saveStatus'))) {\n\t\t _checkLeave();\n \t}\n });\n _renkan.renderer.save = function() {\n if ($(\".Rk-Save-Button\").hasClass(\"disabled\")) {\n if (!_proj.get(\"title\")) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#ff0000\");\n }\n } else {\n _save();\n }\n };\n};\n","(function(Rkns) {\n\"use strict\";\n\nvar _ = Rkns._;\n\nvar Ldt = Rkns.Ldt = {};\n\nvar Bin = Ldt.Bin = function(_renkan, _opts) {\n if (_opts.ldt_type) {\n var Resclass = Ldt[_opts.ldt_type+\"Bin\"];\n if (Resclass) {\n return new Resclass(_renkan, _opts);\n }\n }\n console.error(\"No such LDT Bin Type\");\n};\n\nvar ProjectBin = Ldt.ProjectBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nProjectBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.tagTemplate = _renkan.options.templates['templates/ldtjson-bin/tagtemplate.html'];\n this.annotationTemplate = _renkan.options.templates['templates/ldtjson-bin/annotationtemplate.html'];\n this.proj_id = _opts.project_id;\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.title_$.html(_opts.title);\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nProjectBin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '
                    • Tags

                    • ',\n _projtitle = this.data.meta[\"dc:title\"],\n _this = this,\n count = 0;\n _this.title_$.text('LDT Project: \"' + _projtitle + '\"');\n _.map(_this.data.tags,function(_tag) {\n var _title = _tag.meta[\"dc:title\"];\n if (!search.isempty && !search.test(_title)) {\n return;\n }\n count++;\n _html += _this.tagTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n encodedtitle : encodeURIComponent(_title),\n static_url: _this.renkan.options.static_url\n });\n });\n _html += '
                    • Annotations

                    • ';\n _.map(_this.data.annotations,function(_annotation) {\n var _description = _annotation.content.description,\n _title = _annotation.content.title.replace(_description,\"\");\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _annotation.end - _annotation.begin,\n _img = (\n (_annotation.content && _annotation.content.img && _annotation.content.img.src) ?\n _annotation.content.img.src :\n ( _duration ? _this.renkan.options.static_url+\"img/ldt-segment.png\" : _this.renkan.options.static_url+\"img/ldt-point.png\" )\n );\n _html += _this.annotationTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_annotation.begin),\n end: convertTC(_annotation.end),\n duration: convertTC(_duration),\n mediaid: _annotation.media,\n annotationid: _annotation.id,\n image: _img,\n static_url: _this.renkan.options.static_url\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nProjectBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/ldt/cljson/id/' + this.proj_id,\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\nvar Search = Ldt.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nSearch.prototype.getBgClass = function() {\n return \"Rk-Ldt-Icon\";\n};\n\nSearch.prototype.getSearchTitle = function() {\n return this.renkan.translate(\"Lignes de Temps\");\n};\n\nSearch.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new ResultsBin(this.renkan, {\n search: _q\n })\n );\n};\n\nvar ResultsBin = Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nResultsBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.segmentTemplate = _renkan.options.templates['templates/ldtjson-bin/segmenttemplate.html'];\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.max_results = _opts.max_results || 50;\n this.search = _opts.search;\n this.title_$.html('Lignes de Temps: \"' + _opts.search + '\"');\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nResultsBin.prototype.render = function(searchbase) {\n if (!this.data) {\n return;\n }\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '',\n _this = this,\n count = 0;\n _.each(this.data.objects,function(_segment) {\n var _description = _segment.abstract,\n _title = _segment.title;\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _segment.duration,\n _begin = _segment.start_ts,\n _end = + _segment.duration + _begin,\n _img = (\n _duration ?\n _this.renkan.options.static_url + \"img/ldt-segment.png\" :\n _this.renkan.options.static_url + \"img/ldt-point.png\"\n );\n _html += _this.segmentTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_begin),\n end: convertTC(_end),\n duration: convertTC(_duration),\n mediaid: _segment.iri_id,\n //projectid: _segment.project_id,\n //cuttingid: _segment.cutting_id,\n annotationid: _segment.element_id,\n image: _img\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nResultsBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',\n data: {\n format: \"jsonp\",\n q: this.search,\n limit: this.max_results\n },\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\n})(window.Rkns);\n","Rkns.ResourceList = {};\n\nRkns.ResourceList.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.ResourceList.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.resultTemplate = _renkan.options.templates['templates/list-bin.html'];\n this.title_$.html(_opts.title);\n if (_opts.list) {\n this.data = _opts.list;\n }\n this.refresh();\n};\n\nRkns.ResourceList.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data,function(_item) {\n var _element;\n if (typeof _item === \"string\") {\n if (/^(https?:\\/\\/|www)/.test(_item)) {\n _element = { url: _item };\n } else {\n _element = { title: _item.replace(/[:,]?\\s?(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+\\s?/,'').trim() };\n var _match = _item.match(/(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+/);\n if (_match) {\n _element.url = _match[0];\n }\n if (_element.title.length > 80) {\n _element.description = _element.title;\n _element.title = _element.title.replace(/^(.{30,60})\\s.+$/,'$1…');\n }\n }\n } else {\n _element = _item;\n }\n var title = _element.title || (_element.url || \"\").replace(/^https?:\\/\\/(www\\.)?/,'').replace(/^(.{40}).+$/,'$1…'),\n url = _element.url || \"\",\n description = _element.description || \"\",\n image = _element.image || \"\";\n if (url && !/^https?:\\/\\//.test(url)) {\n url = 'http://' + url;\n }\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n image: image,\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.ResourceList.Bin.prototype.refresh = function() {\n if (this.data) {\n this.render();\n }\n};\n","Rkns.Wikipedia = {\n};\n\nRkns.Wikipedia.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nRkns.Wikipedia.Search.prototype.getBgClass = function() {\n return \"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-\" + this.lang;\n};\n\nRkns.Wikipedia.Search.prototype.getSearchTitle = function() {\n var langs = {\n \"fr\": \"French\",\n \"en\": \"English\",\n \"ja\": \"Japanese\"\n };\n if (langs[this.lang]) {\n return this.renkan.translate(\"Wikipedia in \") + this.renkan.translate(langs[this.lang]);\n } else {\n return this.renkan.translate(\"Wikipedia\") + \" [\" + this.lang + \"]\";\n }\n};\n\nRkns.Wikipedia.Search.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new Rkns.Wikipedia.Bin(this.renkan, {\n lang: this.lang,\n search: _q\n })\n );\n};\n\nRkns.Wikipedia.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.Wikipedia.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.search = _opts.search;\n this.resultTemplate = _renkan.options.templates['templates/wikipedia-bin/resulttemplate.html'];\n this.lang = _opts.lang || \"en\";\n this.title_icon_$.addClass('Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-' + this.lang);\n this.title_$.html(this.search).addClass(\"Rk-Wikipedia-Title\");\n this.refresh();\n};\n\nRkns.Wikipedia.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data.query.search, function(_result) {\n var title = _result.title,\n url = \"http://\" + _this.lang + \".wikipedia.org/wiki/\" + encodeURI(title.replace(/ /g,\"_\")),\n description = Rkns.$('
                      ').html(_result.snippet).text();\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.Wikipedia.Bin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: \"http://\" + _this.lang + \".wikipedia.org/w/api.php?action=query&list=search&srsearch=\" + encodeURIComponent(this.search) + \"&format=json\",\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n","\ndefine('renderer/baserepresentation',['jquery', 'underscore'], function ($, _) {\n 'use strict';\n\n /* Rkns.Renderer._BaseRepresentation Class */\n\n /* In Renkan, a \"Representation\" is a sort of ViewModel (in the MVVM paradigm) and bridges the gap between\n * models (written with Backbone.js) and the view (written with Paper.js)\n * Renkan's representations all inherit from Rkns.Renderer._BaseRepresentation '*/\n\n var _BaseRepresentation = function(_renderer, _model) {\n if (typeof _renderer !== \"undefined\") {\n this.renderer = _renderer;\n this.renkan = _renderer.renkan;\n this.project = _renderer.renkan.project;\n this.options = _renderer.renkan.options;\n this.model = _model;\n if (this.model) {\n var _this = this;\n this._changeBinding = function() {\n _this.redraw({change: true});\n };\n this._removeBinding = function() {\n _renderer.removeRepresentation(_this);\n _.defer(function() {\n _renderer.redraw();\n });\n };\n this._selectBinding = function() {\n _this.select();\n };\n this._unselectBinding = function() {\n _this.unselect();\n };\n this.model.on(\"change\", this._changeBinding );\n this.model.on(\"remove\", this._removeBinding );\n this.model.on(\"select\", this._selectBinding );\n this.model.on(\"unselect\", this._unselectBinding );\n }\n }\n };\n\n /* Rkns.Renderer._BaseRepresentation Methods */\n\n _(_BaseRepresentation.prototype).extend({\n _super: function(_func) {\n return _BaseRepresentation.prototype[_func].apply(this, Array.prototype.slice.call(arguments, 1));\n },\n redraw: function() {},\n moveTo: function() {},\n show: function() { return \"BaseRepresentation.show\"; },\n hide: function() {},\n select: function() {\n if (this.model) {\n this.model.trigger(\"selected\");\n }\n },\n unselect: function() {\n if (this.model) {\n this.model.trigger(\"unselected\");\n }\n },\n highlight: function() {},\n unhighlight: function() {},\n mousedown: function() {},\n mouseup: function() {\n if (this.model) {\n this.model.trigger(\"clicked\");\n }\n },\n destroy: function() {\n if (this.model) {\n this.model.off(\"change\", this._changeBinding );\n this.model.off(\"remove\", this._removeBinding );\n this.model.off(\"select\", this._selectBinding );\n this.model.off(\"unselect\", this._unselectBinding );\n }\n }\n }).value();\n\n /* End of Rkns.Renderer._BaseRepresentation Class */\n\n return _BaseRepresentation;\n\n});\n\ndefine('requtils',[], function ($, _) {\n 'use strict';\n return {\n getUtils: function(){\n return window.Rkns.Utils;\n },\n getRenderer: function(){\n return window.Rkns.Renderer;\n }\n };\n\n});\n\n\ndefine('renderer/basebutton',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer._BaseButton Class */\n\n /* BaseButton is extended by contextual buttons that appear when hovering on nodes and edges */\n\n var _BaseButton = Utils.inherit(BaseRepresentation);\n\n _(_BaseButton.prototype).extend({\n moveTo: function(_pos) {\n this.sector.moveTo(_pos);\n },\n show: function() {\n this.sector.show();\n },\n hide: function() {\n if (this.sector){\n this.sector.hide();\n }\n },\n select: function() {\n this.sector.select();\n },\n unselect: function(_newTarget) {\n this.sector.unselect();\n if (!_newTarget || (_newTarget !== this.source_representation && _newTarget.source_representation !== this.source_representation)) {\n this.source_representation.unselect();\n }\n },\n destroy: function() {\n this.sector.destroy();\n }\n }).value();\n\n return _BaseButton;\n\n});\n\n\ndefine('renderer/shapebuilder',[], function () {\n 'use strict';\n\n var cloud_path = \"M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z\";\n /* ShapeBuilder Begin */\n\n var builders = {\n \"circle\":{\n getShape: function() {\n return new paper.Path.Circle([0, 0], 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Circle(center, radius);\n }\n },\n \"rectangle\":{\n getShape: function() {\n return new paper.Path.Rectangle([-2, -2], [2, 2]);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Rectangle([-radius, -radius], [radius*2, radius*2]);\n }\n },\n \"ellipse\":{\n getShape: function() {\n return new paper.Path.Ellipse(new paper.Rectangle([-2, -1], [2, 1]));\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Ellipse(new paper.Rectangle([-radius, -radius/2], [radius*2, radius]));\n }\n },\n \"polygon\":{\n getShape: function() {\n return new paper.Path.RegularPolygon([0, 0], 6, 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.RegularPolygon(center, 6, radius);\n }\n },\n \"diamond\":{\n getShape: function() {\n var d = new paper.Path.Rectangle([-Math.SQRT2, -Math.SQRT2], [Math.SQRT2, Math.SQRT2]);\n d.rotate(45);\n return d;\n },\n getImageShape: function(center, radius) {\n var d = new paper.Path.Rectangle([-radius*Math.SQRT2/2, -radius*Math.SQRT2/2], [radius*Math.SQRT2, radius*Math.SQRT2]);\n d.rotate(45);\n return d;\n }\n },\n \"star\":{\n getShape: function() {\n return new paper.Path.Star([0, 0], 8, 1, 0.7);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Star(center, 8, radius*1, radius*0.7);\n }\n },\n \"cloud\": {\n getShape: function() {\n var path = new paper.Path(cloud_path);\n return path;\n\n },\n getImageShape: function(center, radius) {\n var path = new paper.Path(cloud_path);\n path.scale(radius);\n path.translate(center);\n return path;\n }\n },\n \"triangle\": {\n getShape: function() {\n return new paper.Path.RegularPolygon([0,0], 3, 1);\n },\n getImageShape: function(center, radius) {\n var shape = new paper.Path.RegularPolygon([0,0], 3, 1);\n shape.scale(radius);\n shape.translate(center);\n return shape;\n }\n },\n \"svg\": function(path){\n return {\n getShape: function() {\n return new paper.Path(path);\n },\n getImageShape: function(center, radius) {\n // No calcul for the moment\n return new paper.Path();\n }\n };\n }\n };\n\n var ShapeBuilder = function (shape){\n if(shape === null || typeof shape === \"undefined\"){\n shape = \"circle\";\n }\n if(shape.substr(0,4)===\"svg:\"){\n return builders.svg(shape.substr(4));\n }\n if(!(shape in builders)){\n shape = \"circle\";\n }\n return builders[shape];\n };\n\n ShapeBuilder.builders = builders;\n\n return ShapeBuilder;\n\n});\n\ndefine('renderer/noderepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.Node Class */\n\n /* The representation for the node : A circle, with an image inside and a text label underneath.\n * The circle and the image are drawn on canvas and managed by Paper.js.\n * The text label is an HTML node, managed by jQuery. */\n\n //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);\n var NodeRepr = Utils.inherit(BaseRepresentation);\n\n _(NodeRepr.prototype).extend({\n _init: function() {\n this.renderer.node_layer.activate();\n this.type = \"Node\";\n this.buildShape();\n this.hidden = false;\n this.ghost= false;\n if (this.options.show_node_circles) {\n this.circle.strokeWidth = this.options.node_stroke_width;\n this.h_ratio = 1;\n } else {\n this.h_ratio = 0;\n }\n this.title = $('
                      ').appendTo(this.renderer.labels_$);\n\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.NodeEditButton(this.renderer, null),\n new Renderer.NodeRemoveButton(this.renderer, null),\n new Renderer.NodeLinkButton(this.renderer, null),\n new Renderer.NodeEnlargeButton(this.renderer, null),\n new Renderer.NodeShrinkButton(this.renderer, null)\n ];\n if (this.options.hide_nodes){\n this.normal_buttons.push(\n new Renderer.NodeHideButton(this.renderer, null),\n new Renderer.NodeShowButton(this.renderer, null)\n );\n }\n this.pending_delete_buttons = [\n new Renderer.NodeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n this.last_circle_radius = 1;\n\n if (this.renderer.minimap) {\n this.renderer.minimap.node_layer.activate();\n this.minimap_circle = new paper.Path.Circle([0, 0], 1);\n this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;\n this.renderer.minimap.node_group.addChild(this.minimap_circle);\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.node_stroke_width + (thickness-1) * (this.options.node_stroke_max_width - this.options.node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_node_stroke_width + (thickness-1) * (this.options.selected_node_stroke_max_width - this.options.selected_node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n buildShape: function(){\n if( 'shape' in this.model.changed ) {\n delete this.img;\n }\n if(this.circle){\n this.circle.remove();\n delete this.circle;\n }\n // \"circle\" \"rectangle\" \"ellipse\" \"polygon\" \"star\" \"diamond\"\n this.shapeBuilder = new ShapeBuilder(this.model.get(\"shape\"));\n this.circle = this.shapeBuilder.getShape();\n this.circle.__representation = this;\n this.circle.sendToBack();\n this.last_circle_radius = 1;\n },\n redraw: function(options) {\n if( 'shape' in this.model.changed && 'change' in options && options.change ) {\n //if( 'shape' in this.model.changed ) {\n this.buildShape();\n }\n var _model_coords = new paper.Point(this.model.get(\"position\")),\n _baseRadius = this.options.node_size_base * Math.exp((this.model.get(\"size\") || 0) * Utils._NODE_SIZE_STEP);\n if (!this.is_dragging || !this.paper_coords) {\n this.paper_coords = this.renderer.toPaperCoords(_model_coords);\n }\n this.circle_radius = _baseRadius * this.renderer.view.scale;\n if (this.last_circle_radius !== this.circle_radius) {\n this.all_buttons.forEach(function(b) {\n b.setSectorSize();\n });\n this.circle.scale(this.circle_radius / this.last_circle_radius);\n if (this.node_image) {\n this.node_image.scale(this.circle_radius / this.last_circle_radius);\n }\n }\n this.circle.position = this.paper_coords;\n if (this.node_image) {\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n }\n this.last_circle_radius = this.circle_radius;\n\n var old_act_btn = this.active_buttons;\n\n var opacity = 1;\n if (this.model.get(\"delete_scheduled\")) {\n opacity = 0.5;\n this.active_buttons = this.pending_delete_buttons;\n this.circle.dashArray = [2,2];\n } else {\n opacity = 1;\n this.active_buttons = this.normal_buttons;\n this.circle.dashArray = null;\n }\n if (this.selected && this.renderer.isEditable() && !this.ghost) {\n if (old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n }\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n if (this.node_image) {\n this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);\n }\n\n this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;\n\n this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;\n\n\n //strip html from title\n var html = this.model.get(\"title\");\n var div = document.createElement(\"div\");\n div.innerHTML = html;\n var clean_title = div.textContent || div.innerText || \"\";\n\n var _text = clean_title || this.renkan.translate(this.options.label_untitled_nodes) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n\n //_formatedText = _text;\n\n\n if (typeof this.highlighted === \"object\") {\n _text = this.highlighted.replace(_(_text).escape(),'$1');\n }\n\n //TODO: default text node color\n var node_style = (this.model.get(\"style\") || {'title_size': 1, 'title-color': '#00000' });\n var text_size = node_style.title_size || 1;\n var text_color = node_style.title_color || this.options.node_title_color;\n\n var text_style = {\n 'line-height': \"1em\"\n };\n\n if(text_size !== 1) {\n text_style['font-size'] = text_size.toFixed(1)+\"em\";\n }\n //TODO: compare with default value\n if(text_color !== \"#000000\") {\n text_style.color = text_color;\n }\n\n var text_node = $(\"\").css(text_style).html(_text);\n\n this.title.empty().append(text_node);\n\n var _strokeWidth = this._getStrokeWidth();\n this.title.css({\n left: this.paper_coords.x,\n top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance + 0.5*_strokeWidth,\n opacity: opacity\n });\n var _color = (this.model.has(\"style\") && this.model.get(\"style\").color) || (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null;\n this.circle.strokeWidth = _strokeWidth;\n this.circle.strokeColor = _color;\n this.circle.dashArray = _dash;\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n var lastImage = this.img;\n this.img = this.model.get(\"image\");\n if (this.img && this.img !== lastImage) {\n this.showImage();\n if(this.circle) {\n this.circle.sendToBack();\n }\n }\n if (this.node_image && !this.img) {\n this.node_image.remove();\n delete this.node_image;\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.fillColor = _color;\n var minipos = this.renderer.toMinimapCoords(_model_coords),\n miniradius = this.renderer.minimap.scale * _baseRadius,\n minisize = new paper.Size([miniradius, miniradius]);\n this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));\n }\n\n if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.redraw();\n }\n }\n );\n }\n if (this.ghost){\n this.show(true);\n } else {\n if (this.hidden) { this.hide(); }\n }\n },\n showImage: function() {\n var _image = null;\n if (typeof this.renderer.image_cache[this.img] === \"undefined\") {\n _image = new Image();\n this.renderer.image_cache[this.img] = _image;\n _image.src = this.img;\n } else {\n _image = this.renderer.image_cache[this.img];\n }\n var _this = this;\n if (_image.width) {\n\n if (this.node_image) {\n this.node_image.remove();\n }\n this.renderer.node_layer.activate();\n var width = _image.width,\n height = _image.height,\n clipPath = this.model.get(\"clip_path\"),\n hasClipPath = (typeof clipPath !== \"undefined\" && clipPath),\n _clip = null,\n baseRadius = null,\n centerPoint = null;\n\n if (hasClipPath) {\n _clip = new paper.Path();\n var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],\n lastCoords = [0,0],\n minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n var transformCoords = function(tabc, relative) {\n var newCoords = tabc.slice(1).map(function(v, k) {\n var res = parseFloat(v),\n isY = k % 2;\n if (isY) {\n res = ( res - 0.5 ) * height;\n } else {\n res = ( res - 0.5 ) * width;\n }\n if (relative) {\n res += lastCoords[isY];\n }\n if (isY) {\n minY = Math.min(minY, res);\n maxY = Math.max(maxY, res);\n } else {\n minX = Math.min(minX, res);\n maxX = Math.max(maxX, res);\n }\n return res;\n });\n lastCoords = newCoords.slice(-2);\n return newCoords;\n };\n\n instructions.forEach(function(instr) {\n var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [\"\"];\n switch(coords[0]) {\n case \"M\":\n _clip.moveTo(transformCoords(coords));\n break;\n case \"m\":\n _clip.moveTo(transformCoords(coords, true));\n break;\n case \"L\":\n _clip.lineTo(transformCoords(coords));\n break;\n case \"l\":\n _clip.lineTo(transformCoords(coords, true));\n break;\n case \"C\":\n _clip.cubicCurveTo(transformCoords(coords));\n break;\n case \"c\":\n _clip.cubicCurveTo(transformCoords(coords, true));\n break;\n case \"Q\":\n _clip.quadraticCurveTo(transformCoords(coords));\n break;\n case \"q\":\n _clip.quadraticCurveTo(transformCoords(coords, true));\n break;\n }\n });\n\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](maxX - minX, maxY - minY) / 2;\n centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);\n if (!this.options.show_node_circles) {\n this.h_ratio = (maxY - minY) / (2 * baseRadius);\n }\n } else {\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](width, height) / 2;\n centerPoint = new paper.Point(0,0);\n if (!this.options.show_node_circles) {\n this.h_ratio = height / (2 * baseRadius);\n }\n }\n var _raster = new paper.Raster(_image);\n _raster.locked = true; // Disable mouse events on icon\n if (hasClipPath) {\n _raster = new paper.Group(_clip, _raster);\n _raster.opacity = 0.99;\n /* This is a workaround to allow clipping at group level\n * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).\n */\n _raster.clipped = true;\n _clip.__representation = this;\n }\n if (this.options.clip_node_images) {\n var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);\n _raster = new paper.Group(_circleClip, _raster);\n _raster.opacity = 0.99;\n _raster.clipped = true;\n _circleClip.__representation = this;\n }\n this.image_delta = centerPoint.divide(baseRadius);\n this.node_image = _raster;\n this.node_image.__representation = _this;\n this.node_image.scale(this.circle_radius / baseRadius);\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n this.node_image.insertAbove(this.circle);\n } else {\n $(_image).on(\"load\", function() {\n _this.showImage();\n });\n }\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.renkan.read_only) {\n this.is_dragging = true;\n this.paper_coords = this.paper_coords.add(_delta);\n this.redraw();\n }\n } else {\n this.renderer.view.paperShift(_delta);\n }\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"NodeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n clearTimeout(this.hide_timeout);\n this.selected = true;\n this.circle.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable() && !this.hidden) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n var _uri = this.model.get(\"uri\");\n if (_uri) {\n $('.Rk-Bin-Item').each(function() {\n var _el = $(this);\n if (_el.attr(\"data-uri\") === _uri) {\n _el.addClass(\"selected\");\n }\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;\n this.minimap_circle.strokeColor = this.options.minimap_highlight_color;\n }\n //if the node is hidden and the mouse hover it, it appears as a ghost\n if (this.hidden) {\n this.show(true);\n }\n else {\n this.showNeighbors(true);\n }\n this._super(\"select\");\n },\n hideButtons: function() {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n delete(this.buttonTimeout);\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n var _this = this;\n this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);\n this.circle.strokeWidth = this._getStrokeWidth();\n $('.Rk-Bin-Item').removeClass(\"selected\");\n if (this.renderer.minimap) {\n this.minimap_circle.strokeColor = undefined;\n }\n //when the mouse don't hover the node anymore, we hide it\n if (this.hidden) {\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.hide();\n }\n else {\n this.hideNeighbors(true);\n }\n this._super(\"unselect\");\n }\n },\n hide_delay: function(){\n var _this = this;\n this.hide_timeout = setTimeout(function(){\n _this.hide();\n }, 1000);\n },\n hide: function(){\n var _this = this;\n this.ghost = false;\n this.hidden = true;\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = 0;\n }\n this.hideButtons();\n this.circle.opacity = 0;\n this.title.css('opacity', 0);\n this.minimap_circle.opacity = 0;\n\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.hide();\n }\n }\n );\n this.hideNeighbors(false);\n },\n show: function(ghost){\n var _this = this;\n this.ghost = ghost;\n if (this.ghost){\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = this.options.ghost_opacity;\n }\n this.circle.opacity = this.options.ghost_opacity;\n this.title.css('opacity', this.options.ghost_opacity);\n this.minimap_circle.opacity = this.options.ghost_opacity;\n } else {\n this.minimap_circle.opacity = 1;\n this.hidden = false;\n this.redraw();\n }\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.show(_this.ghost);\n }\n }\n );\n },\n hideNeighbors: function(delay){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.ghost) {\n if (delay){ repr.hide_delay(); } else {repr.hide(); }\n }\n }\n );\n },\n showNeighbors: function(ghost){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.hidden) {\n repr.show(ghost);\n if (!ghost){\n var indexNode = _this.renderer.view.hiddenNodes.indexOf(repr.model.id);\n if (indexNode !== -1){\n _this.renderer.view.hiddenNodes.splice(indexNode, 1);\n }\n }\n }\n }\n );\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n saveCoords: function() {\n var _coords = this.renderer.toModelCoords(this.paper_coords),\n _data = {\n position: {\n x: _coords.x,\n y: _coords.y\n }\n };\n if (this.renderer.isEditable()) {\n this.model.set(_data);\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (this.renderer.is_dragging && this.renderer.isEditable()) {\n this.saveCoords();\n } else {\n if (this.hidden) {\n var index = this.renderer.view.hiddenNodes.indexOf(this.model.id);\n if (index !== -1){\n this.renderer.view.hiddenNodes.splice(index, 1);\n }\n this.show(false);\n this.select();\n } else {\n if (!_isTouch && !this.model.get(\"delete_scheduled\")) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.is_dragging = false;\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n this.circle.remove();\n this.title.remove();\n if (this.renderer.minimap) {\n this.minimap_circle.remove();\n }\n if (this.node_image) {\n this.node_image.remove();\n }\n }\n }).value();\n\n return NodeRepr;\n\n});\n\n\ndefine('renderer/edge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Edge Class Begin */\n\n //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);\n var Edge = Utils.inherit(BaseRepresentation);\n\n _(Edge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Edge\";\n this.hidden = false;\n this.ghost = false;\n this.highlighted = false;\n this.from_representation = this.renderer.getRepresentationByModel(this.model.get(\"from\"));\n this.to_representation = this.renderer.getRepresentationByModel(this.model.get(\"to\"));\n this.bundle = this.renderer.addToBundles(this);\n this.line = new paper.Path();\n this.line.add([0,0],[0,0],[0,0]);\n this.line.__representation = this;\n this.line.strokeWidth = this.options.edge_stroke_width;\n this.arrow_scale = 1;\n this.arrow = new paper.Path();\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);\n this.arrow.__representation = this;\n this.text = $('
                      ').appendTo(this.renderer.labels_$);\n this.arrow_angle = 0;\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.EdgeEditButton(this.renderer, null),\n new Renderer.EdgeRemoveButton(this.renderer, null)\n ];\n this.pending_delete_buttons = [\n new Renderer.EdgeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n\n if (this.renderer.minimap) {\n this.renderer.minimap.edge_layer.activate();\n this.minimap_line = new paper.Path();\n this.minimap_line.add([0,0],[0,0]);\n this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;\n this.minimap_line.strokeWidth = 1;\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getArrowScale: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);\n },\n redraw: function() {\n var from = this.model.get(\"from\"),\n to = this.model.get(\"to\");\n if (!from || !to || (this.hidden && !this.ghost)) {\n return;\n }\n this.from_representation = this.renderer.getRepresentationByModel(from);\n this.to_representation = this.renderer.getRepresentationByModel(to);\n if (typeof this.from_representation === \"undefined\" || typeof this.to_representation === \"undefined\" ||\n (this.from_representation.hidden && !this.from_representation.ghost) ||\n (this.to_representation.hidden && !this.to_representation.ghost)) {\n this.hide();\n return;\n }\n var _strokeWidth = this._getStrokeWidth(),\n _arrow_scale = this._getArrowScale(),\n _p0a = this.from_representation.paper_coords,\n _p1a = this.to_representation.paper_coords,\n _v = _p1a.subtract(_p0a),\n _r = _v.length,\n _u = _v.divide(_r),\n _ortho = new paper.Point([- _u.y, _u.x]),\n _group_pos = this.bundle.getPosition(this),\n _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),\n _p0b = _p0a.add(_delta), /* Adding a 4 px difference */\n _p1b = _p1a.add(_delta), /* to differentiate bundled links */\n _a = _v.angle,\n _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),\n _handle = _v.divide(3),\n _color = (this.highlighted && this.options.highlighted_edge_color) ||\n (this.model.has(\"style\") && this.model.get(\"style\").color) ||\n (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null,\n _opacity;\n\n if (this.model.get(\"delete_scheduled\") || this.from_representation.model.get(\"delete_scheduled\") || this.to_representation.model.get(\"delete_scheduled\")) {\n _opacity = 0.5;\n this.line.dashArray = [2, 2];\n } else {\n _opacity = this.ghost ? this.options.ghost_opacity : 1;\n this.line.dashArray = null;\n }\n\n var old_act_btn = this.active_buttons;\n\n this.arrow.visible =\n (this.model.has(\"style\") && this.model.get(\"style\").arrow) ||\n !this.model.has(\"style\") ||\n typeof this.model.get(\"style\").arrow === 'undefined';\n\n this.active_buttons = this.model.get(\"delete_scheduled\") ? this.pending_delete_buttons : this.normal_buttons;\n\n if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n this.paper_coords = _p0b.add(_p1b).divide(2);\n this.line.strokeWidth = _strokeWidth;\n this.line.strokeColor = _color;\n this.line.dashArray = _dash;\n this.line.opacity = _opacity;\n this.line.segments[0].point = _p0a;\n this.line.segments[1].point = this.paper_coords;\n this.line.segments[1].handleIn = _handle.multiply(-1);\n this.line.segments[1].handleOut = _handle;\n this.line.segments[2].point = _p1a;\n this.arrow.scale(_arrow_scale / this.arrow_scale);\n this.arrow_scale = _arrow_scale;\n this.arrow.fillColor = _color;\n this.arrow.opacity = _opacity;\n this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);\n this.arrow.position = this.paper_coords;\n\n this.arrow_angle = _a;\n if (_a > 90) {\n _a -= 180;\n _textdelta = _textdelta.multiply(-1);\n }\n if (_a < -90) {\n _a += 180;\n _textdelta = _textdelta.multiply(-1);\n }\n var _text = this.model.get(\"title\") || this.renkan.translate(this.options.label_untitled_edges) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n if (typeof this.highlighted === \"object\") {\n this.text.html(this.highlighted.replace(_(_text).escape(),'$1'));\n } else {\n this.text.text(_text);\n }\n var _textpos = this.paper_coords.add(_textdelta);\n this.text.css({\n left: _textpos.x,\n top: _textpos.y,\n transform: \"rotate(\" + _a + \"deg)\",\n \"-moz-transform\": \"rotate(\" + _a + \"deg)\",\n \"-webkit-transform\": \"rotate(\" + _a + \"deg)\",\n opacity: _opacity\n });\n this.text_angle = _a;\n\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n\n if (this.renderer.minimap) {\n this.minimap_line.strokeColor = _color;\n this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get(\"position\")));\n this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get(\"position\")));\n }\n },\n hide: function(){\n this.hidden = true;\n this.ghost = false;\n\n this.text.hide();\n this.line.visible = false;\n this.arrow.visible = false;\n this.minimap_line.visible = false;\n },\n show: function(ghost){\n this.ghost = ghost;\n if (this.ghost) {\n this.text.css('opacity', 0.3);\n this.line.opacity = 0.3;\n this.arrow.opacity = 0.3;\n this.minimap_line.opacity = 0.3;\n } else {\n this.hidden = false;\n\n this.text.css('opacity', 1);\n this.line.opacity = 1;\n this.arrow.opacity = 1;\n this.minimap_line.opacity = 1;\n }\n this.text.show();\n this.line.visible = true;\n this.arrow.visible = true;\n this.minimap_line.visible = true;\n this.redraw();\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"EdgeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n this.selected = true;\n this.line.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable()) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n this._super(\"select\");\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n if (this.options.editor_mode) {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n }\n if (this.hidden){\n this.renderer.removeRepresentationsOfType(\"editor\");\n }\n this.line.strokeWidth = this._getStrokeWidth();\n this._super(\"unselect\");\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (!this.renkan.read_only && this.renderer.is_dragging) {\n this.from_representation.saveCoords();\n this.to_representation.saveCoords();\n this.from_representation.is_dragging = false;\n this.to_representation.is_dragging = false;\n } else {\n if (!_isTouch) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.options.read_only) {\n this.from_representation.paperShift(_delta);\n this.to_representation.paperShift(_delta);\n }\n } else {\n this.renderer.paperShift(_delta);\n }\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n destroy: function() {\n this._super(\"destroy\");\n this.line.remove();\n this.arrow.remove();\n this.text.remove();\n if (this.renderer.minimap) {\n this.minimap_line.remove();\n }\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n var _this = this;\n this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {\n return _this === _edge;\n });\n }\n }).value();\n\n return Edge;\n\n});\n\n\n\ndefine('renderer/tempedge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* TempEdge Class Begin */\n\n //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);\n var TempEdge = Utils.inherit(BaseRepresentation);\n\n _(TempEdge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Temp-edge\";\n this.origin = Utils.OriginEnum.NONE;\n\n var _color = (this.project.get(\"users\").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\");\n this.line = new paper.Path();\n this.line.strokeColor = _color;\n this.line.dashArray = [4, 2];\n this.line.strokeWidth = this.options.selected_edge_stroke_width;\n this.line.add([0,0],[0,0]);\n this.line.__representation = this;\n this.arrow = new paper.Path();\n this.arrow.fillColor = _color;\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.__representation = this;\n this.arrow_angle = 0;\n },\n redraw: function() {\n var _p0 = this.from_representation.paper_coords,\n _p1 = this.end_pos,\n _a = _p1.subtract(_p0).angle,\n _c = _p0.add(_p1).divide(2);\n this.line.segments[0].point = _p0;\n this.line.segments[1].point = _p1;\n this.arrow.rotate(_a - this.arrow_angle);\n this.arrow.position = _c;\n this.arrow_angle = _a;\n },\n paperShift: function(_delta) {\n if (!this.renderer.isEditable()) {\n this.renderer.removeRepresentation(_this);\n paper.view.draw();\n return;\n }\n this.end_pos = this.end_pos.add(_delta);\n var _hitResult = paper.project.hitTest(this.end_pos);\n this.renderer.findTarget(_hitResult);\n this.redraw();\n },\n mouseup: function(_event, _isTouch) {\n var _hitResult = paper.project.hitTest(_event.point),\n _model = this.from_representation.model,\n _endDrag = true;\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _target = _hitResult.item.__representation;\n if (_target.type.substr(0,4) === \"Node\") {\n var _destmodel = _target.model || _target.source_representation.model;\n if (_model !== _destmodel) {\n var _data = {\n id: Utils.getUID('edge'),\n created_by: this.renkan.current_user,\n from: _model,\n to: _destmodel,\n origin: this.origin\n };\n if (this.renderer.isEditable()) {\n this.project.addEdge(_data);\n }\n }\n }\n\n if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {\n _endDrag = false;\n this.renderer.is_dragging = true;\n }\n }\n if (_endDrag) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentation(this);\n paper.view.draw();\n }\n },\n destroy: function() {\n this.arrow.remove();\n this.line.remove();\n }\n }).value();\n\n /* TempEdge Class End */\n\n return TempEdge;\n\n});\n\n\ndefine('renderer/baseeditor',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _BaseEditor Begin */\n //var _BaseEditor = Renderer._BaseEditor = Utils.inherit(Renderer._BaseRepresentation);\n var _BaseEditor = Utils.inherit(BaseRepresentation);\n\n _(_BaseEditor.prototype).extend({\n _init: function() {\n this.renderer.buttons_layer.activate();\n this.type = \"editor\";\n this.editor_block = new paper.Path();\n var _pts = _.map(_.range(8), function() {return [0,0];});\n this.editor_block.add.apply(this.editor_block, _pts);\n this.editor_block.strokeWidth = this.options.tooltip_border_width;\n this.editor_block.strokeColor = this.options.tooltip_border_color;\n this.editor_block.opacity = this.options.tooltip_opacity;\n this.editor_$ = $('
                      ')\n .appendTo(this.renderer.editor_$)\n .css({\n position: \"absolute\",\n opacity: this.options.tooltip_opacity\n })\n .hide();\n },\n destroy: function() {\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* _BaseEditor End */\n\n return _BaseEditor;\n\n});\n\n\ndefine('renderer/nodeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor', 'renderer/shapebuilder', 'ckeditor-core'], function ($, _, requtils, BaseEditor, ShapeBuilder, CKEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditor Begin */\n //var NodeEditor = Renderer.NodeEditor = Utils.inherit(Renderer._BaseEditor);\n var NodeEditor = Utils.inherit(BaseEditor);\n\n _(NodeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/nodeeditor.html'];\n //fusionner avec this.options.node_editor_templates\n this.readOnlyTemplate = this.options.node_editor_templates;\n },\n draw: function() {\n var _model = this.source_representation.model,\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate[_model.get(\"type\")] || this.readOnlyTemplate[\"default\"]),\n _image_placeholder = this.options.static_url + \"img/image-placeholder.png\",\n _size = (_model.get(\"size\") || 0);\n this.editor_$\n .html(_template({\n node: {\n _id: _model.get(\"_id\"),\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n type: _model.get(\"type\") || \"default\",\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n image: _model.get(\"image\") || \"\",\n image_placeholder: _image_placeholder,\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n title_size: (_model.has(\"style\") && _model.get(\"style\").title_size) || 1,\n title_color: (_model.has(\"style\") && _model.get(\"style\").title_color) || this.options.node_title_color,\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n clip_path: _model.get(\"clip_path\") || false,\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\"),\n size: (_size > 0 ? \"+\" : \"\") + _size,\n shape: _model.get(\"shape\") || \"circle\"\n },\n renkan: this.renkan,\n options: this.options,\n shortenText: Utils.shortenText,\n shapes : _(ShapeBuilder.builders).omit('svg').keys().value(),\n types : _(this.options.node_editor_templates).keys().value(),\n }));\n this.redraw();\n var _this = this,\n editorInstance = (this.renderer.isEditable() && _this.options.show_node_editor_description_richtext) ?\n CKEditor.inline(\"Rk-Edit-Description-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n editorInstanceTitle = (this.renderer.isEditable() && _this.options.show_node_editor_title_richtext) ?\n CKEditor.inline(\"Rk-Edit-Title-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n paper.view.draw();\n };\n\n _this.cleanEditor = function() {\n _this.editor_$.off(\"keyup\");\n _this.editor_$.find(\"input, textarea, select\").off(\"change keyup paste\");\n _this.editor_$.find(\".Rk-Edit-Image-File\").off('change');\n _this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").off('hover');\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n _this.editor_$.find(\".Rk-Edit-Image-Del\").off('click');\n _this.editor_$.find(\".Rk-Edit-ColorPicker\").find(\"li\").off('hover click');\n _this.editor_$.find(\".Rk-CloseX\").off('click');\n _this.editor_$.find(\".Rk-Edit-Goto\").off('click');\n\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance) {\n editorInstance.focusManager.blur(true);\n editorInstance.destroy();\n }\n }\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle) {\n editorInstanceTitle.focusManager.blur(true);\n editorInstanceTitle.destroy();\n }\n }\n };\n\n this.editor_$.find(\".Rk-CloseX\").click(function (e) {\n e.preventDefault();\n closeEditor();\n });\n\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {};\n if (_this.options.show_node_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n }\n if (_this.options.show_node_editor_image) {\n _data.image = _this.editor_$.find(\".Rk-Edit-Image\").val();\n _this.editor_$.find(\".Rk-Edit-ImgPreview\").attr(\"src\", _data.image || _image_placeholder);\n }\n if (_this.options.show_node_editor_description) {\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance &&\n editorInstance.checkDirty()) {\n _data.description = editorInstance.getData();\n editorInstance.resetDirty();\n }\n }\n else {\n _data.description = _this.editor_$.find(\".Rk-Edit-Description\").val();\n }\n }\n if (_this.options.show_node_editor_title) {\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle &&\n editorInstanceTitle.checkDirty()) {\n _data.title = editorInstanceTitle.getData();\n editorInstanceTitle.resetDirty();\n }\n }\n else {\n _data.title = _this.editor_$.find(\".Rk-Edit-Title\").val();\n }\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash});\n }\n if (_this.options.change_shapes) {\n if(_model.get(\"shape\")!==_this.editor_$.find(\".Rk-Edit-Shape\").val()){\n _data.shape = _this.editor_$.find(\".Rk-Edit-Shape\").val();\n }\n }\n if (_this.options.change_types) {\n if(_model.get(\"type\")!==_this.editor_$.find(\".Rk-Edit-Type\").val()){\n _data.type = _this.editor_$.find(\".Rk-Edit-Type\").val();\n }\n }\n _model.set(_data);\n _this.redraw();\n } else {\n closeEditor();\n }\n });\n }, 1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input, textarea, select\").on(\"change keyup paste\", onFieldChange);\n if( _this.options.show_node_editor_description &&\n _this.options.show_node_editor_description_richtext &&\n editorInstance)\n {\n editorInstance.on(\"change\", onFieldChange);\n editorInstance.on(\"blur\", onFieldChange);\n }\n\n if( _this.options.show_node_editor_title &&\n _this.options.show_node_editor_title_richtext &&\n editorInstanceTitle)\n {\n editorInstanceTitle.on(\"change\", onFieldChange);\n editorInstanceTitle.on(\"blur\", onFieldChange);\n }\n\n if(_this.options.allow_image_upload) {\n this.editor_$.find(\".Rk-Edit-Image-File\").change(function() {\n if (this.files.length) {\n var f = this.files[0],\n fr = new FileReader();\n if (f.type.substr(0,5) !== \"image\") {\n alert(_this.renkan.translate(\"This file is not an image\"));\n return;\n }\n if (f.size > (_this.options.uploaded_image_max_kb * 1024)) {\n alert(_this.renkan.translate(\"Image size must be under \") + _this.options.uploaded_image_max_kb + _this.renkan.translate(\"KB\"));\n return;\n }\n fr.onload = function(e) {\n _this.editor_$.find(\".Rk-Edit-Image\").val(e.target.result);\n onFieldChange();\n };\n fr.readAsDataURL(f);\n }\n });\n }\n this.editor_$.find(\".Rk-Edit-Title\")[0].focus();\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Node\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color) || (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n var shiftSize = function(n) {\n if (_this.renderer.isEditable()) {\n var _newsize = n+(_model.get(\"size\") || 0);\n _this.editor_$.find(\"#Rk-Edit-Size-Value\").text((_newsize > 0 ? \"+\" : \"\") + _newsize);\n _model.set(\"size\", _newsize);\n paper.view.draw();\n } else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Size-Down\").click(function() {\n shiftSize(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Size-Up\").click(function() {\n shiftSize(1);\n return false;\n });\n\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n\n var shiftTitleSize = function(n) {\n var min = _this.options.node_title_size_min;\n var max = _this.options.node_title_size_max;\n if (_this.renderer.isEditable()) {\n var _oldTitleSize = ((_model.has('style') && _model.get('style').title_size) || 1),\n _newTitleSize = n + _oldTitleSize;\n if(_newTitleSize < min ) {\n _newTitleSize = min;\n }\n else if (_newTitleSize > max) {\n _newTitleSize = max;\n }\n if (_newTitleSize !== _oldTitleSize) {\n _this.editor_$.find(\"#Rk-Edit-Title-Size-Value\").text(_newTitleSize.toFixed(1));\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_size: _newTitleSize}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n\n var _pickerTitle = _this.editor_$.find(\".Rk-Editor-ColorPicker-Title\");\n\n this.editor_$.find(\".Rk-Editor-p-title-color\").hover(\n function(_e) {\n _e.preventDefault();\n _pickerTitle.show();\n },\n function(_e) {\n _e.preventDefault();\n _pickerTitle.hide();\n }\n );\n\n _pickerTitle.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n var title_color = (_model.has(\"style\") && _model.get(\"style\").title_color) || _this.options.node_fill_color;\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", title_color);\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_color: $(this).attr(\"data-color\")}));\n _pickerTitle.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n\n this.editor_$.find(\"#Rk-Edit-Title-Size-Down\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(-step);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Title-Size-Up\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(step);\n return false;\n });\n\n this.editor_$.find(\".Rk-Edit-Image-Del\").click(function() {\n _this.editor_$.find(\".Rk-Edit-Image\").val('');\n onFieldChange();\n return false;\n });\n } else {\n if (typeof this.source_representation.highlighted === \"object\") {\n var titlehtml = this.source_representation.highlighted.replace(_(_model.get(\"title\")).escape(),'$1');\n this.editor_$.find(\".Rk-Display-Title\" + (_model.get(\"uri\") ? \" a\" : \"\")).html(titlehtml);\n if (this.options.show_node_tooltip_description) {\n this.editor_$.find(\".Rk-Display-Description\").html(this.source_representation.highlighted.replace(_(_model.get(\"description\")).escape(),'$1'));\n }\n }\n }\n this.editor_$.find(\"img\").load(function() {\n _this.redraw();\n });\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, this.source_representation.circle_radius * 0.75, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n },\n destroy: function() {\n if(typeof this.cleanEditor !== 'undefined') {\n this.cleanEditor();\n }\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* NodeEditor End */\n\n return NodeEditor;\n\n});\n\n\ndefine('renderer/edgeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor'], function ($, _, requtils, BaseEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditor Begin */\n\n //var EdgeEditor = Renderer.EdgeEditor = Utils.inherit(Renderer._BaseEditor);\n var EdgeEditor = Utils.inherit(BaseEditor);\n\n _(EdgeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/edgeeditor.html'];\n this.readOnlyTemplate = this.options.templates['templates/edgeeditor_readonly.html'];\n },\n draw: function() {\n var _model = this.source_representation.model,\n _from_model = _model.get(\"from\"),\n _to_model = _model.get(\"to\"),\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate);\n this.editor_$\n .html(_template({\n edge: {\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n arrow: (_model.has(\"style\") && _model.get(\"style\").arrow) || !_model.has(\"style\") || (typeof _model.get(\"style\").arrow === 'undefined') ? \"checked\" : \"\",\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n from_title: _from_model.get(\"title\"),\n to_title: _to_model.get(\"title\"),\n from_color: (_from_model.has(\"style\") && _from_model.get(\"style\").color) || (_from_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n to_color: (_to_model.has(\"style\") && _to_model.get(\"style\").color) || (_to_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\")\n },\n renkan: this.renkan,\n shortenText: Utils.shortenText,\n options: this.options\n }));\n this.redraw();\n var _this = this,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n paper.view.draw();\n };\n this.editor_$.find(\".Rk-CloseX\").click(closeEditor);\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {\n title: _this.editor_$.find(\".Rk-Edit-Title\").val()\n };\n if (_this.options.show_edge_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked'),\n arrow = _this.editor_$.find(\".Rk-Edit-Arrow\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash, arrow: arrow});\n }\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n _model.set(_data);\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n },1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input\").on(\"keyup change paste\", onFieldChange);\n\n this.editor_$.find(\".Rk-Edit-Vocabulary\").change(function() {\n var e = $(this),\n v = e.val();\n if (v) {\n _this.editor_$.find(\".Rk-Edit-Title\").val(e.find(\":selected\").text());\n _this.editor_$.find(\".Rk-Edit-URI\").val(v);\n onFieldChange();\n }\n });\n this.editor_$.find(\".Rk-Edit-Direction\").click(function() {\n if (_this.renderer.isEditable()) {\n _model.set({\n from: _model.get(\"to\"),\n to: _model.get(\"from\")\n });\n _this.draw();\n } else {\n closeEditor();\n }\n });\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Edge\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color)|| (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n }\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, 5, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n }\n }).value();\n\n /* EdgeEditor End */\n\n return EdgeEditor;\n\n});\n\n\ndefine('renderer/nodebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _NodeButton Begin */\n\n //var _NodeButton = Renderer._NodeButton = Utils.inherit(Renderer._BaseButton);\n var _NodeButton = Utils.inherit(BaseButton);\n\n _(_NodeButton.prototype).extend({\n setSectorSize: function() {\n var sectorInner = this.source_representation.circle_radius;\n if (sectorInner !== this.lastSectorInner) {\n if (this.sector) {\n this.sector.destroy();\n }\n this.sector = this.renderer.drawSector(\n this, 1 + sectorInner,\n Utils._NODE_BUTTON_WIDTH + sectorInner,\n this.startAngle,\n this.endAngle,\n 1,\n this.imageName,\n this.renkan.translate(this.text)\n );\n this.lastSectorInner = sectorInner;\n }\n },\n unselect: function() {\n BaseButton.prototype.unselect.apply(this, Array.prototype.slice.call(arguments, 1));\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n this.source_representation.hideButtons();\n }\n },\n select: function() {\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n }\n this.sector.select();\n },\n }).value();\n\n\n /* _NodeButton End */\n\n return _NodeButton;\n\n});\n\n\ndefine('renderer/nodeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditButton Begin */\n\n //var NodeEditButton = Renderer.NodeEditButton = Utils.inherit(Renderer._NodeButton);\n var NodeEditButton = Utils.inherit(NodeButton);\n\n _(NodeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Node-edit-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -125 : -135;\n this.endAngle = this.options.hide_nodes ? -55 : -45;\n this.imageName = \"edit\";\n this.text = \"Edit\";\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* NodeEditButton End */\n\n return NodeEditButton;\n\n});\n\n\ndefine('renderer/noderemovebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeRemoveButton = Utils.inherit(NodeButton);\n\n _(NodeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Node-remove-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -10 : 0;\n this.endAngle = this.options.hide_nodes ? 45 : 90;\n this.imageName = \"remove\";\n this.text = \"Remove\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove node ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeNode(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeRemoveButton;\n\n});\n\n\ndefine('renderer/nodehidebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeHideButton = Utils.inherit(NodeButton);\n\n _(NodeHideButton.prototype).extend({\n _init: function() {\n this.type = \"Node-hide-button\";\n this.lastSectorInner = 0;\n this.startAngle = 45;\n this.endAngle = 90;\n this.imageName = \"hide\";\n this.text = \"Hide\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.renderer.view.addHiddenNode(this.source_representation.model);\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeHideButton;\n\n});\n\n\ndefine('renderer/nodeshowbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeShowButton = Utils.inherit(NodeButton);\n\n _(NodeShowButton.prototype).extend({\n _init: function() {\n this.type = \"Node-show-button\";\n this.lastSectorInner = 0;\n this.startAngle = 90;\n this.endAngle = 135;\n this.imageName = \"show\";\n this.text = \"Show neighbors\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.source_representation.showNeighbors(false);\n }\n }\n }).value();\n\n /* NodeShowButton End */\n\n return NodeShowButton;\n\n});\n\n\ndefine('renderer/noderevertbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRevertButton Begin */\n\n //var NodeRevertButton = Renderer.NodeRevertButton = Utils.inherit(Renderer._NodeButton);\n var NodeRevertButton = Utils.inherit(NodeButton);\n\n _(NodeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Node-revert-button\";\n this.lastSectorInner = 0;\n this.startAngle = -135;\n this.endAngle = 135;\n this.imageName = \"revert\";\n this.text = \"Cancel deletion\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* NodeRevertButton End */\n\n return NodeRevertButton;\n\n});\n\n\ndefine('renderer/nodelinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeLinkButton Begin */\n\n //var NodeLinkButton = Renderer.NodeLinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeLinkButton = Utils.inherit(NodeButton);\n\n _(NodeLinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-link-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? 135 : 90;\n this.endAngle = this.options.hide_nodes ? 190 : 180;\n this.imageName = \"link\";\n this.text = \"Link to another node\";\n },\n mousedown: function(_event, _isTouch) {\n if (this.renderer.isEditable()) {\n var _off = this.renderer.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.renderer.click_target = null;\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.renderer.addTempEdge(this.source_representation, _point, Utils.OriginEnum.EDGE_BUTTON_CIRCLE);\n }\n }\n }).value();\n\n /* NodeLinkButton End */\n\n return NodeLinkButton;\n\n});\n\n\n\ndefine('renderer/nodeenlargebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEnlargeButton Begin */\n\n //var NodeEnlargeButton = Renderer.NodeEnlargeButton = Utils.inherit(Renderer._NodeButton);\n var NodeEnlargeButton = Utils.inherit(NodeButton);\n\n _(NodeEnlargeButton.prototype).extend({\n _init: function() {\n this.type = \"Node-enlarge-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -55 : -45;\n this.endAngle = this.options.hide_nodes ? -10 : 0;\n this.imageName = \"enlarge\";\n this.text = \"Enlarge\";\n },\n mouseup: function() {\n var _newsize = 1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeEnlargeButton End */\n\n return NodeEnlargeButton;\n\n});\n\n\ndefine('renderer/nodeshrinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeShrinkButton Begin */\n\n //var NodeShrinkButton = Renderer.NodeShrinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeShrinkButton = Utils.inherit(NodeButton);\n\n _(NodeShrinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-shrink-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -170 : -180;\n this.endAngle = this.options.hide_nodes ? -125 : -135;\n this.imageName = \"shrink\";\n this.text = \"Shrink\";\n },\n mouseup: function() {\n var _newsize = -1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeShrinkButton End */\n\n return NodeShrinkButton;\n\n});\n\n\ndefine('renderer/edgeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditButton Begin */\n\n //var EdgeEditButton = Renderer.EdgeEditButton = Utils.inherit(Renderer._BaseButton);\n var EdgeEditButton = Utils.inherit(BaseButton);\n\n _(EdgeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-edit-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -270, -90, 1, \"edit\", this.renkan.translate(\"Edit\"));\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* EdgeEditButton End */\n\n return EdgeEditButton;\n\n});\n\n\ndefine('renderer/edgeremovebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRemoveButton Begin */\n\n //var EdgeRemoveButton = Renderer.EdgeRemoveButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRemoveButton = Utils.inherit(BaseButton);\n\n _(EdgeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-remove-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -90, 90, 1, \"remove\", this.renkan.translate(\"Remove\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove edge ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeEdge(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* EdgeRemoveButton End */\n\n return EdgeRemoveButton;\n\n});\n\n\ndefine('renderer/edgerevertbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRevertButton Begin */\n\n //var EdgeRevertButton = Renderer.EdgeRevertButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRevertButton = Utils.inherit(BaseButton);\n\n _(EdgeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-revert-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -135, 135, 1, \"revert\", this.renkan.translate(\"Cancel deletion\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* EdgeRevertButton End */\n\n return EdgeRevertButton;\n\n});\n\n\ndefine('renderer/miniframe',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* MiniFrame Begin */\n\n //var MiniFrame = Renderer.MiniFrame = Utils.inherit(Renderer._BaseRepresentation);\n var MiniFrame = Utils.inherit(BaseRepresentation);\n\n _(MiniFrame.prototype).extend({\n paperShift: function(_delta) {\n this.renderer.offset = this.renderer.offset.subtract(_delta.divide(this.renderer.minimap.scale).multiply(this.renderer.scale));\n this.renderer.redraw();\n },\n mouseup: function(_delta) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n }\n }).value();\n\n\n /* MiniFrame End */\n\n return MiniFrame;\n\n});\n\n\ndefine('renderer/scene',['jquery', 'underscore', 'filesaver', 'requtils', 'renderer/miniframe', 'screenfull'], function ($, _, filesaver, requtils, MiniFrame, Screenfull) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Scene Begin */\n\n var Scene = function(_renkan) {\n this.renkan = _renkan;\n this.$ = $(\".Rk-Render\");\n this.representations = [];\n this.$.html(_renkan.options.templates['templates/scene.html'](_renkan));\n this.onStatusChange();\n this.canvas_$ = this.$.find(\".Rk-Canvas\");\n this.labels_$ = this.$.find(\".Rk-Labels\");\n if (!_renkan.options.popup_editor){\n this.editor_$ = $(\"#\" + _renkan.options.editor_panel);\n }else{\n this.editor_$ = this.$.find(\".Rk-Editor\");\n }\n this.notif_$ = this.$.find(\".Rk-Notifications\");\n paper.setup(this.canvas_$[0]);\n this.totalScroll = 0;\n this.mouse_down = false;\n this.click_target = null;\n this.selected_target = null;\n this.edge_layer = new paper.Layer();\n this.node_layer = new paper.Layer();\n this.buttons_layer = new paper.Layer();\n this.delete_list = [];\n this.redrawActive = false;\n\n if (_renkan.options.show_minimap) {\n this.minimap = {\n background_layer: new paper.Layer(),\n edge_layer: new paper.Layer(),\n node_layer: new paper.Layer(),\n node_group: new paper.Group(),\n size: new paper.Size( _renkan.options.minimap_width, _renkan.options.minimap_height )\n };\n\n this.minimap.background_layer.activate();\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle = new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.rectangle.fillColor = _renkan.options.minimap_background_color;\n this.minimap.rectangle.strokeColor = _renkan.options.minimap_border_color;\n this.minimap.rectangle.strokeWidth = 4;\n this.minimap.offset = new paper.Point(this.minimap.size.divide(2));\n this.minimap.scale = 0.1;\n\n this.minimap.node_layer.activate();\n this.minimap.cliprectangle = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.cliprectangle);\n this.minimap.node_group.clipped = true;\n this.minimap.miniframe = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.miniframe);\n this.minimap.miniframe.fillColor = '#c0c0ff';\n this.minimap.miniframe.opacity = 0.3;\n this.minimap.miniframe.strokeColor = '#000080';\n this.minimap.miniframe.strokeWidth = 2;\n this.minimap.miniframe.__representation = new MiniFrame(this, null);\n }\n\n this.throttledPaperDraw = _(function() {\n paper.view.draw();\n }).throttle(100).value();\n\n this.bundles = [];\n this.click_mode = false;\n\n var _this = this,\n _allowScroll = true,\n _originalScale = 1,\n _zooming = false,\n _lastTapX = 0,\n _lastTapY = 0,\n _lastTap = 0;\n\n this.image_cache = {};\n this.icon_cache = {};\n\n ['edit', 'remove', 'hide', 'show', 'link', 'enlarge', 'shrink', 'revert' ].forEach(function(imgname) {\n var img = new Image();\n img.src = _renkan.options.static_url + 'img/' + imgname + '.png';\n _this.icon_cache[imgname] = img;\n });\n\n var throttledMouseMove = _.throttle(function(_event, _isTouch) {\n _this.onMouseMove(_event, _isTouch);\n }, Utils._MOUSEMOVE_RATE);\n\n this.canvas_$.on({\n mousedown: function(_event) {\n _event.preventDefault();\n _this.onMouseDown(_event, false);\n },\n mousemove: function(_event) {\n _event.preventDefault();\n throttledMouseMove(_event, false);\n },\n mouseup: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event, false);\n },\n mousewheel: function(_event, _delta) {\n if(_renkan.options.zoom_on_scroll) {\n _event.preventDefault();\n if (_allowScroll) {\n _this.onScroll(_event, _delta);\n }\n }\n },\n touchstart: function(_event) {\n _event.preventDefault();\n var _touches = _event.originalEvent.touches[0];\n if (\n _renkan.options.allow_double_click &&\n new Date() - _lastTap < Utils._DOUBLETAP_DELAY &&\n ( Math.pow(_lastTapX - _touches.pageX, 2) + Math.pow(_lastTapY - _touches.pageY, 2) < Utils._DOUBLETAP_DISTANCE )\n ) {\n _lastTap = 0;\n _this.onDoubleClick(_touches);\n } else {\n _lastTap = new Date();\n _lastTapX = _touches.pageX;\n _lastTapY = _touches.pageY;\n _originalScale = _this.view.scale;\n _zooming = false;\n _this.onMouseDown(_touches, true);\n }\n },\n touchmove: function(_event) {\n _event.preventDefault();\n _lastTap = 0;\n if (_event.originalEvent.touches.length === 1) {\n _this.onMouseMove(_event.originalEvent.touches[0], true);\n } else {\n if (!_zooming) {\n _this.onMouseUp(_event.originalEvent.touches[0], true);\n _this.click_target = null;\n _this.is_dragging = false;\n _zooming = true;\n }\n if (_event.originalEvent.scale === \"undefined\") {\n return;\n }\n var _newScale = _event.originalEvent.scale * _originalScale,\n _scaleRatio = _newScale / _this.view.scale,\n _newOffset = new paper.Point([\n _this.canvas_$.width(),\n _this.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - _scaleRatio ) ).add(_this.view.offset.multiply( _scaleRatio ));\n _this.view.setScale(_newScale, _newOffset);\n }\n },\n touchend: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event.originalEvent.changedTouches[0], true);\n },\n click: function(_event) {\n _event.preventDefault();\n _this.onClick(_event);\n },\n dblclick: function(_event) {\n _event.preventDefault();\n if (_renkan.options.allow_double_click) {\n _this.onDoubleClick(_event);\n }\n },\n mouseleave: function(_event) {\n _event.preventDefault();\n //_this.onMouseUp(_event, false);\n _this.click_target = null;\n _this.is_dragging = false;\n },\n dragover: function(_event) {\n _event.preventDefault();\n },\n dragenter: function(_event) {\n _event.preventDefault();\n _allowScroll = false;\n },\n dragleave: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n },\n drop: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n var res = {};\n _.each(_event.originalEvent.dataTransfer.types, function(t) {\n try {\n res[t] = _event.originalEvent.dataTransfer.getData(t);\n } catch(e) {}\n });\n var text = _event.originalEvent.dataTransfer.getData(\"Text\");\n if (typeof text === \"string\") {\n switch(text[0]) {\n case \"{\":\n case \"[\":\n try {\n var data = JSON.parse(text);\n _.extend(res,data);\n }\n catch(e) {\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n break;\n case \"<\":\n if (!res[\"text/html\"]) {\n res[\"text/html\"] = text;\n }\n break;\n default:\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n }\n var url = _event.originalEvent.dataTransfer.getData(\"URL\");\n if (url && !res[\"text/uri-list\"]) {\n res[\"text/uri-list\"] = url;\n }\n _this.dropData(res, _event.originalEvent);\n }\n });\n\n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n\n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n this.$.find(\".Rk-CurrentUser\").mouseenter(\n function() { _this.$.find(\".Rk-UserList\").slideDown(); }\n );\n this.$.find(\".Rk-Users\").mouseleave(\n function() { _this.$.find(\".Rk-UserList\").slideUp(); }\n );\n\n if (Screenfull.enabled){\n bindClick(\".Rk-FullScreen-Button\", \"fullScreen\");\n\n document.addEventListener(Screenfull.raw.fullscreenchange, function () {\n //the listener occur too randomly and sometimes before the fullscreen is fully set up\n //so we add 500 delay\n setTimeout(function(){\n var widthAft = _this.$.width();\n var heightAft = _this.$.height();\n\n if (_this.renkan.options.show_top_bar) {\n heightAft -= _this.$.find(\".Rk-TopBar\").height();\n }\n if (_this.renkan.options.show_bins && (this.renkan.$.find(\".Rk-Bins\").position().left > 0)) {\n widthAft -= this.renkan.$.find(\".Rk-Bins\").width();\n }\n\n paper.view.viewSize = new paper.Size([widthAft, heightAft]);\n _this.resize(_this.currentWidth, widthAft, _this.currentHeight, heightAft);\n\n _this.currentWidth = widthAft;\n _this.currentHeight = heightAft;\n\n if (!Screenfull.isFullscreen) {\n paper.view.onResize = function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n };\n }\n }, 600);\n });\n } else {\n this.$.find(\".Rk-FullScreen-Button\").addClass(\"disabled\");\n this.$.find(\".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents\").html(this.renkan.translate(\"Fullscreen not supported by your browser\"));\n }\n\n bindClick(\".Rk-AddNode-Button\", \"addNodeBtn\");\n bindClick(\".Rk-AddEdge-Button\", \"addEdgeBtn\");\n bindClick(\".Rk-Save-Button\", \"save\");\n bindClick(\".Rk-Open-Button\", \"open\");\n bindClick(\".Rk-Export-Button\", \"exportProject\");\n this.$.find(\".Rk-Bookmarklet-Button\")\n /*jshint scripturl:true */\n .attr(\"href\",\"javascript:\" + Utils._BOOKMARKLET_CODE(_renkan))\n .click(function(){\n _this.notif_$\n .text(_renkan.translate(\"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\"))\n .fadeIn()\n .delay(5000)\n .fadeOut();\n return false;\n });\n this.$.find(\".Rk-TopBar-Button\").mouseover(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").show();\n }).mouseout(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").hide();\n });\n bindClick(\".Rk-Fold-Bins\", \"foldBins\");\n\n paper.view.on(\"resize\", function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n });\n\n var _thRedraw = _.throttle(function() {\n _this.redraw();\n },50);\n\n this.addRepresentations(\"Node\", this.renkan.project.get(\"nodes\"));\n this.addRepresentations(\"Edge\", this.renkan.project.get(\"edges\"));\n this.renkan.project.on(\"change:title\", function() {\n _this.$.find(\".Rk-PadTitle\").val(_renkan.project.get(\"title\")).prop('title', _renkan.project.get(\"title\"));\n });\n\n this.$.find(\".Rk-PadTitle\").on(\"keyup input paste\", function() {\n _renkan.project.set({\"title\": $(this).val()});\n });\n\n var _thRedrawUsers = _.throttle(function() {\n _this.redrawUsers();\n }, 100);\n\n _thRedrawUsers();\n\n // register model events\n this.renkan.project.on(\"change:saveStatus\", function(){\n switch (_this.renkan.project.get(\"saveStatus\")) {\n case 0: //clean\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saved\");\n break;\n case 1: //dirty\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"to-save\");\n break;\n case 2: //saving\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saving\");\n break;\n }\n });\n\n this.renkan.project.on(\"loaded\", function(){\n if (_this.renkan.options.url_parameters){\n Backbone.history.start();\n } else {\n _this.fixSize();\n }\n _this.redrawActive = true;\n _thRedraw();\n });\n\n //register router events\n this.renkan.router.on(\"router\", function(_params){\n _this.setViewParameters(_params);\n });\n\n this.renkan.project.on(\"change:loadingStatus\", function(){\n if (_this.renkan.project.get(\"loadingStatus\")){\n var animate = _this.$.find(\".loader\").addClass(\"run\");\n var timer = setTimeout(function(){\n _this.$.find(\".loader\").hide(250);\n }, 3000);\n }\n });\n\n this.renkan.project.on(\"add:users remove:users\", _thRedrawUsers);\n\n this.renkan.project.on(\"add:views remove:views\", function(_node) {\n if(_this.renkan.project.get('views').length > 1) {\n _this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n else {\n _this.$.find(\".Rk-ZoomSetSaved\").hide();\n }\n });\n\n this.renkan.project.on(\"add:nodes\", function(_node) {\n _this.addRepresentation(\"Node\", _node);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"add:edges\", function(_edge) {\n _this.addRepresentation(\"Edge\", _edge);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"change:title\", function(_model, _title) {\n var el = _this.$.find(\".Rk-PadTitle\");\n if (el.is(\"input\")) {\n if (el.val() !== _title) {\n el.val(_title);\n }\n } else {\n el.text(_title);\n }\n });\n\n if (_renkan.options.size_bug_fix) {\n var _delay = (\n typeof _renkan.options.size_bug_fix === \"number\" ?\n _renkan.options.size_bug_fix\n : 500\n );\n window.setTimeout(\n function() {\n _this.fixSize();\n },\n _delay\n );\n }\n\n if (_renkan.options.force_resize) {\n $(window).resize(function() {\n _this.autoScale();\n });\n }\n\n if (_renkan.options.show_user_list && _renkan.options.user_color_editable) {\n var $cpwrapper = this.$.find(\".Rk-Users .Rk-Edit-ColorPicker-Wrapper\"),\n $cplist = this.$.find(\".Rk-Users .Rk-Editor-ColorPicker-User\");\n\n $cpwrapper.hover(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n $cplist.show();\n }\n },\n function(_e) {\n _e.preventDefault();\n $cplist.hide();\n }\n );\n\n $cplist.find(\"li\").mouseenter(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n _this.$.find(\".Rk-CurrentUser-Color\").css(\"background\", $(this).attr(\"data-color\"));\n }\n }\n );\n }\n\n if (_renkan.options.show_search_field) {\n\n var lastval = '';\n\n this.$.find(\".Rk-GraphSearch-Field\").on(\"keyup change paste input\", function() {\n var $this = $(this),\n val = $this.val();\n if (val === lastval) {\n return;\n }\n lastval = val;\n if (val.length < 2) {\n _renkan.project.get(\"nodes\").each(function(n) {\n _this.getRepresentationByModel(n).unhighlight();\n });\n _renkan.project.get(\"edges\").each(function(e) {\n _this.getRepresentationByModel(e).unhighlight();\n });\n } else {\n var rxs = Utils.regexpFromTextOrArray(val);\n _renkan.project.get(\"nodes\").each(function(n) {\n if (n.id === val || rxs.test(n.get(\"title\")) || rxs.test(n.get(\"description\"))) {\n _this.getRepresentationByModel(n).highlight(rxs);\n } else {\n _this.getRepresentationByModel(n).unhighlight();\n }\n });\n _renkan.project.get(\"edges\").each(function(e) {\n if (e.id === val || rxs.test(e.get(\"title\")) || rxs.test(e.get(\"description\"))) {\n _this.getRepresentationByModel(e).highlight(rxs);\n } else {\n _this.getRepresentationByModel(e).unhighlight();\n }\n });\n\n }\n });\n }\n\n this.redraw();\n\n window.setInterval(function() {\n var _now = new Date().valueOf();\n _this.delete_list.forEach(function(d) {\n if (_now >= d.time) {\n var el = _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeNode(el);\n }\n el = _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeEdge(el);\n }\n }\n });\n _this.delete_list = _this.delete_list.filter(function(d) {\n return _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id}) || _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n });\n }, 500);\n\n if (this.minimap) {\n window.setInterval(function() {\n _this.rescaleMinimap();\n }, 2000);\n }\n\n };\n\n _(Scene.prototype).extend({\n fixSize: function() {\n if(typeof this.view === 'undefined') {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").last());\n }\n this.view.autoScale();\n },\n drawSector: function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgname, _caption) {\n var _options = this.renkan.options,\n _startRads = _startAngle * Math.PI / 180,\n _endRads = _endAngle * Math.PI / 180,\n _img = this.icon_cache[_imgname],\n _startdx = - Math.sin(_startRads),\n _startdy = Math.cos(_startRads),\n _startXIn = Math.cos(_startRads) * _inR + _padding * _startdx,\n _startYIn = Math.sin(_startRads) * _inR + _padding * _startdy,\n _startXOut = Math.cos(_startRads) * _outR + _padding * _startdx,\n _startYOut = Math.sin(_startRads) * _outR + _padding * _startdy,\n _enddx = - Math.sin(_endRads),\n _enddy = Math.cos(_endRads),\n _endXIn = Math.cos(_endRads) * _inR - _padding * _enddx,\n _endYIn = Math.sin(_endRads) * _inR - _padding * _enddy,\n _endXOut = Math.cos(_endRads) * _outR - _padding * _enddx,\n _endYOut = Math.sin(_endRads) * _outR - _padding * _enddy,\n _centerR = (_inR + _outR) / 2,\n _centerRads = (_startRads + _endRads) / 2,\n _centerX = Math.cos(_centerRads) * _centerR,\n _centerY = Math.sin(_centerRads) * _centerR,\n _centerXIn = Math.cos(_centerRads) * _inR,\n _centerXOut = Math.cos(_centerRads) * _outR,\n _centerYIn = Math.sin(_centerRads) * _inR,\n _centerYOut = Math.sin(_centerRads) * _outR,\n _textX = Math.cos(_centerRads) * (_outR + 3),\n _textY = Math.sin(_centerRads) * (_outR + _options.buttons_label_font_size) + _options.buttons_label_font_size / 2;\n this.buttons_layer.activate();\n var _path = new paper.Path();\n _path.add([_startXIn, _startYIn]);\n _path.arcTo([_centerXIn, _centerYIn], [_endXIn, _endYIn]);\n _path.lineTo([_endXOut, _endYOut]);\n _path.arcTo([_centerXOut, _centerYOut], [_startXOut, _startYOut]);\n _path.fillColor = _options.buttons_background;\n _path.opacity = 0.5;\n _path.closed = true;\n _path.__representation = _repr;\n var _text = new paper.PointText(_textX,_textY);\n _text.characterStyle = {\n fontSize: _options.buttons_label_font_size,\n fillColor: _options.buttons_label_color\n };\n if (_textX > 2) {\n _text.paragraphStyle.justification = 'left';\n } else if (_textX < -2) {\n _text.paragraphStyle.justification = 'right';\n } else {\n _text.paragraphStyle.justification = 'center';\n }\n _text.visible = false;\n var _visible = false,\n _restPos = new paper.Point(-200, -200),\n _grp = new paper.Group([_path, _text]),\n //_grp = new paper.Group([_path]),\n _delta = _grp.position,\n _imgdelta = new paper.Point([_centerX, _centerY]),\n _currentPos = new paper.Point(0,0);\n _text.content = _caption;\n // set group pivot to not depend on text visibility that changes the group bounding box.\n _grp.pivot = _grp.bounds.center;\n _grp.visible = false;\n _grp.position = _restPos;\n var _res = {\n show: function() {\n _visible = true;\n _grp.position = _currentPos.add(_delta);\n _grp.visible = true;\n },\n moveTo: function(_point) {\n _currentPos = _point;\n if (_visible) {\n _grp.position = _point.add(_delta);\n }\n },\n hide: function() {\n _visible = false;\n _grp.visible = false;\n _grp.position = _restPos;\n },\n select: function() {\n _path.opacity = 0.8;\n _text.visible = true;\n },\n unselect: function() {\n _path.opacity = 0.5;\n _text.visible = false;\n },\n destroy: function() {\n _grp.remove();\n }\n };\n var showImage = function() {\n var _raster = new paper.Raster(_img);\n _raster.position = _imgdelta.add(_grp.position).subtract(_delta);\n _raster.locked = true; // Disable mouse events on icon\n _grp.addChild(_raster);\n };\n if (_img.width) {\n showImage();\n } else {\n $(_img).on(\"load\",showImage);\n }\n\n return _res;\n },\n addToBundles: function(_edgeRepr) {\n var _bundle = _(this.bundles).find(function(_bundle) {\n return (\n ( _bundle.from === _edgeRepr.from_representation && _bundle.to === _edgeRepr.to_representation ) ||\n ( _bundle.from === _edgeRepr.to_representation && _bundle.to === _edgeRepr.from_representation )\n );\n });\n if (typeof _bundle !== \"undefined\") {\n _bundle.edges.push(_edgeRepr);\n } else {\n _bundle = {\n from: _edgeRepr.from_representation,\n to: _edgeRepr.to_representation,\n edges: [ _edgeRepr ],\n getPosition: function(_er) {\n var _dir = (_er.from_representation === this.from) ? 1 : -1;\n return _dir * ( _(this.edges).indexOf(_er) - (this.edges.length - 1) / 2 );\n }\n };\n this.bundles.push(_bundle);\n }\n return _bundle;\n },\n isEditable: function() {\n return (this.renkan.options.editor_mode && !this.renkan.read_only);\n },\n onStatusChange: function() {\n var savebtn = this.$.find(\".Rk-Save-Button\"),\n tip = savebtn.find(\".Rk-TopBar-Tooltip-Contents\");\n if (this.renkan.read_only) {\n savebtn.removeClass(\"disabled Rk-Save-Online\").addClass(\"Rk-Save-ReadOnly\");\n tip.text(this.renkan.translate(\"Connection lost\"));\n } else {\n if (this.renkan.options.manual_save) {\n savebtn.removeClass(\"Rk-Save-ReadOnly Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Save Project\"));\n } else {\n savebtn.removeClass(\"disabled Rk-Save-ReadOnly\").addClass(\"Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Auto-save enabled\"));\n }\n }\n this.redrawUsers();\n },\n redrawMiniframe: function() {\n var topleft = this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),\n bottomright = this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));\n this.minimap.miniframe.fitBounds(topleft, bottomright);\n },\n rescaleMinimap: function() {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min(\n this.view.scale * 0.8 * this.renkan.options.minimap_width / paper.view.bounds.width,\n this.view.scale * 0.8 * this.renkan.options.minimap_height / paper.view.bounds.height,\n ( this.renkan.options.minimap_width - 2 * this.renkan.options.minimap_padding ) / (_maxx - _minx),\n ( this.renkan.options.minimap_height - 2 * this.renkan.options.minimap_padding ) / (_maxy - _miny)\n );\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale));\n this.minimap.scale = _scale;\n }\n if (nodes.length === 1) {\n this.minimap.scale = 0.1;\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y]).multiply(this.minimap.scale));\n }\n this.redraw();\n },\n toPaperCoords: function(_point) {\n return _point.multiply(this.view.scale).add(this.view.offset);\n },\n toMinimapCoords: function(_point) {\n return _point.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft);\n },\n toModelCoords: function(_point) {\n return _point.subtract(this.view.offset).divide(this.view.scale);\n },\n addRepresentation: function(_type, _model) {\n var RendererType = requtils.getRenderer()[_type];\n var _repr = new RendererType(this, _model);\n this.representations.push(_repr);\n return _repr;\n },\n addRepresentations: function(_type, _collection) {\n var _this = this;\n _collection.forEach(function(_model) {\n _this.addRepresentation(_type, _model);\n });\n },\n userTemplate: _.template(\n '
                    • ;\"><%=name%>
                    • '\n ),\n redrawUsers: function() {\n if (!this.renkan.options.show_user_list) {\n return;\n }\n var allUsers = [].concat((this.renkan.project.current_user_list || {}).models || [], (this.renkan.project.get(\"users\") || {}).models || []),\n ulistHtml = '',\n $userpanel = this.$.find(\".Rk-Users\"),\n $name = $userpanel.find(\".Rk-CurrentUser-Name\"),\n $cpitems = $userpanel.find(\".Rk-Edit-ColorPicker li\"),\n $colorsquare = $userpanel.find(\".Rk-CurrentUser-Color\"),\n _this = this;\n $name.off(\"click\").text(this.renkan.translate(\"\"));\n $cpitems.off(\"mouseleave click\");\n allUsers.forEach(function(_user) {\n if (_user.get(\"_id\") === _this.renkan.current_user) {\n $name.text(_user.get(\"title\"));\n $colorsquare.css(\"background\", _user.get(\"color\"));\n if (_this.isEditable()) {\n\n if (_this.renkan.options.user_name_editable) {\n $name.click(function() {\n var $this = $(this),\n $input = $('').val(_user.get(\"title\")).blur(function() {\n _user.set(\"title\", $(this).val());\n _this.redrawUsers();\n _this.redraw();\n });\n $this.empty().html($input);\n $input.select();\n });\n }\n\n if (_this.renkan.options.user_color_editable) {\n $cpitems.click(\n function(_e) {\n _e.preventDefault();\n if (_this.isEditable()) {\n _user.set(\"color\", $(this).attr(\"data-color\"));\n }\n $(this).parent().hide();\n }\n ).mouseleave(function() {\n $colorsquare.css(\"background\", _user.get(\"color\"));\n });\n }\n }\n\n } else {\n ulistHtml += _this.userTemplate({\n name: _user.get(\"title\"),\n background: _user.get(\"color\")\n });\n }\n });\n $userpanel.find(\".Rk-UserList\").html(ulistHtml);\n },\n removeRepresentation: function(_representation) {\n _representation.destroy();\n this.representations = _.reject(this.representations,\n function(_repr) {\n return _repr === _representation;\n }\n );\n },\n getRepresentationByModel: function(_model) {\n if (!_model) {\n return undefined;\n }\n return _.find(this.representations, function(_repr) {\n return _repr.model === _model;\n });\n },\n removeRepresentationsOfType: function(_type) {\n var _representations = _.filter(this.representations,function(_repr) {\n return _repr.type === _type;\n }),\n _this = this;\n _.each(_representations, function(_repr) {\n _this.removeRepresentation(_repr);\n });\n },\n highlightModel: function(_model) {\n var _repr = this.getRepresentationByModel(_model);\n if (_repr) {\n _repr.highlight();\n }\n },\n unhighlightAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unhighlight();\n });\n },\n unselectAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unselect();\n });\n },\n redraw: function() {\n var _this = this;\n if(! this.redrawActive ) {\n return;\n }\n _.each(this.representations, function(_representation) {\n _representation.redraw({ dontRedrawEdges:true });\n });\n if (this.minimap && typeof this.view !== 'undefined') {\n this.redrawMiniframe();\n }\n paper.view.draw();\n },\n resize: function(prevWidth, newWidth, prevHeight, newHeight){\n var _ratio;\n\n if (this.minimap) {\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.cliprectangle.fitBounds(this.minimap.topleft, this.minimap.size);\n }\n\n var ratioH = newHeight/prevHeight,\n ratioW = newWidth/prevWidth;\n if (newHeight < newWidth) {\n _ratio = ratioH;\n } else {\n _ratio = ratioW;\n }\n this.view.resizeZoom(newWidth - prevWidth, newHeight - prevHeight, _ratio);\n\n this.redraw();\n },\n addTempEdge: function(_from, _point, _origin) {\n var _tmpEdge = this.addRepresentation(\"TempEdge\",null);\n _tmpEdge.end_pos = _point;\n _tmpEdge.from_representation = _from;\n _tmpEdge.origin = _origin;\n _tmpEdge.redraw();\n this.click_target = _tmpEdge;\n },\n findTarget: function(_hitResult) {\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _newTarget = _hitResult.item.__representation;\n if (this.selected_target !== _hitResult.item.__representation) {\n if (this.selected_target) {\n this.selected_target.unselect(_newTarget);\n }\n _newTarget.select(this.selected_target);\n this.selected_target = _newTarget;\n }\n } else {\n if (this.selected_target) {\n this.selected_target.unselect();\n }\n this.selected_target = null;\n }\n },\n onMouseMove: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _delta = _point.subtract(this.last_point);\n this.last_point = _point;\n if (!this.is_dragging && this.mouse_down && _delta.length > Utils._MIN_DRAG_DISTANCE) {\n this.is_dragging = true;\n }\n var _hitResult = paper.project.hitTest(_point);\n if (this.is_dragging) {\n if (this.click_target && typeof this.click_target.paperShift === \"function\") {\n this.click_target.paperShift(_delta);\n } else {\n this.view.paperShift(_delta);\n }\n } else {\n this.findTarget(_hitResult);\n }\n paper.view.draw();\n },\n onMouseDown: function(_event, _isTouch) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.last_point = _point;\n this.mouse_down = true;\n if (!this.click_target || this.click_target.type !== \"Temp-edge\") {\n this.removeRepresentationsOfType(\"editor\");\n this.is_dragging = false;\n var _hitResult = paper.project.hitTest(_point);\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n this.click_target = _hitResult.item.__representation;\n this.click_target.mousedown(_event, _isTouch);\n } else {\n this.click_target = null;\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_ADDNODE) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_BUTTON\n };\n var _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n }\n }\n if (this.click_mode) {\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === \"Node\") {\n this.removeRepresentationsOfType(\"editor\");\n this.addTempEdge(this.click_target, _point, Utils.OriginEnum.EDGE_BUTTON_BAR);\n this.click_mode = Utils._CLICKMODE_ENDEDGE;\n this.notif_$.fadeOut(function() {\n $(this).html(this.renkan.translate(\"Click on a second node to complete the edge\")).fadeIn();\n });\n } else {\n this.notif_$.hide();\n this.click_mode = false;\n }\n }\n paper.view.draw();\n },\n onMouseUp: function(_event, _isTouch) {\n this.mouse_down = false;\n if (this.click_target) {\n var _off = this.canvas_$.offset();\n this.click_target.mouseup(\n {\n point: new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ])\n },\n _isTouch\n );\n } else {\n this.click_target = null;\n this.is_dragging = false;\n if (_isTouch) {\n this.unselectAll();\n }\n this.view.updateUrl();\n }\n paper.view.draw();\n },\n onScroll: function(_event, _scrolldelta) {\n this.totalScroll += _scrolldelta;\n if (Math.abs(this.totalScroll) >= 1) {\n var _off = this.canvas_$.offset(),\n _delta = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]).subtract(this.view.offset).multiply( Math.SQRT2 - 1 );\n if (this.totalScroll > 0) {\n this.view.setScale( this.view.scale * Math.SQRT2, this.view.offset.subtract(_delta) );\n } else {\n this.view.setScale( this.view.scale * Math.SQRT1_2, this.view.offset.add(_delta.divide(Math.SQRT2)));\n }\n this.totalScroll = 0;\n }\n },\n onClick: function(_event) {\n if (!this.isEditable()) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n if(!this._open_uri_cb &&\n this.renkan.options.simple_click_open_url && \n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n this._node_click_open_url = setTimeout(function() {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n this._node_click_open_url = null;\n }.bind(this), 200);\n }\n }\n },\n onDoubleClick: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n\n if (!this.isEditable()) {\n if (this.renkan.options.double_click_open_url &&\n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n }\n return;\n }\n if (this.isEditable() && (!_hitResult || typeof _hitResult.item.__representation === \"undefined\")) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_DOUBLE_CLICK\n },\n _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n paper.view.draw();\n },\n defaultDropHandler: function(_data) {\n var newNode = {};\n var snippet = \"\";\n switch(_data[\"text/x-iri-specific-site\"]) {\n case \"twitter\":\n snippet = $('
                      ').html(_data[\"text/x-iri-selected-html\"]);\n var tweetdiv = snippet.find(\".tweet\");\n newNode.title = this.renkan.translate(\"Tweet by \") + tweetdiv.attr(\"data-name\");\n newNode.uri = \"http://twitter.com/\" + tweetdiv.attr(\"data-screen-name\") + \"/status/\" + tweetdiv.attr(\"data-tweet-id\");\n newNode.image = tweetdiv.find(\".avatar\").attr(\"src\");\n newNode.description = tweetdiv.find(\".js-tweet-text:first\").text();\n break;\n case \"google\":\n snippet = $('
                      ').html(_data[\"text/x-iri-selected-html\"]);\n newNode.title = snippet.find(\"h3:first\").text().trim();\n newNode.uri = snippet.find(\"h3 a\").attr(\"href\");\n newNode.description = snippet.find(\".st:first\").text().trim();\n break;\n default:\n if (_data[\"text/x-iri-source-uri\"]) {\n newNode.uri = _data[\"text/x-iri-source-uri\"];\n }\n }\n if (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]) {\n newNode.description = (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]).replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                      ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n var _svgimgs = snippet.find(\"image\");\n if (_svgimgs.length) {\n newNode.image = _svgimgs.attr(\"xlink:href\");\n }\n var _svgpaths = snippet.find(\"path\");\n if (_svgpaths.length) {\n newNode.clipPath = _svgpaths.attr(\"d\");\n }\n var _imgs = snippet.find(\"img\");\n if (_imgs.length) {\n newNode.image = _imgs[0].src;\n }\n var _as = snippet.find(\"a\");\n if (_as.length) {\n newNode.uri = _as[0].href;\n }\n newNode.title = snippet.find(\"[title]\").attr(\"title\") || newNode.title;\n newNode.description = snippet.text().replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/uri-list\"]) {\n newNode.uri = _data[\"text/uri-list\"];\n }\n if (_data[\"text/x-moz-url\"] && !newNode.title) {\n newNode.title = (_data[\"text/x-moz-url\"].split(\"\\n\")[1] || \"\").trim();\n if (newNode.title === newNode.uri) {\n newNode.title = false;\n }\n }\n if (_data[\"text/x-iri-source-title\"] && !newNode.title) {\n newNode.title = _data[\"text/x-iri-source-title\"];\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                      ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n newNode.image = snippet.find(\"[data-image]\").attr(\"data-image\") || newNode.image;\n newNode.uri = snippet.find(\"[data-uri]\").attr(\"data-uri\") || newNode.uri;\n newNode.title = snippet.find(\"[data-title]\").attr(\"data-title\") || newNode.title;\n newNode.description = snippet.find(\"[data-description]\").attr(\"data-description\") || newNode.description;\n newNode.clipPath = snippet.find(\"[data-clip-path]\").attr(\"data-clip-path\") || newNode.clipPath;\n }\n\n if (!newNode.title) {\n newNode.title = this.renkan.translate(\"Dragged resource\");\n }\n var fields = [\"title\", \"description\", \"uri\", \"image\"];\n for (var i = 0; i < fields.length; i++) {\n var f = fields[i];\n if (_data[\"text/x-iri-\" + f] || _data[f]) {\n newNode[f] = _data[\"text/x-iri-\" + f] || _data[f];\n }\n if (newNode[f] === \"none\" || newNode[f] === \"null\") {\n newNode[f] = undefined;\n }\n }\n\n if(typeof this.renkan.options.drop_enhancer === \"function\"){\n newNode = this.renkan.options.drop_enhancer(newNode, _data);\n }\n\n return newNode;\n\n },\n dropData: function(_data, _event) {\n if (!this.isEditable()) {\n return;\n }\n if (_data[\"text/json\"] || _data[\"application/json\"]) {\n try {\n var jsondata = JSON.parse(_data[\"text/json\"] || _data[\"application/json\"]);\n _.extend(_data,jsondata);\n }\n catch(e) {}\n }\n\n var newNode = (typeof this.renkan.options.drop_handler === \"undefined\")?this.defaultDropHandler(_data):this.renkan.options.drop_handler(_data);\n\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _coords = this.toModelCoords(_point),\n _nodedata = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n uri: newNode.uri || \"\",\n title: newNode.title || \"\",\n description: newNode.description || \"\",\n image: newNode.image || \"\",\n color: newNode.color || undefined,\n clip_path: newNode.clipPath || undefined,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n //TODO: Determine if it comes from bin or ext\n origin: Utils.OriginEnum.NODE_DROP_EXT\n };\n var _node = this.renkan.project.addNode(_nodedata),\n _repr = this.getRepresentationByModel(_node);\n if (_event.type === \"drop\") {\n _repr.openEditor();\n }\n },\n fullScreen: function() {\n this.currentWidth = this.$.width();\n this.currentHeight = this.$.height();\n\n var _el = this.renkan.$[0];\n paper.view.off(\"resize\");\n Screenfull.toggle(_el);\n },\n addNodeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_ADDNODE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_ADDNODE;\n this.notif_$.text(this.renkan.translate(\"Click on the background canvas to add a node\")).fadeIn();\n }\n return false;\n },\n addEdgeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_STARTEDGE || this.click_mode === Utils._CLICKMODE_ENDEDGE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_STARTEDGE;\n this.notif_$.text(this.renkan.translate(\"Click on a first node to start the edge\")).fadeIn();\n }\n return false;\n },\n exportProject: function() {\n var projectJSON = this.renkan.project.toJSON(),\n downloadLink = document.createElement(\"a\"),\n projectId = projectJSON.id,\n fileNameToSaveAs = projectId + \".json\";\n\n // clean ids\n delete projectJSON.id;\n delete projectJSON._id;\n delete projectJSON.space_id;\n\n var objId,\n idsMap = {},\n hiddenNodes;\n\n _.each(projectJSON.nodes, function(e,i,l) {\n objId = e.id || e._id;\n delete e._id;\n delete e.id;\n idsMap[objId] = e['@id'] = Utils.getUUID4();\n });\n _.each(projectJSON.edges, function(e,i,l) {\n delete e._id;\n delete e.id;\n e.to = idsMap[e.to];\n e.from = idsMap[e.from];\n });\n _.each(projectJSON.views, function(e,i,l) {\n delete e._id;\n delete e.id;\n\n if(e.hidden_nodes) {\n hiddenNodes = e.hidden_nodes;\n e.hidden_nodes = [];\n _.each(hiddenNodes, function(h,j) {\n e.hidden_nodes.push(idsMap[h]);\n });\n }\n });\n projectJSON.users = [];\n\n var projectJSONStr = JSON.stringify(projectJSON, null, 2);\n var blob = new Blob([projectJSONStr], {type: \"application/json;charset=utf-8\"});\n filesaver(blob,fileNameToSaveAs);\n\n },\n setViewParameters: function(_params){\n this.removeRepresentationsOfType(\"View\");\n if ($.isEmptyObject(_params)){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n return;\n }\n if (typeof _params.viewIndex !== 'undefined'){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(_params.viewIndex)));\n } else {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n }\n if (typeof _params.view !== 'undefined' && _params.view.split(\",\").length >= 3){\n var viewParams = _params.view.split(\",\");\n var params = {\n \"project\": this.renkan.project,\n \"offset\": {\n \"x\": parseFloat(viewParams[0]),\n \"y\": parseFloat(viewParams[1])\n },\n \"zoom_level\": parseFloat(viewParams[2])\n };\n this.view.setScale(params.zoom_level, new paper.Point(params.offset));\n }\n //if view parameters = autoscale we apply a zoom fit on the view.\n if ((typeof _params.view !== 'undefined' && _params.view === \"autoscale\")){\n this.view.autoScale();\n }\n //if viewsNodes = false we show all the node by default.\n if (typeof _params.viewsNodes !== 'undefined'){\n if (_params.viewsNodes === \"true\"){\n this.view.hiddenNodes = (this.view.params.hidden_nodes || []).concat();\n this.view.hideNodes();\n } else {\n this.view.showNodes(false);\n }\n }\n //other parameters must go after because most of them depends on a view that must be initialize before\n this.unhighlightAll();\n if (typeof _params.node !== 'undefined' && _params.node){\n this.highlightModel(this.renkan.project.get(\"nodes\").get(_params.node));\n }\n if (typeof _params.edge !== 'undefined' && _params.edge){\n this.highlightModel(this.renkan.project.get(\"edges\").get(_params.edge));\n }\n\n },\n validViewIndex: function(index){\n //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist\n var _index = parseInt(index);\n var validIndex = 0;\n if (_index < 0){\n validIndex = this.renkan.project.get(\"views\").length + _index;\n } else {\n validIndex = _index;\n }\n if (typeof this.renkan.project.get(\"views\").at(_index) === 'undefined'){\n validIndex = 0;\n }\n return validIndex;\n },\n foldBins: function() {\n var foldBinsButton = this.$.find(\".Rk-Fold-Bins\"),\n bins = this.renkan.$.find(\".Rk-Bins\"),\n _delta = 0;\n var _this = this,\n sizeBef = _this.canvas_$.width(),\n sizeAft;\n if (bins.position().left < 0) {\n _delta= new paper.Point([-bins.width()/2, 0]);\n bins.animate({left: 0},250);\n this.$.animate({left: 300},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n if ((sizeBef - bins.width()) < bins.height()){\n sizeAft = sizeBef;\n } else {\n sizeAft = sizeBef - bins.width();\n }\n foldBinsButton.html(\"«\");\n } else {\n _delta= new paper.Point([bins.width()/2, 0]);\n bins.animate({left: -300},250);\n this.$.animate({left: 0},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n sizeAft = sizeBef+300;\n foldBinsButton.html(\"»\");\n }\n this.view.paperShift(_delta);\n },\n save: function() { },\n open: function() { }\n }).value();\n\n /* Scene End */\n\n return Scene;\n\n});\n\ndefine('renderer/viewrepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.View Class */\n\n /* The representation for the view. */\n\n var ViewRepr = Utils.inherit(BaseRepresentation);\n\n _(ViewRepr.prototype).extend({\n _init: function() {\n var _this = this;\n this.$ = $(\".Rk-Render\");\n this.type = \"View\";\n this.hiddenNodes = [];\n this.scale = 1;\n this.initialScale = 1;\n this.offset = paper.view.center;\n this.params = {};\n \n if (this.model){\n this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n }\n \n this.initWithParams();\n \n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n \n bindClick(\".Rk-ZoomOut\", \"zoomOut\");\n bindClick(\".Rk-ZoomIn\", \"zoomIn\");\n bindClick(\".Rk-ZoomFit\", \"autoScale\");\n bindClick(\".Rk-ZoomSave\", \"saveView\");\n \n this.$.find(\".Rk-ZoomSetSaved\").click( function() {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));\n _this.showNodes(false);\n if (_this.options.hide_nodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n }\n _this.updateUrl();\n });\n \n this.$.find(\".Rk-ShowHiddenNodes\").mouseenter( function() {\n _this.showNodes(true);\n _this.$.find(\".Rk-ShowHiddenNodes\").mouseleave( function() {\n _this.hideNodes();\n });\n });\n this.$.find(\".Rk-ShowHiddenNodes\").click( function() {\n _this.showNodes(false);\n _this.$.find(\".Rk-ShowHiddenNodes\").off( \"mouseleave\" ); \n });\n \n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n },\n redraw: function(options) {\n //console.log(\"view : \", this.model.toJSON());\n },\n initWithParams: function(){\n var _this = this;\n \n if (_this.options.view_force_autoscale){\n this.autoScale();\n } else {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); \n }\n \n if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n } else {\n _this.showNodes(false);\n }\n },\n saveView: function(){\n var _this = this;\n \n var offset = {\n \"x\": _this.offset.x,\n \"y\": _this.offset.y\n };\n \n _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );\n _this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n \n this.$.find(\".Rk-ZoomSetSaved\").show();\n \n _this.updateUrl();\n },\n addHiddenNode: function(_model){\n this.hideNode(_model);\n this.hiddenNodes.push(_model.id);\n this.updateUrl();\n },\n hideNode: function(_model){\n if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){\n this.renderer.getRepresentationByModel(_model).hide();\n }\n },\n hideNodes: function(){\n var _this = this;\n this.hiddenNodes.forEach(function(_id, index){\n var node = _this.renkan.project.get(\"nodes\").get(_id);\n if (typeof node !== 'undefined'){\n return _this.hideNode(_this.renkan.project.get(\"nodes\").get(_id));\n }else{\n _this.hiddenNodes.splice(index, 1);\n }\n });\n paper.view.draw();\n },\n showNodes: function(ghost){\n var _this = this;\n this.hiddenNodes.forEach(function(_id){\n _this.renderer.getRepresentationByModel(_this.renkan.project.get(\"nodes\").get(_id)).show(ghost);\n });\n if (!ghost){\n this.hiddenNodes = [];\n }\n paper.view.draw();\n },\n setScale: function(_newScale, _offset) {\n if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {\n this.scale = _newScale;\n if (_offset) {\n this.offset = _offset;\n }\n this.renderer.redraw();\n this.updateUrl();\n }\n },\n zoomOut: function() {\n var _newScale = this.scale * Math.SQRT1_2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));\n this.setScale( _newScale, _offset );\n },\n zoomIn: function() {\n var _newScale = this.scale * Math.SQRT2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));\n this.setScale( _newScale, _offset );\n },\n resizeZoom: function(deltaW, deltaH, _ratio) {\n var _newScale = this.scale * _ratio;\n var _offset = new paper.Point([\n (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),\n (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )\n ]);\n this.setScale( _newScale, _offset );\n },\n autoScale: function(force_view) {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny));\n this.initialScale = _scale;\n // Override calculated scale if asked\n if((typeof force_view !== \"undefined\") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){\n this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));\n }\n else{\n this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));\n }\n }\n if (nodes.length === 1) {\n this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y])));\n }\n },\n paperShift: function(_delta) {\n this.offset = this.offset.add(_delta);\n this.renderer.redraw();\n },\n updateUrl: function(){\n if(this.options.url_parameters && this.options.update_url){\n var result = {};\n var parameters = Backbone.history.getFragment().split('?');\n if (parameters.length > 1){\n parameters[1].split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000;\n\n if (this.renkan.project.get(\"views\").indexOf(this.model) > -1){\n result.viewIndex = this.renkan.project.get(\"views\").indexOf(this.model);\n if (result.viewIndex === this.renkan.project.get(\"views\").length - 1){\n result.viewIndex = -1;\n }\n } else {\n if (result.viewIndex){\n delete result.viewIndex;\n }\n }\n this.renkan.router.navigate(\"?\" + decodeURIComponent($.param(result)), {trigger: false, replace: true});\n }\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.showNodes(false);\n }\n }).value();\n\n return ViewRepr;\n\n});\n\n\n//Load modules and use them\nif( typeof require.config === \"function\" ) {\n require.config({\n paths: {\n 'jquery':'../lib/jquery/jquery',\n 'underscore':'../lib/lodash/lodash',\n 'filesaver' :'../lib/FileSaver/FileSaver',\n 'requtils':'require-utils',\n 'jquery-private':'jquery-private',\n 'ckeditor-core':'../lib/ckeditor/ckeditor',\n 'screenfull':'../lib/screenfull/screenfull-umd'\n },\n // JQuery config. cf: http://requirejs.org/docs/jquery.html#noconflictmap\n map: {\n '*': { 'jquery': 'jquery-private' },\n 'jquery-private': { 'jquery': 'jquery' }\n },\n shim: {\n 'ckeditor-core': {\n exports: 'CKEDITOR',\n }\n }\n });\n}\n\nrequire(['renderer/baserepresentation',\n 'renderer/basebutton',\n 'renderer/noderepr',\n 'renderer/edge',\n 'renderer/tempedge',\n 'renderer/baseeditor',\n 'renderer/nodeeditor',\n 'renderer/edgeeditor',\n 'renderer/nodebutton',\n 'renderer/nodeeditbutton',\n 'renderer/noderemovebutton',\n 'renderer/nodehidebutton',\n 'renderer/nodeshowbutton',\n 'renderer/noderevertbutton',\n 'renderer/nodelinkbutton',\n 'renderer/nodeenlargebutton',\n 'renderer/nodeshrinkbutton',\n 'renderer/edgeeditbutton',\n 'renderer/edgeremovebutton',\n 'renderer/edgerevertbutton',\n 'renderer/miniframe',\n 'renderer/scene',\n 'renderer/viewrepr'\n ], function(BaseRepresentation, BaseButton, NodeRepr, Edge, TempEdge, BaseEditor, NodeEditor, EdgeEditor, NodeButton, NodeEditButton, NodeRemoveButton, NodeHideButton, NodeShowButton, NodeRevertButton, NodeLinkButton, NodeEnlargeButton, NodeShrinkButton, EdgeEditButton, EdgeRemoveButton, EdgeRevertButton, MiniFrame, Scene, ViewRepr){\n\n 'use strict';\n\n var Rkns = window.Rkns;\n\n if(typeof Rkns.Renderer === \"undefined\"){\n Rkns.Renderer = {};\n }\n var Renderer = Rkns.Renderer;\n\n Renderer._BaseRepresentation = BaseRepresentation;\n Renderer._BaseButton = BaseButton;\n Renderer.Node = NodeRepr;\n Renderer.Edge = Edge;\n Renderer.View = ViewRepr;\n Renderer.TempEdge = TempEdge;\n Renderer._BaseEditor = BaseEditor;\n Renderer.NodeEditor = NodeEditor;\n Renderer.EdgeEditor = EdgeEditor;\n Renderer._NodeButton = NodeButton;\n Renderer.NodeEditButton = NodeEditButton;\n Renderer.NodeRemoveButton = NodeRemoveButton;\n Renderer.NodeHideButton = NodeHideButton;\n Renderer.NodeShowButton = NodeShowButton;\n Renderer.NodeRevertButton = NodeRevertButton;\n Renderer.NodeLinkButton = NodeLinkButton;\n Renderer.NodeEnlargeButton = NodeEnlargeButton;\n Renderer.NodeShrinkButton = NodeShrinkButton;\n Renderer.EdgeEditButton = EdgeEditButton;\n Renderer.EdgeRemoveButton = EdgeRemoveButton;\n Renderer.EdgeRevertButton = EdgeRevertButton;\n Renderer.MiniFrame = MiniFrame;\n Renderer.Scene = Scene;\n\n startRenkan();\n});\n\ndefine(\"main-renderer\", function(){});\n\n// Module o use with jquery to handle no conflict. cf: http://requirejs.org/docs/jquery.html#noconflictmap\ndefine('jquery-private',['jquery'], function (jq) {\n 'use strict';\n return jq.noConflict( true );\n});\n\n"]} \ No newline at end of file +{"version":3,"sources":["templates.js","../../js/main.js","../../js/router.js","../../js/dataloader.js","../../js/models.js","../../js/defaults.js","../../js/i18n.js","../../js/full-json.js","../../js/save-once.js","../../js/ldtjson-bin.js","../../js/list-bin.js","../../js/wikipedia-bin.js","paper-renderer.js"],"names":["this","obj","__t","__p","__e","_","escape","print","__j","call","arguments","Array","prototype","join","options","show_edge_tooltip_color","edge","color","uri","title","show_edge_tooltip_uri","short_uri","show_edge_tooltip_nodes","renkan","translate","from_color","shortenText","from_title","to_color","to_title","show_edge_tooltip_creator","has_creator","created_by_color","created_by_title","show_edge_editor_uri","properties","length","each","ontology","label","property","show_edge_editor_style","show_edge_editor_style_color","colorPicker","show_edge_editor_style_dash","dash","show_edge_editor_style_thickness","thickness","show_edge_editor_style_arrow","arrow","show_edge_editor_direction","show_edge_editor_nodes","show_edge_editor_creator","Rkns","Utils","getFullURL","image","description","static_url","url","show_bins","show_editor","show_node_tooltip_color","node","show_node_tooltip_uri","show_node_tooltip_description","show_node_tooltip_image","show_node_tooltip_creator","_id","get_youtube_id","regExp","match","get_vimeo_id","get_dailymotion_id","undefined","get_facebook_id","encodeURIComponent","video_id","show_node_editor_title_richtext","show_node_title_style","title_color","title_size","toFixed","show_node_editor_uri","change_types","types","type","charAt","toUpperCase","substring","show_node_editor_description","show_node_editor_description_richtext","show_node_editor_size","size","show_node_editor_style","show_node_editor_style_color","show_node_editor_style_dash","show_node_editor_style_thickness","show_node_editor_image","image_placeholder","clip_path","allow_image_upload","show_node_editor_creator","change_shapes","shapes","shape","show_top_bar","editor_mode","title_editable","project","get","show_user_list","show_user_color","user_color_editable","home_button_url","home_button_title","show_fullscreen_button","show_addnode_button","show_addedge_button","show_export_button","show_save_button","show_open_button","show_bookmarklet","show_search_field","resize","show_zoom","save_view","hide_nodes","root","$","jQuery","pickerColors","__renkans","_BaseBin","_renkan","_opts","find","hide","addClass","appendTo","title_icon_$","_this","attr","href","html","click","destroy","slideDown","resizeBins","refresh","count_$","title_$","main_$","auto_refresh","window","setInterval","detach","Renkan","push","defaults","templates","renkanJST","node_editor_templates","template","types_templates","value","key","property_files","f","getJSON","data","concat","read_only","router","Router","Models","Project","dataloader","DataLoader","Loader","setCurrentUser","user_id","user_name","addUser","current_user","renderer","redrawUsers","container","tabs","search_engines","current_user_list","UsersList","on","pickerClass","_tmpl","map","c","Renderer","Scene","search","_select","_input","_form","_search","_key","Search","getSearchTitle","className","getBgClass","_el","setSearchEngine","submit","val","search_engine","mouseenter","mouseleave","bins","_bin","Bin","elementDropped","_mainDiv","siblings","is","slideUp","_e","_t","_models","where","_model","highlightModel","mouseout","unhighlightAll","e","dragDrop","err","preventDefault","touch","originalEvent","changedTouches","off","canvas_$","offset","w","width","h","height","pageX","left","pageY","top","onMouseMove","div","document","createElement","appendChild","cloneNode","dropData","text/html","innerHTML","onMouseDown","onMouseUp","dataTransfer","setData","lastsearch","lastval","regexpFromTextOrArray","source","tab","render","_text","i18n","language","substr","onStatusChange","listClasses","split","classes","i","_d","outerHeight","css","getUUID4","replace","r","Math","random","v","toString","OriginEnum","o","Object","freeze","NONE","NODE_BUTTON","NODE_DOUBLE_CLICK","NODE_DROP_EXT","NODE_DROP_BIN","EDGE_BUTTON_BAR","EDGE_BUTTON_CIRCLE","getUID","pad","n","Date","ID_AUTO_INCREMENT","ID_BASE","getUTCFullYear","getUTCMonth","getUTCDate","_base","_n","_uidbase","test","img","Image","src","res","inherit","_baseClass","_callbefore","_class","_arg","apply","slice","_init","_initialized","extend","replaceText","makeReplaceFunc","l","k","charsrx","txt","toLowerCase","remrx","j","remsrc","charsub","getSource","inp","removeChars","String","fromCharCode","RegExp","_textOrArray","testrx","replacerx","isempty","_replace","text","_MIN_DRAG_DISTANCE","_NODE_BUTTON_WIDTH","_EDGE_BUTTON_INNER","_EDGE_BUTTON_OUTER","_CLICKMODE_ADDNODE","_CLICKMODE_STARTEDGE","_CLICKMODE_ENDEDGE","_NODE_SIZE_STEP","LN2","_MIN_SCALE","_MAX_SCALE","_MOUSEMOVE_RATE","_DOUBLETAP_DELAY","_DOUBLETAP_DISTANCE","_USER_PLACEHOLDER","default_user_color","_BOOKMARKLET_CODE","_maxlength","drawEditBox","_options","_coords","_path","_xmargin","_selector","tooltip_width","tooltip_padding","rect","getBoundingClientRect","container_rect","bottom","overflow-x","overflow-y","max-height","_height","_isLeft","x","paper","view","center","_left","tooltip_arrow_length","_right","_top","y","tooltip_margin","max","tooltip_arrow_width","min","_bottom","segments","point","add","fillColor","Color","Gradient","tooltip_top_color","tooltip_bottom_color","increaseBrightness","hex","percent","parseInt","g","b","Backbone","routes","","index","parameters","result","forEach","part","item","decodeURIComponent","trigger","converters","from1to2","len","nodes","style","edges","schema_version","dataConverters","convert","schemaVersionFrom","getSchemaVersion","schemaVersionTo","converterName","load","set","validate","guid","RenkanModel","RelationalModel","idAttribute","constructor","id","prepare","addReference","_propName","_list","_default","_element","User","toJSON","Node","relations","HasOne","relatedModel","created_by","position","Edge","from","to","View","isArray","zoom_level","hidden_nodes","RosterUser","blacklist","HasMany","reverseRelation","includeInJSON","_props","_user","findOrCreate","addNode","_node","addEdge","_edge","addView","_view","removeNode","remove","removeEdge","_project","users","views","_item","t","version","initialize","filter","json","clone","attributes","Model","Collection","omit","site_id","model","navigator","userLanguage","popup_editor","editor_panel","manual_save","size_bug_fix","force_resize","allow_double_click","double_click_open_url","simple_click_open_url","zoom_on_scroll","element_delete_delay","autoscale_padding","view_force_autoscale","view_show_hiddennodes","default_index_view","url_parameters","update_url","user_name_editable","show_minimap","minimap_width","minimap_height","minimap_padding","minimap_background_color","minimap_border_color","minimap_highlight_color","minimap_highlight_weight","buttons_background","buttons_label_color","buttons_label_font_size","ghost_opacity","default_dash_array","show_node_circles","clip_node_images","node_images_fill_mode","node_size_base","node_stroke_width","node_stroke_max_width","selected_node_stroke_width","selected_node_stroke_max_width","node_stroke_witdh_scale","node_title_size_min","node_title_size_max","node_title_size_step","node_fill_color","highlighted_node_fill_color","node_title_color","node_label_distance","node_label_max_length","label_untitled_nodes","default","video","edge_stroke_width","edge_stroke_max_width","selected_edge_stroke_width","selected_edge_stroke_max_width","edge_stroke_witdh_scale","edge_label_distance","edge_label_max_length","edge_arrow_length","edge_arrow_width","edge_arrow_max_width","edge_gap_in_bundles","highlighted_edge_color","label_untitled_edges","tooltip_border_color","tooltip_border_width","tooltip_opacity","richtext_editor_config","toolbarGroups","name","groups","removePlugins","show_node_editor_title","uploaded_image_max_kb","fr","Edit Node","Edit Edge","Title:","URI:","Description:","From:","To:","Image URL:","Choose Image File:","Full Screen","Add Node","Add Edge","Save Project","Open Project","Auto-save enabled","Connection lost","Created by:","Zoom In","Zoom Out","Edit","Remove","Cancel deletion","Link to another node","Enlarge","Shrink","Click on the background canvas to add a node","Click on a first node to start the edge","Click on a second node to complete the edge","Wikipedia","Wikipedia in ","French","English","Japanese","Untitled project","Lignes de Temps","Loading, please wait","Edge color:","Dash:","Thickness:","Arrow:","Node color:","Choose color","Change edge direction","Do you really wish to remove node ","Do you really wish to remove edge ","This file is not an image","Image size must be under ","Size:","KB","Choose from vocabulary:","SKOS Documentation properties","has note","has example","has definition","SKOS Semantic relations","has broader","has narrower","has related","Dublin Core Metadata","has contributor","covers","created by","has date","published by","has source","has subject","Dragged resource","Search the Web","Search in Bins","Close bin","Refresh bin","(untitled)","Select contents:","Drag items from this website, drop them in Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.","Shapes available","Circle","Square","Diamond","Hexagone","Ellipse","Star","Cloud","Triangle","Polygon","Zoom Fit","Download Project","Save view","View saved view","Renkan 'Drag-to-Add' bookmarklet","(unknown user)","","Search in graph","Search in ","Show hidden nodes","Show neighbors","Hide","Fullscreen not supported by your browser","Title size:","Title color:","Video link","jsonIO","_proj","http_method","_load","loadingStatus","_data","saveStatus","_save","ajax","contentType","JSON","stringify","success","textStatus","jqXHR","_thrSave","throttle","setTimeout","changedAttributes","hasChanged","jsonIOSaveOnClick","_saveWarn","_onLeave","getdata","rx","matches","location","hash","beforeSend","_checkLeave","removeClass","save","hasClass","Ldt","ProjectBin","ldt_type","Resclass","console","error","tagTemplate","annotationTemplate","proj_id","project_id","ldt_platform","searchbase","highlight","convertTC","_ms","_res","_totalSeconds","abs","floor","_hours","_minutes","_seconds","_html","_projtitle","meta","count","tags","_tag","_title","htitle","encodedtitle","annotations","_annotation","_description","content","_duration","end","begin","_img","hdescription","start","duration","mediaid","media","annotationid","show","dataType","lang","_q","ResultsBin","segmentTemplate","max_results","highlightrx","objects","_segment","abstract","_begin","start_ts","_end","iri_id","element_id","format","q","limit","ResourceList","resultTemplate","list","trim","_match","langs","en","ja","query","_result","encodeURI","snippet","define","_BaseRepresentation","_renderer","_changeBinding","redraw","change","_removeBinding","removeRepresentation","defer","_selectBinding","select","_unselectBinding","unselect","_super","_func","moveTo","unhighlight","mousedown","mouseup","getUtils","getRenderer","requtils","BaseRepresentation","_BaseButton","_pos","sector","_newTarget","source_representation","cloud_path","builders","circle","getShape","Path","getImageShape","radius","rectangle","Rectangle","ellipse","polygon","RegularPolygon","diamond","d","SQRT2","rotate","star","cloud","path","scale","triangle","svg","ShapeBuilder","NodeRepr","node_layer","activate","buildShape","hidden","ghost","strokeWidth","h_ratio","labels_$","normal_buttons","NodeEditButton","NodeRemoveButton","NodeLinkButton","NodeEnlargeButton","NodeShrinkButton","NodeHideButton","NodeShowButton","pending_delete_buttons","NodeRevertButton","all_buttons","active_buttons","last_circle_radius","minimap","minimap_circle","__representation","miniframe","node_group","addChild","_getStrokeWidth","has","_getSelectedStrokeWidth","changed","shapeBuilder","sendToBack","_model_coords","Point","_baseRadius","exp","is_dragging","paper_coords","toPaperCoords","circle_radius","setSectorSize","node_image","subtract","image_delta","multiply","old_act_btn","opacity","dashArray","selected","isEditable","highlighted","clean_title","textContent","innerText","node_style","title-color","text_size","text_color","text_style","line-height","text_node","empty","append","_strokeWidth","_color","_dash","strokeColor","_pc","lastImage","showImage","minipos","toMinimapCoords","miniradius","minisize","Size","fitBounds","dontRedrawEdges","ed","repr","getRepresentationByModel","from_representation","to_representation","_image","image_cache","clipPath","hasClipPath","_clip","baseRadius","centerPoint","instructions","lastCoords","minX","Infinity","minY","maxX","maxY","transformCoords","tabc","relative","newCoords","parseFloat","isY","instr","coords","lineTo","cubicCurveTo","quadraticCurveTo","_raster","Raster","locked","Group","clipped","_circleClip","divide","insertAbove","paperShift","_delta","openEditor","removeRepresentationsOfType","_editor","addRepresentation","draw","clearTimeout","hide_timeout","_uri","showNeighbors","hideButtons","buttons_timeout","hideNeighbors","hide_delay","delay","indexNode","hiddenNodes","indexOf","splice","textToReplace","hlvalue","throttledPaperDraw","saveCoords","toModelCoords","_event","_isTouch","unselectAll","click_target","edge_layer","bundle","addToBundles","line","arrow_scale","pivot","arrow_angle","EdgeEditButton","EdgeRemoveButton","EdgeRevertButton","minimap_line","_getArrowScale","_opacity","_arrow_scale","_p0a","_p1a","_v","_r","_u","_ortho","_group_pos","getPosition","_p0b","_p1b","_a","angle","_textdelta","_handle","visible","handleIn","handleOut","bounds","_textpos","transform","-moz-transform","-webkit-transform","text_angle","reject","TempEdge","origin","_p0","_p1","end_pos","_c","_hitResult","hitTest","findTarget","_endDrag","_target","_destmodel","_BaseEditor","buttons_layer","editor_block","_pts","range","editor_$","BaseEditor","CKEditor","NodeEditor","readOnlyTemplate","_created_by","_template","_image_placeholder","_size","keys","editorInstance","inline","editorInstanceTitle","closeEditor","cleanEditor","focusManager","blur","onFieldChange","debounce","checkDirty","getData","resetDirty","assign","keyCode","files","FileReader","alert","onload","target","readAsDataURL","focus","_picker","hover","shiftSize","_newsize","shiftThickness","_oldThickness","_newThickness","shiftTitleSize","_oldTitleSize","_newTitleSize","_pickerTitle","step","titlehtml","EdgeEditor","_from_model","_to_model","BaseButton","_NodeButton","sectorInner","lastSectorInner","drawSector","startAngle","endAngle","imageName","NodeButton","delid","delete_list","time","valueOf","confirm","addHiddenNode","unset","_off","_point","addTempEdge","MiniFrame","filesaver","Screenfull","representations","notif_$","setup","totalScroll","mouse_down","selected_target","Layer","redrawActive","background_layer","topleft","bottomRight","cliprectangle","bundles","click_mode","_allowScroll","_originalScale","_zooming","_lastTapX","_lastTapY","_lastTap","icon_cache","imgname","throttledMouseMove","mousemove","mousewheel","onScroll","touchstart","_touches","touches","pow","onDoubleClick","touchmove","_newScale","_scaleRatio","_newOffset","setScale","touchend","onClick","dblclick","dragover","dragenter","dragleave","drop","parse","bindClick","selector","fname","evt","enabled","addEventListener","raw","fullscreenchange","widthAft","heightAft","viewSize","currentWidth","currentHeight","isFullscreen","onResize","newWidth","_width","newHeight","prevHeight","delta","prevWidth","fadeIn","fadeOut","mouseover","_thRedraw","addRepresentations","prop","_thRedrawUsers","history","fixSize","_params","setViewParameters","el","_delay","autoScale","$cpwrapper","$cplist","$this","rxs","_now","findWhere","delete_scheduled","rescaleMinimap","last","_repr","_inR","_outR","_startAngle","_endAngle","_padding","_imgname","_caption","_startRads","PI","_endRads","_startdx","sin","_startdy","cos","_startXIn","_startYIn","_startXOut","_startYOut","_enddx","_enddy","_endXIn","_endYIn","_endXOut","_endYOut","_centerR","_centerRads","_centerX","_centerY","_centerXIn","_centerXOut","_centerYIn","_centerYOut","_textX","_textY","arcTo","closed","PointText","characterStyle","fontSize","paragraphStyle","justification","_visible","_restPos","_grp","_imgdelta","_currentPos","_edgeRepr","_bundle","_er","_dir","savebtn","tip","redrawMiniframe","bottomright","_xx","_yy","_minx","_miny","_maxx","_maxy","_scale","at","_type","RendererType","_collection","userTemplate","allUsers","models","ulistHtml","$userpanel","$name","$cpitems","$colorsquare","$input","parent","background","_representation","_representations","_ratio","ratioH","ratioW","resizeZoom","_from","_origin","_tmpEdge","last_point","updateUrl","_scrolldelta","SQRT1_2","_open_uri_cb","_node_click_open_url","open","bind","defaultDropHandler","newNode","tweetdiv","_svgimgs","_svgpaths","_imgs","_as","fields","drop_enhancer","jsondata","drop_handler","_nodedata","fullScreen","toggle","addNodeBtn","addEdgeBtn","exportProject","projectJSON","projectId","fileNameToSaveAs","space_id","objId","idsMap","projectJSONStr","blob","Blob","isEmptyObject","validViewIndex","viewIndex","viewParams","params","viewsNodes","hideNodes","showNodes","_index","validIndex","foldBins","sizeAft","foldBinsButton","sizeBef","animate","ViewRepr","initialScale","initWithParams","saveView","hideNode","_offset","zoomOut","zoomIn","deltaW","deltaH","force_view","getFragment","round","navigate","param","require","config","paths","jquery","underscore","jquery-private","ckeditor-core","screenfull","*","shim","exports","startRenkan","jq","noConflict"],"mappings":"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","file":"renkan.min.js","sourcesContent":["this[\"renkanJST\"] = this[\"renkanJST\"] || {};\n\nthis[\"renkanJST\"][\"templates/colorpicker.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                    • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor_readonly.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                      \\n ×\\n ';\n if (options.show_edge_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (edge.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n__e(edge.title) +\n'\\n ';\n if (edge.uri) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n

                      \\n';\n if (options.show_edge_tooltip_uri && edge.uri) { ;\n__p += '\\n

                      \\n ' +\n__e( edge.short_uri ) +\n'\\n

                      \\n';\n } ;\n__p += '\\n

                      ' +\n((__t = (edge.description)) == null ? '' : __t) +\n'

                      \\n';\n if (options.show_edge_tooltip_nodes) { ;\n__p += '\\n

                      \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                      \\n

                      \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_tooltip_creator && edge.has_creator) { ;\n__p += '\\n

                      \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                      \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                      \\n ×' +\n__e(renkan.translate(\"Edit Edge\")) +\n'\\n

                      \\n

                      \\n \\n \\n

                      \\n';\n if (options.show_edge_editor_uri) { ;\n__p += '\\n

                      \\n \\n \\n \\n

                      \\n ';\n if (options.properties.length) { ;\n__p += '\\n

                      \\n \\n \\n

                      \\n';\n } } ;\n__p += '\\n';\n if (options.show_edge_editor_style) { ;\n__p += '\\n
                      \\n ';\n if (options.show_edge_editor_style_color) { ;\n__p += '\\n
                      \\n ' +\n__e(renkan.translate(\"Edge color:\")) +\n'\\n
                      \\n ;\">\\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Edge') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                      \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_dash) { ;\n__p += '\\n
                      \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_thickness) { ;\n__p += '\\n
                      \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e( edge.thickness ) +\n'\\n +\\n
                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_arrow) { ;\n__p += '\\n
                      \\n ' +\n__e(renkan.translate(\"Arrow:\")) +\n'\\n \\n
                      \\n ';\n } ;\n__p += '\\n
                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_direction) { ;\n__p += '\\n

                      \\n ' +\n__e( renkan.translate(\"Change edge direction\") ) +\n'\\n

                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_nodes) { ;\n__p += '\\n

                      \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                      \\n

                      \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n %-edge.to_color%>;\">\\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_creator && edge.has_creator) { ;\n__p += '\\n

                      \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n ;\">\\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                      \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/annotationtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                    • \\n\\n \\n

                      ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                      \\n

                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                      \\n

                      Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                      \\n
                      \\n
                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/segmenttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                    • \\n\\n \\n

                      ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                      \\n

                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                      \\n

                      Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                      \\n
                      \\n
                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/tagtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                    • \\n\\n \\n

                      ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                      \\n
                      \\n
                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/list-bin.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
                    • \\n';\n } ;\n__p += '\\n

                      \\n ';\n if (url) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n ';\n if (url) { ;\n__p += '';\n } ;\n__p += '\\n

                      \\n ';\n if (description) { ;\n__p += '\\n

                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                      \\n ';\n } ;\n__p += '\\n ';\n if (image) { ;\n__p += '\\n
                      \\n ';\n } ;\n__p += '\\n
                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/main.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_bins) { ;\n__p += '\\n
                      \\n
                      \\n

                      ' +\n__e( translate(\"Select contents:\")) +\n'

                      \\n
                      \\n \\n
                      \\n
                      \\n
                        \\n
                        \\n \\n
                        \\n
                        \\n \\n \\n
                        \\n
                          \\n
                          \\n';\n } ;\n__p += ' ';\n if (options.show_editor) { ;\n__p += '\\n
                          \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                          \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n

                          \\n ' +\n__e(node.short_uri) +\n'\\n

                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_tooltip_description) { ;\n__p += '\\n

                          ' +\n((__t = (node.description)) == null ? '' : __t) +\n'

                          \\n';\n } ;\n__p += ' ';\n if (node.image && options.show_node_tooltip_image) { ;\n__p += '\\n \\n';\n } ;\n__p += ' ';\n if (node.has_creator && options.show_node_tooltip_creator) { ;\n__p += '\\n

                          \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                          \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor_video.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n\nfunction get_youtube_id(url) {\n var regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/;\n var match = url.match(regExp);\n if (match && match[2].length == 11) {\n return match[2];\n } else {\n return false;\n }\n}\n\nfunction get_vimeo_id(url) {\n var regExp = /https?:\\/\\/(www\\.)?vimeo.com\\/(\\d+)($|\\/)/;\n \n var match = url.match(regExp);\n \n if (match){\n return match[2];\n } else {\n return false;\n }\n}\n\nfunction get_dailymotion_id(url) {\n var regExp = /^(?:(?:http|https):\\/\\/)?(?:www.)?(dailymotion\\.com|dai\\.ly)\\/((video\\/([^_]+))|(hub\\/([^_]+)|([^\\/_]+)))$/;\n\n var match = url.match(regExp);\n\n if (match) {\n if(match[4] !== undefined) {\n return match[4];\n }\n return match[2];\n }\n return false;\n}\n\nfunction get_facebook_id(url) {\n var regExp = /^https?:\\/\\/www\\.facebook\\.com\\/(?:video\\.php\\?v=\\d+|.*?\\/videos\\/\\d+)\\/?$/;\n \n var match = url.match(regExp);\n\n if (match) {\n return encodeURIComponent(url);\n }\n return false;\n}\n\n;\n__p += '\\n

                          \\n ×\\n ';\n if (options.show_node_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                          \\n';\n if (node.uri && options.show_node_tooltip_uri) {\n var video_id = false;\n if(video_id = get_youtube_id(node.uri)) { ;\n__p += '\\n \\n

                          ' +\n__e(renkan.translate(\"Link\")) +\n'

                          \\n ';\n }\n else if(video_id = get_vimeo_id(node.uri)) { ;\n__p += '\\n \\n

                          ' +\n__e(renkan.translate(\"Link\")) +\n'

                          \\n ';\n }\n else if(video_id = get_dailymotion_id(node.uri)) { ;\n__p += '\\n \\n

                          ' +\n__e(renkan.translate(\"Link\")) +\n'

                          \\n ';\n }\n else if(video_id = get_facebook_id(node.uri)) { ;\n__p += '\\n \\n

                          ' +\n__e(renkan.translate(\"Video link\")) +\n'

                          \\n ';\n }\n else { ;\n__p += ' \\n \\n ';\n }\n }\n;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n //TODO: change class to id ;\n__p += '\\n

                          \\n ×' +\n__e(renkan.translate(\"Edit Node\")) +\n'\\n

                          \\n

                          \\n \\n ';\n if (options.show_node_editor_title_richtext) { ;\n__p += '\\n

                          ' +\n((__t = (node.title)) == null ? '' : __t) +\n'
                          \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                          \\n';\n if (options.show_node_title_style) { ;\n__p += '\\n
                          \\n
                          \\n ' +\n__e(renkan.translate(\"Title color:\")) +\n'\\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Title') )) == null ? '' : __t) +\n'\\n
                          \\n
                          \\n ' +\n__e(renkan.translate(\"Title size:\")) +\n'\\n -\\n ' +\n__e(node.title_size.toFixed(1)) +\n'\\n +\\n
                          \\n
                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_uri) { ;\n__p += '\\n

                          \\n \\n \\n \\n

                          \\n';\n } ;\n__p += ' ';\n if (options.change_types) { ;\n__p += '\\n

                          \\n \\n \\n

                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_description) { ;\n__p += '\\n

                          \\n \\n ';\n if (options.show_node_editor_description_richtext) { ;\n__p += '\\n

                          ' +\n((__t = (node.description)) == null ? '' : __t) +\n'
                          \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_size) { ;\n__p += '\\n

                          \\n ' +\n__e(renkan.translate(\"Size:\")) +\n'\\n -\\n ' +\n__e(node.size) +\n'\\n +\\n

                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_style) { ;\n__p += '\\n
                          \\n ';\n if (options.show_node_editor_style_color) { ;\n__p += '\\n
                          \\n \\n ' +\n__e(renkan.translate(\"Node color:\")) +\n'\\n
                          \\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Node') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                          \\n
                          \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_dash) { ;\n__p += '\\n
                          \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                          \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_thickness) { ;\n__p += '\\n
                          \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e(node.thickness) +\n'\\n +\\n
                          \\n ';\n } ;\n__p += '\\n
                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_image) { ;\n__p += '\\n
                          \\n
                          \\n \\n ';\n if (node.clip_path) { ;\n__p += '\\n \\n \\n \\n ';\n };\n__p += '\\n
                          \\n
                          \\n

                          \\n \\n

                          \\n \\n \\n
                          \\n

                          \\n';\n if (options.allow_image_upload) { ;\n__p += '\\n

                          \\n \\n \\n

                          \\n';\n };\n\n } ;\n__p += ' ';\n if (options.show_node_editor_creator && node.has_creator) { ;\n__p += '\\n

                          \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                          \\n';\n } ;\n__p += ' ';\n if (options.change_shapes) { ;\n__p += '\\n

                          \\n \\n \\n

                          \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/scene.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_top_bar) { ;\n__p += '\\n
                          \\n
                          \\n ';\n if (!options.editor_mode || !options.title_editable) { ;\n__p += '\\n

                          \\n ' +\n__e( project.get(\"title\") || translate(\"Untitled project\")) +\n'\\n

                          \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (options.show_user_list) { ;\n__p += '\\n
                          \\n
                          \\n ';\n if (options.show_user_color) { ;\n__p += '\\n
                          \\n \\n ';\n if (options.user_color_editable) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (options.user_color_editable) { print(colorPicker('Rk-Editor-ColorPicker-User')) } ;\n__p += '\\n
                          \\n ';\n } ;\n__p += '\\n <unknown user>\\n
                          \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.home_button_url) {;\n__p += '\\n
                            \\n \\n
                            \\n
                            \\n ' +\n__e( translate(options.home_button_title) ) +\n'\\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_fullscreen_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n ' +\n__e(translate(\"Full Screen\")) +\n'\\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.editor_mode) { ;\n__p += '\\n ';\n if (options.show_addnode_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n ' +\n__e(translate(\"Add Node\")) +\n'\\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_addedge_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n ' +\n__e(translate(\"Add Edge\")) +\n'\\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_save_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_open_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n ' +\n__e(translate(\"Open Project\")) +\n'\\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_bookmarklet) { ;\n__p += '\\n
                            \\n \\n
                            \\n
                            \\n ' +\n__e(translate(\"Renkan \\'Drag-to-Add\\' bookmarklet\")) +\n'\\n
                            \\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n } else { ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                            \\n
                            \\n
                            \\n
                            \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                            \\n
                            \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n ';\n }; ;\n__p += '\\n ';\n if (options.show_search_field) { ;\n__p += '\\n
                            \\n \\n
                            \\n
                            \\n ';\n } ;\n__p += '\\n
                            \\n';\n } ;\n__p += '\\n
                            \\n
                            \\n
                            \\n ';\n if (options.editor_mode && options.save_view) { ;\n__p += '\\n
                            \\n ';\n } ;\n__p += '\\n ';\n if (options.save_view) { ;\n__p += '\\n
                            \\n ';\n if (options.hide_nodes) { ;\n__p += '\\n \\t \\n ';\n } ;\n__p += ' \\n ';\n } ;\n__p += '\\n
                            \\n ';\n } ;\n__p += '\\n \\n\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/search.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                          • ' +\n((__t = ( title )) == null ? '' : __t) +\n'
                          • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/wikipedia-bin/resulttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                          • \\n\\n \\n

                            \\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n

                            \\n

                            ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                            \\n
                          • \\n';\n\n}\nreturn __p\n};","/* Declaring the Renkan Namespace Rkns and Default values */\n\n(function(root) {\n\n \"use strict\";\n\n if (typeof root.Rkns !== \"object\") {\n root.Rkns = {};\n }\n\n var Rkns = root.Rkns;\n var $ = Rkns.$ = root.jQuery;\n var _ = Rkns._ = root._;\n\n Rkns.pickerColors = [\"#8f1919\", \"#a80000\", \"#d82626\", \"#ff0000\", \"#e87c7c\", \"#ff6565\", \"#f7d3d3\", \"#fecccc\",\n \"#8f5419\", \"#a85400\", \"#d87f26\", \"#ff7f00\", \"#e8b27c\", \"#ffb265\", \"#f7e5d3\", \"#fee5cc\",\n \"#8f8f19\", \"#a8a800\", \"#d8d826\", \"#feff00\", \"#e8e87c\", \"#feff65\", \"#f7f7d3\", \"#fefecc\",\n \"#198f19\", \"#00a800\", \"#26d826\", \"#00ff00\", \"#7ce87c\", \"#65ff65\", \"#d3f7d3\", \"#ccfecc\",\n \"#198f8f\", \"#00a8a8\", \"#26d8d8\", \"#00feff\", \"#7ce8e8\", \"#65feff\", \"#d3f7f7\", \"#ccfefe\",\n \"#19198f\", \"#0000a8\", \"#2626d8\", \"#0000ff\", \"#7c7ce8\", \"#6565ff\", \"#d3d3f7\", \"#ccccfe\",\n \"#8f198f\", \"#a800a8\", \"#d826d8\", \"#ff00fe\", \"#e87ce8\", \"#ff65fe\", \"#f7d3f7\", \"#feccfe\",\n \"#000000\", \"#242424\", \"#484848\", \"#6d6d6d\", \"#919191\", \"#b6b6b6\", \"#dadada\", \"#ffffff\"\n ];\n\n Rkns.__renkans = [];\n\n var _BaseBin = Rkns._BaseBin = function(_renkan, _opts) {\n if (typeof _renkan !== \"undefined\") {\n this.renkan = _renkan;\n this.renkan.$.find(\".Rk-Bin-Main\").hide();\n this.$ = Rkns.$('
                          • ')\n .addClass(\"Rk-Bin\")\n .appendTo(_renkan.$.find(\".Rk-Bin-List\"));\n this.title_icon_$ = Rkns.$('')\n .addClass(\"Rk-Bin-Title-Icon\")\n .appendTo(this.$);\n\n var _this = this;\n\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Close bin\")\n })\n .addClass(\"Rk-Bin-Close\")\n .html('×')\n .appendTo(this.$)\n .click(function() {\n _this.destroy();\n if (!_renkan.$.find(\".Rk-Bin-Main:visible\").length) {\n _renkan.$.find(\".Rk-Bin-Main:last\").slideDown();\n }\n _renkan.resizeBins();\n return false;\n });\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Refresh bin\")\n })\n .addClass(\"Rk-Bin-Refresh\")\n .appendTo(this.$)\n .click(function() {\n _this.refresh();\n return false;\n });\n this.count_$ = Rkns.$('
                            ')\n .addClass(\"Rk-Bin-Count\")\n .appendTo(this.$);\n this.title_$ = Rkns.$('

                            ')\n .addClass(\"Rk-Bin-Title\")\n .appendTo(this.$);\n this.main_$ = Rkns.$('
                            ')\n .addClass(\"Rk-Bin-Main\")\n .appendTo(this.$)\n .html('

                            ' + _renkan.translate(\"Loading, please wait\") + '

                            ');\n this.title_$.html(_opts.title || '(new bin)');\n this.renkan.resizeBins();\n\n if (_opts.auto_refresh) {\n window.setInterval(function() {\n _this.refresh();\n }, _opts.auto_refresh);\n }\n }\n };\n\n _BaseBin.prototype.destroy = function() {\n this.$.detach();\n this.renkan.resizeBins();\n };\n\n /* Point of entry */\n\n var Renkan = Rkns.Renkan = function(_opts) {\n var _this = this;\n\n Rkns.__renkans.push(this);\n\n this.options = _.defaults(_opts, Rkns.defaults, {\n templates: _.defaults(_opts.templates, renkanJST) || renkanJST,\n node_editor_templates: _.defaults(_opts.node_editor_templates, Rkns.defaults.node_editor_templates)\n });\n this.template = this.options.templates['templates/main.html'];\n\n var types_templates = {};\n _.each(this.options.node_editor_templates, function(value, key) {\n types_templates[key] = _this.options.templates[value];\n delete _this.options.templates[value];\n });\n this.options.node_editor_templates = types_templates;\n\n _.each(this.options.property_files, function(f) {\n Rkns.$.getJSON(f, function(data) {\n _this.options.properties = _this.options.properties.concat(data);\n });\n });\n\n this.read_only = this.options.read_only || !this.options.editor_mode;\n\n this.router = new Rkns.Router();\n\n this.project = new Rkns.Models.Project();\n this.dataloader = new Rkns.DataLoader.Loader(this.project, this.options);\n\n this.setCurrentUser = function(user_id, user_name) {\n this.project.addUser({\n _id: user_id,\n title: user_name\n });\n this.current_user = user_id;\n this.renderer.redrawUsers();\n };\n\n if (typeof this.options.user_id !== \"undefined\") {\n this.current_user = this.options.user_id;\n }\n this.$ = Rkns.$(\"#\" + this.options.container);\n this.$\n .addClass(\"Rk-Main\")\n .html(this.template(this));\n\n this.tabs = [];\n this.search_engines = [];\n\n this.current_user_list = new Rkns.Models.UsersList();\n\n this.current_user_list.on(\"add remove\", function() {\n if (this.renderer) {\n this.renderer.redrawUsers();\n }\n });\n\n this.colorPicker = function(pickerClass) {\n var _tmpl = _this.options.templates['templates/colorpicker.html'];\n return '
                              ' + Rkns.pickerColors.map(function(c) {\n return _tmpl({\n c: c\n });\n }).join(\"\") + '
                            ';\n };\n\n if (this.options.show_editor) {\n this.renderer = new Rkns.Renderer.Scene(this);\n }\n\n if (!this.options.search.length) {\n this.$.find(\".Rk-Web-Search-Form\").detach();\n } else {\n var _tmpl = _this.options.templates['templates/search.html'],\n _select = this.$.find(\".Rk-Search-List\"),\n _input = this.$.find(\".Rk-Web-Search-Input\"),\n _form = this.$.find(\".Rk-Web-Search-Form\");\n _.each(this.options.search, function(_search, _key) {\n if (Rkns[_search.type] && Rkns[_search.type].Search) {\n _this.search_engines.push(new Rkns[_search.type].Search(_this, _search));\n }\n });\n _select.html(\n _(this.search_engines).map(function(_search, _key) {\n return _tmpl({\n key: _key,\n title: _search.getSearchTitle(),\n className: _search.getBgClass()\n });\n }).join(\"\")\n );\n _select.find(\"li\").click(function() {\n var _el = Rkns.$(this);\n _this.setSearchEngine(_el.attr(\"data-key\"));\n _form.submit();\n });\n _form.submit(function() {\n if (_input.val()) {\n var _search = _this.search_engine;\n _search.search(_input.val());\n }\n return false;\n });\n this.$.find(\".Rk-Search-Current\").mouseenter(\n function() {\n _select.slideDown();\n }\n );\n this.$.find(\".Rk-Search-Select\").mouseleave(\n function() {\n _select.hide();\n }\n );\n this.setSearchEngine(0);\n }\n _.each(this.options.bins, function(_bin) {\n if (Rkns[_bin.type] && Rkns[_bin.type].Bin) {\n _this.tabs.push(new Rkns[_bin.type].Bin(_this, _bin));\n }\n });\n\n var elementDropped = false;\n\n this.$.find(\".Rk-Bins\")\n .on(\"click\", \".Rk-Bin-Title,.Rk-Bin-Title-Icon\", function() {\n var _mainDiv = Rkns.$(this).siblings(\".Rk-Bin-Main\");\n if (_mainDiv.is(\":hidden\")) {\n _this.$.find(\".Rk-Bin-Main\").slideUp();\n _mainDiv.slideDown();\n }\n });\n\n if (this.options.show_editor) {\n\n this.$.find(\".Rk-Bins\").on(\"mouseover\", \".Rk-Bin-Item\", function(_e) {\n var _t = Rkns.$(this);\n if (_t && $(_t).attr(\"data-uri\")) {\n var _models = _this.project.get(\"nodes\").where({\n uri: $(_t).attr(\"data-uri\")\n });\n _.each(_models, function(_model) {\n _this.renderer.highlightModel(_model);\n });\n }\n }).mouseout(function() {\n _this.renderer.unhighlightAll();\n }).on(\"mousemove\", \".Rk-Bin-Item\", function(e) {\n try {\n this.dragDrop();\n } catch (err) {}\n }).on(\"touchstart\", \".Rk-Bin-Item\", function(e) {\n elementDropped = false;\n }).on(\"touchmove\", \".Rk-Bin-Item\", function(e) {\n e.preventDefault();\n var touch = e.originalEvent.changedTouches[0],\n off = _this.renderer.canvas_$.offset(),\n w = _this.renderer.canvas_$.width(),\n h = _this.renderer.canvas_$.height();\n if (touch.pageX >= off.left && touch.pageX < (off.left + w) && touch.pageY >= off.top && touch.pageY < (off.top + h)) {\n if (elementDropped) {\n _this.renderer.onMouseMove(touch, true);\n } else {\n elementDropped = true;\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n _this.renderer.dropData({\n \"text/html\": div.innerHTML\n }, touch);\n _this.renderer.onMouseDown(touch, true);\n }\n }\n }).on(\"touchend\", \".Rk-Bin-Item\", function(e) {\n if (elementDropped) {\n _this.renderer.onMouseUp(e.originalEvent.changedTouches[0], true);\n }\n elementDropped = false;\n }).on(\"dragstart\", \".Rk-Bin-Item\", function(e) {\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n try {\n e.originalEvent.dataTransfer.setData(\"text/html\", div.innerHTML);\n } catch (err) {\n e.originalEvent.dataTransfer.setData(\"text\", div.innerHTML);\n }\n });\n\n }\n\n Rkns.$(window).resize(function() {\n _this.resizeBins();\n });\n\n var lastsearch = false,\n lastval = '';\n\n this.$.find(\".Rk-Bins-Search-Input\").on(\"change keyup paste input\", function() {\n var val = Rkns.$(this).val();\n if (val === lastval) {\n return;\n }\n var search = Rkns.Utils.regexpFromTextOrArray(val.length > 1 ? val : null);\n if (search.source === lastsearch) {\n return;\n }\n lastsearch = search.source;\n _.each(_this.tabs, function(tab) {\n tab.render(search);\n });\n\n });\n this.$.find(\".Rk-Bins-Search-Form\").submit(function() {\n return false;\n });\n };\n\n Renkan.prototype.translate = function(_text) {\n if (Rkns.i18n[this.options.language] && Rkns.i18n[this.options.language][_text]) {\n return Rkns.i18n[this.options.language][_text];\n }\n if (this.options.language.length > 2 && Rkns.i18n[this.options.language.substr(0, 2)] && Rkns.i18n[this.options.language.substr(0, 2)][_text]) {\n return Rkns.i18n[this.options.language.substr(0, 2)][_text];\n }\n return _text;\n };\n\n Renkan.prototype.onStatusChange = function() {\n this.renderer.onStatusChange();\n };\n\n Renkan.prototype.setSearchEngine = function(_key) {\n this.search_engine = this.search_engines[_key];\n this.$.find(\".Rk-Search-Current\").attr(\"class\", \"Rk-Search-Current \" + this.search_engine.getBgClass());\n var listClasses = this.search_engine.getBgClass().split(\" \");\n var classes = \"\";\n for (var i = 0; i < listClasses.length; i++) {\n classes += \".\" + listClasses[i];\n }\n this.$.find(\".Rk-Web-Search-Input.Rk-Search-Input\").attr(\"placeholder\", this.translate(\"Search in \") + this.$.find(\".Rk-Search-List \" + classes).html());\n };\n\n Renkan.prototype.resizeBins = function() {\n var _d = +this.$.find(\".Rk-Bins-Head\").outerHeight();\n this.$.find(\".Rk-Bin-Title:visible\").each(function() {\n _d += Rkns.$(this).outerHeight();\n });\n this.$.find(\".Rk-Bin-Main\").css({\n height: this.$.find(\".Rk-Bins\").height() - _d\n });\n };\n\n /* Utility functions */\n var getUUID4 = function() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n Rkns.Utils = {\n\n OriginEnum: (function(o) { return (Object.freeze && Object.freeze(o)) || o; }) ({\n NONE: 0,\n NODE_BUTTON: 1,\n NODE_DOUBLE_CLICK: 2,\n NODE_DROP_EXT: 3,\n NODE_DROP_BIN: 4,\n EDGE_BUTTON_BAR: 256,\n EDGE_BUTTON_CIRCLE: 512\n }),\n\n getUUID4: getUUID4,\n getUID: (function() {\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n var _d = new Date(),\n ID_AUTO_INCREMENT = 0,\n ID_BASE = _d.getUTCFullYear() + '-' +\n pad(_d.getUTCMonth() + 1) + '-' +\n pad(_d.getUTCDate()) + '-' +\n getUUID4();\n return function(_base) {\n var _n = (++ID_AUTO_INCREMENT).toString(16),\n _uidbase = (typeof _base === \"undefined\" ? \"\" : _base + \"-\");\n while (_n.length < 4) {\n _n = '0' + _n;\n }\n return _uidbase + ID_BASE + '-' + _n;\n };\n })(),\n getFullURL: function(url) {\n\n if (typeof(url) === 'undefined' || url == null) {\n return \"\";\n }\n if (/https?:\\/\\//.test(url)) {\n return url;\n }\n var img = new Image();\n img.src = url;\n var res = img.src;\n img.src = null;\n return res;\n\n },\n inherit: function(_baseClass, _callbefore) {\n\n var _class = function(_arg) {\n if (typeof _callbefore === \"function\") {\n _callbefore.apply(this, Array.prototype.slice.call(arguments, 0));\n }\n _baseClass.apply(this, Array.prototype.slice.call(arguments, 0));\n if (typeof this._init === \"function\" && !this._initialized) {\n this._init.apply(this, Array.prototype.slice.call(arguments, 0));\n this._initialized = true;\n }\n };\n _.extend(_class.prototype, _baseClass.prototype);\n\n return _class;\n\n },\n regexpFromTextOrArray: (function() {\n var charsub = [\n '[aáàâä]',\n '[cç]',\n '[eéèêë]',\n '[iíìîï]',\n '[oóòôö]',\n '[uùûü]'\n ],\n removeChars = [\n String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \"【\", \"】\", \"、\", \"・\", \"‥\", \"。\", \"「\", \"」\", \"『\", \"』\", \"〜\", \":\", \"!\", \"?\", \" \",\n \",\", \" \", \";\", \"(\", \")\", \".\", \"*\", \"+\", \"\\\\\", \"?\", \"|\", \"{\", \"}\", \"[\", \"]\", \"^\", \"#\", \"/\"\n ],\n remsrc = \"[\\\\\" + removeChars.join(\"\\\\\") + \"]\",\n remrx = new RegExp(remsrc, \"gm\"),\n charsrx = _.map(charsub, function(c) {\n return new RegExp(c);\n });\n\n function replaceText(_text) {\n var txt = _text.toLowerCase().replace(remrx, \"\"),\n src = \"\";\n\n function makeReplaceFunc(l) {\n return function(k, v) {\n l = l.replace(charsrx[k], v);\n };\n }\n for (var j = 0; j < txt.length; j++) {\n if (j) {\n src += remsrc + \"*\";\n }\n var l = txt[j];\n _.each(charsub, makeReplaceFunc(l));\n src += l;\n }\n return src;\n }\n\n function getSource(inp) {\n switch (typeof inp) {\n case \"string\":\n return replaceText(inp);\n case \"object\":\n var src = '';\n _.each(inp, function(v) {\n var res = getSource(v);\n if (res) {\n if (src) {\n src += '|';\n }\n src += res;\n }\n });\n return src;\n }\n return '';\n }\n\n return function(_textOrArray) {\n var source = getSource(_textOrArray);\n if (source) {\n var testrx = new RegExp(source, \"im\"),\n replacerx = new RegExp('(' + source + ')', \"igm\");\n return {\n isempty: false,\n source: source,\n test: function(_t) {\n return testrx.test(_t);\n },\n replace: function(_text, _replace) {\n return _text.replace(replacerx, _replace);\n }\n };\n } else {\n return {\n isempty: true,\n source: '',\n test: function() {\n return true;\n },\n replace: function(_text) {\n return text;\n }\n };\n }\n };\n })(),\n /* The minimum distance (in pixels) the mouse has to move to consider an element was dragged */\n _MIN_DRAG_DISTANCE: 2,\n /* Distance between the inner and outer radius of buttons that appear when hovering on a node */\n _NODE_BUTTON_WIDTH: 40,\n\n _EDGE_BUTTON_INNER: 2,\n _EDGE_BUTTON_OUTER: 40,\n /* Constants used to know if a specific action is to be performed when clicking on the canvas */\n _CLICKMODE_ADDNODE: 1,\n _CLICKMODE_STARTEDGE: 2,\n _CLICKMODE_ENDEDGE: 4,\n /* Node size step: Used to calculate the size change when clicking the +/- buttons */\n _NODE_SIZE_STEP: Math.LN2 / 4,\n _MIN_SCALE: 1 / 20,\n _MAX_SCALE: 20,\n _MOUSEMOVE_RATE: 80,\n _DOUBLETAP_DELAY: 800,\n /* Maximum distance in pixels (squared, to reduce calculations)\n * between two taps when double-tapping on a touch terminal */\n _DOUBLETAP_DISTANCE: 20 * 20,\n /* A placeholder so a default colour is displayed when a node has a null value for its user property */\n _USER_PLACEHOLDER: function(_renkan) {\n return {\n color: _renkan.options.default_user_color,\n title: _renkan.translate(\"(unknown user)\"),\n get: function(attr) {\n return this[attr] || false;\n }\n };\n },\n /* The code for the \"Drag and Add Bookmarklet\", slightly minified and with whitespaces removed, though\n * it doesn't seem that it's still a requirement in newer browsers (i.e. the ones compatibles with canvas drawing)\n */\n _BOOKMARKLET_CODE: function(_renkan) {\n return \"(function(a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r){a=document;b=a.body;c=a.location.href;j='draggable';m='text/x-iri-';d=a.createElement('div');d.innerHTML='\" +\n _renkan.translate(\"Drag items from this website, drop them in Renkan\").replace(/ /g, \"_\") +\n \"

                            '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\\\/\\\\/[^\\\\/]*twitter\\\\.com\\\\//,s:'.tweet',n:'twitter'},{r:/https?:\\\\/\\\\/[^\\\\/]*google\\\\.[^\\\\/]+\\\\//,s:'.g',n:'google'},{r:/https?:\\\\/\\\\/[^\\\\/]*lemonde\\\\.fr\\\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();\";\n },\n /* Shortens text to the required length then adds ellipsis */\n shortenText: function(_text, _maxlength) {\n return (_text.length > _maxlength ? (_text.substr(0, _maxlength) + '…') : _text);\n },\n /* Drawing an edit box with an arrow and positioning the edit box according to the position of the node/edge being edited\n * Called by Rkns.Renderer.NodeEditor and Rkns.Renderer.EdgeEditor */\n drawEditBox: function(_options, _coords, _path, _xmargin, _selector, _renkan) {\n _selector.css({\n width: (_options.tooltip_width - 2 * _options.tooltip_padding)\n });\n \n var rect = _selector[0].getBoundingClientRect();\n var container_rect = _renkan.$[0].getBoundingClientRect();\n\n if(rect.bottom > (container_rect.bottom - 2 * _options.tooltip_padding - 10)) {\n _selector.css({\n 'overflow-x': 'hidden',\n 'overflow-y': 'scroll',\n 'max-height':(container_rect.bottom - 2 * _options.tooltip_padding - 5 - rect.top) + 'px'\n });\n }\n\n var _height = _selector.outerHeight() + 2 * _options.tooltip_padding + 5,\n _isLeft = (_coords.x < paper.view.center.x ? 1 : -1),\n _left = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length),\n _right = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length + _options.tooltip_width),\n _top = _coords.y - _height / 2;\n if (_top + _height > (paper.view.size.height - _options.tooltip_margin)) {\n _top = Math.max(paper.view.size.height - _options.tooltip_margin, _coords.y + _options.tooltip_arrow_width / 2) - _height;\n }\n if (_top < _options.tooltip_margin) {\n _top = Math.min(_options.tooltip_margin, _coords.y - _options.tooltip_arrow_width / 2);\n }\n var _bottom = _top + _height;\n /* jshint laxbreak:true */\n _path.segments[0].point = _path.segments[7].point = _coords.add([_isLeft * _xmargin, 0]);\n _path.segments[1].point.x = _path.segments[2].point.x = _path.segments[5].point.x = _path.segments[6].point.x = _left;\n _path.segments[3].point.x = _path.segments[4].point.x = _right;\n _path.segments[2].point.y = _path.segments[3].point.y = _top;\n _path.segments[4].point.y = _path.segments[5].point.y = _bottom;\n _path.segments[1].point.y = _coords.y - _options.tooltip_arrow_width / 2;\n _path.segments[6].point.y = _coords.y + _options.tooltip_arrow_width / 2;\n _path.fillColor = new paper.Color(new paper.Gradient([_options.tooltip_top_color, _options.tooltip_bottom_color]), [0, _top], [0, _bottom]);\n\n _selector.css({\n left: (_options.tooltip_padding + Math.min(_left, _right)),\n top: (_options.tooltip_padding + _top)\n });\n \n return _path;\n },\n // from http://stackoverflow.com/a/6444043\n increaseBrightness: function (hex, percent){\n // strip the leading # if it's there\n hex = hex.replace(/^\\s*#|\\s*$/g, '');\n\n // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`\n if(hex.length === 3){\n hex = hex.replace(/(.)/g, '$1$1');\n }\n\n var r = parseInt(hex.substr(0, 2), 16),\n g = parseInt(hex.substr(2, 2), 16),\n b = parseInt(hex.substr(4, 2), 16);\n\n return '#' +\n ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);\n }\n };\n})(window);\n\n/* END main.js */\n","(function(root) {\n \"use strict\";\n \n var Backbone = root.Backbone;\n \n var Router = root.Rkns.Router = Backbone.Router.extend({\n routes: {\n '': 'index'\n },\n \n index: function (parameters) {\n \n var result = {};\n if (parameters !== null){\n parameters.split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n this.trigger('router', result); \n } \n });\n\n})(window);","(function(root) {\n\n \"use strict\";\n\n var DataLoader = root.Rkns.DataLoader = {\n converters: {\n from1to2: function(data) {\n\n var i, len;\n if(typeof data.nodes !== 'undefined') {\n for(i=0, len=data.nodes.length; i 1 ? options.offset[1]\n : options.offset[0];\n }\n else if (options.offset.x != null) {\n offset.x = options.offset.x;\n offset.y = options.offset.y;\n }\n options.offset = offset;\n }\n return options;\n },\n toJSON : function() {\n return {\n _id : this.get('_id'),\n zoom_level : this.get('zoom_level'),\n offset : this.get('offset'),\n title : this.get('title'),\n description : this.get('description'),\n created_by : this.get('created_by') ? this.get('created_by')\n .get('_id') : null,\n hidden_nodes: this.get('hidden_nodes')\n // Don't need project id\n };\n }\n });\n\n // PROJECT\n var Project = Models.Project = RenkanModel.extend({\n schema_version : '2',\n type : 'project',\n blacklist : [ 'saveStatus', 'loadingStatus'],\n relations : [ {\n type : Backbone.HasMany,\n key : 'users',\n relatedModel : User,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'nodes',\n relatedModel : Node,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'edges',\n relatedModel : Edge,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'views',\n relatedModel : View,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n } ],\n addUser : function(_props, _options) {\n _props.project = this;\n var _user = User.findOrCreate(_props);\n this.get('users').push(_user, _options);\n return _user;\n },\n addNode : function(_props, _options) {\n _props.project = this;\n var _node = Node.findOrCreate(_props);\n this.get('nodes').push(_node, _options);\n return _node;\n },\n addEdge : function(_props, _options) {\n _props.project = this;\n var _edge = Edge.findOrCreate(_props);\n this.get('edges').push(_edge, _options);\n return _edge;\n },\n addView : function(_props, _options) {\n _props.project = this;\n // TODO: check if need to replace with create only\n var _view = View.findOrCreate(_props);\n // TODO: Should we remember only one view?\n this.get('views').push(_view, _options);\n return _view;\n },\n removeNode : function(_model) {\n this.get('nodes').remove(_model);\n },\n removeEdge : function(_model) {\n this.get('edges').remove(_model);\n },\n validate : function(options) {\n var _project = this;\n _.each(\n [].concat(options.users, options.nodes, options.edges,options.views),\n function(_item) {\n if (_item) {\n _item.project = _project;\n }\n }\n );\n },\n getSchemaVersion : function(data) {\n var t = data;\n if(typeof(t) === 'undefined') {\n t = this;\n }\n var version = t.schema_version;\n if(!version) {\n return 1;\n }\n else {\n return version;\n }\n },\n // Add event handler to remove edges when a node is removed\n initialize : function() {\n var _this = this;\n this.on('remove:nodes', function(_node) {\n _this.get('edges').remove(\n _this.get('edges').filter(\n function(_edge) {\n return _edge.get('from') === _node ||\n _edge.get('to') === _node;\n }));\n });\n },\n toJSON : function() {\n var json = _.clone(this.attributes);\n for ( var attr in json) {\n if ((json[attr] instanceof Backbone.Model) ||\n (json[attr] instanceof Backbone.Collection) ||\n (json[attr] instanceof RenkanModel)) {\n json[attr] = json[attr].toJSON();\n }\n }\n return _.omit(json, this.blacklist);\n }\n });\n\n var RosterUser = Models.RosterUser = Backbone.Model\n .extend({\n type : 'roster_user',\n idAttribute : '_id',\n\n constructor : function(options) {\n\n if (typeof options !== 'undefined') {\n options._id = options._id ||\n options.id ||\n Models.getUID(this);\n options.title = options.title || '(untitled ' + this.type + ')';\n options.description = options.description || '';\n options.uri = options.uri || '';\n options.project = options.project || null;\n options.site_id = options.site_id || 0;\n\n if (typeof this.prepare === 'function') {\n options = this.prepare(options);\n }\n }\n Backbone.Model.prototype.constructor.call(this, options);\n },\n\n validate : function() {\n if (!this.type) {\n return 'object has no type';\n }\n },\n\n prepare : function(options) {\n options.color = options.color || '#666666';\n return options;\n },\n\n toJSON : function() {\n return {\n _id : this.get('_id'),\n title : this.get('title'),\n uri : this.get('uri'),\n description : this.get('description'),\n color : this.get('color'),\n project : (this.get('project') != null) ? this.get(\n 'project').get('id') : null,\n site_id : this.get('site_id')\n };\n }\n });\n\n var UsersList = Models.UsersList = Backbone.Collection.extend({\n model : RosterUser\n });\n\n})(window);\n","Rkns.defaults = {\n\n language: (navigator.language || navigator.userLanguage || \"en\"),\n /* GUI Language */\n container: \"renkan\",\n /* GUI Container DOM element ID */\n search: [],\n /* List of Search Engines */\n bins: [],\n /* List of Bins */\n static_url: \"\",\n /* URL for static resources */\n popup_editor: true,\n /* show the node editor as a popup inside the renkan view */\n editor_panel: 'editor-panel',\n /* GUI continer DOM element ID of the editor panel */\n show_bins: true,\n /* Show bins in left column */\n properties: [],\n /* Semantic properties for edges */\n show_editor: true,\n /* Show the graph editor... Setting this to \"false\" only shows the bins part ! */\n read_only: false,\n /* Allows editing of renkan without changing the rest of the GUI. Can be switched on/off on the fly to block/enable editing */\n editor_mode: true,\n /* Switch for Publish/Edit GUI. If editor_mode is false, read_only will be true. */\n manual_save: false,\n /* In snapshot mode, clicking on the floppy will save a snapshot. Otherwise, it will show the connection status */\n show_top_bar: true,\n /* Show the top bar, (title, buttons, users) */\n default_user_color: \"#303030\",\n size_bug_fix: false,\n /* Resize the canvas after load (fixes a bug on iPad and FF Mac) */\n force_resize: false,\n allow_double_click: true,\n /* Allows Double Click to create a node on an empty background */\n double_click_open_url: true,\n /* In read_only mode open node uri in new window with a double click */\n simple_click_open_url: false,\n /* In read_only mode open node uri in new window with a simple click (do not disable the double click) */\n zoom_on_scroll: true,\n /* Allows to use the scrollwheel to zoom */\n element_delete_delay: 0,\n /* Delay between clicking on the bin on an element and really deleting it\n Set to 0 for delete confirm */\n autoscale_padding: 50,\n resize: true,\n\n /* zoom options */\n show_zoom: true,\n /* show zoom buttons */\n save_view: true,\n /* show buttons to save view */\n view_force_autoscale: true,\n /* Force autoscale when the Renkan is loaded */\n view_show_hiddennodes: true,\n /* Show all the node when the Renkan is loaded */\n default_index_view: -1,\n\n /* URL parsing */\n url_parameters: true,\n /* accept or not hash parameters in the url */\n update_url: true,\n /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */\n /* Considered as false if url_parameters is false */\n\n\n /* TOP BAR BUTTONS */\n show_search_field: true,\n show_user_list: true,\n /* show the user list */\n user_name_editable: true,\n /* allow the edition of the user name */\n user_color_editable: true,\n /* allow the edition of the user color */\n title_editable: true,\n /* allow the edition of the renkan title */\n show_user_color: true,\n /* show user colors in the list */\n show_save_button: true,\n show_export_button: true,\n show_open_button: false,\n show_addnode_button: true,\n show_addedge_button: true,\n show_bookmarklet: true,\n show_fullscreen_button: true,\n home_button_url: false,\n home_button_title: \"Home\",\n\n /* MINI-MAP OPTIONS */\n\n show_minimap: true,\n /* Show a small map at the bottom right */\n minimap_width: 160,\n minimap_height: 120,\n minimap_padding: 20,\n minimap_background_color: \"#ffffff\",\n minimap_border_color: \"#cccccc\",\n minimap_highlight_color: \"#ffff00\",\n minimap_highlight_weight: 5,\n\n\n /* EDGE/NODE COMMON OPTIONS */\n\n buttons_background: \"#202020\",\n buttons_label_color: \"#c000c0\",\n buttons_label_font_size: 9,\n\n ghost_opacity : 0.3,\n /* opacity when the hidden element is revealed */\n default_dash_array : [4, 5],\n /* dash line genometry */\n\n /* NODE DISPLAY OPTIONS */\n\n show_node_circles: true,\n /* Show circles for nodes */\n clip_node_images: true,\n /* Constraint node images to circles */\n node_images_fill_mode: false,\n /* Set to false for \"letterboxing\" (height/width of node adapted to show full image)\n Set to true for \"crop\" (adapted to fill circle) */\n node_size_base: 25,\n node_stroke_width: 2,\n node_stroke_max_width: 12,\n selected_node_stroke_width: 4,\n selected_node_stroke_max_width: 24,\n node_stroke_witdh_scale: 5,\n node_title_size_min: 0,\n /* minimum relative size for node title (in graph) */\n node_title_size_max: 5,\n /* maximum relative size for node title (in graph) */\n node_title_size_step: 0.1,\n /* step for relative size for node title (in graph) */\n node_fill_color: \"#ffffff\",\n /* default color to fill node background */\n highlighted_node_fill_color: \"#ffff00\",\n /* default color to fill highlighted node background */\n node_title_color: \"#000000\",\n /* default title color */\n node_label_distance: 5,\n /* Vertical distance between node and label */\n node_label_max_length: 60,\n /* Maximum displayed text length */\n label_untitled_nodes: \"(untitled)\",\n /* Label to display on untitled nodes */\n hide_nodes: true,\n /* allow hide/show nodes */\n change_shapes: true,\n /* Change shapes enabled */\n change_types: true,\n /* Change type enabled */\n\n /* NODE EDITOR TEMPLATE*/\n\n node_editor_templates: {\n \"default\": \"templates/nodeeditor_readonly.html\",\n \"video\": \"templates/nodeeditor_video.html\"\n },\n\n /* EDGE DISPLAY OPTIONS */\n\n edge_stroke_width: 2,\n edge_stroke_max_width: 12,\n selected_edge_stroke_width: 4,\n selected_edge_stroke_max_width: 24,\n edge_stroke_witdh_scale: 5,\n\n edge_label_distance: 0,\n edge_label_max_length: 20,\n edge_arrow_length: 18,\n edge_arrow_width: 12,\n edge_arrow_max_width: 32,\n edge_gap_in_bundles: 12,\n highlighted_edge_color: \"#ffff00\",\n label_untitled_edges: \"\",\n\n /* CONTEXTUAL DISPLAY (TOOLTIP OR EDITOR) OPTIONS */\n\n tooltip_width: 275,\n tooltip_padding: 10,\n tooltip_margin: 15,\n tooltip_arrow_length : 20,\n tooltip_arrow_width : 40,\n tooltip_top_color: \"#f0f0f0\",\n tooltip_bottom_color: \"#d0d0d0\",\n tooltip_border_color: \"#808080\",\n tooltip_border_width: 1,\n tooltip_opacity: 0.8,\n\n richtext_editor_config: {\n toolbarGroups: [\n { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n { name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n '/',\n\t { name: 'styles'},\n ],\n removePlugins : 'colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates',\n },\n\n /* NODE EDITOR OPTIONS */\n\n show_node_title_style: true,\n show_node_editor_uri: true,\n show_node_editor_title: true,\n show_node_editor_title_richtext: true,\n show_node_editor_description: true,\n show_node_editor_description_richtext: true,\n show_node_editor_size: true,\n show_node_editor_style: true, // show node title style editor\n show_node_editor_style_color: true,\n show_node_editor_style_dash: true,\n show_node_editor_style_thickness: true,\n show_node_editor_image: true,\n show_node_editor_creator: true,\n allow_image_upload: true,\n uploaded_image_max_kb: 500,\n\n\n /* NODE TOOLTIP OPTIONS */\n\n show_node_tooltip_uri: true,\n show_node_tooltip_description: true,\n show_node_tooltip_color: true,\n show_node_tooltip_image: true,\n show_node_tooltip_creator: true,\n\n /* EDGE EDITOR OPTIONS */\n\n show_edge_editor_uri: true,\n show_edge_editor_style: true,\n show_edge_editor_style_color: true,\n show_edge_editor_style_dash: true,\n show_edge_editor_style_thickness: true,\n show_edge_editor_style_arrow: true,\n show_edge_editor_direction: true,\n show_edge_editor_nodes: true,\n show_edge_editor_creator: true,\n\n /* EDGE TOOLTIP OPTIONS */\n\n show_edge_tooltip_uri: true,\n show_edge_tooltip_color: true,\n show_edge_tooltip_nodes: true,\n show_edge_tooltip_creator: true,\n\n};\n","Rkns.i18n = {\n fr: {\n \"Edit Node\": \"Édition d’un nœud\",\n \"Edit Edge\": \"Édition d’un lien\",\n \"Title:\": \"Titre :\",\n \"URI:\": \"URI :\",\n \"Description:\": \"Description :\",\n \"From:\": \"De :\",\n \"To:\": \"Vers :\",\n \"Image\": \"Image\",\n \"Image URL:\": \"URL d'Image\",\n \"Choose Image File:\": \"Choisir un fichier image\",\n \"Full Screen\": \"Mode plein écran\",\n \"Add Node\": \"Ajouter un nœud\",\n \"Add Edge\": \"Ajouter un lien\",\n \"Save Project\": \"Enregistrer le projet\",\n \"Open Project\": \"Ouvrir un projet\",\n \"Auto-save enabled\": \"Enregistrement automatique activé\",\n \"Connection lost\": \"Connexion perdue\",\n \"Created by:\": \"Créé par :\",\n \"Zoom In\": \"Agrandir l’échelle\",\n \"Zoom Out\": \"Rapetisser l’échelle\",\n \"Edit\": \"Éditer\",\n \"Remove\": \"Supprimer\",\n \"Cancel deletion\": \"Annuler la suppression\",\n \"Link to another node\": \"Créer un lien\",\n \"Enlarge\": \"Agrandir\",\n \"Shrink\": \"Rétrécir\",\n \"Click on the background canvas to add a node\": \"Cliquer sur le fond du graphe pour rajouter un nœud\",\n \"Click on a first node to start the edge\": \"Cliquer sur un premier nœud pour commencer le lien\",\n \"Click on a second node to complete the edge\": \"Cliquer sur un second nœud pour terminer le lien\",\n \"Wikipedia\": \"Wikipédia\",\n \"Wikipedia in \": \"Wikipédia en \",\n \"French\": \"Français\",\n \"English\": \"Anglais\",\n \"Japanese\": \"Japonais\",\n \"Untitled project\": \"Projet sans titre\",\n \"Lignes de Temps\": \"Lignes de Temps\",\n \"Loading, please wait\": \"Chargement en cours, merci de patienter\",\n \"Edge color:\": \"Couleur :\",\n \"Dash:\": \"Point. :\",\n \"Thickness:\": \"Epaisseur :\",\n \"Arrow:\": \"Flèche :\",\n \"Node color:\": \"Couleur :\",\n \"Choose color\": \"Choisir une couleur\",\n \"Change edge direction\": \"Changer le sens du lien\",\n \"Do you really wish to remove node \": \"Voulez-vous réellement supprimer le nœud \",\n \"Do you really wish to remove edge \": \"Voulez-vous réellement supprimer le lien \",\n \"This file is not an image\": \"Ce fichier n'est pas une image\",\n \"Image size must be under \": \"L'image doit peser moins de \",\n \"Size:\": \"Taille :\",\n \"KB\": \"ko\",\n \"Choose from vocabulary:\": \"Choisir dans un vocabulaire :\",\n \"SKOS Documentation properties\": \"SKOS: Propriétés documentaires\",\n \"has note\": \"a pour note\",\n \"has example\": \"a pour exemple\",\n \"has definition\": \"a pour définition\",\n \"SKOS Semantic relations\": \"SKOS: Relations sémantiques\",\n \"has broader\": \"a pour concept plus large\",\n \"has narrower\": \"a pour concept plus étroit\",\n \"has related\": \"a pour concept apparenté\",\n \"Dublin Core Metadata\": \"Métadonnées Dublin Core\",\n \"has contributor\": \"a pour contributeur\",\n \"covers\": \"couvre\",\n \"created by\": \"créé par\",\n \"has date\": \"a pour date\",\n \"published by\": \"édité par\",\n \"has source\": \"a pour source\",\n \"has subject\": \"a pour sujet\",\n \"Dragged resource\": \"Ressource glisée-déposée\",\n \"Search the Web\": \"Rechercher en ligne\",\n \"Search in Bins\": \"Rechercher dans les chutiers\",\n \"Close bin\": \"Fermer le chutier\",\n \"Refresh bin\": \"Rafraîchir le chutier\",\n \"(untitled)\": \"(sans titre)\",\n \"Select contents:\": \"Sélectionner des contenus :\",\n \"Drag items from this website, drop them in Renkan\": \"Glissez des éléments de ce site web vers Renkan\",\n \"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\": \"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan\",\n \"Shapes available\": \"Formes disponibles\",\n \"Circle\": \"Cercle\",\n \"Square\": \"Carré\",\n \"Diamond\": \"Losange\",\n \"Hexagone\": \"Hexagone\",\n \"Ellipse\": \"Ellipse\",\n \"Star\": \"Étoile\",\n \"Cloud\": \"Nuage\",\n \"Triangle\": \"Triangle\",\n \"Polygon\": \"Polygone\",\n \"Zoom Fit\": \"Ajuster le Zoom\",\n \"Download Project\": \"Télécharger le projet\",\n \"Save view\": \"Sauver la vue\",\n \"View saved view\": \"Restaurer la Vue\",\n \"Renkan \\'Drag-to-Add\\' bookmarklet\": \"Renkan \\'Deplacer-Pour-Ajouter\\' Signet\",\n \"(unknown user)\":\"(non authentifié)\",\n \"\":\"\",\n \"Search in graph\":\"Rechercher dans carte\",\n \"Search in \" : \"Chercher dans \",\n \"Show hidden nodes\": \"Montrer les noeuds cachés\",\n \"Show neighbors\": \"Montrer les voisins\",\n \"Hide\": \"Cacher\",\n \"Fullscreen not supported by your browser\": \"Le plein écran n'est pas supporté par votre navigateur\",\n \"Title size:\": \"Taille :\",\n \"Title color:\": \"Couleur :\",\n \"Video link\": \"Lien vidéo\"\n }\n};\n","/* Saves the Full JSON at each modification */\n\nRkns.jsonIO = function(_renkan, _opts) {\n var _proj = _renkan.project;\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'PUT';\n }\n var _load = function() {\n _proj.set({\n loadingStatus : true\n });\n Rkns.$.getJSON(_opts.url, function(_data) {\n _renkan.dataloader.load(_data);\n \n _proj.set({\n loadingStatus : false\n });\n _proj.set({\n saveStatus : 0\n });\n });\n };\n var _save = function() {\n _proj.set({\n saveStatus : 2\n });\n var _data = _proj.toJSON();\n if (!_renkan.read_only) {\n Rkns.$.ajax({\n type : _opts.http_method,\n url : _opts.url,\n contentType : \"application/json\",\n data : JSON.stringify(_data),\n success : function(data, textStatus, jqXHR) {\n _proj.set({\n saveStatus : 0\n });\n }\n });\n }\n\n };\n var _thrSave = Rkns._.throttle(function() {\n setTimeout(_save, 100);\n }, 1000);\n \n //TODO: Rearrange to avoid the 2 firts PUT due to a change in the project model\n // Take car of setting up the listener correctly to listen the save action on the view\n _proj.on(\"add:nodes add:edges add:users add:views\", function(_model) {\n _model.on(\"change remove\", function(_model) {\n _thrSave();\n });\n _thrSave();\n });\n _proj.on(\"change\", function() {\n if (!(_proj.changedAttributes.length === 1 && _proj\n .hasChanged('saveStatus'))) {\n _thrSave();\n }\n });\n\n _load();\n};\n","/* Saves the Full JSON once */\n\nRkns.jsonIOSaveOnClick = function(_renkan, _opts) {\n var _proj = _renkan.project,\n _saveWarn = false,\n _onLeave = function() {\n return \"Project not saved\";\n };\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'POST';\n }\n var _load = function() {\n var getdata = {},\n rx = /id=([^&#?=]+)/,\n matches = document.location.hash.match(rx);\n if (matches) {\n getdata.id = matches[1];\n }\n Rkns.$.ajax({\n url: _opts.url,\n data: getdata,\n beforeSend: function(){\n \t_proj.set({loadingStatus:true});\n },\n success: function(_data) {\n _renkan.dataloader.load(_data);\n _proj.set({loadingStatus:false});\n _proj.set({saveStatus:0});\n }\n });\n };\n var _save = function() {\n _proj.set(\"saved_at\", new Date());\n var _data = _proj.toJSON();\n Rkns.$.ajax({\n type: _opts.http_method,\n url: _opts.url,\n contentType: \"application/json\",\n data: JSON.stringify(_data),\n beforeSend: function(){\n \t_proj.set({saveStatus:2});\n },\n success: function(data, textStatus, jqXHR) {\n $(window).off(\"beforeunload\", _onLeave);\n _saveWarn = false;\n _proj.set({saveStatus:0});\n //document.location.hash = \"#id=\" + data.id;\n //$(\".Rk-Notifications\").text(\"Saved as \"+document.location.href).fadeIn().delay(2000).fadeOut();\n }\n });\n };\n var _checkLeave = function() {\n \t_proj.set({saveStatus:1});\n\n var title = _proj.get(\"title\");\n if (title && _proj.get(\"nodes\").length) {\n $(\".Rk-Save-Button\").removeClass(\"disabled\");\n } else {\n $(\".Rk-Save-Button\").addClass(\"disabled\");\n }\n if (title) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#333333\");\n }\n if (!_saveWarn) {\n _saveWarn = true;\n $(window).on(\"beforeunload\", _onLeave);\n }\n };\n _load();\n _proj.on(\"add:nodes add:edges add:users change\", function(_model) {\n\t _model.on(\"change remove\", function(_model) {\n\t \tif(!(_model.changedAttributes.length === 1 && _model.hasChanged('saveStatus'))) {\n\t \t\t_checkLeave();\n\t \t}\n\t });\n\t\tif(!(_proj.changedAttributes.length === 1 && _proj.hasChanged('saveStatus'))) {\n\t\t _checkLeave();\n \t}\n });\n _renkan.renderer.save = function() {\n if ($(\".Rk-Save-Button\").hasClass(\"disabled\")) {\n if (!_proj.get(\"title\")) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#ff0000\");\n }\n } else {\n _save();\n }\n };\n};\n","(function(Rkns) {\n\"use strict\";\n\nvar _ = Rkns._;\n\nvar Ldt = Rkns.Ldt = {};\n\nvar Bin = Ldt.Bin = function(_renkan, _opts) {\n if (_opts.ldt_type) {\n var Resclass = Ldt[_opts.ldt_type+\"Bin\"];\n if (Resclass) {\n return new Resclass(_renkan, _opts);\n }\n }\n console.error(\"No such LDT Bin Type\");\n};\n\nvar ProjectBin = Ldt.ProjectBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nProjectBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.tagTemplate = _renkan.options.templates['templates/ldtjson-bin/tagtemplate.html'];\n this.annotationTemplate = _renkan.options.templates['templates/ldtjson-bin/annotationtemplate.html'];\n this.proj_id = _opts.project_id;\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.title_$.html(_opts.title);\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nProjectBin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '
                          • Tags

                          • ',\n _projtitle = this.data.meta[\"dc:title\"],\n _this = this,\n count = 0;\n _this.title_$.text('LDT Project: \"' + _projtitle + '\"');\n _.map(_this.data.tags,function(_tag) {\n var _title = _tag.meta[\"dc:title\"];\n if (!search.isempty && !search.test(_title)) {\n return;\n }\n count++;\n _html += _this.tagTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n encodedtitle : encodeURIComponent(_title),\n static_url: _this.renkan.options.static_url\n });\n });\n _html += '
                          • Annotations

                          • ';\n _.map(_this.data.annotations,function(_annotation) {\n var _description = _annotation.content.description,\n _title = _annotation.content.title.replace(_description,\"\");\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _annotation.end - _annotation.begin,\n _img = (\n (_annotation.content && _annotation.content.img && _annotation.content.img.src) ?\n _annotation.content.img.src :\n ( _duration ? _this.renkan.options.static_url+\"img/ldt-segment.png\" : _this.renkan.options.static_url+\"img/ldt-point.png\" )\n );\n _html += _this.annotationTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_annotation.begin),\n end: convertTC(_annotation.end),\n duration: convertTC(_duration),\n mediaid: _annotation.media,\n annotationid: _annotation.id,\n image: _img,\n static_url: _this.renkan.options.static_url\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nProjectBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/ldt/cljson/id/' + this.proj_id,\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\nvar Search = Ldt.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nSearch.prototype.getBgClass = function() {\n return \"Rk-Ldt-Icon\";\n};\n\nSearch.prototype.getSearchTitle = function() {\n return this.renkan.translate(\"Lignes de Temps\");\n};\n\nSearch.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new ResultsBin(this.renkan, {\n search: _q\n })\n );\n};\n\nvar ResultsBin = Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nResultsBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.segmentTemplate = _renkan.options.templates['templates/ldtjson-bin/segmenttemplate.html'];\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.max_results = _opts.max_results || 50;\n this.search = _opts.search;\n this.title_$.html('Lignes de Temps: \"' + _opts.search + '\"');\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nResultsBin.prototype.render = function(searchbase) {\n if (!this.data) {\n return;\n }\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '',\n _this = this,\n count = 0;\n _.each(this.data.objects,function(_segment) {\n var _description = _segment.abstract,\n _title = _segment.title;\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _segment.duration,\n _begin = _segment.start_ts,\n _end = + _segment.duration + _begin,\n _img = (\n _duration ?\n _this.renkan.options.static_url + \"img/ldt-segment.png\" :\n _this.renkan.options.static_url + \"img/ldt-point.png\"\n );\n _html += _this.segmentTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_begin),\n end: convertTC(_end),\n duration: convertTC(_duration),\n mediaid: _segment.iri_id,\n //projectid: _segment.project_id,\n //cuttingid: _segment.cutting_id,\n annotationid: _segment.element_id,\n image: _img\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nResultsBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',\n data: {\n format: \"jsonp\",\n q: this.search,\n limit: this.max_results\n },\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\n})(window.Rkns);\n","Rkns.ResourceList = {};\n\nRkns.ResourceList.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.ResourceList.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.resultTemplate = _renkan.options.templates['templates/list-bin.html'];\n this.title_$.html(_opts.title);\n if (_opts.list) {\n this.data = _opts.list;\n }\n this.refresh();\n};\n\nRkns.ResourceList.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data,function(_item) {\n var _element;\n if (typeof _item === \"string\") {\n if (/^(https?:\\/\\/|www)/.test(_item)) {\n _element = { url: _item };\n } else {\n _element = { title: _item.replace(/[:,]?\\s?(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+\\s?/,'').trim() };\n var _match = _item.match(/(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+/);\n if (_match) {\n _element.url = _match[0];\n }\n if (_element.title.length > 80) {\n _element.description = _element.title;\n _element.title = _element.title.replace(/^(.{30,60})\\s.+$/,'$1…');\n }\n }\n } else {\n _element = _item;\n }\n var title = _element.title || (_element.url || \"\").replace(/^https?:\\/\\/(www\\.)?/,'').replace(/^(.{40}).+$/,'$1…'),\n url = _element.url || \"\",\n description = _element.description || \"\",\n image = _element.image || \"\";\n if (url && !/^https?:\\/\\//.test(url)) {\n url = 'http://' + url;\n }\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n image: image,\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.ResourceList.Bin.prototype.refresh = function() {\n if (this.data) {\n this.render();\n }\n};\n","Rkns.Wikipedia = {\n};\n\nRkns.Wikipedia.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nRkns.Wikipedia.Search.prototype.getBgClass = function() {\n return \"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-\" + this.lang;\n};\n\nRkns.Wikipedia.Search.prototype.getSearchTitle = function() {\n var langs = {\n \"fr\": \"French\",\n \"en\": \"English\",\n \"ja\": \"Japanese\"\n };\n if (langs[this.lang]) {\n return this.renkan.translate(\"Wikipedia in \") + this.renkan.translate(langs[this.lang]);\n } else {\n return this.renkan.translate(\"Wikipedia\") + \" [\" + this.lang + \"]\";\n }\n};\n\nRkns.Wikipedia.Search.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new Rkns.Wikipedia.Bin(this.renkan, {\n lang: this.lang,\n search: _q\n })\n );\n};\n\nRkns.Wikipedia.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.Wikipedia.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.search = _opts.search;\n this.resultTemplate = _renkan.options.templates['templates/wikipedia-bin/resulttemplate.html'];\n this.lang = _opts.lang || \"en\";\n this.title_icon_$.addClass('Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-' + this.lang);\n this.title_$.html(this.search).addClass(\"Rk-Wikipedia-Title\");\n this.refresh();\n};\n\nRkns.Wikipedia.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data.query.search, function(_result) {\n var title = _result.title,\n url = \"http://\" + _this.lang + \".wikipedia.org/wiki/\" + encodeURI(title.replace(/ /g,\"_\")),\n description = Rkns.$('
                            ').html(_result.snippet).text();\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.Wikipedia.Bin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: \"http://\" + _this.lang + \".wikipedia.org/w/api.php?action=query&list=search&srsearch=\" + encodeURIComponent(this.search) + \"&format=json\",\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n","\ndefine('renderer/baserepresentation',['jquery', 'underscore'], function ($, _) {\n 'use strict';\n\n /* Rkns.Renderer._BaseRepresentation Class */\n\n /* In Renkan, a \"Representation\" is a sort of ViewModel (in the MVVM paradigm) and bridges the gap between\n * models (written with Backbone.js) and the view (written with Paper.js)\n * Renkan's representations all inherit from Rkns.Renderer._BaseRepresentation '*/\n\n var _BaseRepresentation = function(_renderer, _model) {\n if (typeof _renderer !== \"undefined\") {\n this.renderer = _renderer;\n this.renkan = _renderer.renkan;\n this.project = _renderer.renkan.project;\n this.options = _renderer.renkan.options;\n this.model = _model;\n if (this.model) {\n var _this = this;\n this._changeBinding = function() {\n _this.redraw({change: true});\n };\n this._removeBinding = function() {\n _renderer.removeRepresentation(_this);\n _.defer(function() {\n _renderer.redraw();\n });\n };\n this._selectBinding = function() {\n _this.select();\n };\n this._unselectBinding = function() {\n _this.unselect();\n };\n this.model.on(\"change\", this._changeBinding );\n this.model.on(\"remove\", this._removeBinding );\n this.model.on(\"select\", this._selectBinding );\n this.model.on(\"unselect\", this._unselectBinding );\n }\n }\n };\n\n /* Rkns.Renderer._BaseRepresentation Methods */\n\n _(_BaseRepresentation.prototype).extend({\n _super: function(_func) {\n return _BaseRepresentation.prototype[_func].apply(this, Array.prototype.slice.call(arguments, 1));\n },\n redraw: function() {},\n moveTo: function() {},\n show: function() { return \"BaseRepresentation.show\"; },\n hide: function() {},\n select: function() {\n if (this.model) {\n this.model.trigger(\"selected\");\n }\n },\n unselect: function() {\n if (this.model) {\n this.model.trigger(\"unselected\");\n }\n },\n highlight: function() {},\n unhighlight: function() {},\n mousedown: function() {},\n mouseup: function() {\n if (this.model) {\n this.model.trigger(\"clicked\");\n }\n },\n destroy: function() {\n if (this.model) {\n this.model.off(\"change\", this._changeBinding );\n this.model.off(\"remove\", this._removeBinding );\n this.model.off(\"select\", this._selectBinding );\n this.model.off(\"unselect\", this._unselectBinding );\n }\n }\n }).value();\n\n /* End of Rkns.Renderer._BaseRepresentation Class */\n\n return _BaseRepresentation;\n\n});\n\ndefine('requtils',[], function ($, _) {\n 'use strict';\n return {\n getUtils: function(){\n return window.Rkns.Utils;\n },\n getRenderer: function(){\n return window.Rkns.Renderer;\n }\n };\n\n});\n\n\ndefine('renderer/basebutton',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer._BaseButton Class */\n\n /* BaseButton is extended by contextual buttons that appear when hovering on nodes and edges */\n\n var _BaseButton = Utils.inherit(BaseRepresentation);\n\n _(_BaseButton.prototype).extend({\n moveTo: function(_pos) {\n this.sector.moveTo(_pos);\n },\n show: function() {\n this.sector.show();\n },\n hide: function() {\n if (this.sector){\n this.sector.hide();\n }\n },\n select: function() {\n this.sector.select();\n },\n unselect: function(_newTarget) {\n this.sector.unselect();\n if (!_newTarget || (_newTarget !== this.source_representation && _newTarget.source_representation !== this.source_representation)) {\n this.source_representation.unselect();\n }\n },\n destroy: function() {\n this.sector.destroy();\n }\n }).value();\n\n return _BaseButton;\n\n});\n\n\ndefine('renderer/shapebuilder',[], function () {\n 'use strict';\n\n var cloud_path = \"M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z\";\n /* ShapeBuilder Begin */\n\n var builders = {\n \"circle\":{\n getShape: function() {\n return new paper.Path.Circle([0, 0], 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Circle(center, radius);\n }\n },\n \"rectangle\":{\n getShape: function() {\n return new paper.Path.Rectangle([-2, -2], [2, 2]);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Rectangle([-radius, -radius], [radius*2, radius*2]);\n }\n },\n \"ellipse\":{\n getShape: function() {\n return new paper.Path.Ellipse(new paper.Rectangle([-2, -1], [2, 1]));\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Ellipse(new paper.Rectangle([-radius, -radius/2], [radius*2, radius]));\n }\n },\n \"polygon\":{\n getShape: function() {\n return new paper.Path.RegularPolygon([0, 0], 6, 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.RegularPolygon(center, 6, radius);\n }\n },\n \"diamond\":{\n getShape: function() {\n var d = new paper.Path.Rectangle([-Math.SQRT2, -Math.SQRT2], [Math.SQRT2, Math.SQRT2]);\n d.rotate(45);\n return d;\n },\n getImageShape: function(center, radius) {\n var d = new paper.Path.Rectangle([-radius*Math.SQRT2/2, -radius*Math.SQRT2/2], [radius*Math.SQRT2, radius*Math.SQRT2]);\n d.rotate(45);\n return d;\n }\n },\n \"star\":{\n getShape: function() {\n return new paper.Path.Star([0, 0], 8, 1, 0.7);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Star(center, 8, radius*1, radius*0.7);\n }\n },\n \"cloud\": {\n getShape: function() {\n var path = new paper.Path(cloud_path);\n return path;\n\n },\n getImageShape: function(center, radius) {\n var path = new paper.Path(cloud_path);\n path.scale(radius);\n path.translate(center);\n return path;\n }\n },\n \"triangle\": {\n getShape: function() {\n return new paper.Path.RegularPolygon([0,0], 3, 1);\n },\n getImageShape: function(center, radius) {\n var shape = new paper.Path.RegularPolygon([0,0], 3, 1);\n shape.scale(radius);\n shape.translate(center);\n return shape;\n }\n },\n \"svg\": function(path){\n return {\n getShape: function() {\n return new paper.Path(path);\n },\n getImageShape: function(center, radius) {\n // No calcul for the moment\n return new paper.Path();\n }\n };\n }\n };\n\n var ShapeBuilder = function (shape){\n if(shape === null || typeof shape === \"undefined\"){\n shape = \"circle\";\n }\n if(shape.substr(0,4)===\"svg:\"){\n return builders.svg(shape.substr(4));\n }\n if(!(shape in builders)){\n shape = \"circle\";\n }\n return builders[shape];\n };\n\n ShapeBuilder.builders = builders;\n\n return ShapeBuilder;\n\n});\n\ndefine('renderer/noderepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.Node Class */\n\n /* The representation for the node : A circle, with an image inside and a text label underneath.\n * The circle and the image are drawn on canvas and managed by Paper.js.\n * The text label is an HTML node, managed by jQuery. */\n\n //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);\n var NodeRepr = Utils.inherit(BaseRepresentation);\n\n _(NodeRepr.prototype).extend({\n _init: function() {\n this.renderer.node_layer.activate();\n this.type = \"Node\";\n this.buildShape();\n this.hidden = false;\n this.ghost= false;\n if (this.options.show_node_circles) {\n this.circle.strokeWidth = this.options.node_stroke_width;\n this.h_ratio = 1;\n } else {\n this.h_ratio = 0;\n }\n this.title = $('
                            ').appendTo(this.renderer.labels_$);\n\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.NodeEditButton(this.renderer, null),\n new Renderer.NodeRemoveButton(this.renderer, null),\n new Renderer.NodeLinkButton(this.renderer, null),\n new Renderer.NodeEnlargeButton(this.renderer, null),\n new Renderer.NodeShrinkButton(this.renderer, null)\n ];\n if (this.options.hide_nodes){\n this.normal_buttons.push(\n new Renderer.NodeHideButton(this.renderer, null),\n new Renderer.NodeShowButton(this.renderer, null)\n );\n }\n this.pending_delete_buttons = [\n new Renderer.NodeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n this.last_circle_radius = 1;\n\n if (this.renderer.minimap) {\n this.renderer.minimap.node_layer.activate();\n this.minimap_circle = new paper.Path.Circle([0, 0], 1);\n this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;\n this.renderer.minimap.node_group.addChild(this.minimap_circle);\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.node_stroke_width + (thickness-1) * (this.options.node_stroke_max_width - this.options.node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_node_stroke_width + (thickness-1) * (this.options.selected_node_stroke_max_width - this.options.selected_node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n buildShape: function(){\n if( 'shape' in this.model.changed ) {\n delete this.img;\n }\n if(this.circle){\n this.circle.remove();\n delete this.circle;\n }\n // \"circle\" \"rectangle\" \"ellipse\" \"polygon\" \"star\" \"diamond\"\n this.shapeBuilder = new ShapeBuilder(this.model.get(\"shape\"));\n this.circle = this.shapeBuilder.getShape();\n this.circle.__representation = this;\n this.circle.sendToBack();\n this.last_circle_radius = 1;\n },\n redraw: function(options) {\n if( 'shape' in this.model.changed && 'change' in options && options.change ) {\n //if( 'shape' in this.model.changed ) {\n this.buildShape();\n }\n var _model_coords = new paper.Point(this.model.get(\"position\")),\n _baseRadius = this.options.node_size_base * Math.exp((this.model.get(\"size\") || 0) * Utils._NODE_SIZE_STEP);\n if (!this.is_dragging || !this.paper_coords) {\n this.paper_coords = this.renderer.toPaperCoords(_model_coords);\n }\n this.circle_radius = _baseRadius * this.renderer.view.scale;\n if (this.last_circle_radius !== this.circle_radius) {\n this.all_buttons.forEach(function(b) {\n b.setSectorSize();\n });\n this.circle.scale(this.circle_radius / this.last_circle_radius);\n if (this.node_image) {\n this.node_image.scale(this.circle_radius / this.last_circle_radius);\n }\n }\n this.circle.position = this.paper_coords;\n if (this.node_image) {\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n }\n this.last_circle_radius = this.circle_radius;\n\n var old_act_btn = this.active_buttons;\n\n var opacity = 1;\n if (this.model.get(\"delete_scheduled\")) {\n opacity = 0.5;\n this.active_buttons = this.pending_delete_buttons;\n this.circle.dashArray = [2,2];\n } else {\n opacity = 1;\n this.active_buttons = this.normal_buttons;\n this.circle.dashArray = null;\n }\n if (this.selected && this.renderer.isEditable() && !this.ghost) {\n if (old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n }\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n if (this.node_image) {\n this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);\n }\n\n this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;\n\n this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;\n\n\n //strip html from title\n var html = this.model.get(\"title\");\n var div = document.createElement(\"div\");\n div.innerHTML = html;\n var clean_title = div.textContent || div.innerText || \"\";\n\n var _text = clean_title || this.renkan.translate(this.options.label_untitled_nodes) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n\n //_formatedText = _text;\n\n\n if (typeof this.highlighted === \"object\") {\n _text = this.highlighted.replace(_(_text).escape(),'$1');\n }\n\n //TODO: default text node color\n var node_style = (this.model.get(\"style\") || {'title_size': 1, 'title-color': '#00000' });\n var text_size = node_style.title_size || 1;\n var text_color = node_style.title_color || this.options.node_title_color;\n\n var text_style = {\n 'line-height': \"1em\"\n };\n\n if(text_size !== 1) {\n text_style['font-size'] = text_size.toFixed(1)+\"em\";\n }\n //TODO: compare with default value\n if(text_color !== \"#000000\") {\n text_style.color = text_color;\n }\n\n var text_node = $(\"\").css(text_style).html(_text);\n\n this.title.empty().append(text_node);\n\n var _strokeWidth = this._getStrokeWidth();\n this.title.css({\n left: this.paper_coords.x,\n top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance + 0.5*_strokeWidth,\n opacity: opacity\n });\n var _color = (this.model.has(\"style\") && this.model.get(\"style\").color) || (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null;\n this.circle.strokeWidth = _strokeWidth;\n this.circle.strokeColor = _color;\n this.circle.dashArray = _dash;\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n var lastImage = this.img;\n this.img = this.model.get(\"image\");\n if (this.img && this.img !== lastImage) {\n this.showImage();\n if(this.circle) {\n this.circle.sendToBack();\n }\n }\n if (this.node_image && !this.img) {\n this.node_image.remove();\n delete this.node_image;\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.fillColor = _color;\n var minipos = this.renderer.toMinimapCoords(_model_coords),\n miniradius = this.renderer.minimap.scale * _baseRadius,\n minisize = new paper.Size([miniradius, miniradius]);\n this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));\n }\n\n if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.redraw();\n }\n }\n );\n }\n if (this.ghost){\n this.show(true);\n } else {\n if (this.hidden) { this.hide(); }\n }\n },\n showImage: function() {\n var _image = null;\n if (typeof this.renderer.image_cache[this.img] === \"undefined\") {\n _image = new Image();\n this.renderer.image_cache[this.img] = _image;\n _image.src = this.img;\n } else {\n _image = this.renderer.image_cache[this.img];\n }\n var _this = this;\n if (_image.width) {\n\n if (this.node_image) {\n this.node_image.remove();\n }\n this.renderer.node_layer.activate();\n var width = _image.width,\n height = _image.height,\n clipPath = this.model.get(\"clip_path\"),\n hasClipPath = (typeof clipPath !== \"undefined\" && clipPath),\n _clip = null,\n baseRadius = null,\n centerPoint = null;\n\n if (hasClipPath) {\n _clip = new paper.Path();\n var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],\n lastCoords = [0,0],\n minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n var transformCoords = function(tabc, relative) {\n var newCoords = tabc.slice(1).map(function(v, k) {\n var res = parseFloat(v),\n isY = k % 2;\n if (isY) {\n res = ( res - 0.5 ) * height;\n } else {\n res = ( res - 0.5 ) * width;\n }\n if (relative) {\n res += lastCoords[isY];\n }\n if (isY) {\n minY = Math.min(minY, res);\n maxY = Math.max(maxY, res);\n } else {\n minX = Math.min(minX, res);\n maxX = Math.max(maxX, res);\n }\n return res;\n });\n lastCoords = newCoords.slice(-2);\n return newCoords;\n };\n\n instructions.forEach(function(instr) {\n var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [\"\"];\n switch(coords[0]) {\n case \"M\":\n _clip.moveTo(transformCoords(coords));\n break;\n case \"m\":\n _clip.moveTo(transformCoords(coords, true));\n break;\n case \"L\":\n _clip.lineTo(transformCoords(coords));\n break;\n case \"l\":\n _clip.lineTo(transformCoords(coords, true));\n break;\n case \"C\":\n _clip.cubicCurveTo(transformCoords(coords));\n break;\n case \"c\":\n _clip.cubicCurveTo(transformCoords(coords, true));\n break;\n case \"Q\":\n _clip.quadraticCurveTo(transformCoords(coords));\n break;\n case \"q\":\n _clip.quadraticCurveTo(transformCoords(coords, true));\n break;\n }\n });\n\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](maxX - minX, maxY - minY) / 2;\n centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);\n if (!this.options.show_node_circles) {\n this.h_ratio = (maxY - minY) / (2 * baseRadius);\n }\n } else {\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](width, height) / 2;\n centerPoint = new paper.Point(0,0);\n if (!this.options.show_node_circles) {\n this.h_ratio = height / (2 * baseRadius);\n }\n }\n var _raster = new paper.Raster(_image);\n _raster.locked = true; // Disable mouse events on icon\n if (hasClipPath) {\n _raster = new paper.Group(_clip, _raster);\n _raster.opacity = 0.99;\n /* This is a workaround to allow clipping at group level\n * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).\n */\n _raster.clipped = true;\n _clip.__representation = this;\n }\n if (this.options.clip_node_images) {\n var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);\n _raster = new paper.Group(_circleClip, _raster);\n _raster.opacity = 0.99;\n _raster.clipped = true;\n _circleClip.__representation = this;\n }\n this.image_delta = centerPoint.divide(baseRadius);\n this.node_image = _raster;\n this.node_image.__representation = _this;\n this.node_image.scale(this.circle_radius / baseRadius);\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n this.node_image.insertAbove(this.circle);\n } else {\n $(_image).on(\"load\", function() {\n _this.showImage();\n });\n }\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.renkan.read_only) {\n this.is_dragging = true;\n this.paper_coords = this.paper_coords.add(_delta);\n this.redraw();\n }\n } else {\n this.renderer.view.paperShift(_delta);\n }\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"NodeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n clearTimeout(this.hide_timeout);\n this.selected = true;\n this.circle.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable() && !this.hidden) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n var _uri = this.model.get(\"uri\");\n if (_uri) {\n $('.Rk-Bin-Item').each(function() {\n var _el = $(this);\n if (_el.attr(\"data-uri\") === _uri) {\n _el.addClass(\"selected\");\n }\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;\n this.minimap_circle.strokeColor = this.options.minimap_highlight_color;\n }\n //if the node is hidden and the mouse hover it, it appears as a ghost\n if (this.hidden) {\n this.show(true);\n }\n else {\n this.showNeighbors(true);\n }\n this._super(\"select\");\n },\n hideButtons: function() {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n delete(this.buttonTimeout);\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n var _this = this;\n this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);\n this.circle.strokeWidth = this._getStrokeWidth();\n $('.Rk-Bin-Item').removeClass(\"selected\");\n if (this.renderer.minimap) {\n this.minimap_circle.strokeColor = undefined;\n }\n //when the mouse don't hover the node anymore, we hide it\n if (this.hidden) {\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.hide();\n }\n else {\n this.hideNeighbors(true);\n }\n this._super(\"unselect\");\n }\n },\n hide_delay: function(){\n var _this = this;\n this.hide_timeout = setTimeout(function(){\n _this.hide();\n }, 1000);\n },\n hide: function(){\n var _this = this;\n this.ghost = false;\n this.hidden = true;\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = 0;\n }\n this.hideButtons();\n this.circle.opacity = 0;\n this.title.css('opacity', 0);\n this.minimap_circle.opacity = 0;\n\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.hide();\n }\n }\n );\n this.hideNeighbors(false);\n },\n show: function(ghost){\n var _this = this;\n this.ghost = ghost;\n if (this.ghost){\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = this.options.ghost_opacity;\n }\n this.circle.opacity = this.options.ghost_opacity;\n this.title.css('opacity', this.options.ghost_opacity);\n this.minimap_circle.opacity = this.options.ghost_opacity;\n } else {\n this.minimap_circle.opacity = 1;\n this.hidden = false;\n this.redraw();\n }\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.show(_this.ghost);\n }\n }\n );\n },\n hideNeighbors: function(delay){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.ghost) {\n if (delay){ repr.hide_delay(); } else {repr.hide(); }\n }\n }\n );\n },\n showNeighbors: function(ghost){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.hidden) {\n repr.show(ghost);\n if (!ghost){\n var indexNode = _this.renderer.view.hiddenNodes.indexOf(repr.model.id);\n if (indexNode !== -1){\n _this.renderer.view.hiddenNodes.splice(indexNode, 1);\n }\n }\n }\n }\n );\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n saveCoords: function() {\n var _coords = this.renderer.toModelCoords(this.paper_coords),\n _data = {\n position: {\n x: _coords.x,\n y: _coords.y\n }\n };\n if (this.renderer.isEditable()) {\n this.model.set(_data);\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (this.renderer.is_dragging && this.renderer.isEditable()) {\n this.saveCoords();\n } else {\n if (this.hidden) {\n var index = this.renderer.view.hiddenNodes.indexOf(this.model.id);\n if (index !== -1){\n this.renderer.view.hiddenNodes.splice(index, 1);\n }\n this.show(false);\n this.select();\n } else {\n if (!_isTouch && !this.model.get(\"delete_scheduled\")) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.is_dragging = false;\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n this.circle.remove();\n this.title.remove();\n if (this.renderer.minimap) {\n this.minimap_circle.remove();\n }\n if (this.node_image) {\n this.node_image.remove();\n }\n }\n }).value();\n\n return NodeRepr;\n\n});\n\n\ndefine('renderer/edge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Edge Class Begin */\n\n //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);\n var Edge = Utils.inherit(BaseRepresentation);\n\n _(Edge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Edge\";\n this.hidden = false;\n this.ghost = false;\n this.highlighted = false;\n this.from_representation = this.renderer.getRepresentationByModel(this.model.get(\"from\"));\n this.to_representation = this.renderer.getRepresentationByModel(this.model.get(\"to\"));\n this.bundle = this.renderer.addToBundles(this);\n this.line = new paper.Path();\n this.line.add([0,0],[0,0],[0,0]);\n this.line.__representation = this;\n this.line.strokeWidth = this.options.edge_stroke_width;\n this.arrow_scale = 1;\n this.arrow = new paper.Path();\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);\n this.arrow.__representation = this;\n this.text = $('
                            ').appendTo(this.renderer.labels_$);\n this.arrow_angle = 0;\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.EdgeEditButton(this.renderer, null),\n new Renderer.EdgeRemoveButton(this.renderer, null)\n ];\n this.pending_delete_buttons = [\n new Renderer.EdgeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n\n if (this.renderer.minimap) {\n this.renderer.minimap.edge_layer.activate();\n this.minimap_line = new paper.Path();\n this.minimap_line.add([0,0],[0,0]);\n this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;\n this.minimap_line.strokeWidth = 1;\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getArrowScale: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);\n },\n redraw: function() {\n var from = this.model.get(\"from\"),\n to = this.model.get(\"to\");\n if (!from || !to || (this.hidden && !this.ghost)) {\n return;\n }\n this.from_representation = this.renderer.getRepresentationByModel(from);\n this.to_representation = this.renderer.getRepresentationByModel(to);\n if (typeof this.from_representation === \"undefined\" || typeof this.to_representation === \"undefined\" ||\n (this.from_representation.hidden && !this.from_representation.ghost) ||\n (this.to_representation.hidden && !this.to_representation.ghost)) {\n this.hide();\n return;\n }\n var _strokeWidth = this._getStrokeWidth(),\n _arrow_scale = this._getArrowScale(),\n _p0a = this.from_representation.paper_coords,\n _p1a = this.to_representation.paper_coords,\n _v = _p1a.subtract(_p0a),\n _r = _v.length,\n _u = _v.divide(_r),\n _ortho = new paper.Point([- _u.y, _u.x]),\n _group_pos = this.bundle.getPosition(this),\n _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),\n _p0b = _p0a.add(_delta), /* Adding a 4 px difference */\n _p1b = _p1a.add(_delta), /* to differentiate bundled links */\n _a = _v.angle,\n _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),\n _handle = _v.divide(3),\n _color = (this.highlighted && this.options.highlighted_edge_color) ||\n (this.model.has(\"style\") && this.model.get(\"style\").color) ||\n (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null,\n _opacity;\n\n if (this.model.get(\"delete_scheduled\") || this.from_representation.model.get(\"delete_scheduled\") || this.to_representation.model.get(\"delete_scheduled\")) {\n _opacity = 0.5;\n this.line.dashArray = [2, 2];\n } else {\n _opacity = this.ghost ? this.options.ghost_opacity : 1;\n this.line.dashArray = null;\n }\n\n var old_act_btn = this.active_buttons;\n\n this.arrow.visible =\n (this.model.has(\"style\") && this.model.get(\"style\").arrow) ||\n !this.model.has(\"style\") ||\n typeof this.model.get(\"style\").arrow === 'undefined';\n\n this.active_buttons = this.model.get(\"delete_scheduled\") ? this.pending_delete_buttons : this.normal_buttons;\n\n if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n this.paper_coords = _p0b.add(_p1b).divide(2);\n this.line.strokeWidth = _strokeWidth;\n this.line.strokeColor = _color;\n this.line.dashArray = _dash;\n this.line.opacity = _opacity;\n this.line.segments[0].point = _p0a;\n this.line.segments[1].point = this.paper_coords;\n this.line.segments[1].handleIn = _handle.multiply(-1);\n this.line.segments[1].handleOut = _handle;\n this.line.segments[2].point = _p1a;\n this.arrow.scale(_arrow_scale / this.arrow_scale);\n this.arrow_scale = _arrow_scale;\n this.arrow.fillColor = _color;\n this.arrow.opacity = _opacity;\n this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);\n this.arrow.position = this.paper_coords;\n\n this.arrow_angle = _a;\n if (_a > 90) {\n _a -= 180;\n _textdelta = _textdelta.multiply(-1);\n }\n if (_a < -90) {\n _a += 180;\n _textdelta = _textdelta.multiply(-1);\n }\n var _text = this.model.get(\"title\") || this.renkan.translate(this.options.label_untitled_edges) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n if (typeof this.highlighted === \"object\") {\n this.text.html(this.highlighted.replace(_(_text).escape(),'$1'));\n } else {\n this.text.text(_text);\n }\n var _textpos = this.paper_coords.add(_textdelta);\n this.text.css({\n left: _textpos.x,\n top: _textpos.y,\n transform: \"rotate(\" + _a + \"deg)\",\n \"-moz-transform\": \"rotate(\" + _a + \"deg)\",\n \"-webkit-transform\": \"rotate(\" + _a + \"deg)\",\n opacity: _opacity\n });\n this.text_angle = _a;\n\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n\n if (this.renderer.minimap) {\n this.minimap_line.strokeColor = _color;\n this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get(\"position\")));\n this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get(\"position\")));\n }\n },\n hide: function(){\n this.hidden = true;\n this.ghost = false;\n\n this.text.hide();\n this.line.visible = false;\n this.arrow.visible = false;\n this.minimap_line.visible = false;\n },\n show: function(ghost){\n this.ghost = ghost;\n if (this.ghost) {\n this.text.css('opacity', 0.3);\n this.line.opacity = 0.3;\n this.arrow.opacity = 0.3;\n this.minimap_line.opacity = 0.3;\n } else {\n this.hidden = false;\n\n this.text.css('opacity', 1);\n this.line.opacity = 1;\n this.arrow.opacity = 1;\n this.minimap_line.opacity = 1;\n }\n this.text.show();\n this.line.visible = true;\n this.arrow.visible = true;\n this.minimap_line.visible = true;\n this.redraw();\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"EdgeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n this.selected = true;\n this.line.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable()) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n this._super(\"select\");\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n if (this.options.editor_mode) {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n }\n if (this.hidden){\n this.renderer.removeRepresentationsOfType(\"editor\");\n }\n this.line.strokeWidth = this._getStrokeWidth();\n this._super(\"unselect\");\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (!this.renkan.read_only && this.renderer.is_dragging) {\n this.from_representation.saveCoords();\n this.to_representation.saveCoords();\n this.from_representation.is_dragging = false;\n this.to_representation.is_dragging = false;\n } else {\n if (!_isTouch) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.options.read_only) {\n this.from_representation.paperShift(_delta);\n this.to_representation.paperShift(_delta);\n }\n } else {\n this.renderer.paperShift(_delta);\n }\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n destroy: function() {\n this._super(\"destroy\");\n this.line.remove();\n this.arrow.remove();\n this.text.remove();\n if (this.renderer.minimap) {\n this.minimap_line.remove();\n }\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n var _this = this;\n this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {\n return _this === _edge;\n });\n }\n }).value();\n\n return Edge;\n\n});\n\n\n\ndefine('renderer/tempedge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* TempEdge Class Begin */\n\n //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);\n var TempEdge = Utils.inherit(BaseRepresentation);\n\n _(TempEdge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Temp-edge\";\n this.origin = Utils.OriginEnum.NONE;\n\n var _color = (this.project.get(\"users\").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\");\n this.line = new paper.Path();\n this.line.strokeColor = _color;\n this.line.dashArray = [4, 2];\n this.line.strokeWidth = this.options.selected_edge_stroke_width;\n this.line.add([0,0],[0,0]);\n this.line.__representation = this;\n this.arrow = new paper.Path();\n this.arrow.fillColor = _color;\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.__representation = this;\n this.arrow_angle = 0;\n },\n redraw: function() {\n var _p0 = this.from_representation.paper_coords,\n _p1 = this.end_pos,\n _a = _p1.subtract(_p0).angle,\n _c = _p0.add(_p1).divide(2);\n this.line.segments[0].point = _p0;\n this.line.segments[1].point = _p1;\n this.arrow.rotate(_a - this.arrow_angle);\n this.arrow.position = _c;\n this.arrow_angle = _a;\n },\n paperShift: function(_delta) {\n if (!this.renderer.isEditable()) {\n this.renderer.removeRepresentation(_this);\n paper.view.draw();\n return;\n }\n this.end_pos = this.end_pos.add(_delta);\n var _hitResult = paper.project.hitTest(this.end_pos);\n this.renderer.findTarget(_hitResult);\n this.redraw();\n },\n mouseup: function(_event, _isTouch) {\n var _hitResult = paper.project.hitTest(_event.point),\n _model = this.from_representation.model,\n _endDrag = true;\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _target = _hitResult.item.__representation;\n if (_target.type.substr(0,4) === \"Node\") {\n var _destmodel = _target.model || _target.source_representation.model;\n if (_model !== _destmodel) {\n var _data = {\n id: Utils.getUID('edge'),\n created_by: this.renkan.current_user,\n from: _model,\n to: _destmodel,\n origin: this.origin\n };\n if (this.renderer.isEditable()) {\n this.project.addEdge(_data);\n }\n }\n }\n\n if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {\n _endDrag = false;\n this.renderer.is_dragging = true;\n }\n }\n if (_endDrag) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentation(this);\n paper.view.draw();\n }\n },\n destroy: function() {\n this.arrow.remove();\n this.line.remove();\n }\n }).value();\n\n /* TempEdge Class End */\n\n return TempEdge;\n\n});\n\n\ndefine('renderer/baseeditor',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _BaseEditor Begin */\n //var _BaseEditor = Renderer._BaseEditor = Utils.inherit(Renderer._BaseRepresentation);\n var _BaseEditor = Utils.inherit(BaseRepresentation);\n\n _(_BaseEditor.prototype).extend({\n _init: function() {\n this.renderer.buttons_layer.activate();\n this.type = \"editor\";\n this.editor_block = new paper.Path();\n var _pts = _.map(_.range(8), function() {return [0,0];});\n this.editor_block.add.apply(this.editor_block, _pts);\n this.editor_block.strokeWidth = this.options.tooltip_border_width;\n this.editor_block.strokeColor = this.options.tooltip_border_color;\n this.editor_block.opacity = this.options.tooltip_opacity;\n this.editor_$ = $('
                            ')\n .appendTo(this.renderer.editor_$)\n .css({\n position: \"absolute\",\n opacity: this.options.tooltip_opacity\n })\n .hide();\n },\n destroy: function() {\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* _BaseEditor End */\n\n return _BaseEditor;\n\n});\n\n\ndefine('renderer/nodeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor', 'renderer/shapebuilder', 'ckeditor-core'], function ($, _, requtils, BaseEditor, ShapeBuilder, CKEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditor Begin */\n //var NodeEditor = Renderer.NodeEditor = Utils.inherit(Renderer._BaseEditor);\n var NodeEditor = Utils.inherit(BaseEditor);\n\n _(NodeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/nodeeditor.html'];\n //fusionner avec this.options.node_editor_templates\n this.readOnlyTemplate = this.options.node_editor_templates;\n },\n draw: function() {\n var _model = this.source_representation.model,\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate[_model.get(\"type\")] || this.readOnlyTemplate[\"default\"]),\n _image_placeholder = this.options.static_url + \"img/image-placeholder.png\",\n _size = (_model.get(\"size\") || 0);\n this.editor_$\n .html(_template({\n node: {\n _id: _model.get(\"_id\"),\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n type: _model.get(\"type\") || \"default\",\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n image: _model.get(\"image\") || \"\",\n image_placeholder: _image_placeholder,\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n title_size: (_model.has(\"style\") && _model.get(\"style\").title_size) || 1,\n title_color: (_model.has(\"style\") && _model.get(\"style\").title_color) || this.options.node_title_color,\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n clip_path: _model.get(\"clip_path\") || false,\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\"),\n size: (_size > 0 ? \"+\" : \"\") + _size,\n shape: _model.get(\"shape\") || \"circle\"\n },\n renkan: this.renkan,\n options: this.options,\n shortenText: Utils.shortenText,\n shapes : _(ShapeBuilder.builders).omit('svg').keys().value(),\n types : _(this.options.node_editor_templates).keys().value(),\n }));\n this.redraw();\n var _this = this,\n editorInstance = (this.renderer.isEditable() && _this.options.show_node_editor_description_richtext) ?\n CKEditor.inline(\"Rk-Edit-Description-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n editorInstanceTitle = (this.renderer.isEditable() && _this.options.show_node_editor_title_richtext) ?\n CKEditor.inline(\"Rk-Edit-Title-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n paper.view.draw();\n };\n\n _this.cleanEditor = function() {\n _this.editor_$.off(\"keyup\");\n _this.editor_$.find(\"input, textarea, select\").off(\"change keyup paste\");\n _this.editor_$.find(\".Rk-Edit-Image-File\").off('change');\n _this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").off('hover');\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n _this.editor_$.find(\".Rk-Edit-Image-Del\").off('click');\n _this.editor_$.find(\".Rk-Edit-ColorPicker\").find(\"li\").off('hover click');\n _this.editor_$.find(\".Rk-CloseX\").off('click');\n _this.editor_$.find(\".Rk-Edit-Goto\").off('click');\n\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance) {\n editorInstance.focusManager.blur(true);\n editorInstance.destroy();\n }\n }\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle) {\n editorInstanceTitle.focusManager.blur(true);\n editorInstanceTitle.destroy();\n }\n }\n };\n\n this.editor_$.find(\".Rk-CloseX\").click(function (e) {\n e.preventDefault();\n closeEditor();\n });\n\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {};\n if (_this.options.show_node_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n }\n if (_this.options.show_node_editor_image) {\n _data.image = _this.editor_$.find(\".Rk-Edit-Image\").val();\n _this.editor_$.find(\".Rk-Edit-ImgPreview\").attr(\"src\", _data.image || _image_placeholder);\n }\n if (_this.options.show_node_editor_description) {\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance &&\n editorInstance.checkDirty()) {\n _data.description = editorInstance.getData();\n editorInstance.resetDirty();\n }\n }\n else {\n _data.description = _this.editor_$.find(\".Rk-Edit-Description\").val();\n }\n }\n if (_this.options.show_node_editor_title) {\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle &&\n editorInstanceTitle.checkDirty()) {\n _data.title = editorInstanceTitle.getData();\n editorInstanceTitle.resetDirty();\n }\n }\n else {\n _data.title = _this.editor_$.find(\".Rk-Edit-Title\").val();\n }\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash});\n }\n if (_this.options.change_shapes) {\n if(_model.get(\"shape\")!==_this.editor_$.find(\".Rk-Edit-Shape\").val()){\n _data.shape = _this.editor_$.find(\".Rk-Edit-Shape\").val();\n }\n }\n if (_this.options.change_types) {\n if(_model.get(\"type\")!==_this.editor_$.find(\".Rk-Edit-Type\").val()){\n _data.type = _this.editor_$.find(\".Rk-Edit-Type\").val();\n }\n }\n _model.set(_data);\n _this.redraw();\n } else {\n closeEditor();\n }\n });\n }, 1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input, textarea, select\").on(\"change keyup paste\", onFieldChange);\n if( _this.options.show_node_editor_description &&\n _this.options.show_node_editor_description_richtext &&\n editorInstance)\n {\n editorInstance.on(\"change\", onFieldChange);\n editorInstance.on(\"blur\", onFieldChange);\n }\n\n if( _this.options.show_node_editor_title &&\n _this.options.show_node_editor_title_richtext &&\n editorInstanceTitle)\n {\n editorInstanceTitle.on(\"change\", onFieldChange);\n editorInstanceTitle.on(\"blur\", onFieldChange);\n }\n\n if(_this.options.allow_image_upload) {\n this.editor_$.find(\".Rk-Edit-Image-File\").change(function() {\n if (this.files.length) {\n var f = this.files[0],\n fr = new FileReader();\n if (f.type.substr(0,5) !== \"image\") {\n alert(_this.renkan.translate(\"This file is not an image\"));\n return;\n }\n if (f.size > (_this.options.uploaded_image_max_kb * 1024)) {\n alert(_this.renkan.translate(\"Image size must be under \") + _this.options.uploaded_image_max_kb + _this.renkan.translate(\"KB\"));\n return;\n }\n fr.onload = function(e) {\n _this.editor_$.find(\".Rk-Edit-Image\").val(e.target.result);\n onFieldChange();\n };\n fr.readAsDataURL(f);\n }\n });\n }\n this.editor_$.find(\".Rk-Edit-Title\")[0].focus();\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Node\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color) || (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n var shiftSize = function(n) {\n if (_this.renderer.isEditable()) {\n var _newsize = n+(_model.get(\"size\") || 0);\n _this.editor_$.find(\"#Rk-Edit-Size-Value\").text((_newsize > 0 ? \"+\" : \"\") + _newsize);\n _model.set(\"size\", _newsize);\n paper.view.draw();\n } else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Size-Down\").click(function() {\n shiftSize(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Size-Up\").click(function() {\n shiftSize(1);\n return false;\n });\n\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n\n var shiftTitleSize = function(n) {\n var min = _this.options.node_title_size_min;\n var max = _this.options.node_title_size_max;\n if (_this.renderer.isEditable()) {\n var _oldTitleSize = ((_model.has('style') && _model.get('style').title_size) || 1),\n _newTitleSize = n + _oldTitleSize;\n if(_newTitleSize < min ) {\n _newTitleSize = min;\n }\n else if (_newTitleSize > max) {\n _newTitleSize = max;\n }\n if (_newTitleSize !== _oldTitleSize) {\n _this.editor_$.find(\"#Rk-Edit-Title-Size-Value\").text(_newTitleSize.toFixed(1));\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_size: _newTitleSize}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n\n var _pickerTitle = _this.editor_$.find(\".Rk-Editor-ColorPicker-Title\");\n\n this.editor_$.find(\".Rk-Editor-p-title-color\").hover(\n function(_e) {\n _e.preventDefault();\n _pickerTitle.show();\n },\n function(_e) {\n _e.preventDefault();\n _pickerTitle.hide();\n }\n );\n\n _pickerTitle.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n var title_color = (_model.has(\"style\") && _model.get(\"style\").title_color) || _this.options.node_fill_color;\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", title_color);\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_color: $(this).attr(\"data-color\")}));\n _pickerTitle.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n\n this.editor_$.find(\"#Rk-Edit-Title-Size-Down\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(-step);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Title-Size-Up\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(step);\n return false;\n });\n\n this.editor_$.find(\".Rk-Edit-Image-Del\").click(function() {\n _this.editor_$.find(\".Rk-Edit-Image\").val('');\n onFieldChange();\n return false;\n });\n } else {\n if (typeof this.source_representation.highlighted === \"object\") {\n var titlehtml = this.source_representation.highlighted.replace(_(_model.get(\"title\")).escape(),'$1');\n this.editor_$.find(\".Rk-Display-Title\" + (_model.get(\"uri\") ? \" a\" : \"\")).html(titlehtml);\n if (this.options.show_node_tooltip_description) {\n this.editor_$.find(\".Rk-Display-Description\").html(this.source_representation.highlighted.replace(_(_model.get(\"description\")).escape(),'$1'));\n }\n }\n }\n this.editor_$.find(\"img\").load(function() {\n _this.redraw();\n });\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, this.source_representation.circle_radius * 0.75, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n },\n destroy: function() {\n if(typeof this.cleanEditor !== 'undefined') {\n this.cleanEditor();\n }\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* NodeEditor End */\n\n return NodeEditor;\n\n});\n\n\ndefine('renderer/edgeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor'], function ($, _, requtils, BaseEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditor Begin */\n\n //var EdgeEditor = Renderer.EdgeEditor = Utils.inherit(Renderer._BaseEditor);\n var EdgeEditor = Utils.inherit(BaseEditor);\n\n _(EdgeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/edgeeditor.html'];\n this.readOnlyTemplate = this.options.templates['templates/edgeeditor_readonly.html'];\n },\n draw: function() {\n var _model = this.source_representation.model,\n _from_model = _model.get(\"from\"),\n _to_model = _model.get(\"to\"),\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate);\n this.editor_$\n .html(_template({\n edge: {\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n arrow: (_model.has(\"style\") && _model.get(\"style\").arrow) || !_model.has(\"style\") || (typeof _model.get(\"style\").arrow === 'undefined') ? \"checked\" : \"\",\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n from_title: _from_model.get(\"title\"),\n to_title: _to_model.get(\"title\"),\n from_color: (_from_model.has(\"style\") && _from_model.get(\"style\").color) || (_from_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n to_color: (_to_model.has(\"style\") && _to_model.get(\"style\").color) || (_to_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\")\n },\n renkan: this.renkan,\n shortenText: Utils.shortenText,\n options: this.options\n }));\n this.redraw();\n var _this = this,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n paper.view.draw();\n };\n this.editor_$.find(\".Rk-CloseX\").click(closeEditor);\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {\n title: _this.editor_$.find(\".Rk-Edit-Title\").val()\n };\n if (_this.options.show_edge_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked'),\n arrow = _this.editor_$.find(\".Rk-Edit-Arrow\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash, arrow: arrow});\n }\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n _model.set(_data);\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n },1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input\").on(\"keyup change paste\", onFieldChange);\n\n this.editor_$.find(\".Rk-Edit-Vocabulary\").change(function() {\n var e = $(this),\n v = e.val();\n if (v) {\n _this.editor_$.find(\".Rk-Edit-Title\").val(e.find(\":selected\").text());\n _this.editor_$.find(\".Rk-Edit-URI\").val(v);\n onFieldChange();\n }\n });\n this.editor_$.find(\".Rk-Edit-Direction\").click(function() {\n if (_this.renderer.isEditable()) {\n _model.set({\n from: _model.get(\"to\"),\n to: _model.get(\"from\")\n });\n _this.draw();\n } else {\n closeEditor();\n }\n });\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Edge\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color)|| (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n }\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, 5, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n }\n }).value();\n\n /* EdgeEditor End */\n\n return EdgeEditor;\n\n});\n\n\ndefine('renderer/nodebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _NodeButton Begin */\n\n //var _NodeButton = Renderer._NodeButton = Utils.inherit(Renderer._BaseButton);\n var _NodeButton = Utils.inherit(BaseButton);\n\n _(_NodeButton.prototype).extend({\n setSectorSize: function() {\n var sectorInner = this.source_representation.circle_radius;\n if (sectorInner !== this.lastSectorInner) {\n if (this.sector) {\n this.sector.destroy();\n }\n this.sector = this.renderer.drawSector(\n this, 1 + sectorInner,\n Utils._NODE_BUTTON_WIDTH + sectorInner,\n this.startAngle,\n this.endAngle,\n 1,\n this.imageName,\n this.renkan.translate(this.text)\n );\n this.lastSectorInner = sectorInner;\n }\n },\n unselect: function() {\n BaseButton.prototype.unselect.apply(this, Array.prototype.slice.call(arguments, 1));\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n this.source_representation.hideButtons();\n }\n },\n select: function() {\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n }\n this.sector.select();\n },\n }).value();\n\n\n /* _NodeButton End */\n\n return _NodeButton;\n\n});\n\n\ndefine('renderer/nodeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditButton Begin */\n\n //var NodeEditButton = Renderer.NodeEditButton = Utils.inherit(Renderer._NodeButton);\n var NodeEditButton = Utils.inherit(NodeButton);\n\n _(NodeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Node-edit-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -125 : -135;\n this.endAngle = this.options.hide_nodes ? -55 : -45;\n this.imageName = \"edit\";\n this.text = \"Edit\";\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* NodeEditButton End */\n\n return NodeEditButton;\n\n});\n\n\ndefine('renderer/noderemovebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeRemoveButton = Utils.inherit(NodeButton);\n\n _(NodeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Node-remove-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -10 : 0;\n this.endAngle = this.options.hide_nodes ? 45 : 90;\n this.imageName = \"remove\";\n this.text = \"Remove\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove node ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeNode(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeRemoveButton;\n\n});\n\n\ndefine('renderer/nodehidebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeHideButton = Utils.inherit(NodeButton);\n\n _(NodeHideButton.prototype).extend({\n _init: function() {\n this.type = \"Node-hide-button\";\n this.lastSectorInner = 0;\n this.startAngle = 45;\n this.endAngle = 90;\n this.imageName = \"hide\";\n this.text = \"Hide\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.renderer.view.addHiddenNode(this.source_representation.model);\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeHideButton;\n\n});\n\n\ndefine('renderer/nodeshowbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeShowButton = Utils.inherit(NodeButton);\n\n _(NodeShowButton.prototype).extend({\n _init: function() {\n this.type = \"Node-show-button\";\n this.lastSectorInner = 0;\n this.startAngle = 90;\n this.endAngle = 135;\n this.imageName = \"show\";\n this.text = \"Show neighbors\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.source_representation.showNeighbors(false);\n }\n }\n }).value();\n\n /* NodeShowButton End */\n\n return NodeShowButton;\n\n});\n\n\ndefine('renderer/noderevertbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRevertButton Begin */\n\n //var NodeRevertButton = Renderer.NodeRevertButton = Utils.inherit(Renderer._NodeButton);\n var NodeRevertButton = Utils.inherit(NodeButton);\n\n _(NodeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Node-revert-button\";\n this.lastSectorInner = 0;\n this.startAngle = -135;\n this.endAngle = 135;\n this.imageName = \"revert\";\n this.text = \"Cancel deletion\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* NodeRevertButton End */\n\n return NodeRevertButton;\n\n});\n\n\ndefine('renderer/nodelinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeLinkButton Begin */\n\n //var NodeLinkButton = Renderer.NodeLinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeLinkButton = Utils.inherit(NodeButton);\n\n _(NodeLinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-link-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? 135 : 90;\n this.endAngle = this.options.hide_nodes ? 190 : 180;\n this.imageName = \"link\";\n this.text = \"Link to another node\";\n },\n mousedown: function(_event, _isTouch) {\n if (this.renderer.isEditable()) {\n var _off = this.renderer.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.renderer.click_target = null;\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.renderer.addTempEdge(this.source_representation, _point, Utils.OriginEnum.EDGE_BUTTON_CIRCLE);\n }\n }\n }).value();\n\n /* NodeLinkButton End */\n\n return NodeLinkButton;\n\n});\n\n\n\ndefine('renderer/nodeenlargebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEnlargeButton Begin */\n\n //var NodeEnlargeButton = Renderer.NodeEnlargeButton = Utils.inherit(Renderer._NodeButton);\n var NodeEnlargeButton = Utils.inherit(NodeButton);\n\n _(NodeEnlargeButton.prototype).extend({\n _init: function() {\n this.type = \"Node-enlarge-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -55 : -45;\n this.endAngle = this.options.hide_nodes ? -10 : 0;\n this.imageName = \"enlarge\";\n this.text = \"Enlarge\";\n },\n mouseup: function() {\n var _newsize = 1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeEnlargeButton End */\n\n return NodeEnlargeButton;\n\n});\n\n\ndefine('renderer/nodeshrinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeShrinkButton Begin */\n\n //var NodeShrinkButton = Renderer.NodeShrinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeShrinkButton = Utils.inherit(NodeButton);\n\n _(NodeShrinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-shrink-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -170 : -180;\n this.endAngle = this.options.hide_nodes ? -125 : -135;\n this.imageName = \"shrink\";\n this.text = \"Shrink\";\n },\n mouseup: function() {\n var _newsize = -1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeShrinkButton End */\n\n return NodeShrinkButton;\n\n});\n\n\ndefine('renderer/edgeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditButton Begin */\n\n //var EdgeEditButton = Renderer.EdgeEditButton = Utils.inherit(Renderer._BaseButton);\n var EdgeEditButton = Utils.inherit(BaseButton);\n\n _(EdgeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-edit-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -270, -90, 1, \"edit\", this.renkan.translate(\"Edit\"));\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* EdgeEditButton End */\n\n return EdgeEditButton;\n\n});\n\n\ndefine('renderer/edgeremovebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRemoveButton Begin */\n\n //var EdgeRemoveButton = Renderer.EdgeRemoveButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRemoveButton = Utils.inherit(BaseButton);\n\n _(EdgeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-remove-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -90, 90, 1, \"remove\", this.renkan.translate(\"Remove\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove edge ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeEdge(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* EdgeRemoveButton End */\n\n return EdgeRemoveButton;\n\n});\n\n\ndefine('renderer/edgerevertbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRevertButton Begin */\n\n //var EdgeRevertButton = Renderer.EdgeRevertButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRevertButton = Utils.inherit(BaseButton);\n\n _(EdgeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-revert-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -135, 135, 1, \"revert\", this.renkan.translate(\"Cancel deletion\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* EdgeRevertButton End */\n\n return EdgeRevertButton;\n\n});\n\n\ndefine('renderer/miniframe',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* MiniFrame Begin */\n\n //var MiniFrame = Renderer.MiniFrame = Utils.inherit(Renderer._BaseRepresentation);\n var MiniFrame = Utils.inherit(BaseRepresentation);\n\n _(MiniFrame.prototype).extend({\n paperShift: function(_delta) {\n this.renderer.offset = this.renderer.offset.subtract(_delta.divide(this.renderer.minimap.scale).multiply(this.renderer.scale));\n this.renderer.redraw();\n },\n mouseup: function(_delta) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n }\n }).value();\n\n\n /* MiniFrame End */\n\n return MiniFrame;\n\n});\n\n\ndefine('renderer/scene',['jquery', 'underscore', 'filesaver', 'requtils', 'renderer/miniframe', 'screenfull'], function ($, _, filesaver, requtils, MiniFrame, Screenfull) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Scene Begin */\n\n var Scene = function(_renkan) {\n this.renkan = _renkan;\n this.$ = $(\".Rk-Render\");\n this.representations = [];\n this.$.html(_renkan.options.templates['templates/scene.html'](_renkan));\n this.onStatusChange();\n this.canvas_$ = this.$.find(\".Rk-Canvas\");\n this.labels_$ = this.$.find(\".Rk-Labels\");\n if (!_renkan.options.popup_editor){\n this.editor_$ = $(\"#\" + _renkan.options.editor_panel);\n }else{\n this.editor_$ = this.$.find(\".Rk-Editor\");\n }\n this.notif_$ = this.$.find(\".Rk-Notifications\");\n paper.setup(this.canvas_$[0]);\n this.totalScroll = 0;\n this.mouse_down = false;\n this.click_target = null;\n this.selected_target = null;\n this.edge_layer = new paper.Layer();\n this.node_layer = new paper.Layer();\n this.buttons_layer = new paper.Layer();\n this.delete_list = [];\n this.redrawActive = false;\n\n if (_renkan.options.show_minimap) {\n this.minimap = {\n background_layer: new paper.Layer(),\n edge_layer: new paper.Layer(),\n node_layer: new paper.Layer(),\n node_group: new paper.Group(),\n size: new paper.Size( _renkan.options.minimap_width, _renkan.options.minimap_height )\n };\n\n this.minimap.background_layer.activate();\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle = new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.rectangle.fillColor = _renkan.options.minimap_background_color;\n this.minimap.rectangle.strokeColor = _renkan.options.minimap_border_color;\n this.minimap.rectangle.strokeWidth = 4;\n this.minimap.offset = new paper.Point(this.minimap.size.divide(2));\n this.minimap.scale = 0.1;\n\n this.minimap.node_layer.activate();\n this.minimap.cliprectangle = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.cliprectangle);\n this.minimap.node_group.clipped = true;\n this.minimap.miniframe = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.miniframe);\n this.minimap.miniframe.fillColor = '#c0c0ff';\n this.minimap.miniframe.opacity = 0.3;\n this.minimap.miniframe.strokeColor = '#000080';\n this.minimap.miniframe.strokeWidth = 2;\n this.minimap.miniframe.__representation = new MiniFrame(this, null);\n }\n\n this.throttledPaperDraw = _(function() {\n paper.view.draw();\n }).throttle(100).value();\n\n this.bundles = [];\n this.click_mode = false;\n\n var _this = this,\n _allowScroll = true,\n _originalScale = 1,\n _zooming = false,\n _lastTapX = 0,\n _lastTapY = 0,\n _lastTap = 0;\n\n this.image_cache = {};\n this.icon_cache = {};\n\n ['edit', 'remove', 'hide', 'show', 'link', 'enlarge', 'shrink', 'revert' ].forEach(function(imgname) {\n var img = new Image();\n img.src = _renkan.options.static_url + 'img/' + imgname + '.png';\n _this.icon_cache[imgname] = img;\n });\n\n var throttledMouseMove = _.throttle(function(_event, _isTouch) {\n _this.onMouseMove(_event, _isTouch);\n }, Utils._MOUSEMOVE_RATE);\n\n this.canvas_$.on({\n mousedown: function(_event) {\n _event.preventDefault();\n _this.onMouseDown(_event, false);\n },\n mousemove: function(_event) {\n _event.preventDefault();\n throttledMouseMove(_event, false);\n },\n mouseup: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event, false);\n },\n mousewheel: function(_event, _delta) {\n if(_renkan.options.zoom_on_scroll) {\n _event.preventDefault();\n if (_allowScroll) {\n _this.onScroll(_event, _delta);\n }\n }\n },\n touchstart: function(_event) {\n _event.preventDefault();\n var _touches = _event.originalEvent.touches[0];\n if (\n _renkan.options.allow_double_click &&\n new Date() - _lastTap < Utils._DOUBLETAP_DELAY &&\n ( Math.pow(_lastTapX - _touches.pageX, 2) + Math.pow(_lastTapY - _touches.pageY, 2) < Utils._DOUBLETAP_DISTANCE )\n ) {\n _lastTap = 0;\n _this.onDoubleClick(_touches);\n } else {\n _lastTap = new Date();\n _lastTapX = _touches.pageX;\n _lastTapY = _touches.pageY;\n _originalScale = _this.view.scale;\n _zooming = false;\n _this.onMouseDown(_touches, true);\n }\n },\n touchmove: function(_event) {\n _event.preventDefault();\n _lastTap = 0;\n if (_event.originalEvent.touches.length === 1) {\n _this.onMouseMove(_event.originalEvent.touches[0], true);\n } else {\n if (!_zooming) {\n _this.onMouseUp(_event.originalEvent.touches[0], true);\n _this.click_target = null;\n _this.is_dragging = false;\n _zooming = true;\n }\n if (_event.originalEvent.scale === \"undefined\") {\n return;\n }\n var _newScale = _event.originalEvent.scale * _originalScale,\n _scaleRatio = _newScale / _this.view.scale,\n _newOffset = new paper.Point([\n _this.canvas_$.width(),\n _this.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - _scaleRatio ) ).add(_this.view.offset.multiply( _scaleRatio ));\n _this.view.setScale(_newScale, _newOffset);\n }\n },\n touchend: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event.originalEvent.changedTouches[0], true);\n },\n click: function(_event) {\n _event.preventDefault();\n _this.onClick(_event);\n },\n dblclick: function(_event) {\n _event.preventDefault();\n if (_renkan.options.allow_double_click) {\n _this.onDoubleClick(_event);\n }\n },\n mouseleave: function(_event) {\n _event.preventDefault();\n //_this.onMouseUp(_event, false);\n _this.click_target = null;\n _this.is_dragging = false;\n },\n dragover: function(_event) {\n _event.preventDefault();\n },\n dragenter: function(_event) {\n _event.preventDefault();\n _allowScroll = false;\n },\n dragleave: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n },\n drop: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n var res = {};\n _.each(_event.originalEvent.dataTransfer.types, function(t) {\n try {\n res[t] = _event.originalEvent.dataTransfer.getData(t);\n } catch(e) {}\n });\n var text = _event.originalEvent.dataTransfer.getData(\"Text\");\n if (typeof text === \"string\") {\n switch(text[0]) {\n case \"{\":\n case \"[\":\n try {\n var data = JSON.parse(text);\n _.extend(res,data);\n }\n catch(e) {\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n break;\n case \"<\":\n if (!res[\"text/html\"]) {\n res[\"text/html\"] = text;\n }\n break;\n default:\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n }\n var url = _event.originalEvent.dataTransfer.getData(\"URL\");\n if (url && !res[\"text/uri-list\"]) {\n res[\"text/uri-list\"] = url;\n }\n _this.dropData(res, _event.originalEvent);\n }\n });\n\n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n\n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n this.$.find(\".Rk-CurrentUser\").mouseenter(\n function() { _this.$.find(\".Rk-UserList\").slideDown(); }\n );\n this.$.find(\".Rk-Users\").mouseleave(\n function() { _this.$.find(\".Rk-UserList\").slideUp(); }\n );\n\n if (Screenfull.enabled){\n bindClick(\".Rk-FullScreen-Button\", \"fullScreen\");\n\n document.addEventListener(Screenfull.raw.fullscreenchange, function () {\n //the listener occur too randomly and sometimes before the fullscreen is fully set up\n //so we add 500 delay\n setTimeout(function(){\n var widthAft = _this.$.width();\n var heightAft = _this.$.height();\n\n if (_this.renkan.options.show_top_bar) {\n heightAft -= _this.$.find(\".Rk-TopBar\").height();\n }\n if (_this.renkan.options.show_bins && (this.renkan.$.find(\".Rk-Bins\").position().left > 0)) {\n widthAft -= this.renkan.$.find(\".Rk-Bins\").width();\n }\n\n paper.view.viewSize = new paper.Size([widthAft, heightAft]);\n _this.resize(_this.currentWidth, widthAft, _this.currentHeight, heightAft);\n\n _this.currentWidth = widthAft;\n _this.currentHeight = heightAft;\n\n if (!Screenfull.isFullscreen) {\n paper.view.onResize = function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n };\n }\n }, 600);\n });\n } else {\n this.$.find(\".Rk-FullScreen-Button\").addClass(\"disabled\");\n this.$.find(\".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents\").html(this.renkan.translate(\"Fullscreen not supported by your browser\"));\n }\n\n bindClick(\".Rk-AddNode-Button\", \"addNodeBtn\");\n bindClick(\".Rk-AddEdge-Button\", \"addEdgeBtn\");\n bindClick(\".Rk-Save-Button\", \"save\");\n bindClick(\".Rk-Open-Button\", \"open\");\n bindClick(\".Rk-Export-Button\", \"exportProject\");\n this.$.find(\".Rk-Bookmarklet-Button\")\n /*jshint scripturl:true */\n .attr(\"href\",\"javascript:\" + Utils._BOOKMARKLET_CODE(_renkan))\n .click(function(){\n _this.notif_$\n .text(_renkan.translate(\"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\"))\n .fadeIn()\n .delay(5000)\n .fadeOut();\n return false;\n });\n this.$.find(\".Rk-TopBar-Button\").mouseover(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").show();\n }).mouseout(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").hide();\n });\n bindClick(\".Rk-Fold-Bins\", \"foldBins\");\n\n paper.view.on(\"resize\", function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n });\n\n var _thRedraw = _.throttle(function() {\n _this.redraw();\n },50);\n\n this.addRepresentations(\"Node\", this.renkan.project.get(\"nodes\"));\n this.addRepresentations(\"Edge\", this.renkan.project.get(\"edges\"));\n this.renkan.project.on(\"change:title\", function() {\n _this.$.find(\".Rk-PadTitle\").val(_renkan.project.get(\"title\")).prop('title', _renkan.project.get(\"title\"));\n });\n\n this.$.find(\".Rk-PadTitle\").on(\"keyup input paste\", function() {\n _renkan.project.set({\"title\": $(this).val()});\n });\n\n var _thRedrawUsers = _.throttle(function() {\n _this.redrawUsers();\n }, 100);\n\n _thRedrawUsers();\n\n // register model events\n this.renkan.project.on(\"change:saveStatus\", function(){\n switch (_this.renkan.project.get(\"saveStatus\")) {\n case 0: //clean\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saved\");\n break;\n case 1: //dirty\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"to-save\");\n break;\n case 2: //saving\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saving\");\n break;\n }\n });\n\n this.renkan.project.on(\"loaded\", function(){\n if (_this.renkan.options.url_parameters){\n Backbone.history.start();\n } else {\n _this.fixSize();\n }\n _this.redrawActive = true;\n _thRedraw();\n });\n\n //register router events\n this.renkan.router.on(\"router\", function(_params){\n _this.setViewParameters(_params);\n });\n\n this.renkan.project.on(\"change:loadingStatus\", function(){\n if (_this.renkan.project.get(\"loadingStatus\")){\n var animate = _this.$.find(\".loader\").addClass(\"run\");\n var timer = setTimeout(function(){\n _this.$.find(\".loader\").hide(250);\n }, 3000);\n }\n });\n\n this.renkan.project.on(\"add:users remove:users\", _thRedrawUsers);\n\n this.renkan.project.on(\"add:views remove:views\", function(_node) {\n if(_this.renkan.project.get('views').length > 1) {\n _this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n else {\n _this.$.find(\".Rk-ZoomSetSaved\").hide();\n }\n });\n\n this.renkan.project.on(\"add:nodes\", function(_node) {\n _this.addRepresentation(\"Node\", _node);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"add:edges\", function(_edge) {\n _this.addRepresentation(\"Edge\", _edge);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"change:title\", function(_model, _title) {\n var el = _this.$.find(\".Rk-PadTitle\");\n if (el.is(\"input\")) {\n if (el.val() !== _title) {\n el.val(_title);\n }\n } else {\n el.text(_title);\n }\n });\n\n if (_renkan.options.size_bug_fix) {\n var _delay = (\n typeof _renkan.options.size_bug_fix === \"number\" ?\n _renkan.options.size_bug_fix\n : 500\n );\n window.setTimeout(\n function() {\n _this.fixSize();\n },\n _delay\n );\n }\n\n if (_renkan.options.force_resize) {\n $(window).resize(function() {\n _this.autoScale();\n });\n }\n\n if (_renkan.options.show_user_list && _renkan.options.user_color_editable) {\n var $cpwrapper = this.$.find(\".Rk-Users .Rk-Edit-ColorPicker-Wrapper\"),\n $cplist = this.$.find(\".Rk-Users .Rk-Editor-ColorPicker-User\");\n\n $cpwrapper.hover(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n $cplist.show();\n }\n },\n function(_e) {\n _e.preventDefault();\n $cplist.hide();\n }\n );\n\n $cplist.find(\"li\").mouseenter(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n _this.$.find(\".Rk-CurrentUser-Color\").css(\"background\", $(this).attr(\"data-color\"));\n }\n }\n );\n }\n\n if (_renkan.options.show_search_field) {\n\n var lastval = '';\n\n this.$.find(\".Rk-GraphSearch-Field\").on(\"keyup change paste input\", function() {\n var $this = $(this),\n val = $this.val();\n if (val === lastval) {\n return;\n }\n lastval = val;\n if (val.length < 2) {\n _renkan.project.get(\"nodes\").each(function(n) {\n _this.getRepresentationByModel(n).unhighlight();\n });\n _renkan.project.get(\"edges\").each(function(e) {\n _this.getRepresentationByModel(e).unhighlight();\n });\n } else {\n var rxs = Utils.regexpFromTextOrArray(val);\n _renkan.project.get(\"nodes\").each(function(n) {\n if (n.id === val || rxs.test(n.get(\"title\")) || rxs.test(n.get(\"description\"))) {\n _this.getRepresentationByModel(n).highlight(rxs);\n } else {\n _this.getRepresentationByModel(n).unhighlight();\n }\n });\n _renkan.project.get(\"edges\").each(function(e) {\n if (e.id === val || rxs.test(e.get(\"title\")) || rxs.test(e.get(\"description\"))) {\n _this.getRepresentationByModel(e).highlight(rxs);\n } else {\n _this.getRepresentationByModel(e).unhighlight();\n }\n });\n\n }\n });\n }\n\n this.redraw();\n\n window.setInterval(function() {\n var _now = new Date().valueOf();\n _this.delete_list.forEach(function(d) {\n if (_now >= d.time) {\n var el = _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeNode(el);\n }\n el = _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeEdge(el);\n }\n }\n });\n _this.delete_list = _this.delete_list.filter(function(d) {\n return _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id}) || _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n });\n }, 500);\n\n if (this.minimap) {\n window.setInterval(function() {\n _this.rescaleMinimap();\n }, 2000);\n }\n\n };\n\n _(Scene.prototype).extend({\n fixSize: function() {\n if(typeof this.view === 'undefined') {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").last());\n }\n this.view.autoScale();\n },\n drawSector: function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgname, _caption) {\n var _options = this.renkan.options,\n _startRads = _startAngle * Math.PI / 180,\n _endRads = _endAngle * Math.PI / 180,\n _img = this.icon_cache[_imgname],\n _startdx = - Math.sin(_startRads),\n _startdy = Math.cos(_startRads),\n _startXIn = Math.cos(_startRads) * _inR + _padding * _startdx,\n _startYIn = Math.sin(_startRads) * _inR + _padding * _startdy,\n _startXOut = Math.cos(_startRads) * _outR + _padding * _startdx,\n _startYOut = Math.sin(_startRads) * _outR + _padding * _startdy,\n _enddx = - Math.sin(_endRads),\n _enddy = Math.cos(_endRads),\n _endXIn = Math.cos(_endRads) * _inR - _padding * _enddx,\n _endYIn = Math.sin(_endRads) * _inR - _padding * _enddy,\n _endXOut = Math.cos(_endRads) * _outR - _padding * _enddx,\n _endYOut = Math.sin(_endRads) * _outR - _padding * _enddy,\n _centerR = (_inR + _outR) / 2,\n _centerRads = (_startRads + _endRads) / 2,\n _centerX = Math.cos(_centerRads) * _centerR,\n _centerY = Math.sin(_centerRads) * _centerR,\n _centerXIn = Math.cos(_centerRads) * _inR,\n _centerXOut = Math.cos(_centerRads) * _outR,\n _centerYIn = Math.sin(_centerRads) * _inR,\n _centerYOut = Math.sin(_centerRads) * _outR,\n _textX = Math.cos(_centerRads) * (_outR + 3),\n _textY = Math.sin(_centerRads) * (_outR + _options.buttons_label_font_size) + _options.buttons_label_font_size / 2;\n this.buttons_layer.activate();\n var _path = new paper.Path();\n _path.add([_startXIn, _startYIn]);\n _path.arcTo([_centerXIn, _centerYIn], [_endXIn, _endYIn]);\n _path.lineTo([_endXOut, _endYOut]);\n _path.arcTo([_centerXOut, _centerYOut], [_startXOut, _startYOut]);\n _path.fillColor = _options.buttons_background;\n _path.opacity = 0.5;\n _path.closed = true;\n _path.__representation = _repr;\n var _text = new paper.PointText(_textX,_textY);\n _text.characterStyle = {\n fontSize: _options.buttons_label_font_size,\n fillColor: _options.buttons_label_color\n };\n if (_textX > 2) {\n _text.paragraphStyle.justification = 'left';\n } else if (_textX < -2) {\n _text.paragraphStyle.justification = 'right';\n } else {\n _text.paragraphStyle.justification = 'center';\n }\n _text.visible = false;\n var _visible = false,\n _restPos = new paper.Point(-200, -200),\n _grp = new paper.Group([_path, _text]),\n //_grp = new paper.Group([_path]),\n _delta = _grp.position,\n _imgdelta = new paper.Point([_centerX, _centerY]),\n _currentPos = new paper.Point(0,0);\n _text.content = _caption;\n // set group pivot to not depend on text visibility that changes the group bounding box.\n _grp.pivot = _grp.bounds.center;\n _grp.visible = false;\n _grp.position = _restPos;\n var _res = {\n show: function() {\n _visible = true;\n _grp.position = _currentPos.add(_delta);\n _grp.visible = true;\n },\n moveTo: function(_point) {\n _currentPos = _point;\n if (_visible) {\n _grp.position = _point.add(_delta);\n }\n },\n hide: function() {\n _visible = false;\n _grp.visible = false;\n _grp.position = _restPos;\n },\n select: function() {\n _path.opacity = 0.8;\n _text.visible = true;\n },\n unselect: function() {\n _path.opacity = 0.5;\n _text.visible = false;\n },\n destroy: function() {\n _grp.remove();\n }\n };\n var showImage = function() {\n var _raster = new paper.Raster(_img);\n _raster.position = _imgdelta.add(_grp.position).subtract(_delta);\n _raster.locked = true; // Disable mouse events on icon\n _grp.addChild(_raster);\n };\n if (_img.width) {\n showImage();\n } else {\n $(_img).on(\"load\",showImage);\n }\n\n return _res;\n },\n addToBundles: function(_edgeRepr) {\n var _bundle = _(this.bundles).find(function(_bundle) {\n return (\n ( _bundle.from === _edgeRepr.from_representation && _bundle.to === _edgeRepr.to_representation ) ||\n ( _bundle.from === _edgeRepr.to_representation && _bundle.to === _edgeRepr.from_representation )\n );\n });\n if (typeof _bundle !== \"undefined\") {\n _bundle.edges.push(_edgeRepr);\n } else {\n _bundle = {\n from: _edgeRepr.from_representation,\n to: _edgeRepr.to_representation,\n edges: [ _edgeRepr ],\n getPosition: function(_er) {\n var _dir = (_er.from_representation === this.from) ? 1 : -1;\n return _dir * ( _(this.edges).indexOf(_er) - (this.edges.length - 1) / 2 );\n }\n };\n this.bundles.push(_bundle);\n }\n return _bundle;\n },\n isEditable: function() {\n return (this.renkan.options.editor_mode && !this.renkan.read_only);\n },\n onStatusChange: function() {\n var savebtn = this.$.find(\".Rk-Save-Button\"),\n tip = savebtn.find(\".Rk-TopBar-Tooltip-Contents\");\n if (this.renkan.read_only) {\n savebtn.removeClass(\"disabled Rk-Save-Online\").addClass(\"Rk-Save-ReadOnly\");\n tip.text(this.renkan.translate(\"Connection lost\"));\n } else {\n if (this.renkan.options.manual_save) {\n savebtn.removeClass(\"Rk-Save-ReadOnly Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Save Project\"));\n } else {\n savebtn.removeClass(\"disabled Rk-Save-ReadOnly\").addClass(\"Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Auto-save enabled\"));\n }\n }\n this.redrawUsers();\n },\n redrawMiniframe: function() {\n var topleft = this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),\n bottomright = this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));\n this.minimap.miniframe.fitBounds(topleft, bottomright);\n },\n rescaleMinimap: function() {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min(\n this.view.scale * 0.8 * this.renkan.options.minimap_width / paper.view.bounds.width,\n this.view.scale * 0.8 * this.renkan.options.minimap_height / paper.view.bounds.height,\n ( this.renkan.options.minimap_width - 2 * this.renkan.options.minimap_padding ) / (_maxx - _minx),\n ( this.renkan.options.minimap_height - 2 * this.renkan.options.minimap_padding ) / (_maxy - _miny)\n );\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale));\n this.minimap.scale = _scale;\n }\n if (nodes.length === 1) {\n this.minimap.scale = 0.1;\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y]).multiply(this.minimap.scale));\n }\n this.redraw();\n },\n toPaperCoords: function(_point) {\n return _point.multiply(this.view.scale).add(this.view.offset);\n },\n toMinimapCoords: function(_point) {\n return _point.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft);\n },\n toModelCoords: function(_point) {\n return _point.subtract(this.view.offset).divide(this.view.scale);\n },\n addRepresentation: function(_type, _model) {\n var RendererType = requtils.getRenderer()[_type];\n var _repr = new RendererType(this, _model);\n this.representations.push(_repr);\n return _repr;\n },\n addRepresentations: function(_type, _collection) {\n var _this = this;\n _collection.forEach(function(_model) {\n _this.addRepresentation(_type, _model);\n });\n },\n userTemplate: _.template(\n '
                          • ;\"><%=name%>
                          • '\n ),\n redrawUsers: function() {\n if (!this.renkan.options.show_user_list) {\n return;\n }\n var allUsers = [].concat((this.renkan.project.current_user_list || {}).models || [], (this.renkan.project.get(\"users\") || {}).models || []),\n ulistHtml = '',\n $userpanel = this.$.find(\".Rk-Users\"),\n $name = $userpanel.find(\".Rk-CurrentUser-Name\"),\n $cpitems = $userpanel.find(\".Rk-Edit-ColorPicker li\"),\n $colorsquare = $userpanel.find(\".Rk-CurrentUser-Color\"),\n _this = this;\n $name.off(\"click\").text(this.renkan.translate(\"\"));\n $cpitems.off(\"mouseleave click\");\n allUsers.forEach(function(_user) {\n if (_user.get(\"_id\") === _this.renkan.current_user) {\n $name.text(_user.get(\"title\"));\n $colorsquare.css(\"background\", _user.get(\"color\"));\n if (_this.isEditable()) {\n\n if (_this.renkan.options.user_name_editable) {\n $name.click(function() {\n var $this = $(this),\n $input = $('').val(_user.get(\"title\")).blur(function() {\n _user.set(\"title\", $(this).val());\n _this.redrawUsers();\n _this.redraw();\n });\n $this.empty().html($input);\n $input.select();\n });\n }\n\n if (_this.renkan.options.user_color_editable) {\n $cpitems.click(\n function(_e) {\n _e.preventDefault();\n if (_this.isEditable()) {\n _user.set(\"color\", $(this).attr(\"data-color\"));\n }\n $(this).parent().hide();\n }\n ).mouseleave(function() {\n $colorsquare.css(\"background\", _user.get(\"color\"));\n });\n }\n }\n\n } else {\n ulistHtml += _this.userTemplate({\n name: _user.get(\"title\"),\n background: _user.get(\"color\")\n });\n }\n });\n $userpanel.find(\".Rk-UserList\").html(ulistHtml);\n },\n removeRepresentation: function(_representation) {\n _representation.destroy();\n this.representations = _.reject(this.representations,\n function(_repr) {\n return _repr === _representation;\n }\n );\n },\n getRepresentationByModel: function(_model) {\n if (!_model) {\n return undefined;\n }\n return _.find(this.representations, function(_repr) {\n return _repr.model === _model;\n });\n },\n removeRepresentationsOfType: function(_type) {\n var _representations = _.filter(this.representations,function(_repr) {\n return _repr.type === _type;\n }),\n _this = this;\n _.each(_representations, function(_repr) {\n _this.removeRepresentation(_repr);\n });\n },\n highlightModel: function(_model) {\n var _repr = this.getRepresentationByModel(_model);\n if (_repr) {\n _repr.highlight();\n }\n },\n unhighlightAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unhighlight();\n });\n },\n unselectAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unselect();\n });\n },\n redraw: function() {\n var _this = this;\n if(! this.redrawActive ) {\n return;\n }\n _.each(this.representations, function(_representation) {\n _representation.redraw({ dontRedrawEdges:true });\n });\n if (this.minimap && typeof this.view !== 'undefined') {\n this.redrawMiniframe();\n }\n paper.view.draw();\n },\n resize: function(prevWidth, newWidth, prevHeight, newHeight){\n var _ratio;\n\n if (this.minimap) {\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.cliprectangle.fitBounds(this.minimap.topleft, this.minimap.size);\n }\n\n var ratioH = newHeight/prevHeight,\n ratioW = newWidth/prevWidth;\n if (newHeight < newWidth) {\n _ratio = ratioH;\n } else {\n _ratio = ratioW;\n }\n this.view.resizeZoom(newWidth - prevWidth, newHeight - prevHeight, _ratio);\n\n this.redraw();\n },\n addTempEdge: function(_from, _point, _origin) {\n var _tmpEdge = this.addRepresentation(\"TempEdge\",null);\n _tmpEdge.end_pos = _point;\n _tmpEdge.from_representation = _from;\n _tmpEdge.origin = _origin;\n _tmpEdge.redraw();\n this.click_target = _tmpEdge;\n },\n findTarget: function(_hitResult) {\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _newTarget = _hitResult.item.__representation;\n if (this.selected_target !== _hitResult.item.__representation) {\n if (this.selected_target) {\n this.selected_target.unselect(_newTarget);\n }\n _newTarget.select(this.selected_target);\n this.selected_target = _newTarget;\n }\n } else {\n if (this.selected_target) {\n this.selected_target.unselect();\n }\n this.selected_target = null;\n }\n },\n onMouseMove: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _delta = _point.subtract(this.last_point);\n this.last_point = _point;\n if (!this.is_dragging && this.mouse_down && _delta.length > Utils._MIN_DRAG_DISTANCE) {\n this.is_dragging = true;\n }\n var _hitResult = paper.project.hitTest(_point);\n if (this.is_dragging) {\n if (this.click_target && typeof this.click_target.paperShift === \"function\") {\n this.click_target.paperShift(_delta);\n } else {\n this.view.paperShift(_delta);\n }\n } else {\n this.findTarget(_hitResult);\n }\n paper.view.draw();\n },\n onMouseDown: function(_event, _isTouch) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.last_point = _point;\n this.mouse_down = true;\n if (!this.click_target || this.click_target.type !== \"Temp-edge\") {\n this.removeRepresentationsOfType(\"editor\");\n this.is_dragging = false;\n var _hitResult = paper.project.hitTest(_point);\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n this.click_target = _hitResult.item.__representation;\n this.click_target.mousedown(_event, _isTouch);\n } else {\n this.click_target = null;\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_ADDNODE) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_BUTTON\n };\n var _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n }\n }\n if (this.click_mode) {\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === \"Node\") {\n this.removeRepresentationsOfType(\"editor\");\n this.addTempEdge(this.click_target, _point, Utils.OriginEnum.EDGE_BUTTON_BAR);\n this.click_mode = Utils._CLICKMODE_ENDEDGE;\n this.notif_$.fadeOut(function() {\n $(this).html(this.renkan.translate(\"Click on a second node to complete the edge\")).fadeIn();\n });\n } else {\n this.notif_$.hide();\n this.click_mode = false;\n }\n }\n paper.view.draw();\n },\n onMouseUp: function(_event, _isTouch) {\n this.mouse_down = false;\n if (this.click_target) {\n var _off = this.canvas_$.offset();\n this.click_target.mouseup(\n {\n point: new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ])\n },\n _isTouch\n );\n } else {\n this.click_target = null;\n this.is_dragging = false;\n if (_isTouch) {\n this.unselectAll();\n }\n this.view.updateUrl();\n }\n paper.view.draw();\n },\n onScroll: function(_event, _scrolldelta) {\n this.totalScroll += _scrolldelta;\n if (Math.abs(this.totalScroll) >= 1) {\n var _off = this.canvas_$.offset(),\n _delta = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]).subtract(this.view.offset).multiply( Math.SQRT2 - 1 );\n if (this.totalScroll > 0) {\n this.view.setScale( this.view.scale * Math.SQRT2, this.view.offset.subtract(_delta) );\n } else {\n this.view.setScale( this.view.scale * Math.SQRT1_2, this.view.offset.add(_delta.divide(Math.SQRT2)));\n }\n this.totalScroll = 0;\n }\n },\n onClick: function(_event) {\n if (!this.isEditable()) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n if(!this._open_uri_cb &&\n this.renkan.options.simple_click_open_url && \n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n this._node_click_open_url = setTimeout(function() {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n this._node_click_open_url = null;\n }.bind(this), 200);\n }\n }\n },\n onDoubleClick: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n\n if (!this.isEditable()) {\n if (this.renkan.options.double_click_open_url &&\n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n }\n return;\n }\n if (this.isEditable() && (!_hitResult || typeof _hitResult.item.__representation === \"undefined\")) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_DOUBLE_CLICK\n },\n _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n paper.view.draw();\n },\n defaultDropHandler: function(_data) {\n var newNode = {};\n var snippet = \"\";\n switch(_data[\"text/x-iri-specific-site\"]) {\n case \"twitter\":\n snippet = $('
                            ').html(_data[\"text/x-iri-selected-html\"]);\n var tweetdiv = snippet.find(\".tweet\");\n newNode.title = this.renkan.translate(\"Tweet by \") + tweetdiv.attr(\"data-name\");\n newNode.uri = \"http://twitter.com/\" + tweetdiv.attr(\"data-screen-name\") + \"/status/\" + tweetdiv.attr(\"data-tweet-id\");\n newNode.image = tweetdiv.find(\".avatar\").attr(\"src\");\n newNode.description = tweetdiv.find(\".js-tweet-text:first\").text();\n break;\n case \"google\":\n snippet = $('
                            ').html(_data[\"text/x-iri-selected-html\"]);\n newNode.title = snippet.find(\"h3:first\").text().trim();\n newNode.uri = snippet.find(\"h3 a\").attr(\"href\");\n newNode.description = snippet.find(\".st:first\").text().trim();\n break;\n default:\n if (_data[\"text/x-iri-source-uri\"]) {\n newNode.uri = _data[\"text/x-iri-source-uri\"];\n }\n }\n if (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]) {\n newNode.description = (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]).replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                            ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n var _svgimgs = snippet.find(\"image\");\n if (_svgimgs.length) {\n newNode.image = _svgimgs.attr(\"xlink:href\");\n }\n var _svgpaths = snippet.find(\"path\");\n if (_svgpaths.length) {\n newNode.clipPath = _svgpaths.attr(\"d\");\n }\n var _imgs = snippet.find(\"img\");\n if (_imgs.length) {\n newNode.image = _imgs[0].src;\n }\n var _as = snippet.find(\"a\");\n if (_as.length) {\n newNode.uri = _as[0].href;\n }\n newNode.title = snippet.find(\"[title]\").attr(\"title\") || newNode.title;\n newNode.description = snippet.text().replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/uri-list\"]) {\n newNode.uri = _data[\"text/uri-list\"];\n }\n if (_data[\"text/x-moz-url\"] && !newNode.title) {\n newNode.title = (_data[\"text/x-moz-url\"].split(\"\\n\")[1] || \"\").trim();\n if (newNode.title === newNode.uri) {\n newNode.title = false;\n }\n }\n if (_data[\"text/x-iri-source-title\"] && !newNode.title) {\n newNode.title = _data[\"text/x-iri-source-title\"];\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                            ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n newNode.image = snippet.find(\"[data-image]\").attr(\"data-image\") || newNode.image;\n newNode.uri = snippet.find(\"[data-uri]\").attr(\"data-uri\") || newNode.uri;\n newNode.title = snippet.find(\"[data-title]\").attr(\"data-title\") || newNode.title;\n newNode.description = snippet.find(\"[data-description]\").attr(\"data-description\") || newNode.description;\n newNode.clipPath = snippet.find(\"[data-clip-path]\").attr(\"data-clip-path\") || newNode.clipPath;\n }\n\n if (!newNode.title) {\n newNode.title = this.renkan.translate(\"Dragged resource\");\n }\n var fields = [\"title\", \"description\", \"uri\", \"image\"];\n for (var i = 0; i < fields.length; i++) {\n var f = fields[i];\n if (_data[\"text/x-iri-\" + f] || _data[f]) {\n newNode[f] = _data[\"text/x-iri-\" + f] || _data[f];\n }\n if (newNode[f] === \"none\" || newNode[f] === \"null\") {\n newNode[f] = undefined;\n }\n }\n\n if(typeof this.renkan.options.drop_enhancer === \"function\"){\n newNode = this.renkan.options.drop_enhancer(newNode, _data);\n }\n\n return newNode;\n\n },\n dropData: function(_data, _event) {\n if (!this.isEditable()) {\n return;\n }\n if (_data[\"text/json\"] || _data[\"application/json\"]) {\n try {\n var jsondata = JSON.parse(_data[\"text/json\"] || _data[\"application/json\"]);\n _.extend(_data,jsondata);\n }\n catch(e) {}\n }\n\n var newNode = (typeof this.renkan.options.drop_handler === \"undefined\")?this.defaultDropHandler(_data):this.renkan.options.drop_handler(_data);\n\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _coords = this.toModelCoords(_point),\n _nodedata = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n uri: newNode.uri || \"\",\n title: newNode.title || \"\",\n description: newNode.description || \"\",\n image: newNode.image || \"\",\n color: newNode.color || undefined,\n clip_path: newNode.clipPath || undefined,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n //TODO: Determine if it comes from bin or ext\n origin: Utils.OriginEnum.NODE_DROP_EXT\n };\n var _node = this.renkan.project.addNode(_nodedata),\n _repr = this.getRepresentationByModel(_node);\n if (_event.type === \"drop\") {\n _repr.openEditor();\n }\n },\n fullScreen: function() {\n this.currentWidth = this.$.width();\n this.currentHeight = this.$.height();\n\n var _el = this.renkan.$[0];\n paper.view.off(\"resize\");\n Screenfull.toggle(_el);\n },\n addNodeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_ADDNODE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_ADDNODE;\n this.notif_$.text(this.renkan.translate(\"Click on the background canvas to add a node\")).fadeIn();\n }\n return false;\n },\n addEdgeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_STARTEDGE || this.click_mode === Utils._CLICKMODE_ENDEDGE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_STARTEDGE;\n this.notif_$.text(this.renkan.translate(\"Click on a first node to start the edge\")).fadeIn();\n }\n return false;\n },\n exportProject: function() {\n var projectJSON = this.renkan.project.toJSON(),\n downloadLink = document.createElement(\"a\"),\n projectId = projectJSON.id,\n fileNameToSaveAs = projectId + \".json\";\n\n // clean ids\n delete projectJSON.id;\n delete projectJSON._id;\n delete projectJSON.space_id;\n\n var objId,\n idsMap = {},\n hiddenNodes;\n\n _.each(projectJSON.nodes, function(e,i,l) {\n objId = e.id || e._id;\n delete e._id;\n delete e.id;\n idsMap[objId] = e['@id'] = Utils.getUUID4();\n });\n _.each(projectJSON.edges, function(e,i,l) {\n delete e._id;\n delete e.id;\n e.to = idsMap[e.to];\n e.from = idsMap[e.from];\n });\n _.each(projectJSON.views, function(e,i,l) {\n delete e._id;\n delete e.id;\n\n if(e.hidden_nodes) {\n hiddenNodes = e.hidden_nodes;\n e.hidden_nodes = [];\n _.each(hiddenNodes, function(h,j) {\n e.hidden_nodes.push(idsMap[h]);\n });\n }\n });\n projectJSON.users = [];\n\n var projectJSONStr = JSON.stringify(projectJSON, null, 2);\n var blob = new Blob([projectJSONStr], {type: \"application/json;charset=utf-8\"});\n filesaver(blob,fileNameToSaveAs);\n\n },\n setViewParameters: function(_params){\n this.removeRepresentationsOfType(\"View\");\n if ($.isEmptyObject(_params)){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n return;\n }\n if (typeof _params.viewIndex !== 'undefined'){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(_params.viewIndex)));\n } else {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n }\n if (typeof _params.view !== 'undefined' && _params.view.split(\",\").length >= 3){\n var viewParams = _params.view.split(\",\");\n var params = {\n \"project\": this.renkan.project,\n \"offset\": {\n \"x\": parseFloat(viewParams[0]),\n \"y\": parseFloat(viewParams[1])\n },\n \"zoom_level\": parseFloat(viewParams[2])\n };\n this.view.setScale(params.zoom_level, new paper.Point(params.offset));\n }\n //if view parameters = autoscale we apply a zoom fit on the view.\n if ((typeof _params.view !== 'undefined' && _params.view === \"autoscale\")){\n this.view.autoScale();\n }\n //if viewsNodes = false we show all the node by default.\n if (typeof _params.viewsNodes !== 'undefined'){\n if (_params.viewsNodes === \"true\"){\n this.view.hiddenNodes = (this.view.params.hidden_nodes || []).concat();\n this.view.hideNodes();\n } else {\n this.view.showNodes(false);\n }\n }\n //other parameters must go after because most of them depends on a view that must be initialize before\n this.unhighlightAll();\n if (typeof _params.node !== 'undefined' && _params.node){\n this.highlightModel(this.renkan.project.get(\"nodes\").get(_params.node));\n }\n if (typeof _params.edge !== 'undefined' && _params.edge){\n this.highlightModel(this.renkan.project.get(\"edges\").get(_params.edge));\n }\n\n },\n validViewIndex: function(index){\n //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist\n var _index = parseInt(index);\n var validIndex = 0;\n if (_index < 0){\n validIndex = this.renkan.project.get(\"views\").length + _index;\n } else {\n validIndex = _index;\n }\n if (typeof this.renkan.project.get(\"views\").at(_index) === 'undefined'){\n validIndex = 0;\n }\n return validIndex;\n },\n foldBins: function() {\n var foldBinsButton = this.$.find(\".Rk-Fold-Bins\"),\n bins = this.renkan.$.find(\".Rk-Bins\"),\n _delta = 0;\n var _this = this,\n sizeBef = _this.canvas_$.width(),\n sizeAft;\n if (bins.position().left < 0) {\n _delta= new paper.Point([-bins.width()/2, 0]);\n bins.animate({left: 0},250);\n this.$.animate({left: 300},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n if ((sizeBef - bins.width()) < bins.height()){\n sizeAft = sizeBef;\n } else {\n sizeAft = sizeBef - bins.width();\n }\n foldBinsButton.html(\"«\");\n } else {\n _delta= new paper.Point([bins.width()/2, 0]);\n bins.animate({left: -300},250);\n this.$.animate({left: 0},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n sizeAft = sizeBef+300;\n foldBinsButton.html(\"»\");\n }\n this.view.paperShift(_delta);\n },\n save: function() { },\n open: function() { }\n }).value();\n\n /* Scene End */\n\n return Scene;\n\n});\n\ndefine('renderer/viewrepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.View Class */\n\n /* The representation for the view. */\n\n var ViewRepr = Utils.inherit(BaseRepresentation);\n\n _(ViewRepr.prototype).extend({\n _init: function() {\n var _this = this;\n this.$ = $(\".Rk-Render\");\n this.type = \"View\";\n this.hiddenNodes = [];\n this.scale = 1;\n this.initialScale = 1;\n this.offset = paper.view.center;\n this.params = {};\n \n if (this.model){\n this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n }\n \n this.initWithParams();\n \n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n \n bindClick(\".Rk-ZoomOut\", \"zoomOut\");\n bindClick(\".Rk-ZoomIn\", \"zoomIn\");\n bindClick(\".Rk-ZoomFit\", \"autoScale\");\n bindClick(\".Rk-ZoomSave\", \"saveView\");\n \n this.$.find(\".Rk-ZoomSetSaved\").click( function() {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));\n _this.showNodes(false);\n if (_this.options.hide_nodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n }\n _this.updateUrl();\n });\n \n this.$.find(\".Rk-ShowHiddenNodes\").mouseenter( function() {\n _this.showNodes(true);\n _this.$.find(\".Rk-ShowHiddenNodes\").mouseleave( function() {\n _this.hideNodes();\n });\n });\n this.$.find(\".Rk-ShowHiddenNodes\").click( function() {\n _this.showNodes(false);\n _this.$.find(\".Rk-ShowHiddenNodes\").off( \"mouseleave\" ); \n });\n \n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n },\n redraw: function(options) {\n //console.log(\"view : \", this.model.toJSON());\n },\n initWithParams: function(){\n var _this = this;\n \n if (_this.options.view_force_autoscale){\n this.autoScale();\n } else {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); \n }\n \n if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n } else {\n _this.showNodes(false);\n }\n },\n saveView: function(){\n var _this = this;\n \n var offset = {\n \"x\": _this.offset.x,\n \"y\": _this.offset.y\n };\n \n _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );\n _this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n \n this.$.find(\".Rk-ZoomSetSaved\").show();\n \n _this.updateUrl();\n },\n addHiddenNode: function(_model){\n this.hideNode(_model);\n this.hiddenNodes.push(_model.id);\n this.updateUrl();\n },\n hideNode: function(_model){\n if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){\n this.renderer.getRepresentationByModel(_model).hide();\n }\n },\n hideNodes: function(){\n var _this = this;\n this.hiddenNodes.forEach(function(_id, index){\n var node = _this.renkan.project.get(\"nodes\").get(_id);\n if (typeof node !== 'undefined'){\n return _this.hideNode(_this.renkan.project.get(\"nodes\").get(_id));\n }else{\n _this.hiddenNodes.splice(index, 1);\n }\n });\n paper.view.draw();\n },\n showNodes: function(ghost){\n var _this = this;\n this.hiddenNodes.forEach(function(_id){\n _this.renderer.getRepresentationByModel(_this.renkan.project.get(\"nodes\").get(_id)).show(ghost);\n });\n if (!ghost){\n this.hiddenNodes = [];\n }\n paper.view.draw();\n },\n setScale: function(_newScale, _offset) {\n if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {\n this.scale = _newScale;\n if (_offset) {\n this.offset = _offset;\n }\n this.renderer.redraw();\n this.updateUrl();\n }\n },\n zoomOut: function() {\n var _newScale = this.scale * Math.SQRT1_2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));\n this.setScale( _newScale, _offset );\n },\n zoomIn: function() {\n var _newScale = this.scale * Math.SQRT2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));\n this.setScale( _newScale, _offset );\n },\n resizeZoom: function(deltaW, deltaH, _ratio) {\n var _newScale = this.scale * _ratio;\n var _offset = new paper.Point([\n (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),\n (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )\n ]);\n this.setScale( _newScale, _offset );\n },\n autoScale: function(force_view) {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny));\n this.initialScale = _scale;\n // Override calculated scale if asked\n if((typeof force_view !== \"undefined\") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){\n this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));\n }\n else{\n this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));\n }\n }\n if (nodes.length === 1) {\n this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y])));\n }\n },\n paperShift: function(_delta) {\n this.offset = this.offset.add(_delta);\n this.renderer.redraw();\n },\n updateUrl: function(){\n if(this.options.url_parameters && this.options.update_url){\n var result = {};\n var parameters = Backbone.history.getFragment().split('?');\n if (parameters.length > 1){\n parameters[1].split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000;\n\n if (this.renkan.project.get(\"views\").indexOf(this.model) > -1){\n result.viewIndex = this.renkan.project.get(\"views\").indexOf(this.model);\n if (result.viewIndex === this.renkan.project.get(\"views\").length - 1){\n result.viewIndex = -1;\n }\n } else {\n if (result.viewIndex){\n delete result.viewIndex;\n }\n }\n this.renkan.router.navigate(\"?\" + decodeURIComponent($.param(result)), {trigger: false, replace: true});\n }\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.showNodes(false);\n }\n }).value();\n\n return ViewRepr;\n\n});\n\n\n//Load modules and use them\nif( typeof require.config === \"function\" ) {\n require.config({\n paths: {\n 'jquery':'../lib/jquery/jquery',\n 'underscore':'../lib/lodash/lodash',\n 'filesaver' :'../lib/FileSaver/FileSaver',\n 'requtils':'require-utils',\n 'jquery-private':'jquery-private',\n 'ckeditor-core':'../lib/ckeditor/ckeditor',\n 'screenfull':'../lib/screenfull/screenfull-umd'\n },\n // JQuery config. cf: http://requirejs.org/docs/jquery.html#noconflictmap\n map: {\n '*': { 'jquery': 'jquery-private' },\n 'jquery-private': { 'jquery': 'jquery' }\n },\n shim: {\n 'ckeditor-core': {\n exports: 'CKEDITOR',\n }\n }\n });\n}\n\nrequire(['renderer/baserepresentation',\n 'renderer/basebutton',\n 'renderer/noderepr',\n 'renderer/edge',\n 'renderer/tempedge',\n 'renderer/baseeditor',\n 'renderer/nodeeditor',\n 'renderer/edgeeditor',\n 'renderer/nodebutton',\n 'renderer/nodeeditbutton',\n 'renderer/noderemovebutton',\n 'renderer/nodehidebutton',\n 'renderer/nodeshowbutton',\n 'renderer/noderevertbutton',\n 'renderer/nodelinkbutton',\n 'renderer/nodeenlargebutton',\n 'renderer/nodeshrinkbutton',\n 'renderer/edgeeditbutton',\n 'renderer/edgeremovebutton',\n 'renderer/edgerevertbutton',\n 'renderer/miniframe',\n 'renderer/scene',\n 'renderer/viewrepr'\n ], function(BaseRepresentation, BaseButton, NodeRepr, Edge, TempEdge, BaseEditor, NodeEditor, EdgeEditor, NodeButton, NodeEditButton, NodeRemoveButton, NodeHideButton, NodeShowButton, NodeRevertButton, NodeLinkButton, NodeEnlargeButton, NodeShrinkButton, EdgeEditButton, EdgeRemoveButton, EdgeRevertButton, MiniFrame, Scene, ViewRepr){\n\n 'use strict';\n\n var Rkns = window.Rkns;\n\n if(typeof Rkns.Renderer === \"undefined\"){\n Rkns.Renderer = {};\n }\n var Renderer = Rkns.Renderer;\n\n Renderer._BaseRepresentation = BaseRepresentation;\n Renderer._BaseButton = BaseButton;\n Renderer.Node = NodeRepr;\n Renderer.Edge = Edge;\n Renderer.View = ViewRepr;\n Renderer.TempEdge = TempEdge;\n Renderer._BaseEditor = BaseEditor;\n Renderer.NodeEditor = NodeEditor;\n Renderer.EdgeEditor = EdgeEditor;\n Renderer._NodeButton = NodeButton;\n Renderer.NodeEditButton = NodeEditButton;\n Renderer.NodeRemoveButton = NodeRemoveButton;\n Renderer.NodeHideButton = NodeHideButton;\n Renderer.NodeShowButton = NodeShowButton;\n Renderer.NodeRevertButton = NodeRevertButton;\n Renderer.NodeLinkButton = NodeLinkButton;\n Renderer.NodeEnlargeButton = NodeEnlargeButton;\n Renderer.NodeShrinkButton = NodeShrinkButton;\n Renderer.EdgeEditButton = EdgeEditButton;\n Renderer.EdgeRemoveButton = EdgeRemoveButton;\n Renderer.EdgeRevertButton = EdgeRevertButton;\n Renderer.MiniFrame = MiniFrame;\n Renderer.Scene = Scene;\n\n startRenkan();\n});\n\ndefine(\"main-renderer\", function(){});\n\n// Module o use with jquery to handle no conflict. cf: http://requirejs.org/docs/jquery.html#noconflictmap\ndefine('jquery-private',['jquery'], function (jq) {\n 'use strict';\n return jq.noConflict( true );\n});\n\n"]} \ No newline at end of file diff -r 50f5e8d2c839 -r cac26275af31 server/python/django/renkanmanager/__init__.py --- a/server/python/django/renkanmanager/__init__.py Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django/renkanmanager/__init__.py Fri Sep 15 14:11:36 2017 +0200 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -VERSION = (00, 13, 01, "final", 0) +VERSION = (00, 13, 02, "final", 0) def get_version(): diff -r 50f5e8d2c839 -r cac26275af31 server/python/django/renkanmanager/static/renkanmanager/lib/renkan/css/renkan.css --- a/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/css/renkan.css Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/css/renkan.css Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ /*! * _____ _ diff -r 50f5e8d2c839 -r cac26275af31 server/python/django/renkanmanager/static/renkanmanager/lib/renkan/css/space-editor.css --- a/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/css/space-editor.css Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/css/space-editor.css Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ html { overflow: visible !important; diff -r 50f5e8d2c839 -r cac26275af31 server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.js --- a/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.js Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.js Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ this["renkanJST"] = this["renkanJST"] || {}; @@ -470,7 +470,57 @@ var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { -__p += '

                            \n ×\n '; + + +function get_youtube_id(url) { + var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; + var match = url.match(regExp); + if (match && match[2].length == 11) { + return match[2]; + } else { + return false; + } +} + +function get_vimeo_id(url) { + var regExp = /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; + + var match = url.match(regExp); + + if (match){ + return match[2]; + } else { + return false; + } +} + +function get_dailymotion_id(url) { + var regExp = /^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$/; + + var match = url.match(regExp); + + if (match) { + if(match[4] !== undefined) { + return match[4]; + } + return match[2]; + } + return false; +} + +function get_facebook_id(url) { + var regExp = /^https?:\/\/www\.facebook\.com\/(?:video\.php\?v=\d+|.*?\/videos\/\d+)\/?$/; + + var match = url.match(regExp); + + if (match) { + return encodeURIComponent(url); + } + return false; +} + +; +__p += '\n

                            \n ×\n '; if (options.show_node_tooltip_color) { ; __p += '\n \n \n

                            ' + +__e(renkan.translate("Link")) + +'

                            \n '; + } + else if(video_id = get_vimeo_id(node.uri)) { ; +__p += '\n \n

                            \n \n'; - } ; +'" target="_blank">' + +__e(renkan.translate("Link")) + +'

                            \n '; + } + else if(video_id = get_dailymotion_id(node.uri)) { ; +__p += '\n \n

                            ' + +__e(renkan.translate("Link")) + +'

                            \n '; + } + else if(video_id = get_facebook_id(node.uri)) { ; +__p += '\n \n

                            ' + +__e(renkan.translate("Video link")) + +'

                            \n '; + } + else { ; +__p += ' \n \n '; + } + } +; __p += '\n ' + @@ -2304,6 +2394,7 @@ "Fullscreen not supported by your browser": "Le plein écran n'est pas supporté par votre navigateur", "Title size:": "Taille :", "Title color:": "Couleur :", + "Video link": "Lien vidéo" } }; diff -r 50f5e8d2c839 -r cac26275af31 server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js --- a/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js Fri Sep 15 14:11:36 2017 +0200 @@ -24,12 +24,12 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ -this.renkanJST=this.renkanJST||{},this.renkanJST["templates/colorpicker.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                          • ';return __p},this.renkanJST["templates/edgeeditor_readonly.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                            \n ×\n ',options.show_edge_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',edge.uri&&(__p+='\n \n '),__p+="\n "+__e(edge.title)+"\n ",edge.uri&&(__p+=" "),__p+="\n \n

                            \n",options.show_edge_tooltip_uri&&edge.uri&&(__p+='\n

                            \n '+__e(edge.short_uri)+"\n

                            \n"),__p+="\n

                            "+(null==(__t=edge.description)?"":__t)+"

                            \n",options.show_edge_tooltip_nodes&&(__p+='\n

                            \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                            \n

                            \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                            \n"),__p+="\n",options.show_edge_tooltip_creator&&edge.has_creator&&(__p+='\n

                            \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                            \n"),__p+="\n";return __p},this.renkanJST["templates/edgeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                            \n ×'+__e(renkan.translate("Edit Edge"))+"\n

                            \n

                            \n \n \n

                            \n',options.show_edge_editor_uri&&(__p+="\n

                            \n \n \n \n

                            \n ',options.properties.length&&(__p+="\n

                            \n \n \n

                            \n")),__p+="\n",options.show_edge_editor_style&&(__p+='\n
                            \n ',options.show_edge_editor_style_color&&(__p+='\n
                            \n '+__e(renkan.translate("Edge color:"))+'\n
                            \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Edge"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                            \n
                            \n "),__p+="\n ",options.show_edge_editor_style_dash&&(__p+='\n
                            \n '+__e(renkan.translate("Dash:"))+'\n \n
                            \n "),__p+="\n ",options.show_edge_editor_style_thickness&&(__p+='\n
                            \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(edge.thickness)+'\n +\n
                            \n '),__p+="\n ",options.show_edge_editor_style_arrow&&(__p+='\n
                            \n '+__e(renkan.translate("Arrow:"))+'\n \n
                            \n "),__p+="\n
                            \n"),__p+="\n",options.show_edge_editor_direction&&(__p+='\n

                            \n '+__e(renkan.translate("Change edge direction"))+"\n

                            \n"),__p+="\n",options.show_edge_editor_nodes&&(__p+='\n

                            \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                            \n

                            \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                            \n"),__p+="\n",options.show_edge_editor_creator&&edge.has_creator&&(__p+='\n

                            \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                            \n"),__p+="\n";return __p},this.renkanJST["templates/ldtjson-bin/annotationtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                          • \n\n \n

                            '+(null==(__t=htitle)?"":__t)+"

                            \n

                            "+(null==(__t=hdescription)?"":__t)+"

                            \n

                            Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                            \n
                            \n
                          • \n';return __p},this.renkanJST["templates/ldtjson-bin/segmenttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                          • \n\n \n

                            '+(null==(__t=htitle)?"":__t)+"

                            \n

                            "+(null==(__t=hdescription)?"":__t)+"

                            \n

                            Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                            \n
                            \n
                          • \n';return __p},this.renkanJST["templates/ldtjson-bin/tagtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                          • \n\n \n

                            '+(null==(__t=htitle)?"":__t)+'

                            \n
                            \n
                          • \n';return __p},this.renkanJST["templates/list-bin.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='
                          • \n'),__p+='\n

                            \n ',url&&(__p+='\n \n '),__p+="\n "+(null==(__t=htitle)?"":__t)+"\n ",url&&(__p+=""),__p+="\n

                            \n ",description&&(__p+='\n

                            '+(null==(__t=hdescription)?"":__t)+"

                            \n "),__p+="\n ",image&&(__p+='\n
                            \n '),__p+="\n
                          • \n";return __p},this.renkanJST["templates/main.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_bins&&(__p+='\n
                            \n
                            \n

                            '+__e(translate("Select contents:"))+'

                            \n
                            \n \n
                            \n
                            \n
                              \n
                              \n \n
                              \n
                              \n \n \n
                              \n
                                \n
                                \n'),__p+=" ",options.show_editor&&(__p+='\n
                                \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n

                                \n '+__e(node.short_uri)+"\n

                                \n"),__p+=" ",options.show_node_tooltip_description&&(__p+='\n

                                '+(null==(__t=node.description)?"":__t)+"

                                \n"),__p+=" ",node.image&&options.show_node_tooltip_image&&(__p+='\n \n'),__p+=" ",node.has_creator&&options.show_node_tooltip_creator&&(__p+='\n

                                \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                \n"),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor_video.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n \n'),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='\n

                                \n ×'+__e(renkan.translate("Edit Node"))+"\n

                                \n

                                \n \n ",__p+=options.show_node_editor_title_richtext?'\n

                                '+(null==(__t=node.title)?"":__t)+"
                                \n ":'\n \n ',__p+="\n

                                \n",options.show_node_title_style&&(__p+='\n
                                \n
                                \n '+__e(renkan.translate("Title color:"))+'\n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Title"))?"":__t)+'\n
                                \n
                                \n '+__e(renkan.translate("Title size:"))+'\n -\n '+__e(node.title_size.toFixed(1))+'\n +\n
                                \n
                                \n'),__p+=" ",options.show_node_editor_uri&&(__p+="\n

                                \n \n \n \n

                                \n'),__p+=" ",options.change_types&&(__p+="\n

                                \n \n \n

                                \n"),__p+=" ",options.show_node_editor_description&&(__p+="\n

                                \n \n ",__p+=options.show_node_editor_description_richtext?'\n

                                '+(null==(__t=node.description)?"":__t)+"
                                \n ":'\n \n ",__p+="\n

                                \n"),__p+=" ",options.show_node_editor_size&&(__p+='\n

                                \n '+__e(renkan.translate("Size:"))+'\n -\n '+__e(node.size)+'\n +\n

                                \n'),__p+=" ",options.show_node_editor_style&&(__p+='\n
                                \n ',options.show_node_editor_style_color&&(__p+='\n
                                \n \n '+__e(renkan.translate("Node color:"))+'\n
                                \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Node"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                \n
                                \n "),__p+="\n ",options.show_node_editor_style_dash&&(__p+='\n
                                \n '+__e(renkan.translate("Dash:"))+'\n \n
                                \n "),__p+="\n ",options.show_node_editor_style_thickness&&(__p+='\n
                                \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(node.thickness)+'\n +\n
                                \n '),__p+="\n
                                \n"),__p+=" ",options.show_node_editor_image&&(__p+='\n
                                \n
                                \n \n ',node.clip_path&&(__p+='\n \n \n \n '),__p+="\n
                                \n
                                \n

                                \n \n

                                \n \n \n
                                \n

                                \n",options.allow_image_upload&&(__p+="\n

                                \n \n \n

                                \n')),__p+=" ",options.show_node_editor_creator&&node.has_creator&&(__p+='\n

                                \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                \n"),__p+=" ",options.change_shapes&&(__p+="\n

                                \n \n \n

                                \n"),__p+="\n";return __p},this.renkanJST["templates/scene.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_top_bar&&(__p+='\n
                                \n
                                \n ',__p+=options.editor_mode&&options.title_editable?'\n \n ':'\n

                                \n '+__e(project.get("title")||translate("Untitled project"))+"\n

                                \n ",__p+="\n ",options.show_user_list&&(__p+='\n
                                \n
                                \n ',options.show_user_color&&(__p+='\n
                                \n \n ',options.user_color_editable&&(__p+='\n \n '),__p+="\n \n ",options.user_color_editable&&print(colorPicker("Rk-Editor-ColorPicker-User")),__p+="\n
                                \n "),__p+='\n <unknown user>\n
                                \n
                                  \n
                                  \n '),__p+="\n ",options.home_button_url&&(__p+='\n
                                  \n \n
                                  \n
                                  \n '+__e(translate(options.home_button_title))+"\n
                                  \n
                                  \n
                                  \n "),__p+="\n ",options.show_fullscreen_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n '+__e(translate("Full Screen"))+"\n
                                  \n
                                  \n
                                  \n "),__p+="\n ",options.editor_mode?(__p+="\n ",options.show_addnode_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n '+__e(translate("Add Node"))+"\n
                                  \n
                                  \n
                                  \n "),__p+="\n ",options.show_addedge_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n '+__e(translate("Add Edge"))+"\n
                                  \n
                                  \n
                                  \n "),__p+="\n ",options.show_export_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n '+__e(translate("Download Project"))+"\n
                                  \n
                                  \n
                                  \n "),__p+="\n ",options.show_save_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n
                                  \n
                                  \n '),__p+="\n ",options.show_open_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n '+__e(translate("Open Project"))+"\n
                                  \n
                                  \n
                                  \n "),__p+="\n ",options.show_bookmarklet&&(__p+='\n
                                  \n \n
                                  \n
                                  \n '+__e(translate("Renkan 'Drag-to-Add' bookmarklet"))+'\n
                                  \n
                                  \n
                                  \n
                                  \n '),__p+="\n "):(__p+="\n ",options.show_export_button&&(__p+='\n
                                  \n
                                  \n
                                  \n
                                  \n '+__e(translate("Download Project"))+'\n
                                  \n
                                  \n
                                  \n
                                  \n '),__p+="\n "),__p+="\n ",options.show_search_field&&(__p+='\n
                                  \n \n
                                  \n
                                  \n '),__p+="\n
                                  \n"),__p+='\n
                                  \n
                                  \n
                                  \n ',options.editor_mode&&options.save_view&&(__p+='\n
                                  \n '),__p+="\n ",options.save_view&&(__p+='\n
                                  \n ',options.hide_nodes&&(__p+='\n \t \n '),__p+=" \n "),__p+="\n
                                  \n "),__p+="\n \n\n";return __p},this.renkanJST["templates/search.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                • '+(null==(__t=title)?"":__t)+"
                                • ";return __p},this.renkanJST["templates/wikipedia-bin/resulttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                • \n\n \n

                                  \n '+(null==(__t=htitle)?"":__t)+'\n

                                  \n

                                  '+(null==(__t=hdescription)?"":__t)+"

                                  \n
                                • \n";return __p},function(a){"use strict";"object"!=typeof a.Rkns&&(a.Rkns={});var b=a.Rkns,c=b.$=a.jQuery,d=b._=a._;b.pickerColors=["#8f1919","#a80000","#d82626","#ff0000","#e87c7c","#ff6565","#f7d3d3","#fecccc","#8f5419","#a85400","#d87f26","#ff7f00","#e8b27c","#ffb265","#f7e5d3","#fee5cc","#8f8f19","#a8a800","#d8d826","#feff00","#e8e87c","#feff65","#f7f7d3","#fefecc","#198f19","#00a800","#26d826","#00ff00","#7ce87c","#65ff65","#d3f7d3","#ccfecc","#198f8f","#00a8a8","#26d8d8","#00feff","#7ce8e8","#65feff","#d3f7f7","#ccfefe","#19198f","#0000a8","#2626d8","#0000ff","#7c7ce8","#6565ff","#d3d3f7","#ccccfe","#8f198f","#a800a8","#d826d8","#ff00fe","#e87ce8","#ff65fe","#f7d3f7","#feccfe","#000000","#242424","#484848","#6d6d6d","#919191","#b6b6b6","#dadada","#ffffff"],b.__renkans=[];var e=b._BaseBin=function(a,c){if("undefined"!=typeof a){this.renkan=a,this.renkan.$.find(".Rk-Bin-Main").hide(),this.$=b.$("
                                • ").addClass("Rk-Bin").appendTo(a.$.find(".Rk-Bin-List")),this.title_icon_$=b.$("").addClass("Rk-Bin-Title-Icon").appendTo(this.$);var d=this;b.$("").attr({href:"#",title:a.translate("Close bin")}).addClass("Rk-Bin-Close").html("×").appendTo(this.$).click(function(){return d.destroy(),a.$.find(".Rk-Bin-Main:visible").length||a.$.find(".Rk-Bin-Main:last").slideDown(),a.resizeBins(),!1}),b.$("").attr({href:"#",title:a.translate("Refresh bin")}).addClass("Rk-Bin-Refresh").appendTo(this.$).click(function(){return d.refresh(),!1}),this.count_$=b.$("
                                  ").addClass("Rk-Bin-Count").appendTo(this.$),this.title_$=b.$("

                                  ").addClass("Rk-Bin-Title").appendTo(this.$),this.main_$=b.$("
                                  ").addClass("Rk-Bin-Main").appendTo(this.$).html('

                                  '+a.translate("Loading, please wait")+"

                                  "),this.title_$.html(c.title||"(new bin)"),this.renkan.resizeBins(),c.auto_refresh&&window.setInterval(function(){d.refresh()},c.auto_refresh)}};e.prototype.destroy=function(){this.$.detach(),this.renkan.resizeBins()};var f=b.Renkan=function(a){var e=this;b.__renkans.push(this),this.options=d.defaults(a,b.defaults,{templates:d.defaults(a.templates,renkanJST)||renkanJST,node_editor_templates:d.defaults(a.node_editor_templates,b.defaults.node_editor_templates)}),this.template=this.options.templates["templates/main.html"];var f={};if(d.each(this.options.node_editor_templates,function(a,b){f[b]=e.options.templates[a],delete e.options.templates[a]}),this.options.node_editor_templates=f,d.each(this.options.property_files,function(a){b.$.getJSON(a,function(a){e.options.properties=e.options.properties.concat(a)})}),this.read_only=this.options.read_only||!this.options.editor_mode,this.router=new b.Router,this.project=new b.Models.Project,this.dataloader=new b.DataLoader.Loader(this.project,this.options),this.setCurrentUser=function(a,b){this.project.addUser({_id:a,title:b}),this.current_user=a,this.renderer.redrawUsers()},"undefined"!=typeof this.options.user_id&&(this.current_user=this.options.user_id),this.$=b.$("#"+this.options.container),this.$.addClass("Rk-Main").html(this.template(this)),this.tabs=[],this.search_engines=[],this.current_user_list=new b.Models.UsersList, -this.current_user_list.on("add remove",function(){this.renderer&&this.renderer.redrawUsers()}),this.colorPicker=function(a){var c=e.options.templates["templates/colorpicker.html"];return'
                                    '+b.pickerColors.map(function(a){return c({c:a})}).join("")+"
                                  "},this.options.show_editor&&(this.renderer=new b.Renderer.Scene(this)),this.options.search.length){var g=e.options.templates["templates/search.html"],h=this.$.find(".Rk-Search-List"),i=this.$.find(".Rk-Web-Search-Input"),j=this.$.find(".Rk-Web-Search-Form");d.each(this.options.search,function(a,c){b[a.type]&&b[a.type].Search&&e.search_engines.push(new b[a.type].Search(e,a))}),h.html(d(this.search_engines).map(function(a,b){return g({key:b,title:a.getSearchTitle(),className:a.getBgClass()})}).join("")),h.find("li").click(function(){var a=b.$(this);e.setSearchEngine(a.attr("data-key")),j.submit()}),j.submit(function(){if(i.val()){var a=e.search_engine;a.search(i.val())}return!1}),this.$.find(".Rk-Search-Current").mouseenter(function(){h.slideDown()}),this.$.find(".Rk-Search-Select").mouseleave(function(){h.hide()}),this.setSearchEngine(0)}else this.$.find(".Rk-Web-Search-Form").detach();d.each(this.options.bins,function(a){b[a.type]&&b[a.type].Bin&&e.tabs.push(new b[a.type].Bin(e,a))});var k=!1;this.$.find(".Rk-Bins").on("click",".Rk-Bin-Title,.Rk-Bin-Title-Icon",function(){var a=b.$(this).siblings(".Rk-Bin-Main");a.is(":hidden")&&(e.$.find(".Rk-Bin-Main").slideUp(),a.slideDown())}),this.options.show_editor&&this.$.find(".Rk-Bins").on("mouseover",".Rk-Bin-Item",function(a){var f=b.$(this);if(f&&c(f).attr("data-uri")){var g=e.project.get("nodes").where({uri:c(f).attr("data-uri")});d.each(g,function(a){e.renderer.highlightModel(a)})}}).mouseout(function(){e.renderer.unhighlightAll()}).on("mousemove",".Rk-Bin-Item",function(a){try{this.dragDrop()}catch(a){}}).on("touchstart",".Rk-Bin-Item",function(a){k=!1}).on("touchmove",".Rk-Bin-Item",function(a){a.preventDefault();var b=a.originalEvent.changedTouches[0],c=e.renderer.canvas_$.offset(),d=e.renderer.canvas_$.width(),f=e.renderer.canvas_$.height();if(b.pageX>=c.left&&b.pageX=c.top&&b.pageY1?a:null);c.source!==l&&(l=c.source,d.each(e.tabs,function(a){a.render(c)}))}}),this.$.find(".Rk-Bins-Search-Form").submit(function(){return!1})};f.prototype.translate=function(a){return b.i18n[this.options.language]&&b.i18n[this.options.language][a]?b.i18n[this.options.language][a]:this.options.language.length>2&&b.i18n[this.options.language.substr(0,2)]&&b.i18n[this.options.language.substr(0,2)][a]?b.i18n[this.options.language.substr(0,2)][a]:a},f.prototype.onStatusChange=function(){this.renderer.onStatusChange()},f.prototype.setSearchEngine=function(a){this.search_engine=this.search_engines[a],this.$.find(".Rk-Search-Current").attr("class","Rk-Search-Current "+this.search_engine.getBgClass());for(var b=this.search_engine.getBgClass().split(" "),c="",d=0;d"+a.translate("Drag items from this website, drop them in Renkan").replace(/ /g,"_")+"

                                  '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\/\\/[^\\/]*twitter\\.com\\//,s:'.tweet',n:'twitter'},{r:/https?:\\/\\/[^\\/]*google\\.[^\\/]+\\//,s:'.g',n:'google'},{r:/https?:\\/\\/[^\\/]*lemonde\\.fr\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();"},shortenText:function(a,b){return a.length>b?a.substr(0,b)+"…":a},drawEditBox:function(a,b,c,d,e,f){e.css({width:a.tooltip_width-2*a.tooltip_padding});var g=e[0].getBoundingClientRect(),h=f.$[0].getBoundingClientRect();g.bottom>h.bottom-2*a.tooltip_padding-10&&e.css({"overflow-x":"hidden","overflow-y":"scroll","max-height":h.bottom-2*a.tooltip_padding-5-g.top+"px"});var i=e.outerHeight()+2*a.tooltip_padding+5,j=b.xpaper.view.size.height-a.tooltip_margin&&(m=Math.max(paper.view.size.height-a.tooltip_margin,b.y+a.tooltip_arrow_width/2)-i),m1?a.offset[1]:a.offset[0]):null!=a.offset.x&&(c.x=a.offset.x,c.y=a.offset.y),a.offset=c}return a},toJSON:function(){return{_id:this.get("_id"),zoom_level:this.get("zoom_level"),offset:this.get("offset"),title:this.get("title"),description:this.get("description"),created_by:this.get("created_by")?this.get("created_by").get("_id"):null,hidden_nodes:this.get("hidden_nodes")}}}),i=(c.Project=d.extend({schema_version:"2",type:"project",blacklist:["saveStatus","loadingStatus"],relations:[{type:b.HasMany,key:"users",relatedModel:e,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"nodes",relatedModel:f,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"edges",relatedModel:g,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"views",relatedModel:h,reverseRelation:{key:"project",includeInJSON:"_id"}}],addUser:function(a,b){a.project=this;var c=e.findOrCreate(a);return this.get("users").push(c,b),c},addNode:function(a,b){a.project=this;var c=f.findOrCreate(a);return this.get("nodes").push(c,b),c},addEdge:function(a,b){a.project=this;var c=g.findOrCreate(a);return this.get("edges").push(c,b),c},addView:function(a,b){a.project=this;var c=h.findOrCreate(a);return this.get("views").push(c,b),c},removeNode:function(a){this.get("nodes").remove(a)},removeEdge:function(a){this.get("edges").remove(a)},validate:function(a){var b=this;_.each([].concat(a.users,a.nodes,a.edges,a.views),function(a){a&&(a.project=b)})},getSchemaVersion:function(a){var b=a;"undefined"==typeof b&&(b=this);var c=b.schema_version;return c?c:1},initialize:function(){var a=this;this.on("remove:nodes",function(b){a.get("edges").remove(a.get("edges").filter(function(a){return a.get("from")===b||a.get("to")===b}))})},toJSON:function(){var a=_.clone(this.attributes);for(var c in a)(a[c]instanceof b.Model||a[c]instanceof b.Collection||a[c]instanceof d)&&(a[c]=a[c].toJSON());return _.omit(a,this.blacklist)}}),c.RosterUser=b.Model.extend({type:"roster_user",idAttribute:"_id",constructor:function(a){"undefined"!=typeof a&&(a._id=a._id||a.id||c.getUID(this),a.title=a.title||"(untitled "+this.type+")",a.description=a.description||"",a.uri=a.uri||"",a.project=a.project||null,a.site_id=a.site_id||0,"function"==typeof this.prepare&&(a=this.prepare(a))),b.Model.prototype.constructor.call(this,a)},validate:function(){if(!this.type)return"object has no type"},prepare:function(a){return a.color=a.color||"#666666",a},toJSON:function(){return{_id:this.get("_id"),title:this.get("title"),uri:this.get("uri"),description:this.get("description"),color:this.get("color"),project:null!=this.get("project")?this.get("project").get("id"):null,site_id:this.get("site_id")}}}));c.UsersList=b.Collection.extend({model:i})}(window),Rkns.defaults={language:navigator.language||navigator.userLanguage||"en",container:"renkan",search:[],bins:[],static_url:"",popup_editor:!0,editor_panel:"editor-panel",show_bins:!0,properties:[],show_editor:!0,read_only:!1,editor_mode:!0,manual_save:!1,show_top_bar:!0,default_user_color:"#303030",size_bug_fix:!1,force_resize:!1,allow_double_click:!0,double_click_open_url:!0,simple_click_open_url:!1,zoom_on_scroll:!0,element_delete_delay:0,autoscale_padding:50,resize:!0,show_zoom:!0,save_view:!0,view_force_autoscale:!0,view_show_hiddennodes:!0,default_index_view:-1,url_parameters:!0,update_url:!0,show_search_field:!0,show_user_list:!0,user_name_editable:!0,user_color_editable:!0,title_editable:!0,show_user_color:!0,show_save_button:!0,show_export_button:!0,show_open_button:!1,show_addnode_button:!0,show_addedge_button:!0,show_bookmarklet:!0,show_fullscreen_button:!0,home_button_url:!1,home_button_title:"Home",show_minimap:!0,minimap_width:160,minimap_height:120,minimap_padding:20,minimap_background_color:"#ffffff",minimap_border_color:"#cccccc",minimap_highlight_color:"#ffff00",minimap_highlight_weight:5,buttons_background:"#202020",buttons_label_color:"#c000c0",buttons_label_font_size:9,ghost_opacity:.3,default_dash_array:[4,5],show_node_circles:!0,clip_node_images:!0,node_images_fill_mode:!1,node_size_base:25,node_stroke_width:2,node_stroke_max_width:12,selected_node_stroke_width:4,selected_node_stroke_max_width:24,node_stroke_witdh_scale:5,node_title_size_min:0,node_title_size_max:5,node_title_size_step:.1,node_fill_color:"#ffffff",highlighted_node_fill_color:"#ffff00",node_title_color:"#000000",node_label_distance:5,node_label_max_length:60,label_untitled_nodes:"(untitled)",hide_nodes:!0,change_shapes:!0,change_types:!0,node_editor_templates:{default:"templates/nodeeditor_readonly.html",video:"templates/nodeeditor_video.html"},edge_stroke_width:2,edge_stroke_max_width:12,selected_edge_stroke_width:4,selected_edge_stroke_max_width:24,edge_stroke_witdh_scale:5,edge_label_distance:0,edge_label_max_length:20,edge_arrow_length:18,edge_arrow_width:12,edge_arrow_max_width:32,edge_gap_in_bundles:12,highlighted_edge_color:"#ffff00",label_untitled_edges:"",tooltip_width:275,tooltip_padding:10,tooltip_margin:15,tooltip_arrow_length:20,tooltip_arrow_width:40,tooltip_top_color:"#f0f0f0",tooltip_bottom_color:"#d0d0d0",tooltip_border_color:"#808080",tooltip_border_width:1,tooltip_opacity:.8,richtext_editor_config:{toolbarGroups:[{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"clipboard",groups:["clipboard","undo"]},"/",{name:"styles"}],removePlugins:"colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates"},show_node_title_style:!0,show_node_editor_uri:!0,show_node_editor_title:!0,show_node_editor_title_richtext:!0,show_node_editor_description:!0,show_node_editor_description_richtext:!0,show_node_editor_size:!0,show_node_editor_style:!0,show_node_editor_style_color:!0,show_node_editor_style_dash:!0,show_node_editor_style_thickness:!0,show_node_editor_image:!0,show_node_editor_creator:!0,allow_image_upload:!0,uploaded_image_max_kb:500,show_node_tooltip_uri:!0,show_node_tooltip_description:!0,show_node_tooltip_color:!0,show_node_tooltip_image:!0,show_node_tooltip_creator:!0,show_edge_editor_uri:!0,show_edge_editor_style:!0,show_edge_editor_style_color:!0,show_edge_editor_style_dash:!0,show_edge_editor_style_thickness:!0,show_edge_editor_style_arrow:!0,show_edge_editor_direction:!0,show_edge_editor_nodes:!0,show_edge_editor_creator:!0,show_edge_tooltip_uri:!0,show_edge_tooltip_color:!0,show_edge_tooltip_nodes:!0,show_edge_tooltip_creator:!0},Rkns.i18n={fr:{"Edit Node":"Édition d’un nœud","Edit Edge":"Édition d’un lien","Title:":"Titre :","URI:":"URI :","Description:":"Description :","From:":"De :","To:":"Vers :",Image:"Image","Image URL:":"URL d'Image","Choose Image File:":"Choisir un fichier image","Full Screen":"Mode plein écran","Add Node":"Ajouter un nœud","Add Edge":"Ajouter un lien","Save Project":"Enregistrer le projet","Open Project":"Ouvrir un projet","Auto-save enabled":"Enregistrement automatique activé","Connection lost":"Connexion perdue","Created by:":"Créé par :","Zoom In":"Agrandir l’échelle","Zoom Out":"Rapetisser l’échelle",Edit:"Éditer",Remove:"Supprimer","Cancel deletion":"Annuler la suppression","Link to another node":"Créer un lien",Enlarge:"Agrandir",Shrink:"Rétrécir","Click on the background canvas to add a node":"Cliquer sur le fond du graphe pour rajouter un nœud","Click on a first node to start the edge":"Cliquer sur un premier nœud pour commencer le lien","Click on a second node to complete the edge":"Cliquer sur un second nœud pour terminer le lien",Wikipedia:"Wikipédia","Wikipedia in ":"Wikipédia en ",French:"Français",English:"Anglais",Japanese:"Japonais","Untitled project":"Projet sans titre","Lignes de Temps":"Lignes de Temps","Loading, please wait":"Chargement en cours, merci de patienter","Edge color:":"Couleur :","Dash:":"Point. :","Thickness:":"Epaisseur :","Arrow:":"Flèche :","Node color:":"Couleur :","Choose color":"Choisir une couleur","Change edge direction":"Changer le sens du lien","Do you really wish to remove node ":"Voulez-vous réellement supprimer le nœud ","Do you really wish to remove edge ":"Voulez-vous réellement supprimer le lien ","This file is not an image":"Ce fichier n'est pas une image","Image size must be under ":"L'image doit peser moins de ","Size:":"Taille :",KB:"ko","Choose from vocabulary:":"Choisir dans un vocabulaire :","SKOS Documentation properties":"SKOS: Propriétés documentaires","has note":"a pour note","has example":"a pour exemple","has definition":"a pour définition","SKOS Semantic relations":"SKOS: Relations sémantiques","has broader":"a pour concept plus large","has narrower":"a pour concept plus étroit","has related":"a pour concept apparenté","Dublin Core Metadata":"Métadonnées Dublin Core","has contributor":"a pour contributeur",covers:"couvre","created by":"créé par","has date":"a pour date","published by":"édité par","has source":"a pour source","has subject":"a pour sujet","Dragged resource":"Ressource glisée-déposée","Search the Web":"Rechercher en ligne","Search in Bins":"Rechercher dans les chutiers","Close bin":"Fermer le chutier","Refresh bin":"Rafraîchir le chutier","(untitled)":"(sans titre)","Select contents:":"Sélectionner des contenus :","Drag items from this website, drop them in Renkan":"Glissez des éléments de ce site web vers Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.":"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan","Shapes available":"Formes disponibles",Circle:"Cercle",Square:"Carré",Diamond:"Losange",Hexagone:"Hexagone",Ellipse:"Ellipse",Star:"Étoile",Cloud:"Nuage",Triangle:"Triangle",Polygon:"Polygone","Zoom Fit":"Ajuster le Zoom","Download Project":"Télécharger le projet","Save view":"Sauver la vue","View saved view":"Restaurer la Vue","Renkan 'Drag-to-Add' bookmarklet":"Renkan 'Deplacer-Pour-Ajouter' Signet","(unknown user)":"(non authentifié)","":"","Search in graph":"Rechercher dans carte","Search in ":"Chercher dans ","Show hidden nodes":"Montrer les noeuds cachés","Show neighbors":"Montrer les voisins",Hide:"Cacher","Fullscreen not supported by your browser":"Le plein écran n'est pas supporté par votre navigateur","Title size:":"Taille :","Title color:":"Couleur :"}},Rkns.jsonIO=function(a,b){var c=a.project;"undefined"==typeof b.http_method&&(b.http_method="PUT");var d=function(){c.set({loadingStatus:!0}),Rkns.$.getJSON(b.url,function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})})},e=function(){c.set({saveStatus:2});var d=c.toJSON();a.read_only||Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(d),success:function(a,b,d){c.set({saveStatus:0})}})},f=Rkns._.throttle(function(){setTimeout(e,100)},1e3);c.on("add:nodes add:edges add:users add:views",function(a){a.on("change remove",function(a){f()}),f()}),c.on("change",function(){1===c.changedAttributes.length&&c.hasChanged("saveStatus")||f()}),d()},Rkns.jsonIOSaveOnClick=function(a,b){var c=a.project,d=!1,e=function(){return"Project not saved"};"undefined"==typeof b.http_method&&(b.http_method="POST");var f=function(){var d={},e=/id=([^&#?=]+)/,f=document.location.hash.match(e);f&&(d.id=f[1]),Rkns.$.ajax({url:b.url,data:d,beforeSend:function(){c.set({loadingStatus:!0})},success:function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})}})},g=function(){c.set("saved_at",new Date);var a=c.toJSON();Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(a),beforeSend:function(){c.set({saveStatus:2})},success:function(a,b,f){$(window).off("beforeunload",e),d=!1,c.set({saveStatus:0})}})},h=function(){c.set({saveStatus:1});var a=c.get("title");a&&c.get("nodes").length?$(".Rk-Save-Button").removeClass("disabled"):$(".Rk-Save-Button").addClass("disabled"),a&&$(".Rk-PadTitle").css("border-color","#333333"),d||(d=!0,$(window).on("beforeunload",e))};f(),c.on("add:nodes add:edges add:users change",function(a){a.on("change remove",function(a){1===a.changedAttributes.length&&a.hasChanged("saveStatus")||h()}),1===c.changedAttributes.length&&c.hasChanged("saveStatus")||h()}),a.renderer.save=function(){$(".Rk-Save-Button").hasClass("disabled")?c.get("title")||$(".Rk-PadTitle").css("border-color","#ff0000"):g()}},function(a){"use strict";var b=a._,c=a.Ldt={},d=(c.Bin=function(a,b){if(b.ldt_type){var d=c[b.ldt_type+"Bin"];if(d)return new d(a,b)}console.error("No such LDT Bin Type")},c.ProjectBin=a.Utils.inherit(a._BaseBin));d.prototype._init=function(a,b){this.renkan=a,this.tagTemplate=a.options.templates["templates/ldtjson-bin/tagtemplate.html"],this.annotationTemplate=a.options.templates["templates/ldtjson-bin/annotationtemplate.html"],this.proj_id=b.project_id,this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.title_$.html(b.title),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},d.prototype.render=function(c){function d(a){var c=b(a).escape();return f.isempty?c:f.replace(c,"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}var f=c||a.Utils.regexpFromTextOrArray(),g="
                                • Tags

                                • ",h=this.data.meta["dc:title"],i=this,j=0;i.title_$.text('LDT Project: "'+h+'"'),b.map(i.data.tags,function(a){var b=a.meta["dc:title"];(f.isempty||f.test(b))&&(j++,g+=i.tagTemplate({ldt_platform:i.ldt_platform,title:b,htitle:d(b),encodedtitle:encodeURIComponent(b),static_url:i.renkan.options.static_url}))}),g+="
                                • Annotations

                                • ",b.map(i.data.annotations,function(a){var b=a.content.description,c=a.content.title.replace(b,"");if(f.isempty||f.test(c)||f.test(b)){j++;var h=a.end-a.begin,k=a.content&&a.content.img&&a.content.img.src?a.content.img.src:h?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";g+=i.annotationTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(a.begin),end:e(a.end),duration:e(h),mediaid:a.media,annotationid:a.id,image:k,static_url:i.renkan.options.static_url})}}),this.main_$.html(g),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()},d.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/ldt/cljson/id/"+this.proj_id,dataType:"jsonp",success:function(a){b.data=a,b.render()}})};var e=c.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"};e.prototype.getBgClass=function(){return"Rk-Ldt-Icon"},e.prototype.getSearchTitle=function(){return this.renkan.translate("Lignes de Temps")},e.prototype.search=function(a){this.renkan.tabs.push(new f(this.renkan,{search:a}))};var f=c.ResultsBin=a.Utils.inherit(a._BaseBin);f.prototype._init=function(a,b){this.renkan=a,this.segmentTemplate=a.options.templates["templates/ldtjson-bin/segmenttemplate.html"],this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.max_results=b.max_results||50,this.search=b.search,this.title_$.html('Lignes de Temps: "'+b.search+'"'),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},f.prototype.render=function(c){function d(a){return g.replace(b(a).escape(),"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}if(this.data){var f=c||a.Utils.regexpFromTextOrArray(),g=f.isempty?a.Utils.regexpFromTextOrArray(this.search):f,h="",i=this,j=0;b.each(this.data.objects,function(a){var b=a.abstract,c=a.title;if(f.isempty||f.test(c)||f.test(b)){j++;var g=a.duration,k=a.start_ts,l=+a.duration+k,m=g?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";h+=i.segmentTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(k),end:e(l),duration:e(g),mediaid:a.iri_id,annotationid:a.element_id,image:m})}}),this.main_$.html(h),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()}},f.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/api/ldt/1.0/segments/search/",data:{format:"jsonp",q:this.search,limit:this.max_results},dataType:"jsonp",success:function(a){b.data=a,b.render()}})}}(window.Rkns),Rkns.ResourceList={},Rkns.ResourceList.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.ResourceList.Bin.prototype._init=function(a,b){this.renkan=a,this.resultTemplate=a.options.templates["templates/list-bin.html"],this.title_$.html(b.title),b.list&&(this.data=b.list),this.refresh()},Rkns.ResourceList.Bin.prototype.render=function(a){function b(a){var b=_(a).escape();return c.isempty?b:c.replace(b,"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d="",e=this,f=0;Rkns._.each(this.data,function(a){var g;if("string"==typeof a)if(/^(https?:\/\/|www)/.test(a))g={url:a};else{g={title:a.replace(/[:,]?\s?(https?:\/\/|www)[\d\w\/.&?=#%-_]+\s?/,"").trim()};var h=a.match(/(https?:\/\/|www)[\d\w\/.&?=#%-_]+/);h&&(g.url=h[0]),g.title.length>80&&(g.description=g.title,g.title=g.title.replace(/^(.{30,60})\s.+$/,"$1…"))}else g=a;var i=g.title||(g.url||"").replace(/^https?:\/\/(www\.)?/,"").replace(/^(.{40}).+$/,"$1…"),j=g.url||"",k=g.description||"",l=g.image||"";j&&!/^https?:\/\//.test(j)&&(j="http://"+j),(c.isempty||c.test(i)||c.test(k))&&(f++,d+=e.resultTemplate({url:j,title:i,htitle:b(i),image:l,description:k,hdescription:b(k),static_url:e.renkan.options.static_url}))}),e.main_$.html(d),!c.isempty&&f?this.count_$.text(f).show():this.count_$.hide(),c.isempty||f?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.ResourceList.Bin.prototype.refresh=function(){this.data&&this.render()},Rkns.Wikipedia={},Rkns.Wikipedia.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"},Rkns.Wikipedia.Search.prototype.getBgClass=function(){ -return"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-"+this.lang},Rkns.Wikipedia.Search.prototype.getSearchTitle=function(){var a={fr:"French",en:"English",ja:"Japanese"};return a[this.lang]?this.renkan.translate("Wikipedia in ")+this.renkan.translate(a[this.lang]):this.renkan.translate("Wikipedia")+" ["+this.lang+"]"},Rkns.Wikipedia.Search.prototype.search=function(a){this.renkan.tabs.push(new Rkns.Wikipedia.Bin(this.renkan,{lang:this.lang,search:a}))},Rkns.Wikipedia.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.Wikipedia.Bin.prototype._init=function(a,b){this.renkan=a,this.search=b.search,this.resultTemplate=a.options.templates["templates/wikipedia-bin/resulttemplate.html"],this.lang=b.lang||"en",this.title_icon_$.addClass("Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-"+this.lang),this.title_$.html(this.search).addClass("Rk-Wikipedia-Title"),this.refresh()},Rkns.Wikipedia.Bin.prototype.render=function(a){function b(a){return d.replace(_(a).escape(),"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d=c.isempty?Rkns.Utils.regexpFromTextOrArray(this.search):c,e="",f=this,g=0;Rkns._.each(this.data.query.search,function(a){var d=a.title,h="http://"+f.lang+".wikipedia.org/wiki/"+encodeURI(d.replace(/ /g,"_")),i=Rkns.$("
                                  ").html(a.snippet).text();(c.isempty||c.test(d)||c.test(i))&&(g++,e+=f.resultTemplate({url:h,title:d,htitle:b(d),description:i,hdescription:b(i),static_url:f.renkan.options.static_url}))}),f.main_$.html(e),!c.isempty&&g?this.count_$.text(g).show():this.count_$.hide(),c.isempty||g?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.Wikipedia.Bin.prototype.refresh=function(){var a=this;Rkns.$.ajax({url:"http://"+a.lang+".wikipedia.org/w/api.php?action=query&list=search&srsearch="+encodeURIComponent(this.search)+"&format=json",dataType:"jsonp",success:function(b){a.data=b,a.render()}})},define("renderer/baserepresentation",["jquery","underscore"],function(a,b){"use strict";var c=function(a,c){if("undefined"!=typeof a&&(this.renderer=a,this.renkan=a.renkan,this.project=a.renkan.project,this.options=a.renkan.options,this.model=c,this.model)){var d=this;this._changeBinding=function(){d.redraw({change:!0})},this._removeBinding=function(){a.removeRepresentation(d),b.defer(function(){a.redraw()})},this._selectBinding=function(){d.select()},this._unselectBinding=function(){d.unselect()},this.model.on("change",this._changeBinding),this.model.on("remove",this._removeBinding),this.model.on("select",this._selectBinding),this.model.on("unselect",this._unselectBinding)}};return b(c.prototype).extend({_super:function(a){return c.prototype[a].apply(this,Array.prototype.slice.call(arguments,1))},redraw:function(){},moveTo:function(){},show:function(){return"BaseRepresentation.show"},hide:function(){},select:function(){this.model&&this.model.trigger("selected")},unselect:function(){this.model&&this.model.trigger("unselected")},highlight:function(){},unhighlight:function(){},mousedown:function(){},mouseup:function(){this.model&&this.model.trigger("clicked")},destroy:function(){this.model&&(this.model.off("change",this._changeBinding),this.model.off("remove",this._removeBinding),this.model.off("select",this._selectBinding),this.model.off("unselect",this._unselectBinding))}}).value(),c}),define("requtils",[],function(a,b){"use strict";return{getUtils:function(){return window.Rkns.Utils},getRenderer:function(){return window.Rkns.Renderer}}}),define("renderer/basebutton",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({moveTo:function(a){this.sector.moveTo(a)},show:function(){this.sector.show()},hide:function(){this.sector&&this.sector.hide()},select:function(){this.sector.select()},unselect:function(a){this.sector.unselect(),(!a||a!==this.source_representation&&a.source_representation!==this.source_representation)&&this.source_representation.unselect()},destroy:function(){this.sector.destroy()}}).value(),f}),define("renderer/shapebuilder",[],function(){"use strict";var a="M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z",b={circle:{getShape:function(){return new paper.Path.Circle([0,0],1)},getImageShape:function(a,b){return new paper.Path.Circle(a,b)}},rectangle:{getShape:function(){return new paper.Path.Rectangle([-2,-2],[2,2])},getImageShape:function(a,b){return new paper.Path.Rectangle([-b,-b],[2*b,2*b])}},ellipse:{getShape:function(){return new paper.Path.Ellipse(new paper.Rectangle([-2,-1],[2,1]))},getImageShape:function(a,b){return new paper.Path.Ellipse(new paper.Rectangle([-b,-b/2],[2*b,b]))}},polygon:{getShape:function(){return new paper.Path.RegularPolygon([0,0],6,1)},getImageShape:function(a,b){return new paper.Path.RegularPolygon(a,6,b)}},diamond:{getShape:function(){var a=new paper.Path.Rectangle([-Math.SQRT2,-Math.SQRT2],[Math.SQRT2,Math.SQRT2]);return a.rotate(45),a},getImageShape:function(a,b){var c=new paper.Path.Rectangle([-b*Math.SQRT2/2,-b*Math.SQRT2/2],[b*Math.SQRT2,b*Math.SQRT2]);return c.rotate(45),c}},star:{getShape:function(){return new paper.Path.Star([0,0],8,1,.7)},getImageShape:function(a,b){return new paper.Path.Star(a,8,1*b,.7*b)}},cloud:{getShape:function(){var b=new paper.Path(a);return b},getImageShape:function(b,c){var d=new paper.Path(a);return d.scale(c),d.translate(b),d}},triangle:{getShape:function(){return new paper.Path.RegularPolygon([0,0],3,1)},getImageShape:function(a,b){var c=new paper.Path.RegularPolygon([0,0],3,1);return c.scale(b),c.translate(a),c}},svg:function(a){return{getShape:function(){return new paper.Path(a)},getImageShape:function(a,b){return new paper.Path}}}},c=function(a){return null!==a&&"undefined"!=typeof a||(a="circle"),"svg:"===a.substr(0,4)?b.svg(a.substr(4)):(a in b||(a="circle"),b[a])};return c.builders=b,c}),define("renderer/noderepr",["jquery","underscore","requtils","renderer/baserepresentation","renderer/shapebuilder"],function(a,b,c,d,e){"use strict";var f=c.getUtils(),g=f.inherit(d);return b(g.prototype).extend({_init:function(){if(this.renderer.node_layer.activate(),this.type="Node",this.buildShape(),this.hidden=!1,this.ghost=!1,this.options.show_node_circles?(this.circle.strokeWidth=this.options.node_stroke_width,this.h_ratio=1):this.h_ratio=0,this.title=a('
                                  ').appendTo(this.renderer.labels_$),this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.NodeEditButton(this.renderer,null),new b.NodeRemoveButton(this.renderer,null),new b.NodeLinkButton(this.renderer,null),new b.NodeEnlargeButton(this.renderer,null),new b.NodeShrinkButton(this.renderer,null)],this.options.hide_nodes&&this.normal_buttons.push(new b.NodeHideButton(this.renderer,null),new b.NodeShowButton(this.renderer,null)),this.pending_delete_buttons=[new b.NodeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d$1'));var m=this.model.get("style")||{title_size:1,"title-color":"#00000"},n=m.title_size||1,o=m.title_color||this.options.node_title_color,p={"line-height":"1em"};1!==n&&(p["font-size"]=n.toFixed(1)+"em"),"#000000"!==o&&(p.color=o);var q=a("").css(p).html(l);this.title.empty().append(q);var r=this._getStrokeWidth();this.title.css({left:this.paper_coords.x,top:this.paper_coords.y+this.circle_radius*this.h_ratio+this.options.node_label_distance+.5*r,opacity:h});var s=this.model.has("style")&&this.model.get("style").color||(this.model.get("created_by")||f._USER_PLACEHOLDER(this.renkan)).get("color"),t=this.model.has("style")&&this.model.get("style").dash?this.options.default_dash_array:null;this.circle.strokeWidth=r,this.circle.strokeColor=s,this.circle.dashArray=t;var u=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(u)});var v=this.img;if(this.img=this.model.get("image"),this.img&&this.img!==v&&(this.showImage(),this.circle&&this.circle.sendToBack()),this.node_image&&!this.img&&(this.node_image.remove(),delete this.node_image),this.renderer.minimap){this.minimap_circle.fillColor=s;var w=this.renderer.toMinimapCoords(d),x=this.renderer.minimap.scale*e,y=new paper.Size([x,x]);this.minimap_circle.fitBounds(w.subtract(y),y.multiply(2))}if(!("undefined"!=typeof c&&"dontRedrawEdges"in c&&c.dontRedrawEdges)){var z=this;b.each(this.project.get("edges").filter(function(a){return a.get("to")===z.model||a.get("from")===z.model}),function(a,b,c){var d=z.renderer.getRepresentationByModel(a);d&&"undefined"!=typeof d.from_representation&&"undefined"!=typeof d.from_representation.paper_coords&&"undefined"!=typeof d.to_representation&&"undefined"!=typeof d.to_representation.paper_coords&&d.redraw()})}this.ghost?this.show(!0):this.hidden&&this.hide()},showImage:function(){var b=null;"undefined"==typeof this.renderer.image_cache[this.img]?(b=new Image,this.renderer.image_cache[this.img]=b,b.src=this.img):b=this.renderer.image_cache[this.img];var c=this;if(b.width){this.node_image&&this.node_image.remove(),this.renderer.node_layer.activate();var d=b.width,e=b.height,f=this.model.get("clip_path"),g="undefined"!=typeof f&&f,h=null,i=null,j=null;if(g){h=new paper.Path;var k=f.match(/[a-z][^a-z]+/gi)||[],l=[0,0],m=1/0,n=1/0,o=-(1/0),p=-(1/0),q=function(a,b){var c=a.slice(1).map(function(a,c){var f=parseFloat(a),g=c%2;return f=g?(f-.5)*e:(f-.5)*d,b&&(f+=l[g]),g?(n=Math.min(n,f),p=Math.max(p,f)):(m=Math.min(m,f),o=Math.max(o,f)),f});return l=c.slice(-2),c};k.forEach(function(a){var b=a.match(/([a-z]|[0-9.-]+)/gi)||[""];switch(b[0]){case"M":h.moveTo(q(b));break;case"m":h.moveTo(q(b,!0));break;case"L":h.lineTo(q(b));break;case"l":h.lineTo(q(b,!0));break;case"C":h.cubicCurveTo(q(b));break;case"c":h.cubicCurveTo(q(b,!0));break;case"Q":h.quadraticCurveTo(q(b));break;case"q":h.quadraticCurveTo(q(b,!0))}}),i=Math[this.options.node_images_fill_mode?"min":"max"](o-m,p-n)/2,j=new paper.Point((o+m)/2,(p+n)/2),this.options.show_node_circles||(this.h_ratio=(p-n)/(2*i))}else i=Math[this.options.node_images_fill_mode?"min":"max"](d,e)/2,j=new paper.Point(0,0),this.options.show_node_circles||(this.h_ratio=e/(2*i));var r=new paper.Raster(b);if(r.locked=!0,g&&(r=new paper.Group(h,r),r.opacity=.99,r.clipped=!0,h.__representation=this),this.options.clip_node_images){var s=this.shapeBuilder.getImageShape(j,i);r=new paper.Group(s,r),r.opacity=.99,r.clipped=!0,s.__representation=this}this.image_delta=j.divide(i),this.node_image=r,this.node_image.__representation=c,this.node_image.scale(this.circle_radius/i),this.node_image.position=this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius)),this.node_image.insertAbove(this.circle)}else a(b).on("load",function(){c.showImage()})},paperShift:function(a){this.options.editor_mode?this.renkan.read_only||(this.is_dragging=!0,this.paper_coords=this.paper_coords.add(a),this.redraw()):this.renderer.view.paperShift(a)},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("NodeEditor",null);a.source_representation=this,a.draw()},select:function(){clearTimeout(this.hide_timeout),this.selected=!0,this.circle.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&!this.hidden&&this.active_buttons.forEach(function(a){a.show()});var b=this.model.get("uri");b&&a(".Rk-Bin-Item").each(function(){var c=a(this);c.attr("data-uri")===b&&c.addClass("selected")}),this.options.editor_mode||this.openEditor(),this.renderer.minimap&&(this.minimap_circle.strokeWidth=this.options.minimap_highlight_weight,this.minimap_circle.strokeColor=this.options.minimap_highlight_color),this.hidden?this.show(!0):this.showNeighbors(!0),this._super("select")},hideButtons:function(){this.all_buttons.forEach(function(a){a.hide()}),delete this.buttonTimeout},unselect:function(b){if(!b||b.source_representation!==this){this.selected=!1;var c=this;this.buttons_timeout=setTimeout(function(){c.hideButtons()},200),this.circle.strokeWidth=this._getStrokeWidth(),a(".Rk-Bin-Item").removeClass("selected"),this.renderer.minimap&&(this.minimap_circle.strokeColor=void 0),this.hidden?(this.renderer.removeRepresentationsOfType("editor"),this.hide()):this.hideNeighbors(!0),this._super("unselect")}},hide_delay:function(){var a=this;this.hide_timeout=setTimeout(function(){a.hide()},1e3)},hide:function(){var a=this;this.ghost=!1,this.hidden=!0,"undefined"!=typeof this.node_image&&(this.node_image.opacity=0),this.hideButtons(),this.circle.opacity=0,this.title.css("opacity",0),this.minimap_circle.opacity=0,b.each(this.project.get("edges").filter(function(b){return b.get("to")===a.model||b.get("from")===a.model}),function(b,c,d){var e=a.renderer.getRepresentationByModel(b);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.hide()}),this.hideNeighbors(!1)},show:function(a){var c=this;this.ghost=a,this.ghost?("undefined"!=typeof this.node_image&&(this.node_image.opacity=this.options.ghost_opacity),this.circle.opacity=this.options.ghost_opacity,this.title.css("opacity",this.options.ghost_opacity),this.minimap_circle.opacity=this.options.ghost_opacity):(this.minimap_circle.opacity=1,this.hidden=!1,this.redraw()),b.each(this.project.get("edges").filter(function(a){return a.get("to")===c.model||a.get("from")===c.model}),function(a,b,d){var e=c.renderer.getRepresentationByModel(a);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.show(c.ghost)})},hideNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));f&&f.ghost&&(a?f.hide_delay():f.hide())})},showNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));if(f&&f.hidden&&(f.show(a),!a)){var g=c.renderer.view.hiddenNodes.indexOf(f.model.id);g!==-1&&c.renderer.view.hiddenNodes.splice(g,1)}})},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},saveCoords:function(){var a=this.renderer.toModelCoords(this.paper_coords),b={position:{x:a.x,y:a.y}};this.renderer.isEditable()&&this.model.set(b)},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){if(this.renderer.is_dragging&&this.renderer.isEditable())this.saveCoords();else if(this.hidden){var c=this.renderer.view.hiddenNodes.indexOf(this.model.id);c!==-1&&this.renderer.view.hiddenNodes.splice(c,1),this.show(!1),this.select()}else b||this.model.get("delete_scheduled")||this.openEditor(),this.model.trigger("clicked");this.renderer.click_target=null,this.renderer.is_dragging=!1,this.is_dragging=!1},destroy:function(a){this._super("destroy"),this.all_buttons.forEach(function(a){a.destroy()}),this.circle.remove(),this.title.remove(),this.renderer.minimap&&this.minimap_circle.remove(),this.node_image&&this.node_image.remove()}}).value(),g}),define("renderer/edge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){if(this.renderer.edge_layer.activate(),this.type="Edge",this.hidden=!1,this.ghost=!1,this.highlighted=!1,this.from_representation=this.renderer.getRepresentationByModel(this.model.get("from")),this.to_representation=this.renderer.getRepresentationByModel(this.model.get("to")),this.bundle=this.renderer.addToBundles(this),this.line=new paper.Path,this.line.add([0,0],[0,0],[0,0]),this.line.__representation=this,this.line.strokeWidth=this.options.edge_stroke_width,this.arrow_scale=1,this.arrow=new paper.Path,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.pivot=new paper.Point([this.options.edge_arrow_length/2,this.options.edge_arrow_width/2]),this.arrow.__representation=this,this.text=a('
                                  ').appendTo(this.renderer.labels_$),this.arrow_angle=0,this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.EdgeEditButton(this.renderer,null),new b.EdgeRemoveButton(this.renderer,null)],this.pending_delete_buttons=[new b.EdgeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d90&&(r-=180,s=s.multiply(-1)),r<-90&&(r+=180,s=s.multiply(-1));var x=this.model.get("title")||this.renkan.translate(this.options.label_untitled_edges)||"";x=e.shortenText(x,this.options.node_label_max_length),"object"==typeof this.highlighted?this.text.html(this.highlighted.replace(b(x).escape(),'$1')):this.text.text(x);var y=this.paper_coords.add(s);this.text.css({left:y.x,top:y.y,transform:"rotate("+r+"deg)","-moz-transform":"rotate("+r+"deg)","-webkit-transform":"rotate("+r+"deg)",opacity:d}),this.text_angle=r;var z=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(z)}),this.renderer.minimap&&(this.minimap_line.strokeColor=u,this.minimap_line.segments[0].point=this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position"))),this.minimap_line.segments[1].point=this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position"))))}},hide:function(){this.hidden=!0,this.ghost=!1,this.text.hide(),this.line.visible=!1,this.arrow.visible=!1,this.minimap_line.visible=!1},show:function(a){this.ghost=a,this.ghost?(this.text.css("opacity",.3),this.line.opacity=.3,this.arrow.opacity=.3,this.minimap_line.opacity=.3):(this.hidden=!1,this.text.css("opacity",1),this.line.opacity=1,this.arrow.opacity=1,this.minimap_line.opacity=1),this.text.show(),this.line.visible=!0,this.arrow.visible=!0,this.minimap_line.visible=!0,this.redraw()},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("EdgeEditor",null);a.source_representation=this,a.draw()},select:function(){this.selected=!0,this.line.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&this.active_buttons.forEach(function(a){a.show()}),this.options.editor_mode||this.openEditor(),this._super("select")},unselect:function(a){a&&a.source_representation===this||(this.selected=!1,this.options.editor_mode&&this.all_buttons.forEach(function(a){a.hide()}),this.hidden&&this.renderer.removeRepresentationsOfType("editor"),this.line.strokeWidth=this._getStrokeWidth(),this._super("unselect"))},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){!this.renkan.read_only&&this.renderer.is_dragging?(this.from_representation.saveCoords(),this.to_representation.saveCoords(),this.from_representation.is_dragging=!1,this.to_representation.is_dragging=!1):(b||this.openEditor(),this.model.trigger("clicked")),this.renderer.click_target=null,this.renderer.is_dragging=!1},paperShift:function(a){this.options.editor_mode?this.options.read_only||(this.from_representation.paperShift(a),this.to_representation.paperShift(a)):this.renderer.paperShift(a)},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},destroy:function(){this._super("destroy"),this.line.remove(),this.arrow.remove(),this.text.remove(),this.renderer.minimap&&this.minimap_line.remove(),this.all_buttons.forEach(function(a){a.destroy()});var a=this;this.bundle.edges=b.reject(this.bundle.edges,function(b){return a===b})}}).value(),f}),define("renderer/tempedge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.edge_layer.activate(),this.type="Temp-edge",this.origin=e.OriginEnum.NONE;var a=(this.project.get("users").get(this.renkan.current_user)||e._USER_PLACEHOLDER(this.renkan)).get("color");this.line=new paper.Path,this.line.strokeColor=a,this.line.dashArray=[4,2],this.line.strokeWidth=this.options.selected_edge_stroke_width,this.line.add([0,0],[0,0]),this.line.__representation=this,this.arrow=new paper.Path,this.arrow.fillColor=a,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.__representation=this,this.arrow_angle=0},redraw:function(){var a=this.from_representation.paper_coords,b=this.end_pos,c=b.subtract(a).angle,d=a.add(b).divide(2);this.line.segments[0].point=a,this.line.segments[1].point=b,this.arrow.rotate(c-this.arrow_angle),this.arrow.position=d,this.arrow_angle=c},paperShift:function(a){if(!this.renderer.isEditable())return this.renderer.removeRepresentation(_this),void paper.view.draw();this.end_pos=this.end_pos.add(a);var b=paper.project.hitTest(this.end_pos);this.renderer.findTarget(b),this.redraw()},mouseup:function(a,b){var c=paper.project.hitTest(a.point),d=this.from_representation.model,f=!0;if(c&&"undefined"!=typeof c.item.__representation){var g=c.item.__representation;if("Node"===g.type.substr(0,4)){var h=g.model||g.source_representation.model;if(d!==h){var i={id:e.getUID("edge"),created_by:this.renkan.current_user,from:d,to:h,origin:this.origin};this.renderer.isEditable()&&this.project.addEdge(i)}}(d===g.model||g.source_representation&&g.source_representation.model===d)&&(f=!1,this.renderer.is_dragging=!0)}f&&(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentation(this),paper.view.draw())},destroy:function(){this.arrow.remove(),this.line.remove()}}).value(),f}),define("renderer/baseeditor",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.buttons_layer.activate(),this.type="editor",this.editor_block=new paper.Path;var c=b.map(b.range(8),function(){return[0,0]});this.editor_block.add.apply(this.editor_block,c),this.editor_block.strokeWidth=this.options.tooltip_border_width,this.editor_block.strokeColor=this.options.tooltip_border_color,this.editor_block.opacity=this.options.tooltip_opacity,this.editor_$=a("
                                  ").appendTo(this.renderer.editor_$).css({position:"absolute",opacity:this.options.tooltip_opacity}).hide()},destroy:function(){this.editor_block.remove(),this.editor_$.remove()}}).value(),f}),define("renderer/nodeeditor",["jquery","underscore","requtils","renderer/baseeditor","renderer/shapebuilder","ckeditor-core"],function(a,b,c,d,e,f){"use strict";var g=c.getUtils(),h=g.inherit(d);return b(h.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/nodeeditor.html"],this.readOnlyTemplate=this.options.node_editor_templates},draw:function(){var c=this.source_representation.model,d=c.get("created_by")||g._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate[c.get("type")]||this.readOnlyTemplate.default,i=this.options.static_url+"img/image-placeholder.png",j=c.get("size")||0;this.editor_$.html(h({node:{_id:c.get("_id"),has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),type:c.get("type")||"default",short_uri:g.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),image:c.get("image")||"",image_placeholder:i,color:c.has("style")&&c.get("style").color||d.get("color"),title_size:c.has("style")&&c.get("style").title_size||1,title_color:c.has("style")&&c.get("style").title_color||this.options.node_title_color, -thickness:c.has("style")&&c.get("style").thickness||1,dash:c.has("style")&&c.get("style").dash?"checked":"",clip_path:c.get("clip_path")||!1,created_by_color:d.get("color"),created_by_title:d.get("title"),size:(j>0?"+":"")+j,shape:c.get("shape")||"circle"},renkan:this.renkan,options:this.options,shortenText:g.shortenText,shapes:b(e.builders).omit("svg").keys().value(),types:b(this.options.node_editor_templates).keys().value()})),this.redraw();var k=this,l=!(!this.renderer.isEditable()||!k.options.show_node_editor_description_richtext)&&f.inline("Rk-Edit-Description-"+c.get("_id"),k.options.richtext_editor_config),m=!(!this.renderer.isEditable()||!k.options.show_node_editor_title_richtext)&&f.inline("Rk-Edit-Title-"+c.get("_id"),k.options.richtext_editor_config),n=function(){k.renderer.removeRepresentation(k),paper.view.draw()};if(k.cleanEditor=function(){k.editor_$.off("keyup"),k.editor_$.find("input, textarea, select").off("change keyup paste"),k.editor_$.find(".Rk-Edit-Image-File").off("change"),k.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").off("hover"),k.editor_$.find(".Rk-Edit-Size-Btn").off("click"),k.editor_$.find(".Rk-Edit-Image-Del").off("click"),k.editor_$.find(".Rk-Edit-ColorPicker").find("li").off("hover click"),k.editor_$.find(".Rk-CloseX").off("click"),k.editor_$.find(".Rk-Edit-Goto").off("click"),k.options.show_node_editor_description_richtext&&l&&(l.focusManager.blur(!0),l.destroy()),k.options.show_node_editor_title_richtext&&m&&(m.focusManager.blur(!0),m.destroy())},this.editor_$.find(".Rk-CloseX").click(function(a){a.preventDefault(),n()}),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var o=b.debounce(function(){b.defer(function(){if(k.renderer.isEditable()){var a={};if(k.options.show_node_editor_uri&&(a.uri=k.editor_$.find(".Rk-Edit-URI").val(),k.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#")),k.options.show_node_editor_image&&(a.image=k.editor_$.find(".Rk-Edit-Image").val(),k.editor_$.find(".Rk-Edit-ImgPreview").attr("src",a.image||i)),k.options.show_node_editor_description&&(k.options.show_node_editor_description_richtext?l&&l.checkDirty()&&(a.description=l.getData(),l.resetDirty()):a.description=k.editor_$.find(".Rk-Edit-Description").val()),k.options.show_node_editor_title&&(k.options.show_node_editor_title_richtext?m&&m.checkDirty()&&(a.title=m.getData(),m.resetDirty()):a.title=k.editor_$.find(".Rk-Edit-Title").val()),k.options.show_node_editor_style){var d=k.editor_$.find(".Rk-Edit-Dash").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d})}k.options.change_shapes&&c.get("shape")!==k.editor_$.find(".Rk-Edit-Shape").val()&&(a.shape=k.editor_$.find(".Rk-Edit-Shape").val()),k.options.change_types&&c.get("type")!==k.editor_$.find(".Rk-Edit-Type").val()&&(a.type=k.editor_$.find(".Rk-Edit-Type").val()),c.set(a),k.redraw()}else n()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&n()}),this.editor_$.find("input, textarea, select").on("change keyup paste",o),k.options.show_node_editor_description&&k.options.show_node_editor_description_richtext&&l&&(l.on("change",o),l.on("blur",o)),k.options.show_node_editor_title&&k.options.show_node_editor_title_richtext&&m&&(m.on("change",o),m.on("blur",o)),k.options.allow_image_upload&&this.editor_$.find(".Rk-Edit-Image-File").change(function(){if(this.files.length){var a=this.files[0],b=new FileReader;if("image"!==a.type.substr(0,5))return void alert(k.renkan.translate("This file is not an image"));if(a.size>1024*k.options.uploaded_image_max_kb)return void alert(k.renkan.translate("Image size must be under ")+k.options.uploaded_image_max_kb+k.renkan.translate("KB"));b.onload=function(a){k.editor_$.find(".Rk-Edit-Image").val(a.target.result),o()},b.readAsDataURL(a)}}),this.editor_$.find(".Rk-Edit-Title")[0].focus();var p=k.editor_$.find(".Rk-Editor-ColorPicker-Node");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),p.show()},function(a){a.preventDefault(),p.hide()}),p.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||g._USER_PLACEHOLDER(k.renkan)).get("color"))}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),p.hide(),paper.view.draw()):n()});var q=function(a){if(k.renderer.isEditable()){var b=a+(c.get("size")||0);k.editor_$.find("#Rk-Edit-Size-Value").text((b>0?"+":"")+b),c.set("size",b),paper.view.draw()}else n()};this.editor_$.find("#Rk-Edit-Size-Down").click(function(){return q(-1),!1}),this.editor_$.find("#Rk-Edit-Size-Up").click(function(){return q(1),!1});var r=function(a){if(k.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>k.options.node_stroke_witdh_scale&&(e=k.options.node_stroke_witdh_scale),e!==d&&(k.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else n()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return r(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return r(1),!1});var s=function(a){var d=k.options.node_title_size_min,e=k.options.node_title_size_max;if(k.renderer.isEditable()){var f=c.has("style")&&c.get("style").title_size||1,g=a+f;ge&&(g=e),g!==f&&(k.editor_$.find("#Rk-Edit-Title-Size-Value").text(g.toFixed(1)),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_size:g})),paper.view.draw())}else n()},t=k.editor_$.find(".Rk-Editor-ColorPicker-Title");this.editor_$.find(".Rk-Editor-p-title-color").hover(function(a){a.preventDefault(),t.show()},function(a){a.preventDefault(),t.hide()}),t.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault();var b=c.has("style")&&c.get("style").title_color||k.options.node_fill_color;k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",b)}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_color:a(this).attr("data-color")})),t.hide(),paper.view.draw()):n()}),this.editor_$.find("#Rk-Edit-Title-Size-Down").click(function(){var a=k.options.node_title_size_step;return s(-a),!1}),this.editor_$.find("#Rk-Edit-Title-Size-Up").click(function(){var a=k.options.node_title_size_step;return s(a),!1}),this.editor_$.find(".Rk-Edit-Image-Del").click(function(){return k.editor_$.find(".Rk-Edit-Image").val(""),o(),!1})}else if("object"==typeof this.source_representation.highlighted){var u=this.source_representation.highlighted.replace(b(c.get("title")).escape(),'$1');this.editor_$.find(".Rk-Display-Title"+(c.get("uri")?" a":"")).html(u),this.options.show_node_tooltip_description&&this.editor_$.find(".Rk-Display-Description").html(this.source_representation.highlighted.replace(b(c.get("description")).escape(),'$1'))}this.editor_$.find("img").load(function(){k.redraw()})},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;g.drawEditBox(this.options,a,this.editor_block,.75*this.source_representation.circle_radius,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()},destroy:function(){"undefined"!=typeof this.cleanEditor&&this.cleanEditor(),this.editor_block.remove(),this.editor_$.remove()}}).value(),h}),define("renderer/edgeeditor",["jquery","underscore","requtils","renderer/baseeditor"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/edgeeditor.html"],this.readOnlyTemplate=this.options.templates["templates/edgeeditor_readonly.html"]},draw:function(){var c=this.source_representation.model,d=c.get("from"),f=c.get("to"),g=c.get("created_by")||e._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate;this.editor_$.html(h({edge:{has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),short_uri:e.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),color:c.has("style")&&c.get("style").color||g.get("color"),dash:c.has("style")&&c.get("style").dash?"checked":"",arrow:c.has("style")&&c.get("style").arrow||!c.has("style")||"undefined"==typeof c.get("style").arrow?"checked":"",thickness:c.has("style")&&c.get("style").thickness||1,from_title:d.get("title"),to_title:f.get("title"),from_color:d.has("style")&&d.get("style").color||(d.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),to_color:f.has("style")&&f.get("style").color||(f.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),created_by_color:g.get("color"),created_by_title:g.get("title")},renkan:this.renkan,shortenText:e.shortenText,options:this.options})),this.redraw();var i=this,j=function(){i.renderer.removeRepresentation(i),i.editor_$.find(".Rk-Edit-Size-Btn").off("click"),paper.view.draw()};if(this.editor_$.find(".Rk-CloseX").click(j),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var k=b.debounce(function(){b.defer(function(){if(i.renderer.isEditable()){var a={title:i.editor_$.find(".Rk-Edit-Title").val()};if(i.options.show_edge_editor_uri&&(a.uri=i.editor_$.find(".Rk-Edit-URI").val()),i.options.show_node_editor_style){var d=i.editor_$.find(".Rk-Edit-Dash").is(":checked"),e=i.editor_$.find(".Rk-Edit-Arrow").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d,arrow:e})}i.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#"),c.set(a),paper.view.draw()}else j()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&j()}),this.editor_$.find("input").on("keyup change paste",k),this.editor_$.find(".Rk-Edit-Vocabulary").change(function(){var b=a(this),c=b.val();c&&(i.editor_$.find(".Rk-Edit-Title").val(b.find(":selected").text()),i.editor_$.find(".Rk-Edit-URI").val(c),k())}),this.editor_$.find(".Rk-Edit-Direction").click(function(){i.renderer.isEditable()?(c.set({from:c.get("to"),to:c.get("from")}),i.draw()):j()});var l=i.editor_$.find(".Rk-Editor-ColorPicker-Edge");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),l.show()},function(a){a.preventDefault(),l.hide()}),l.find("li").hover(function(b){b.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||e._USER_PLACEHOLDER(i.renkan)).get("color"))}).click(function(d){d.preventDefault(),i.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),l.hide(),paper.view.draw()):j()});var m=function(a){if(i.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>i.options.node_stroke_witdh_scale&&(e=i.options.node_stroke_witdh_scale),e!==d&&(i.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else j()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return m(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return m(1),!1})}},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;e.drawEditBox(this.options,a,this.editor_block,5,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()}}).value(),f}),define("renderer/nodebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({setSectorSize:function(){var a=this.source_representation.circle_radius;a!==this.lastSectorInner&&(this.sector&&this.sector.destroy(),this.sector=this.renderer.drawSector(this,1+a,e._NODE_BUTTON_WIDTH+a,this.startAngle,this.endAngle,1,this.imageName,this.renkan.translate(this.text)),this.lastSectorInner=a)},unselect:function(){d.prototype.unselect.apply(this,Array.prototype.slice.call(arguments,1)),this.source_representation&&this.source_representation.buttons_timeout&&(clearTimeout(this.source_representation.buttons_timeout),this.source_representation.hideButtons())},select:function(){this.source_representation&&this.source_representation.buttons_timeout&&clearTimeout(this.source_representation.buttons_timeout),this.sector.select()}}).value(),f}),define("renderer/nodeeditbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-edit-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-125:-135,this.endAngle=this.options.hide_nodes?-55:-45,this.imageName="edit",this.text="Edit"},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/noderemovebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-remove-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-10:0,this.endAngle=this.options.hide_nodes?45:90,this.imageName="remove",this.text="Remove"},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove node ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeNode(this.source_representation.model)}}).value(),f}),define("renderer/nodehidebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-hide-button",this.lastSectorInner=0,this.startAngle=45,this.endAngle=90,this.imageName="hide",this.text="Hide"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.renderer.view.addHiddenNode(this.source_representation.model)}}).value(),f}),define("renderer/nodeshowbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-show-button",this.lastSectorInner=0,this.startAngle=90,this.endAngle=135,this.imageName="show",this.text="Show neighbors"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.source_representation.showNeighbors(!1)}}).value(),f}),define("renderer/noderevertbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-revert-button",this.lastSectorInner=0,this.startAngle=-135,this.endAngle=135,this.imageName="revert",this.text="Cancel deletion"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/nodelinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-link-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?135:90,this.endAngle=this.options.hide_nodes?190:180,this.imageName="link",this.text="Link to another node"},mousedown:function(a,b){if(this.renderer.isEditable()){var c=this.renderer.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]);this.renderer.click_target=null,this.renderer.removeRepresentationsOfType("editor"),this.renderer.addTempEdge(this.source_representation,d,e.OriginEnum.EDGE_BUTTON_CIRCLE)}}}).value(),f}),define("renderer/nodeenlargebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-enlarge-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-55:-45,this.endAngle=this.options.hide_nodes?-10:0,this.imageName="enlarge",this.text="Enlarge"},mouseup:function(){var a=1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/nodeshrinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-shrink-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-170:-180,this.endAngle=this.options.hide_nodes?-125:-135,this.imageName="shrink",this.text="Shrink"},mouseup:function(){var a=-1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/edgeeditbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-edit-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-270,-90,1,"edit",this.renkan.translate("Edit"))},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/edgeremovebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-remove-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-90,90,1,"remove",this.renkan.translate("Remove"))},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove edge ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeEdge(this.source_representation.model)}}).value(),f}),define("renderer/edgerevertbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-revert-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-135,135,1,"revert",this.renkan.translate("Cancel deletion"))},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/miniframe",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({paperShift:function(a){this.renderer.offset=this.renderer.offset.subtract(a.divide(this.renderer.minimap.scale).multiply(this.renderer.scale)),this.renderer.redraw()},mouseup:function(a){this.renderer.click_target=null,this.renderer.is_dragging=!1}}).value(),f}),define("renderer/scene",["jquery","underscore","filesaver","requtils","renderer/miniframe","screenfull"],function(a,b,c,d,e,f){"use strict";var g=d.getUtils(),h=function(c){this.renkan=c,this.$=a(".Rk-Render"),this.representations=[],this.$.html(c.options.templates["templates/scene.html"](c)),this.onStatusChange(),this.canvas_$=this.$.find(".Rk-Canvas"),this.labels_$=this.$.find(".Rk-Labels"),c.options.popup_editor?this.editor_$=this.$.find(".Rk-Editor"):this.editor_$=a("#"+c.options.editor_panel),this.notif_$=this.$.find(".Rk-Notifications"),paper.setup(this.canvas_$[0]),this.totalScroll=0,this.mouse_down=!1,this.click_target=null,this.selected_target=null,this.edge_layer=new paper.Layer,this.node_layer=new paper.Layer,this.buttons_layer=new paper.Layer,this.delete_list=[],this.redrawActive=!1,c.options.show_minimap&&(this.minimap={background_layer:new paper.Layer,edge_layer:new paper.Layer,node_layer:new paper.Layer,node_group:new paper.Group,size:new paper.Size(c.options.minimap_width,c.options.minimap_height)},this.minimap.background_layer.activate(),this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle=new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.rectangle.fillColor=c.options.minimap_background_color,this.minimap.rectangle.strokeColor=c.options.minimap_border_color,this.minimap.rectangle.strokeWidth=4,this.minimap.offset=new paper.Point(this.minimap.size.divide(2)),this.minimap.scale=.1,this.minimap.node_layer.activate(),this.minimap.cliprectangle=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.cliprectangle),this.minimap.node_group.clipped=!0,this.minimap.miniframe=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.miniframe),this.minimap.miniframe.fillColor="#c0c0ff",this.minimap.miniframe.opacity=.3,this.minimap.miniframe.strokeColor="#000080",this.minimap.miniframe.strokeWidth=2,this.minimap.miniframe.__representation=new e(this,null)),this.throttledPaperDraw=b(function(){paper.view.draw()}).throttle(100).value(),this.bundles=[],this.click_mode=!1;var d=this,h=!0,i=1,j=!1,k=0,l=0,m=0;this.image_cache={},this.icon_cache={},["edit","remove","hide","show","link","enlarge","shrink","revert"].forEach(function(a){var b=new Image;b.src=c.options.static_url+"img/"+a+".png",d.icon_cache[a]=b});var n=b.throttle(function(a,b){d.onMouseMove(a,b)},g._MOUSEMOVE_RATE);this.canvas_$.on({mousedown:function(a){a.preventDefault(),d.onMouseDown(a,!1)},mousemove:function(a){a.preventDefault(),n(a,!1)},mouseup:function(a){a.preventDefault(),d.onMouseUp(a,!1)},mousewheel:function(a,b){c.options.zoom_on_scroll&&(a.preventDefault(),h&&d.onScroll(a,b))},touchstart:function(a){a.preventDefault();var b=a.originalEvent.touches[0];c.options.allow_double_click&&new Date-m0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show(),this.$.find(".Rk-CurrentUser").mouseenter(function(){d.$.find(".Rk-UserList").slideDown()}),this.$.find(".Rk-Users").mouseleave(function(){d.$.find(".Rk-UserList").slideUp()}),f.enabled?(o(".Rk-FullScreen-Button","fullScreen"),document.addEventListener(f.raw.fullscreenchange,function(){setTimeout(function(){var a=d.$.width(),b=d.$.height();d.renkan.options.show_top_bar&&(b-=d.$.find(".Rk-TopBar").height()),d.renkan.options.show_bins&&this.renkan.$.find(".Rk-Bins").position().left>0&&(a-=this.renkan.$.find(".Rk-Bins").width()),paper.view.viewSize=new paper.Size([a,b]),d.resize(d.currentWidth,a,d.currentHeight,b),d.currentWidth=a,d.currentHeight=b,f.isFullscreen||(paper.view.onResize=function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)})},600)})):(this.$.find(".Rk-FullScreen-Button").addClass("disabled"),this.$.find(".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents").html(this.renkan.translate("Fullscreen not supported by your browser"))),o(".Rk-AddNode-Button","addNodeBtn"),o(".Rk-AddEdge-Button","addEdgeBtn"),o(".Rk-Save-Button","save"),o(".Rk-Open-Button","open"),o(".Rk-Export-Button","exportProject"),this.$.find(".Rk-Bookmarklet-Button").attr("href","javascript:"+g._BOOKMARKLET_CODE(c)).click(function(){return d.notif_$.text(c.translate("Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.")).fadeIn().delay(5e3).fadeOut(),!1}),this.$.find(".Rk-TopBar-Button").mouseover(function(){a(this).find(".Rk-TopBar-Tooltip").show()}).mouseout(function(){a(this).find(".Rk-TopBar-Tooltip").hide()}),o(".Rk-Fold-Bins","foldBins"),paper.view.on("resize",function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)});var p=b.throttle(function(){d.redraw()},50);this.addRepresentations("Node",this.renkan.project.get("nodes")),this.addRepresentations("Edge",this.renkan.project.get("edges")),this.renkan.project.on("change:title",function(){d.$.find(".Rk-PadTitle").val(c.project.get("title")).prop("title",c.project.get("title"))}),this.$.find(".Rk-PadTitle").on("keyup input paste",function(){c.project.set({title:a(this).val()})});var q=b.throttle(function(){d.redrawUsers()},100);if(q(),this.renkan.project.on("change:saveStatus",function(){switch(d.renkan.project.get("saveStatus")){case 0:d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("saved");break;case 1:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("to-save");break;case 2:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").addClass("saving")}}),this.renkan.project.on("loaded",function(){d.renkan.options.url_parameters?Backbone.history.start():d.fixSize(),d.redrawActive=!0,p()}),this.renkan.router.on("router",function(a){d.setViewParameters(a)}),this.renkan.project.on("change:loadingStatus",function(){if(d.renkan.project.get("loadingStatus")){d.$.find(".loader").addClass("run"),setTimeout(function(){d.$.find(".loader").hide(250)},3e3)}}),this.renkan.project.on("add:users remove:users",q),this.renkan.project.on("add:views remove:views",function(a){d.renkan.project.get("views").length>1?d.$.find(".Rk-ZoomSetSaved").show():d.$.find(".Rk-ZoomSetSaved").hide()}),this.renkan.project.on("add:nodes",function(a){d.addRepresentation("Node",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("add:edges",function(a){d.addRepresentation("Edge",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("change:title",function(a,b){var c=d.$.find(".Rk-PadTitle");c.is("input")?c.val()!==b&&c.val(b):c.text(b)}),c.options.size_bug_fix){var r="number"==typeof c.options.size_bug_fix?c.options.size_bug_fix:500;window.setTimeout(function(){d.fixSize()},r)}if(c.options.force_resize&&a(window).resize(function(){d.autoScale()}),c.options.show_user_list&&c.options.user_color_editable){var s=this.$.find(".Rk-Users .Rk-Edit-ColorPicker-Wrapper"),t=this.$.find(".Rk-Users .Rk-Editor-ColorPicker-User");s.hover(function(a){d.isEditable()&&(a.preventDefault(),t.show())},function(a){a.preventDefault(),t.hide()}),t.find("li").mouseenter(function(b){d.isEditable()&&(b.preventDefault(),d.$.find(".Rk-CurrentUser-Color").css("background",a(this).attr("data-color")))})}if(c.options.show_search_field){var u="";this.$.find(".Rk-GraphSearch-Field").on("keyup change paste input",function(){var b=a(this),e=b.val();if(e!==u)if(u=e,e.length<2)c.project.get("nodes").each(function(a){d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){d.getRepresentationByModel(a).unhighlight()});else{var f=g.regexpFromTextOrArray(e);c.project.get("nodes").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()})}})}this.redraw(),window.setInterval(function(){var a=(new Date).valueOf();d.delete_list.forEach(function(b){if(a>=b.time){var d=c.project.get("nodes").findWhere({delete_scheduled:b.id});d&&project.removeNode(d),d=c.project.get("edges").findWhere({delete_scheduled:b.id}),d&&project.removeEdge(d)}}),d.delete_list=d.delete_list.filter(function(a){return c.project.get("nodes").findWhere({delete_scheduled:a.id})||c.project.get("edges").findWhere({delete_scheduled:a.id})})},500),this.minimap&&window.setInterval(function(){d.rescaleMinimap()},2e3)};return b(h.prototype).extend({fixSize:function(){"undefined"==typeof this.view&&(this.view=this.addRepresentation("View",this.renkan.project.get("views").last())),this.view.autoScale()},drawSector:function(b,c,d,e,f,g,h,i){var j=this.renkan.options,k=e*Math.PI/180,l=f*Math.PI/180,m=this.icon_cache[h],n=-Math.sin(k),o=Math.cos(k),p=Math.cos(k)*c+g*n,q=Math.sin(k)*c+g*o,r=Math.cos(k)*d+g*n,s=Math.sin(k)*d+g*o,t=-Math.sin(l),u=Math.cos(l),v=Math.cos(l)*c-g*t,w=Math.sin(l)*c-g*u,x=Math.cos(l)*d-g*t,y=Math.sin(l)*d-g*u,z=(c+d)/2,A=(k+l)/2,B=Math.cos(A)*z,C=Math.sin(A)*z,D=Math.cos(A)*c,E=Math.cos(A)*d,F=Math.sin(A)*c,G=Math.sin(A)*d,H=Math.cos(A)*(d+3),I=Math.sin(A)*(d+j.buttons_label_font_size)+j.buttons_label_font_size/2;this.buttons_layer.activate();var J=new paper.Path;J.add([p,q]),J.arcTo([D,F],[v,w]),J.lineTo([x,y]),J.arcTo([E,G],[r,s]),J.fillColor=j.buttons_background,J.opacity=.5, -J.closed=!0,J.__representation=b;var K=new paper.PointText(H,I);K.characterStyle={fontSize:j.buttons_label_font_size,fillColor:j.buttons_label_color},H>2?K.paragraphStyle.justification="left":H<-2?K.paragraphStyle.justification="right":K.paragraphStyle.justification="center",K.visible=!1;var L=!1,M=new paper.Point(-200,-200),N=new paper.Group([J,K]),O=N.position,P=new paper.Point([B,C]),Q=new paper.Point(0,0);K.content=i,N.pivot=N.bounds.center,N.visible=!1,N.position=M;var R={show:function(){L=!0,N.position=Q.add(O),N.visible=!0},moveTo:function(a){Q=a,L&&(N.position=a.add(O))},hide:function(){L=!1,N.visible=!1,N.position=M},select:function(){J.opacity=.8,K.visible=!0},unselect:function(){J.opacity=.5,K.visible=!1},destroy:function(){N.remove()}},S=function(){var a=new paper.Raster(m);a.position=P.add(N.position).subtract(O),a.locked=!0,N.addChild(a)};return m.width?S():a(m).on("load",S),R},addToBundles:function(a){var c=b(this.bundles).find(function(b){return b.from===a.from_representation&&b.to===a.to_representation||b.from===a.to_representation&&b.to===a.from_representation});return"undefined"!=typeof c?c.edges.push(a):(c={from:a.from_representation,to:a.to_representation,edges:[a],getPosition:function(a){var c=a.from_representation===this.from?1:-1;return c*(b(this.edges).indexOf(a)-(this.edges.length-1)/2)}},this.bundles.push(c)),c},isEditable:function(){return this.renkan.options.editor_mode&&!this.renkan.read_only},onStatusChange:function(){var a=this.$.find(".Rk-Save-Button"),b=a.find(".Rk-TopBar-Tooltip-Contents");this.renkan.read_only?(a.removeClass("disabled Rk-Save-Online").addClass("Rk-Save-ReadOnly"),b.text(this.renkan.translate("Connection lost"))):this.renkan.options.manual_save?(a.removeClass("Rk-Save-ReadOnly Rk-Save-Online"),b.text(this.renkan.translate("Save Project"))):(a.removeClass("disabled Rk-Save-ReadOnly").addClass("Rk-Save-Online"),b.text(this.renkan.translate("Auto-save enabled"))),this.redrawUsers()},redrawMiniframe:function(){var a=this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),b=this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));this.minimap.miniframe.fitBounds(a,b)},rescaleMinimap:function(){var a=this.renkan.project.get("nodes");if(a.length>1){var b=a.map(function(a){return a.get("position").x}),c=a.map(function(a){return a.get("position").y}),d=Math.min.apply(Math,b),e=Math.min.apply(Math,c),f=Math.max.apply(Math,b),g=Math.max.apply(Math,c),h=Math.min(.8*this.view.scale*this.renkan.options.minimap_width/paper.view.bounds.width,.8*this.view.scale*this.renkan.options.minimap_height/paper.view.bounds.height,(this.renkan.options.minimap_width-2*this.renkan.options.minimap_padding)/(f-d),(this.renkan.options.minimap_height-2*this.renkan.options.minimap_padding)/(g-e));this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([(f+d)/2,(g+e)/2]).multiply(h)),this.minimap.scale=h}1===a.length&&(this.minimap.scale=.1,this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([a.at(0).get("position").x,a.at(0).get("position").y]).multiply(this.minimap.scale))),this.redraw()},toPaperCoords:function(a){return a.multiply(this.view.scale).add(this.view.offset)},toMinimapCoords:function(a){return a.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft)},toModelCoords:function(a){return a.subtract(this.view.offset).divide(this.view.scale)},addRepresentation:function(a,b){var c=d.getRenderer()[a],e=new c(this,b);return this.representations.push(e),e},addRepresentations:function(a,b){var c=this;b.forEach(function(b){c.addRepresentation(a,b)})},userTemplate:b.template('
                                • <%=name%>
                                • '),redrawUsers:function(){if(this.renkan.options.show_user_list){var b=[].concat((this.renkan.project.current_user_list||{}).models||[],(this.renkan.project.get("users")||{}).models||[]),c="",d=this.$.find(".Rk-Users"),e=d.find(".Rk-CurrentUser-Name"),f=d.find(".Rk-Edit-ColorPicker li"),g=d.find(".Rk-CurrentUser-Color"),h=this;e.off("click").text(this.renkan.translate("")),f.off("mouseleave click"),b.forEach(function(b){b.get("_id")===h.renkan.current_user?(e.text(b.get("title")),g.css("background",b.get("color")),h.isEditable()&&(h.renkan.options.user_name_editable&&e.click(function(){var c=a(this),d=a("").val(b.get("title")).blur(function(){b.set("title",a(this).val()),h.redrawUsers(),h.redraw()});c.empty().html(d),d.select()}),h.renkan.options.user_color_editable&&f.click(function(c){c.preventDefault(),h.isEditable()&&b.set("color",a(this).attr("data-color")),a(this).parent().hide()}).mouseleave(function(){g.css("background",b.get("color"))}))):c+=h.userTemplate({name:b.get("title"),background:b.get("color")})}),d.find(".Rk-UserList").html(c)}},removeRepresentation:function(a){a.destroy(),this.representations=b.reject(this.representations,function(b){return b===a})},getRepresentationByModel:function(a){if(a)return b.find(this.representations,function(b){return b.model===a})},removeRepresentationsOfType:function(a){var c=b.filter(this.representations,function(b){return b.type===a}),d=this;b.each(c,function(a){d.removeRepresentation(a)})},highlightModel:function(a){var b=this.getRepresentationByModel(a);b&&b.highlight()},unhighlightAll:function(a){b.each(this.representations,function(a){a.unhighlight()})},unselectAll:function(a){b.each(this.representations,function(a){a.unselect()})},redraw:function(){this.redrawActive&&(b.each(this.representations,function(a){a.redraw({dontRedrawEdges:!0})}),this.minimap&&"undefined"!=typeof this.view&&this.redrawMiniframe(),paper.view.draw())},resize:function(a,b,c,d){var e;this.minimap&&(this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.cliprectangle.fitBounds(this.minimap.topleft,this.minimap.size));var f=d/c,g=b/a;e=dg._MIN_DRAG_DISTANCE&&(this.is_dragging=!0);var e=paper.project.hitTest(c);this.is_dragging?this.click_target&&"function"==typeof this.click_target.paperShift?this.click_target.paperShift(d):this.view.paperShift(d):this.findTarget(e),paper.view.draw()},onMouseDown:function(b,c){var d=this.canvas_$.offset(),e=new paper.Point([b.pageX-d.left,b.pageY-d.top]);if(this.last_point=e,this.mouse_down=!0,!this.click_target||"Temp-edge"!==this.click_target.type){this.removeRepresentationsOfType("editor"),this.is_dragging=!1;var f=paper.project.hitTest(e);if(f&&"undefined"!=typeof f.item.__representation)this.click_target=f.item.__representation,this.click_target.mousedown(b,c);else if(this.click_target=null,this.isEditable()&&this.click_mode===g._CLICKMODE_ADDNODE){var h=this.toModelCoords(e),i={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:h.x,y:h.y},origin:g.OriginEnum.NODE_BUTTON},j=this.renkan.project.addNode(i);this.getRepresentationByModel(j).openEditor()}}this.click_mode&&(this.isEditable()&&this.click_mode===g._CLICKMODE_STARTEDGE&&this.click_target&&"Node"===this.click_target.type?(this.removeRepresentationsOfType("editor"),this.addTempEdge(this.click_target,e,g.OriginEnum.EDGE_BUTTON_BAR),this.click_mode=g._CLICKMODE_ENDEDGE,this.notif_$.fadeOut(function(){a(this).html(this.renkan.translate("Click on a second node to complete the edge")).fadeIn()})):(this.notif_$.hide(),this.click_mode=!1)),paper.view.draw()},onMouseUp:function(a,b){if(this.mouse_down=!1,this.click_target){var c=this.canvas_$.offset();this.click_target.mouseup({point:new paper.Point([a.pageX-c.left,a.pageY-c.top])},b)}else this.click_target=null,this.is_dragging=!1,b&&this.unselectAll(),this.view.updateUrl();paper.view.draw()},onScroll:function(a,b){if(this.totalScroll+=b,Math.abs(this.totalScroll)>=1){var c=this.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]).subtract(this.view.offset).multiply(Math.SQRT2-1);this.totalScroll>0?this.view.setScale(this.view.scale*Math.SQRT2,this.view.offset.subtract(d)):this.view.setScale(this.view.scale*Math.SQRT1_2,this.view.offset.add(d.divide(Math.SQRT2))),this.totalScroll=0}},onClick:function(a){if(!this.isEditable()){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);!this._open_uri_cb&&this.renkan.options.simple_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&(this._node_click_open_url=setTimeout(function(){window.open(d.item.__representation.model.get("uri"),"_blank"),this._node_click_open_url=null}.bind(this),200))}},onDoubleClick:function(a){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);if(!this.isEditable())return void(this.renkan.options.double_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&window.open(d.item.__representation.model.get("uri"),"_blank"));if(this.isEditable()&&(!d||"undefined"==typeof d.item.__representation)){var e=this.toModelCoords(c),f={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:e.x,y:e.y},origin:g.OriginEnum.NODE_DOUBLE_CLICK},h=this.renkan.project.addNode(f);this.getRepresentationByModel(h).openEditor()}paper.view.draw()},defaultDropHandler:function(b){var c={},d="";switch(b["text/x-iri-specific-site"]){case"twitter":d=a("
                                  ").html(b["text/x-iri-selected-html"]);var e=d.find(".tweet");c.title=this.renkan.translate("Tweet by ")+e.attr("data-name"),c.uri="http://twitter.com/"+e.attr("data-screen-name")+"/status/"+e.attr("data-tweet-id"),c.image=e.find(".avatar").attr("src"),c.description=e.find(".js-tweet-text:first").text();break;case"google":d=a("
                                  ").html(b["text/x-iri-selected-html"]),c.title=d.find("h3:first").text().trim(),c.uri=d.find("h3 a").attr("href"),c.description=d.find(".st:first").text().trim();break;default:b["text/x-iri-source-uri"]&&(c.uri=b["text/x-iri-source-uri"])}if((b["text/plain"]||b["text/x-iri-selected-text"])&&(c.description=(b["text/plain"]||b["text/x-iri-selected-text"]).replace(/[\s\n]+/gm," ").trim()),b["text/html"]||b["text/x-iri-selected-html"]){d=a("
                                  ").html(b["text/html"]||b["text/x-iri-selected-html"]);var f=d.find("image");f.length&&(c.image=f.attr("xlink:href"));var g=d.find("path");g.length&&(c.clipPath=g.attr("d"));var h=d.find("img");h.length&&(c.image=h[0].src);var i=d.find("a");i.length&&(c.uri=i[0].href),c.title=d.find("[title]").attr("title")||c.title,c.description=d.text().replace(/[\s\n]+/gm," ").trim()}b["text/uri-list"]&&(c.uri=b["text/uri-list"]),b["text/x-moz-url"]&&!c.title&&(c.title=(b["text/x-moz-url"].split("\n")[1]||"").trim(),c.title===c.uri&&(c.title=!1)),b["text/x-iri-source-title"]&&!c.title&&(c.title=b["text/x-iri-source-title"]),(b["text/html"]||b["text/x-iri-selected-html"])&&(d=a("
                                  ").html(b["text/html"]||b["text/x-iri-selected-html"]),c.image=d.find("[data-image]").attr("data-image")||c.image,c.uri=d.find("[data-uri]").attr("data-uri")||c.uri,c.title=d.find("[data-title]").attr("data-title")||c.title,c.description=d.find("[data-description]").attr("data-description")||c.description,c.clipPath=d.find("[data-clip-path]").attr("data-clip-path")||c.clipPath),c.title||(c.title=this.renkan.translate("Dragged resource"));for(var j=["title","description","uri","image"],k=0;k=3){var c=b.view.split(","),d={project:this.renkan.project,offset:{x:parseFloat(c[0]),y:parseFloat(c[1])},zoom_level:parseFloat(c[2])};this.view.setScale(d.zoom_level,new paper.Point(d.offset))}"undefined"!=typeof b.view&&"autoscale"===b.view&&this.view.autoScale(),"undefined"!=typeof b.viewsNodes&&("true"===b.viewsNodes?(this.view.hiddenNodes=(this.view.params.hidden_nodes||[]).concat(),this.view.hideNodes()):this.view.showNodes(!1)),this.unhighlightAll(),"undefined"!=typeof b.node&&b.node&&this.highlightModel(this.renkan.project.get("nodes").get(b.node)),"undefined"!=typeof b.edge&&b.edge&&this.highlightModel(this.renkan.project.get("edges").get(b.edge))},validViewIndex:function(a){var b=parseInt(a),c=0;return c=b<0?this.renkan.project.get("views").length+b:b,"undefined"==typeof this.renkan.project.get("views").at(b)&&(c=0),c},foldBins:function(){var a,b=this.$.find(".Rk-Fold-Bins"),c=this.renkan.$.find(".Rk-Bins"),d=0,e=this,f=e.canvas_$.width();c.position().left<0?(d=new paper.Point([-c.width()/2,0]),c.animate({left:0},250),this.$.animate({left:300},250,function(){var a=e.$.width();paper.view.viewSize=new paper.Size([a,e.canvas_$.height()])}),a=f-c.width()0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show()},redraw:function(a){},initWithParams:function(){var a=this;a.options.view_force_autoscale?this.autoScale():a.setScale(a.params.zoom_level,new paper.Point(a.params.offset)),a.options.hide_nodes&&!a.options.view_show_hiddennodes?(a.hiddenNodes=(a.params.hidden_nodes||[]).concat(),a.hideNodes()):a.showNodes(!1)},saveView:function(){var a=this,b={x:a.offset.x,y:a.offset.y};a.model=a.renkan.project.addView({zoom_level:a.scale,offset:b,hidden_nodes:a.hiddenNodes.concat()}),a.params={zoom_level:a.model.get("zoom_level"),offset:a.model.get("offset"),hidden_nodes:a.model.get("hidden_nodes")},this.$.find(".Rk-ZoomSetSaved").show(),a.updateUrl()},addHiddenNode:function(a){this.hideNode(a),this.hiddenNodes.push(a.id),this.updateUrl()},hideNode:function(a){"undefined"!=typeof this.renderer.getRepresentationByModel(a)&&this.renderer.getRepresentationByModel(a).hide()},hideNodes:function(){var a=this;this.hiddenNodes.forEach(function(b,c){var d=a.renkan.project.get("nodes").get(b);return"undefined"!=typeof d?a.hideNode(a.renkan.project.get("nodes").get(b)):void a.hiddenNodes.splice(c,1)}),paper.view.draw()},showNodes:function(a){var b=this;this.hiddenNodes.forEach(function(c){b.renderer.getRepresentationByModel(b.renkan.project.get("nodes").get(c)).show(a)}),a||(this.hiddenNodes=[]),paper.view.draw()},setScale:function(a,b){a/this.initialScale>e._MIN_SCALE&&a/this.initialScale1){var c=b.map(function(a){return a.get("position").x}),d=b.map(function(a){return a.get("position").y}),e=Math.min.apply(Math,c),f=Math.min.apply(Math,d),g=Math.max.apply(Math,c),h=Math.max.apply(Math,d),i=Math.min((paper.view.size.width-2*this.renkan.options.autoscale_padding)/(g-e),(paper.view.size.height-2*this.renkan.options.autoscale_padding)/(h-f));this.initialScale=i,"undefined"!=typeof a&&parseFloat(a.zoom_level)>0&&parseFloat(a.offset.x)>0&&parseFloat(a.offset.y)>0?this.setScale(parseFloat(a.zoom_level),new paper.Point(parseFloat(a.offset.x),parseFloat(a.offset.y))):this.setScale(i,paper.view.center.subtract(new paper.Point([(g+e)/2,(h+f)/2]).multiply(i)))}1===b.length&&this.setScale(1,paper.view.center.subtract(new paper.Point([b.at(0).get("position").x,b.at(0).get("position").y])))},paperShift:function(a){this.offset=this.offset.add(a),this.renderer.redraw()},updateUrl:function(){if(this.options.url_parameters&&this.options.update_url){var b={},c=Backbone.history.getFragment().split("?");c.length>1&&c[1].split("&").forEach(function(a){var c=a.split("=");b[c[0]]=decodeURIComponent(c[1])}),b.view=Math.round(1e3*this.offset.x)/1e3+","+Math.round(1e3*this.offset.y)/1e3+","+Math.round(1e3*this.scale)/1e3,this.renkan.project.get("views").indexOf(this.model)>-1?(b.viewIndex=this.renkan.project.get("views").indexOf(this.model),b.viewIndex===this.renkan.project.get("views").length-1&&(b.viewIndex=-1)):b.viewIndex&&delete b.viewIndex,this.renkan.router.navigate("?"+decodeURIComponent(a.param(b)),{trigger:!1,replace:!0})}},destroy:function(a){this._super("destroy"),this.showNodes(!1)}}).value(),f}),"function"==typeof require.config&&require.config({paths:{jquery:"../lib/jquery/jquery",underscore:"../lib/lodash/lodash",filesaver:"../lib/FileSaver/FileSaver",requtils:"require-utils","jquery-private":"jquery-private","ckeditor-core":"../lib/ckeditor/ckeditor",screenfull:"../lib/screenfull/screenfull-umd"},map:{"*":{jquery:"jquery-private"},"jquery-private":{jquery:"jquery"}},shim:{"ckeditor-core":{exports:"CKEDITOR"}}}),require(["renderer/baserepresentation","renderer/basebutton","renderer/noderepr","renderer/edge","renderer/tempedge","renderer/baseeditor","renderer/nodeeditor","renderer/edgeeditor","renderer/nodebutton","renderer/nodeeditbutton","renderer/noderemovebutton","renderer/nodehidebutton","renderer/nodeshowbutton","renderer/noderevertbutton","renderer/nodelinkbutton","renderer/nodeenlargebutton","renderer/nodeshrinkbutton","renderer/edgeeditbutton","renderer/edgeremovebutton","renderer/edgerevertbutton","renderer/miniframe","renderer/scene","renderer/viewrepr"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){"use strict";var x=window.Rkns;"undefined"==typeof x.Renderer&&(x.Renderer={});var y=x.Renderer;y._BaseRepresentation=a,y._BaseButton=b,y.Node=c,y.Edge=d,y.View=w,y.TempEdge=e,y._BaseEditor=f,y.NodeEditor=g,y.EdgeEditor=h,y._NodeButton=i,y.NodeEditButton=j,y.NodeRemoveButton=k,y.NodeHideButton=l,y.NodeShowButton=m,y.NodeRevertButton=n,y.NodeLinkButton=o,y.NodeEnlargeButton=p,y.NodeShrinkButton=q,y.EdgeEditButton=r,y.EdgeRemoveButton=s,y.EdgeRevertButton=t,y.MiniFrame=u,y.Scene=v,startRenkan()}),define("main-renderer",function(){}),define("jquery-private",["jquery"],function(a){"use strict";return a.noConflict(!0)}); +this.renkanJST=this.renkanJST||{},this.renkanJST["templates/colorpicker.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                • ';return __p},this.renkanJST["templates/edgeeditor_readonly.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                  \n ×\n ',options.show_edge_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',edge.uri&&(__p+='\n \n '),__p+="\n "+__e(edge.title)+"\n ",edge.uri&&(__p+=" "),__p+="\n \n

                                  \n",options.show_edge_tooltip_uri&&edge.uri&&(__p+='\n

                                  \n '+__e(edge.short_uri)+"\n

                                  \n"),__p+="\n

                                  "+(null==(__t=edge.description)?"":__t)+"

                                  \n",options.show_edge_tooltip_nodes&&(__p+='\n

                                  \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                                  \n

                                  \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                                  \n"),__p+="\n",options.show_edge_tooltip_creator&&edge.has_creator&&(__p+='\n

                                  \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                                  \n"),__p+="\n";return __p},this.renkanJST["templates/edgeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                  \n ×'+__e(renkan.translate("Edit Edge"))+"\n

                                  \n

                                  \n \n \n

                                  \n',options.show_edge_editor_uri&&(__p+="\n

                                  \n \n \n \n

                                  \n ',options.properties.length&&(__p+="\n

                                  \n \n \n

                                  \n")),__p+="\n",options.show_edge_editor_style&&(__p+='\n
                                  \n ',options.show_edge_editor_style_color&&(__p+='\n
                                  \n '+__e(renkan.translate("Edge color:"))+'\n
                                  \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Edge"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                  \n
                                  \n "),__p+="\n ",options.show_edge_editor_style_dash&&(__p+='\n
                                  \n '+__e(renkan.translate("Dash:"))+'\n \n
                                  \n "),__p+="\n ",options.show_edge_editor_style_thickness&&(__p+='\n
                                  \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(edge.thickness)+'\n +\n
                                  \n '),__p+="\n ",options.show_edge_editor_style_arrow&&(__p+='\n
                                  \n '+__e(renkan.translate("Arrow:"))+'\n \n
                                  \n "),__p+="\n
                                  \n"),__p+="\n",options.show_edge_editor_direction&&(__p+='\n

                                  \n '+__e(renkan.translate("Change edge direction"))+"\n

                                  \n"),__p+="\n",options.show_edge_editor_nodes&&(__p+='\n

                                  \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                                  \n

                                  \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                                  \n"),__p+="\n",options.show_edge_editor_creator&&edge.has_creator&&(__p+='\n

                                  \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                                  \n"),__p+="\n";return __p},this.renkanJST["templates/ldtjson-bin/annotationtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                • \n\n \n

                                  '+(null==(__t=htitle)?"":__t)+"

                                  \n

                                  "+(null==(__t=hdescription)?"":__t)+"

                                  \n

                                  Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                                  \n
                                  \n
                                • \n';return __p},this.renkanJST["templates/ldtjson-bin/segmenttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                • \n\n \n

                                  '+(null==(__t=htitle)?"":__t)+"

                                  \n

                                  "+(null==(__t=hdescription)?"":__t)+"

                                  \n

                                  Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                                  \n
                                  \n
                                • \n';return __p},this.renkanJST["templates/ldtjson-bin/tagtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                • \n\n \n

                                  '+(null==(__t=htitle)?"":__t)+'

                                  \n
                                  \n
                                • \n';return __p},this.renkanJST["templates/list-bin.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='
                                • \n'),__p+='\n

                                  \n ',url&&(__p+='\n \n '),__p+="\n "+(null==(__t=htitle)?"":__t)+"\n ",url&&(__p+=""),__p+="\n

                                  \n ",description&&(__p+='\n

                                  '+(null==(__t=hdescription)?"":__t)+"

                                  \n "),__p+="\n ",image&&(__p+='\n
                                  \n '),__p+="\n
                                • \n";return __p},this.renkanJST["templates/main.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_bins&&(__p+='\n
                                  \n
                                  \n

                                  '+__e(translate("Select contents:"))+'

                                  \n
                                  \n \n
                                  \n
                                  \n
                                    \n
                                    \n \n
                                    \n
                                    \n \n \n
                                    \n
                                      \n
                                      \n'),__p+=" ",options.show_editor&&(__p+='\n
                                      \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                      \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n

                                      \n '+__e(node.short_uri)+"\n

                                      \n"),__p+=" ",options.show_node_tooltip_description&&(__p+='\n

                                      '+(null==(__t=node.description)?"":__t)+"

                                      \n"),__p+=" ",node.image&&options.show_node_tooltip_image&&(__p+='\n \n'),__p+=" ",node.has_creator&&options.show_node_tooltip_creator&&(__p+='\n

                                      \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                      \n"),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor_video.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}function get_youtube_id(a){var b=/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/,c=a.match(b);return!(!c||11!=c[2].length)&&c[2]}function get_vimeo_id(a){var b=/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,c=a.match(b);return!!c&&c[2]}function get_dailymotion_id(a){var b=/^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$/,c=a.match(b);return!!c&&(void 0!==c[4]?c[4]:c[2])}function get_facebook_id(a){var b=/^https?:\/\/www\.facebook\.com\/(?:video\.php\?v=\d+|.*?\/videos\/\d+)\/?$/,c=a.match(b);return!!c&&encodeURIComponent(a)}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj){if(__p+='\n

                                      \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                      \n",node.uri&&options.show_node_tooltip_uri){var video_id=!1;__p+=(video_id=get_youtube_id(node.uri))?'\n \n

                                      '+__e(renkan.translate("Link"))+"

                                      \n ":(video_id=get_vimeo_id(node.uri))?'\n \n

                                      '+__e(renkan.translate("Link"))+"

                                      \n ":(video_id=get_dailymotion_id(node.uri))?'\n \n

                                      '+__e(renkan.translate("Link"))+"

                                      \n ":(video_id=get_facebook_id(node.uri))?'\n \n

                                      '+__e(renkan.translate("Video link"))+"

                                      \n ":' \n \n '}__p+='\n '+__e(renkan.translate("Link to the node"))+"\n"}return __p},this.renkanJST["templates/nodeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='\n

                                      \n ×'+__e(renkan.translate("Edit Node"))+"\n

                                      \n

                                      \n \n ",__p+=options.show_node_editor_title_richtext?'\n

                                      '+(null==(__t=node.title)?"":__t)+"
                                      \n ":'\n \n ',__p+="\n

                                      \n",options.show_node_title_style&&(__p+='\n
                                      \n
                                      \n '+__e(renkan.translate("Title color:"))+'\n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Title"))?"":__t)+'\n
                                      \n
                                      \n '+__e(renkan.translate("Title size:"))+'\n -\n '+__e(node.title_size.toFixed(1))+'\n +\n
                                      \n
                                      \n'),__p+=" ",options.show_node_editor_uri&&(__p+="\n

                                      \n \n \n \n

                                      \n'),__p+=" ",options.change_types&&(__p+="\n

                                      \n \n \n

                                      \n"),__p+=" ",options.show_node_editor_description&&(__p+="\n

                                      \n \n ",__p+=options.show_node_editor_description_richtext?'\n

                                      '+(null==(__t=node.description)?"":__t)+"
                                      \n ":'\n \n ",__p+="\n

                                      \n"),__p+=" ",options.show_node_editor_size&&(__p+='\n

                                      \n '+__e(renkan.translate("Size:"))+'\n -\n '+__e(node.size)+'\n +\n

                                      \n'),__p+=" ",options.show_node_editor_style&&(__p+='\n
                                      \n ',options.show_node_editor_style_color&&(__p+='\n
                                      \n \n '+__e(renkan.translate("Node color:"))+'\n
                                      \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Node"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                      \n
                                      \n "),__p+="\n ",options.show_node_editor_style_dash&&(__p+='\n
                                      \n '+__e(renkan.translate("Dash:"))+'\n \n
                                      \n "),__p+="\n ",options.show_node_editor_style_thickness&&(__p+='\n
                                      \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(node.thickness)+'\n +\n
                                      \n '),__p+="\n
                                      \n"),__p+=" ",options.show_node_editor_image&&(__p+='\n
                                      \n
                                      \n \n ',node.clip_path&&(__p+='\n \n \n \n '),__p+="\n
                                      \n
                                      \n

                                      \n \n

                                      \n \n \n
                                      \n

                                      \n",options.allow_image_upload&&(__p+="\n

                                      \n \n \n

                                      \n')),__p+=" ",options.show_node_editor_creator&&node.has_creator&&(__p+='\n

                                      \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                      \n"),__p+=" ",options.change_shapes&&(__p+="\n

                                      \n \n \n

                                      \n"),__p+="\n";return __p},this.renkanJST["templates/scene.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_top_bar&&(__p+='\n
                                      \n
                                      \n ',__p+=options.editor_mode&&options.title_editable?'\n \n ':'\n

                                      \n '+__e(project.get("title")||translate("Untitled project"))+"\n

                                      \n ",__p+="\n ",options.show_user_list&&(__p+='\n
                                      \n
                                      \n ',options.show_user_color&&(__p+='\n
                                      \n \n ',options.user_color_editable&&(__p+='\n \n '),__p+="\n \n ",options.user_color_editable&&print(colorPicker("Rk-Editor-ColorPicker-User")),__p+="\n
                                      \n "),__p+='\n <unknown user>\n
                                      \n
                                        \n
                                        \n '),__p+="\n ",options.home_button_url&&(__p+='\n
                                        \n \n
                                        \n
                                        \n '+__e(translate(options.home_button_title))+"\n
                                        \n
                                        \n
                                        \n "),__p+="\n ",options.show_fullscreen_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n '+__e(translate("Full Screen"))+"\n
                                        \n
                                        \n
                                        \n "),__p+="\n ",options.editor_mode?(__p+="\n ",options.show_addnode_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n '+__e(translate("Add Node"))+"\n
                                        \n
                                        \n
                                        \n "),__p+="\n ",options.show_addedge_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n '+__e(translate("Add Edge"))+"\n
                                        \n
                                        \n
                                        \n "),__p+="\n ",options.show_export_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n '+__e(translate("Download Project"))+"\n
                                        \n
                                        \n
                                        \n "),__p+="\n ",options.show_save_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n
                                        \n
                                        \n '),__p+="\n ",options.show_open_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n '+__e(translate("Open Project"))+"\n
                                        \n
                                        \n
                                        \n "),__p+="\n ",options.show_bookmarklet&&(__p+='\n
                                        \n \n
                                        \n
                                        \n '+__e(translate("Renkan 'Drag-to-Add' bookmarklet"))+'\n
                                        \n
                                        \n
                                        \n
                                        \n '),__p+="\n "):(__p+="\n ",options.show_export_button&&(__p+='\n
                                        \n
                                        \n
                                        \n
                                        \n '+__e(translate("Download Project"))+'\n
                                        \n
                                        \n
                                        \n
                                        \n '),__p+="\n "),__p+="\n ",options.show_search_field&&(__p+='\n
                                        \n \n
                                        \n
                                        \n '),__p+="\n
                                        \n"),__p+='\n
                                        \n
                                        \n
                                        \n ',options.editor_mode&&options.save_view&&(__p+='\n
                                        \n '),__p+="\n ",options.save_view&&(__p+='\n
                                        \n ',options.hide_nodes&&(__p+='\n \t \n '),__p+=" \n "),__p+="\n
                                        \n "),__p+="\n \n\n";return __p},this.renkanJST["templates/search.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                      • '+(null==(__t=title)?"":__t)+"
                                      • ";return __p},this.renkanJST["templates/wikipedia-bin/resulttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                      • \n\n \n

                                        \n '+(null==(__t=htitle)?"":__t)+'\n

                                        \n

                                        '+(null==(__t=hdescription)?"":__t)+"

                                        \n
                                      • \n";return __p},function(a){"use strict";"object"!=typeof a.Rkns&&(a.Rkns={});var b=a.Rkns,c=b.$=a.jQuery,d=b._=a._;b.pickerColors=["#8f1919","#a80000","#d82626","#ff0000","#e87c7c","#ff6565","#f7d3d3","#fecccc","#8f5419","#a85400","#d87f26","#ff7f00","#e8b27c","#ffb265","#f7e5d3","#fee5cc","#8f8f19","#a8a800","#d8d826","#feff00","#e8e87c","#feff65","#f7f7d3","#fefecc","#198f19","#00a800","#26d826","#00ff00","#7ce87c","#65ff65","#d3f7d3","#ccfecc","#198f8f","#00a8a8","#26d8d8","#00feff","#7ce8e8","#65feff","#d3f7f7","#ccfefe","#19198f","#0000a8","#2626d8","#0000ff","#7c7ce8","#6565ff","#d3d3f7","#ccccfe","#8f198f","#a800a8","#d826d8","#ff00fe","#e87ce8","#ff65fe","#f7d3f7","#feccfe","#000000","#242424","#484848","#6d6d6d","#919191","#b6b6b6","#dadada","#ffffff"],b.__renkans=[];var e=b._BaseBin=function(a,c){if("undefined"!=typeof a){this.renkan=a,this.renkan.$.find(".Rk-Bin-Main").hide(),this.$=b.$("
                                      • ").addClass("Rk-Bin").appendTo(a.$.find(".Rk-Bin-List")),this.title_icon_$=b.$("").addClass("Rk-Bin-Title-Icon").appendTo(this.$);var d=this;b.$("").attr({href:"#", +title:a.translate("Close bin")}).addClass("Rk-Bin-Close").html("×").appendTo(this.$).click(function(){return d.destroy(),a.$.find(".Rk-Bin-Main:visible").length||a.$.find(".Rk-Bin-Main:last").slideDown(),a.resizeBins(),!1}),b.$("").attr({href:"#",title:a.translate("Refresh bin")}).addClass("Rk-Bin-Refresh").appendTo(this.$).click(function(){return d.refresh(),!1}),this.count_$=b.$("
                                        ").addClass("Rk-Bin-Count").appendTo(this.$),this.title_$=b.$("

                                        ").addClass("Rk-Bin-Title").appendTo(this.$),this.main_$=b.$("
                                        ").addClass("Rk-Bin-Main").appendTo(this.$).html('

                                        '+a.translate("Loading, please wait")+"

                                        "),this.title_$.html(c.title||"(new bin)"),this.renkan.resizeBins(),c.auto_refresh&&window.setInterval(function(){d.refresh()},c.auto_refresh)}};e.prototype.destroy=function(){this.$.detach(),this.renkan.resizeBins()};var f=b.Renkan=function(a){var e=this;b.__renkans.push(this),this.options=d.defaults(a,b.defaults,{templates:d.defaults(a.templates,renkanJST)||renkanJST,node_editor_templates:d.defaults(a.node_editor_templates,b.defaults.node_editor_templates)}),this.template=this.options.templates["templates/main.html"];var f={};if(d.each(this.options.node_editor_templates,function(a,b){f[b]=e.options.templates[a],delete e.options.templates[a]}),this.options.node_editor_templates=f,d.each(this.options.property_files,function(a){b.$.getJSON(a,function(a){e.options.properties=e.options.properties.concat(a)})}),this.read_only=this.options.read_only||!this.options.editor_mode,this.router=new b.Router,this.project=new b.Models.Project,this.dataloader=new b.DataLoader.Loader(this.project,this.options),this.setCurrentUser=function(a,b){this.project.addUser({_id:a,title:b}),this.current_user=a,this.renderer.redrawUsers()},"undefined"!=typeof this.options.user_id&&(this.current_user=this.options.user_id),this.$=b.$("#"+this.options.container),this.$.addClass("Rk-Main").html(this.template(this)),this.tabs=[],this.search_engines=[],this.current_user_list=new b.Models.UsersList,this.current_user_list.on("add remove",function(){this.renderer&&this.renderer.redrawUsers()}),this.colorPicker=function(a){var c=e.options.templates["templates/colorpicker.html"];return'
                                          '+b.pickerColors.map(function(a){return c({c:a})}).join("")+"
                                        "},this.options.show_editor&&(this.renderer=new b.Renderer.Scene(this)),this.options.search.length){var g=e.options.templates["templates/search.html"],h=this.$.find(".Rk-Search-List"),i=this.$.find(".Rk-Web-Search-Input"),j=this.$.find(".Rk-Web-Search-Form");d.each(this.options.search,function(a,c){b[a.type]&&b[a.type].Search&&e.search_engines.push(new b[a.type].Search(e,a))}),h.html(d(this.search_engines).map(function(a,b){return g({key:b,title:a.getSearchTitle(),className:a.getBgClass()})}).join("")),h.find("li").click(function(){var a=b.$(this);e.setSearchEngine(a.attr("data-key")),j.submit()}),j.submit(function(){if(i.val()){var a=e.search_engine;a.search(i.val())}return!1}),this.$.find(".Rk-Search-Current").mouseenter(function(){h.slideDown()}),this.$.find(".Rk-Search-Select").mouseleave(function(){h.hide()}),this.setSearchEngine(0)}else this.$.find(".Rk-Web-Search-Form").detach();d.each(this.options.bins,function(a){b[a.type]&&b[a.type].Bin&&e.tabs.push(new b[a.type].Bin(e,a))});var k=!1;this.$.find(".Rk-Bins").on("click",".Rk-Bin-Title,.Rk-Bin-Title-Icon",function(){var a=b.$(this).siblings(".Rk-Bin-Main");a.is(":hidden")&&(e.$.find(".Rk-Bin-Main").slideUp(),a.slideDown())}),this.options.show_editor&&this.$.find(".Rk-Bins").on("mouseover",".Rk-Bin-Item",function(a){var f=b.$(this);if(f&&c(f).attr("data-uri")){var g=e.project.get("nodes").where({uri:c(f).attr("data-uri")});d.each(g,function(a){e.renderer.highlightModel(a)})}}).mouseout(function(){e.renderer.unhighlightAll()}).on("mousemove",".Rk-Bin-Item",function(a){try{this.dragDrop()}catch(a){}}).on("touchstart",".Rk-Bin-Item",function(a){k=!1}).on("touchmove",".Rk-Bin-Item",function(a){a.preventDefault();var b=a.originalEvent.changedTouches[0],c=e.renderer.canvas_$.offset(),d=e.renderer.canvas_$.width(),f=e.renderer.canvas_$.height();if(b.pageX>=c.left&&b.pageX=c.top&&b.pageY1?a:null);c.source!==l&&(l=c.source,d.each(e.tabs,function(a){a.render(c)}))}}),this.$.find(".Rk-Bins-Search-Form").submit(function(){return!1})};f.prototype.translate=function(a){return b.i18n[this.options.language]&&b.i18n[this.options.language][a]?b.i18n[this.options.language][a]:this.options.language.length>2&&b.i18n[this.options.language.substr(0,2)]&&b.i18n[this.options.language.substr(0,2)][a]?b.i18n[this.options.language.substr(0,2)][a]:a},f.prototype.onStatusChange=function(){this.renderer.onStatusChange()},f.prototype.setSearchEngine=function(a){this.search_engine=this.search_engines[a],this.$.find(".Rk-Search-Current").attr("class","Rk-Search-Current "+this.search_engine.getBgClass());for(var b=this.search_engine.getBgClass().split(" "),c="",d=0;d"+a.translate("Drag items from this website, drop them in Renkan").replace(/ /g,"_")+"

                                        '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\/\\/[^\\/]*twitter\\.com\\//,s:'.tweet',n:'twitter'},{r:/https?:\\/\\/[^\\/]*google\\.[^\\/]+\\//,s:'.g',n:'google'},{r:/https?:\\/\\/[^\\/]*lemonde\\.fr\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();"},shortenText:function(a,b){return a.length>b?a.substr(0,b)+"…":a},drawEditBox:function(a,b,c,d,e,f){e.css({width:a.tooltip_width-2*a.tooltip_padding});var g=e[0].getBoundingClientRect(),h=f.$[0].getBoundingClientRect();g.bottom>h.bottom-2*a.tooltip_padding-10&&e.css({"overflow-x":"hidden","overflow-y":"scroll","max-height":h.bottom-2*a.tooltip_padding-5-g.top+"px"});var i=e.outerHeight()+2*a.tooltip_padding+5,j=b.xpaper.view.size.height-a.tooltip_margin&&(m=Math.max(paper.view.size.height-a.tooltip_margin,b.y+a.tooltip_arrow_width/2)-i),m1?a.offset[1]:a.offset[0]):null!=a.offset.x&&(c.x=a.offset.x,c.y=a.offset.y),a.offset=c}return a},toJSON:function(){return{_id:this.get("_id"),zoom_level:this.get("zoom_level"),offset:this.get("offset"),title:this.get("title"),description:this.get("description"),created_by:this.get("created_by")?this.get("created_by").get("_id"):null,hidden_nodes:this.get("hidden_nodes")}}}),i=(c.Project=d.extend({schema_version:"2",type:"project",blacklist:["saveStatus","loadingStatus"],relations:[{type:b.HasMany,key:"users",relatedModel:e,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"nodes",relatedModel:f,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"edges",relatedModel:g,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"views",relatedModel:h,reverseRelation:{key:"project",includeInJSON:"_id"}}],addUser:function(a,b){a.project=this;var c=e.findOrCreate(a);return this.get("users").push(c,b),c},addNode:function(a,b){a.project=this;var c=f.findOrCreate(a);return this.get("nodes").push(c,b),c},addEdge:function(a,b){a.project=this;var c=g.findOrCreate(a);return this.get("edges").push(c,b),c},addView:function(a,b){a.project=this;var c=h.findOrCreate(a);return this.get("views").push(c,b),c},removeNode:function(a){this.get("nodes").remove(a)},removeEdge:function(a){this.get("edges").remove(a)},validate:function(a){var b=this;_.each([].concat(a.users,a.nodes,a.edges,a.views),function(a){a&&(a.project=b)})},getSchemaVersion:function(a){var b=a;"undefined"==typeof b&&(b=this);var c=b.schema_version;return c?c:1},initialize:function(){var a=this;this.on("remove:nodes",function(b){a.get("edges").remove(a.get("edges").filter(function(a){return a.get("from")===b||a.get("to")===b}))})},toJSON:function(){var a=_.clone(this.attributes);for(var c in a)(a[c]instanceof b.Model||a[c]instanceof b.Collection||a[c]instanceof d)&&(a[c]=a[c].toJSON());return _.omit(a,this.blacklist)}}),c.RosterUser=b.Model.extend({type:"roster_user",idAttribute:"_id",constructor:function(a){"undefined"!=typeof a&&(a._id=a._id||a.id||c.getUID(this),a.title=a.title||"(untitled "+this.type+")",a.description=a.description||"",a.uri=a.uri||"",a.project=a.project||null,a.site_id=a.site_id||0,"function"==typeof this.prepare&&(a=this.prepare(a))),b.Model.prototype.constructor.call(this,a)},validate:function(){if(!this.type)return"object has no type"},prepare:function(a){return a.color=a.color||"#666666",a},toJSON:function(){return{_id:this.get("_id"),title:this.get("title"),uri:this.get("uri"),description:this.get("description"),color:this.get("color"),project:null!=this.get("project")?this.get("project").get("id"):null,site_id:this.get("site_id")}}}));c.UsersList=b.Collection.extend({model:i})}(window),Rkns.defaults={language:navigator.language||navigator.userLanguage||"en",container:"renkan",search:[],bins:[],static_url:"",popup_editor:!0,editor_panel:"editor-panel",show_bins:!0,properties:[],show_editor:!0,read_only:!1,editor_mode:!0,manual_save:!1,show_top_bar:!0,default_user_color:"#303030",size_bug_fix:!1,force_resize:!1,allow_double_click:!0,double_click_open_url:!0,simple_click_open_url:!1,zoom_on_scroll:!0,element_delete_delay:0,autoscale_padding:50,resize:!0,show_zoom:!0,save_view:!0,view_force_autoscale:!0,view_show_hiddennodes:!0,default_index_view:-1,url_parameters:!0,update_url:!0,show_search_field:!0,show_user_list:!0,user_name_editable:!0,user_color_editable:!0,title_editable:!0,show_user_color:!0,show_save_button:!0,show_export_button:!0,show_open_button:!1,show_addnode_button:!0,show_addedge_button:!0,show_bookmarklet:!0,show_fullscreen_button:!0,home_button_url:!1,home_button_title:"Home",show_minimap:!0,minimap_width:160,minimap_height:120,minimap_padding:20,minimap_background_color:"#ffffff",minimap_border_color:"#cccccc",minimap_highlight_color:"#ffff00",minimap_highlight_weight:5,buttons_background:"#202020",buttons_label_color:"#c000c0",buttons_label_font_size:9,ghost_opacity:.3,default_dash_array:[4,5],show_node_circles:!0,clip_node_images:!0,node_images_fill_mode:!1,node_size_base:25,node_stroke_width:2,node_stroke_max_width:12,selected_node_stroke_width:4,selected_node_stroke_max_width:24,node_stroke_witdh_scale:5,node_title_size_min:0,node_title_size_max:5,node_title_size_step:.1,node_fill_color:"#ffffff",highlighted_node_fill_color:"#ffff00",node_title_color:"#000000",node_label_distance:5,node_label_max_length:60,label_untitled_nodes:"(untitled)",hide_nodes:!0,change_shapes:!0,change_types:!0,node_editor_templates:{default:"templates/nodeeditor_readonly.html",video:"templates/nodeeditor_video.html"},edge_stroke_width:2,edge_stroke_max_width:12,selected_edge_stroke_width:4,selected_edge_stroke_max_width:24,edge_stroke_witdh_scale:5,edge_label_distance:0,edge_label_max_length:20,edge_arrow_length:18,edge_arrow_width:12,edge_arrow_max_width:32,edge_gap_in_bundles:12,highlighted_edge_color:"#ffff00",label_untitled_edges:"",tooltip_width:275,tooltip_padding:10,tooltip_margin:15,tooltip_arrow_length:20,tooltip_arrow_width:40,tooltip_top_color:"#f0f0f0",tooltip_bottom_color:"#d0d0d0",tooltip_border_color:"#808080",tooltip_border_width:1,tooltip_opacity:.8,richtext_editor_config:{toolbarGroups:[{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"clipboard",groups:["clipboard","undo"]},"/",{name:"styles"}],removePlugins:"colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates"},show_node_title_style:!0,show_node_editor_uri:!0,show_node_editor_title:!0,show_node_editor_title_richtext:!0,show_node_editor_description:!0,show_node_editor_description_richtext:!0,show_node_editor_size:!0,show_node_editor_style:!0,show_node_editor_style_color:!0,show_node_editor_style_dash:!0,show_node_editor_style_thickness:!0,show_node_editor_image:!0,show_node_editor_creator:!0,allow_image_upload:!0,uploaded_image_max_kb:500,show_node_tooltip_uri:!0,show_node_tooltip_description:!0,show_node_tooltip_color:!0,show_node_tooltip_image:!0,show_node_tooltip_creator:!0,show_edge_editor_uri:!0,show_edge_editor_style:!0,show_edge_editor_style_color:!0,show_edge_editor_style_dash:!0,show_edge_editor_style_thickness:!0,show_edge_editor_style_arrow:!0,show_edge_editor_direction:!0,show_edge_editor_nodes:!0,show_edge_editor_creator:!0,show_edge_tooltip_uri:!0,show_edge_tooltip_color:!0,show_edge_tooltip_nodes:!0,show_edge_tooltip_creator:!0},Rkns.i18n={fr:{"Edit Node":"Édition d’un nœud","Edit Edge":"Édition d’un lien","Title:":"Titre :","URI:":"URI :","Description:":"Description :","From:":"De :","To:":"Vers :",Image:"Image","Image URL:":"URL d'Image","Choose Image File:":"Choisir un fichier image","Full Screen":"Mode plein écran","Add Node":"Ajouter un nœud","Add Edge":"Ajouter un lien","Save Project":"Enregistrer le projet","Open Project":"Ouvrir un projet","Auto-save enabled":"Enregistrement automatique activé","Connection lost":"Connexion perdue","Created by:":"Créé par :","Zoom In":"Agrandir l’échelle","Zoom Out":"Rapetisser l’échelle",Edit:"Éditer",Remove:"Supprimer","Cancel deletion":"Annuler la suppression","Link to another node":"Créer un lien",Enlarge:"Agrandir",Shrink:"Rétrécir","Click on the background canvas to add a node":"Cliquer sur le fond du graphe pour rajouter un nœud","Click on a first node to start the edge":"Cliquer sur un premier nœud pour commencer le lien","Click on a second node to complete the edge":"Cliquer sur un second nœud pour terminer le lien",Wikipedia:"Wikipédia","Wikipedia in ":"Wikipédia en ",French:"Français",English:"Anglais",Japanese:"Japonais","Untitled project":"Projet sans titre","Lignes de Temps":"Lignes de Temps","Loading, please wait":"Chargement en cours, merci de patienter","Edge color:":"Couleur :","Dash:":"Point. :","Thickness:":"Epaisseur :","Arrow:":"Flèche :","Node color:":"Couleur :","Choose color":"Choisir une couleur","Change edge direction":"Changer le sens du lien","Do you really wish to remove node ":"Voulez-vous réellement supprimer le nœud ","Do you really wish to remove edge ":"Voulez-vous réellement supprimer le lien ","This file is not an image":"Ce fichier n'est pas une image","Image size must be under ":"L'image doit peser moins de ","Size:":"Taille :",KB:"ko","Choose from vocabulary:":"Choisir dans un vocabulaire :","SKOS Documentation properties":"SKOS: Propriétés documentaires","has note":"a pour note","has example":"a pour exemple","has definition":"a pour définition","SKOS Semantic relations":"SKOS: Relations sémantiques","has broader":"a pour concept plus large","has narrower":"a pour concept plus étroit","has related":"a pour concept apparenté","Dublin Core Metadata":"Métadonnées Dublin Core","has contributor":"a pour contributeur",covers:"couvre","created by":"créé par","has date":"a pour date","published by":"édité par","has source":"a pour source","has subject":"a pour sujet","Dragged resource":"Ressource glisée-déposée","Search the Web":"Rechercher en ligne","Search in Bins":"Rechercher dans les chutiers","Close bin":"Fermer le chutier","Refresh bin":"Rafraîchir le chutier","(untitled)":"(sans titre)","Select contents:":"Sélectionner des contenus :","Drag items from this website, drop them in Renkan":"Glissez des éléments de ce site web vers Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.":"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan","Shapes available":"Formes disponibles",Circle:"Cercle",Square:"Carré",Diamond:"Losange",Hexagone:"Hexagone",Ellipse:"Ellipse",Star:"Étoile",Cloud:"Nuage",Triangle:"Triangle",Polygon:"Polygone","Zoom Fit":"Ajuster le Zoom","Download Project":"Télécharger le projet","Save view":"Sauver la vue","View saved view":"Restaurer la Vue","Renkan 'Drag-to-Add' bookmarklet":"Renkan 'Deplacer-Pour-Ajouter' Signet","(unknown user)":"(non authentifié)","":"","Search in graph":"Rechercher dans carte","Search in ":"Chercher dans ","Show hidden nodes":"Montrer les noeuds cachés","Show neighbors":"Montrer les voisins",Hide:"Cacher","Fullscreen not supported by your browser":"Le plein écran n'est pas supporté par votre navigateur","Title size:":"Taille :","Title color:":"Couleur :","Video link":"Lien vidéo"}},Rkns.jsonIO=function(a,b){var c=a.project;"undefined"==typeof b.http_method&&(b.http_method="PUT");var d=function(){c.set({loadingStatus:!0}),Rkns.$.getJSON(b.url,function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})})},e=function(){c.set({saveStatus:2});var d=c.toJSON();a.read_only||Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(d),success:function(a,b,d){c.set({saveStatus:0})}})},f=Rkns._.throttle(function(){setTimeout(e,100)},1e3);c.on("add:nodes add:edges add:users add:views",function(a){a.on("change remove",function(a){f()}),f()}),c.on("change",function(){1===c.changedAttributes.length&&c.hasChanged("saveStatus")||f()}),d()},Rkns.jsonIOSaveOnClick=function(a,b){var c=a.project,d=!1,e=function(){return"Project not saved"};"undefined"==typeof b.http_method&&(b.http_method="POST");var f=function(){var d={},e=/id=([^&#?=]+)/,f=document.location.hash.match(e);f&&(d.id=f[1]),Rkns.$.ajax({url:b.url,data:d,beforeSend:function(){c.set({loadingStatus:!0})},success:function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})}})},g=function(){c.set("saved_at",new Date);var a=c.toJSON();Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(a),beforeSend:function(){c.set({saveStatus:2})},success:function(a,b,f){$(window).off("beforeunload",e),d=!1,c.set({saveStatus:0})}})},h=function(){c.set({saveStatus:1});var a=c.get("title");a&&c.get("nodes").length?$(".Rk-Save-Button").removeClass("disabled"):$(".Rk-Save-Button").addClass("disabled"),a&&$(".Rk-PadTitle").css("border-color","#333333"),d||(d=!0,$(window).on("beforeunload",e))};f(),c.on("add:nodes add:edges add:users change",function(a){a.on("change remove",function(a){1===a.changedAttributes.length&&a.hasChanged("saveStatus")||h()}),1===c.changedAttributes.length&&c.hasChanged("saveStatus")||h()}),a.renderer.save=function(){$(".Rk-Save-Button").hasClass("disabled")?c.get("title")||$(".Rk-PadTitle").css("border-color","#ff0000"):g()}},function(a){"use strict";var b=a._,c=a.Ldt={},d=(c.Bin=function(a,b){if(b.ldt_type){var d=c[b.ldt_type+"Bin"];if(d)return new d(a,b)}console.error("No such LDT Bin Type")},c.ProjectBin=a.Utils.inherit(a._BaseBin));d.prototype._init=function(a,b){this.renkan=a,this.tagTemplate=a.options.templates["templates/ldtjson-bin/tagtemplate.html"],this.annotationTemplate=a.options.templates["templates/ldtjson-bin/annotationtemplate.html"],this.proj_id=b.project_id,this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.title_$.html(b.title),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},d.prototype.render=function(c){function d(a){var c=b(a).escape();return f.isempty?c:f.replace(c,"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}var f=c||a.Utils.regexpFromTextOrArray(),g="
                                      • Tags

                                      • ",h=this.data.meta["dc:title"],i=this,j=0;i.title_$.text('LDT Project: "'+h+'"'),b.map(i.data.tags,function(a){var b=a.meta["dc:title"];(f.isempty||f.test(b))&&(j++,g+=i.tagTemplate({ldt_platform:i.ldt_platform,title:b,htitle:d(b),encodedtitle:encodeURIComponent(b),static_url:i.renkan.options.static_url}))}),g+="
                                      • Annotations

                                      • ",b.map(i.data.annotations,function(a){var b=a.content.description,c=a.content.title.replace(b,"");if(f.isempty||f.test(c)||f.test(b)){j++;var h=a.end-a.begin,k=a.content&&a.content.img&&a.content.img.src?a.content.img.src:h?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";g+=i.annotationTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(a.begin),end:e(a.end),duration:e(h),mediaid:a.media,annotationid:a.id,image:k,static_url:i.renkan.options.static_url})}}),this.main_$.html(g),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()},d.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/ldt/cljson/id/"+this.proj_id,dataType:"jsonp",success:function(a){b.data=a,b.render()}})};var e=c.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"};e.prototype.getBgClass=function(){return"Rk-Ldt-Icon"},e.prototype.getSearchTitle=function(){return this.renkan.translate("Lignes de Temps")},e.prototype.search=function(a){this.renkan.tabs.push(new f(this.renkan,{search:a}))};var f=c.ResultsBin=a.Utils.inherit(a._BaseBin);f.prototype._init=function(a,b){this.renkan=a,this.segmentTemplate=a.options.templates["templates/ldtjson-bin/segmenttemplate.html"],this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.max_results=b.max_results||50,this.search=b.search,this.title_$.html('Lignes de Temps: "'+b.search+'"'),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},f.prototype.render=function(c){function d(a){return g.replace(b(a).escape(),"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}if(this.data){var f=c||a.Utils.regexpFromTextOrArray(),g=f.isempty?a.Utils.regexpFromTextOrArray(this.search):f,h="",i=this,j=0;b.each(this.data.objects,function(a){var b=a.abstract,c=a.title;if(f.isempty||f.test(c)||f.test(b)){j++;var g=a.duration,k=a.start_ts,l=+a.duration+k,m=g?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";h+=i.segmentTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b, +hdescription:d(b),start:e(k),end:e(l),duration:e(g),mediaid:a.iri_id,annotationid:a.element_id,image:m})}}),this.main_$.html(h),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()}},f.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/api/ldt/1.0/segments/search/",data:{format:"jsonp",q:this.search,limit:this.max_results},dataType:"jsonp",success:function(a){b.data=a,b.render()}})}}(window.Rkns),Rkns.ResourceList={},Rkns.ResourceList.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.ResourceList.Bin.prototype._init=function(a,b){this.renkan=a,this.resultTemplate=a.options.templates["templates/list-bin.html"],this.title_$.html(b.title),b.list&&(this.data=b.list),this.refresh()},Rkns.ResourceList.Bin.prototype.render=function(a){function b(a){var b=_(a).escape();return c.isempty?b:c.replace(b,"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d="",e=this,f=0;Rkns._.each(this.data,function(a){var g;if("string"==typeof a)if(/^(https?:\/\/|www)/.test(a))g={url:a};else{g={title:a.replace(/[:,]?\s?(https?:\/\/|www)[\d\w\/.&?=#%-_]+\s?/,"").trim()};var h=a.match(/(https?:\/\/|www)[\d\w\/.&?=#%-_]+/);h&&(g.url=h[0]),g.title.length>80&&(g.description=g.title,g.title=g.title.replace(/^(.{30,60})\s.+$/,"$1…"))}else g=a;var i=g.title||(g.url||"").replace(/^https?:\/\/(www\.)?/,"").replace(/^(.{40}).+$/,"$1…"),j=g.url||"",k=g.description||"",l=g.image||"";j&&!/^https?:\/\//.test(j)&&(j="http://"+j),(c.isempty||c.test(i)||c.test(k))&&(f++,d+=e.resultTemplate({url:j,title:i,htitle:b(i),image:l,description:k,hdescription:b(k),static_url:e.renkan.options.static_url}))}),e.main_$.html(d),!c.isempty&&f?this.count_$.text(f).show():this.count_$.hide(),c.isempty||f?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.ResourceList.Bin.prototype.refresh=function(){this.data&&this.render()},Rkns.Wikipedia={},Rkns.Wikipedia.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"},Rkns.Wikipedia.Search.prototype.getBgClass=function(){return"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-"+this.lang},Rkns.Wikipedia.Search.prototype.getSearchTitle=function(){var a={fr:"French",en:"English",ja:"Japanese"};return a[this.lang]?this.renkan.translate("Wikipedia in ")+this.renkan.translate(a[this.lang]):this.renkan.translate("Wikipedia")+" ["+this.lang+"]"},Rkns.Wikipedia.Search.prototype.search=function(a){this.renkan.tabs.push(new Rkns.Wikipedia.Bin(this.renkan,{lang:this.lang,search:a}))},Rkns.Wikipedia.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.Wikipedia.Bin.prototype._init=function(a,b){this.renkan=a,this.search=b.search,this.resultTemplate=a.options.templates["templates/wikipedia-bin/resulttemplate.html"],this.lang=b.lang||"en",this.title_icon_$.addClass("Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-"+this.lang),this.title_$.html(this.search).addClass("Rk-Wikipedia-Title"),this.refresh()},Rkns.Wikipedia.Bin.prototype.render=function(a){function b(a){return d.replace(_(a).escape(),"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d=c.isempty?Rkns.Utils.regexpFromTextOrArray(this.search):c,e="",f=this,g=0;Rkns._.each(this.data.query.search,function(a){var d=a.title,h="http://"+f.lang+".wikipedia.org/wiki/"+encodeURI(d.replace(/ /g,"_")),i=Rkns.$("
                                        ").html(a.snippet).text();(c.isempty||c.test(d)||c.test(i))&&(g++,e+=f.resultTemplate({url:h,title:d,htitle:b(d),description:i,hdescription:b(i),static_url:f.renkan.options.static_url}))}),f.main_$.html(e),!c.isempty&&g?this.count_$.text(g).show():this.count_$.hide(),c.isempty||g?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.Wikipedia.Bin.prototype.refresh=function(){var a=this;Rkns.$.ajax({url:"http://"+a.lang+".wikipedia.org/w/api.php?action=query&list=search&srsearch="+encodeURIComponent(this.search)+"&format=json",dataType:"jsonp",success:function(b){a.data=b,a.render()}})},define("renderer/baserepresentation",["jquery","underscore"],function(a,b){"use strict";var c=function(a,c){if("undefined"!=typeof a&&(this.renderer=a,this.renkan=a.renkan,this.project=a.renkan.project,this.options=a.renkan.options,this.model=c,this.model)){var d=this;this._changeBinding=function(){d.redraw({change:!0})},this._removeBinding=function(){a.removeRepresentation(d),b.defer(function(){a.redraw()})},this._selectBinding=function(){d.select()},this._unselectBinding=function(){d.unselect()},this.model.on("change",this._changeBinding),this.model.on("remove",this._removeBinding),this.model.on("select",this._selectBinding),this.model.on("unselect",this._unselectBinding)}};return b(c.prototype).extend({_super:function(a){return c.prototype[a].apply(this,Array.prototype.slice.call(arguments,1))},redraw:function(){},moveTo:function(){},show:function(){return"BaseRepresentation.show"},hide:function(){},select:function(){this.model&&this.model.trigger("selected")},unselect:function(){this.model&&this.model.trigger("unselected")},highlight:function(){},unhighlight:function(){},mousedown:function(){},mouseup:function(){this.model&&this.model.trigger("clicked")},destroy:function(){this.model&&(this.model.off("change",this._changeBinding),this.model.off("remove",this._removeBinding),this.model.off("select",this._selectBinding),this.model.off("unselect",this._unselectBinding))}}).value(),c}),define("requtils",[],function(a,b){"use strict";return{getUtils:function(){return window.Rkns.Utils},getRenderer:function(){return window.Rkns.Renderer}}}),define("renderer/basebutton",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({moveTo:function(a){this.sector.moveTo(a)},show:function(){this.sector.show()},hide:function(){this.sector&&this.sector.hide()},select:function(){this.sector.select()},unselect:function(a){this.sector.unselect(),(!a||a!==this.source_representation&&a.source_representation!==this.source_representation)&&this.source_representation.unselect()},destroy:function(){this.sector.destroy()}}).value(),f}),define("renderer/shapebuilder",[],function(){"use strict";var a="M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z",b={circle:{getShape:function(){return new paper.Path.Circle([0,0],1)},getImageShape:function(a,b){return new paper.Path.Circle(a,b)}},rectangle:{getShape:function(){return new paper.Path.Rectangle([-2,-2],[2,2])},getImageShape:function(a,b){return new paper.Path.Rectangle([-b,-b],[2*b,2*b])}},ellipse:{getShape:function(){return new paper.Path.Ellipse(new paper.Rectangle([-2,-1],[2,1]))},getImageShape:function(a,b){return new paper.Path.Ellipse(new paper.Rectangle([-b,-b/2],[2*b,b]))}},polygon:{getShape:function(){return new paper.Path.RegularPolygon([0,0],6,1)},getImageShape:function(a,b){return new paper.Path.RegularPolygon(a,6,b)}},diamond:{getShape:function(){var a=new paper.Path.Rectangle([-Math.SQRT2,-Math.SQRT2],[Math.SQRT2,Math.SQRT2]);return a.rotate(45),a},getImageShape:function(a,b){var c=new paper.Path.Rectangle([-b*Math.SQRT2/2,-b*Math.SQRT2/2],[b*Math.SQRT2,b*Math.SQRT2]);return c.rotate(45),c}},star:{getShape:function(){return new paper.Path.Star([0,0],8,1,.7)},getImageShape:function(a,b){return new paper.Path.Star(a,8,1*b,.7*b)}},cloud:{getShape:function(){var b=new paper.Path(a);return b},getImageShape:function(b,c){var d=new paper.Path(a);return d.scale(c),d.translate(b),d}},triangle:{getShape:function(){return new paper.Path.RegularPolygon([0,0],3,1)},getImageShape:function(a,b){var c=new paper.Path.RegularPolygon([0,0],3,1);return c.scale(b),c.translate(a),c}},svg:function(a){return{getShape:function(){return new paper.Path(a)},getImageShape:function(a,b){return new paper.Path}}}},c=function(a){return null!==a&&"undefined"!=typeof a||(a="circle"),"svg:"===a.substr(0,4)?b.svg(a.substr(4)):(a in b||(a="circle"),b[a])};return c.builders=b,c}),define("renderer/noderepr",["jquery","underscore","requtils","renderer/baserepresentation","renderer/shapebuilder"],function(a,b,c,d,e){"use strict";var f=c.getUtils(),g=f.inherit(d);return b(g.prototype).extend({_init:function(){if(this.renderer.node_layer.activate(),this.type="Node",this.buildShape(),this.hidden=!1,this.ghost=!1,this.options.show_node_circles?(this.circle.strokeWidth=this.options.node_stroke_width,this.h_ratio=1):this.h_ratio=0,this.title=a('
                                        ').appendTo(this.renderer.labels_$),this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.NodeEditButton(this.renderer,null),new b.NodeRemoveButton(this.renderer,null),new b.NodeLinkButton(this.renderer,null),new b.NodeEnlargeButton(this.renderer,null),new b.NodeShrinkButton(this.renderer,null)],this.options.hide_nodes&&this.normal_buttons.push(new b.NodeHideButton(this.renderer,null),new b.NodeShowButton(this.renderer,null)),this.pending_delete_buttons=[new b.NodeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d$1'));var m=this.model.get("style")||{title_size:1,"title-color":"#00000"},n=m.title_size||1,o=m.title_color||this.options.node_title_color,p={"line-height":"1em"};1!==n&&(p["font-size"]=n.toFixed(1)+"em"),"#000000"!==o&&(p.color=o);var q=a("").css(p).html(l);this.title.empty().append(q);var r=this._getStrokeWidth();this.title.css({left:this.paper_coords.x,top:this.paper_coords.y+this.circle_radius*this.h_ratio+this.options.node_label_distance+.5*r,opacity:h});var s=this.model.has("style")&&this.model.get("style").color||(this.model.get("created_by")||f._USER_PLACEHOLDER(this.renkan)).get("color"),t=this.model.has("style")&&this.model.get("style").dash?this.options.default_dash_array:null;this.circle.strokeWidth=r,this.circle.strokeColor=s,this.circle.dashArray=t;var u=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(u)});var v=this.img;if(this.img=this.model.get("image"),this.img&&this.img!==v&&(this.showImage(),this.circle&&this.circle.sendToBack()),this.node_image&&!this.img&&(this.node_image.remove(),delete this.node_image),this.renderer.minimap){this.minimap_circle.fillColor=s;var w=this.renderer.toMinimapCoords(d),x=this.renderer.minimap.scale*e,y=new paper.Size([x,x]);this.minimap_circle.fitBounds(w.subtract(y),y.multiply(2))}if(!("undefined"!=typeof c&&"dontRedrawEdges"in c&&c.dontRedrawEdges)){var z=this;b.each(this.project.get("edges").filter(function(a){return a.get("to")===z.model||a.get("from")===z.model}),function(a,b,c){var d=z.renderer.getRepresentationByModel(a);d&&"undefined"!=typeof d.from_representation&&"undefined"!=typeof d.from_representation.paper_coords&&"undefined"!=typeof d.to_representation&&"undefined"!=typeof d.to_representation.paper_coords&&d.redraw()})}this.ghost?this.show(!0):this.hidden&&this.hide()},showImage:function(){var b=null;"undefined"==typeof this.renderer.image_cache[this.img]?(b=new Image,this.renderer.image_cache[this.img]=b,b.src=this.img):b=this.renderer.image_cache[this.img];var c=this;if(b.width){this.node_image&&this.node_image.remove(),this.renderer.node_layer.activate();var d=b.width,e=b.height,f=this.model.get("clip_path"),g="undefined"!=typeof f&&f,h=null,i=null,j=null;if(g){h=new paper.Path;var k=f.match(/[a-z][^a-z]+/gi)||[],l=[0,0],m=1/0,n=1/0,o=-(1/0),p=-(1/0),q=function(a,b){var c=a.slice(1).map(function(a,c){var f=parseFloat(a),g=c%2;return f=g?(f-.5)*e:(f-.5)*d,b&&(f+=l[g]),g?(n=Math.min(n,f),p=Math.max(p,f)):(m=Math.min(m,f),o=Math.max(o,f)),f});return l=c.slice(-2),c};k.forEach(function(a){var b=a.match(/([a-z]|[0-9.-]+)/gi)||[""];switch(b[0]){case"M":h.moveTo(q(b));break;case"m":h.moveTo(q(b,!0));break;case"L":h.lineTo(q(b));break;case"l":h.lineTo(q(b,!0));break;case"C":h.cubicCurveTo(q(b));break;case"c":h.cubicCurveTo(q(b,!0));break;case"Q":h.quadraticCurveTo(q(b));break;case"q":h.quadraticCurveTo(q(b,!0))}}),i=Math[this.options.node_images_fill_mode?"min":"max"](o-m,p-n)/2,j=new paper.Point((o+m)/2,(p+n)/2),this.options.show_node_circles||(this.h_ratio=(p-n)/(2*i))}else i=Math[this.options.node_images_fill_mode?"min":"max"](d,e)/2,j=new paper.Point(0,0),this.options.show_node_circles||(this.h_ratio=e/(2*i));var r=new paper.Raster(b);if(r.locked=!0,g&&(r=new paper.Group(h,r),r.opacity=.99,r.clipped=!0,h.__representation=this),this.options.clip_node_images){var s=this.shapeBuilder.getImageShape(j,i);r=new paper.Group(s,r),r.opacity=.99,r.clipped=!0,s.__representation=this}this.image_delta=j.divide(i),this.node_image=r,this.node_image.__representation=c,this.node_image.scale(this.circle_radius/i),this.node_image.position=this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius)),this.node_image.insertAbove(this.circle)}else a(b).on("load",function(){c.showImage()})},paperShift:function(a){this.options.editor_mode?this.renkan.read_only||(this.is_dragging=!0,this.paper_coords=this.paper_coords.add(a),this.redraw()):this.renderer.view.paperShift(a)},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("NodeEditor",null);a.source_representation=this,a.draw()},select:function(){clearTimeout(this.hide_timeout),this.selected=!0,this.circle.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&!this.hidden&&this.active_buttons.forEach(function(a){a.show()});var b=this.model.get("uri");b&&a(".Rk-Bin-Item").each(function(){var c=a(this);c.attr("data-uri")===b&&c.addClass("selected")}),this.options.editor_mode||this.openEditor(),this.renderer.minimap&&(this.minimap_circle.strokeWidth=this.options.minimap_highlight_weight,this.minimap_circle.strokeColor=this.options.minimap_highlight_color),this.hidden?this.show(!0):this.showNeighbors(!0),this._super("select")},hideButtons:function(){this.all_buttons.forEach(function(a){a.hide()}),delete this.buttonTimeout},unselect:function(b){if(!b||b.source_representation!==this){this.selected=!1;var c=this;this.buttons_timeout=setTimeout(function(){c.hideButtons()},200),this.circle.strokeWidth=this._getStrokeWidth(),a(".Rk-Bin-Item").removeClass("selected"),this.renderer.minimap&&(this.minimap_circle.strokeColor=void 0),this.hidden?(this.renderer.removeRepresentationsOfType("editor"),this.hide()):this.hideNeighbors(!0),this._super("unselect")}},hide_delay:function(){var a=this;this.hide_timeout=setTimeout(function(){a.hide()},1e3)},hide:function(){var a=this;this.ghost=!1,this.hidden=!0,"undefined"!=typeof this.node_image&&(this.node_image.opacity=0),this.hideButtons(),this.circle.opacity=0,this.title.css("opacity",0),this.minimap_circle.opacity=0,b.each(this.project.get("edges").filter(function(b){return b.get("to")===a.model||b.get("from")===a.model}),function(b,c,d){var e=a.renderer.getRepresentationByModel(b);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.hide()}),this.hideNeighbors(!1)},show:function(a){var c=this;this.ghost=a,this.ghost?("undefined"!=typeof this.node_image&&(this.node_image.opacity=this.options.ghost_opacity),this.circle.opacity=this.options.ghost_opacity,this.title.css("opacity",this.options.ghost_opacity),this.minimap_circle.opacity=this.options.ghost_opacity):(this.minimap_circle.opacity=1,this.hidden=!1,this.redraw()),b.each(this.project.get("edges").filter(function(a){return a.get("to")===c.model||a.get("from")===c.model}),function(a,b,d){var e=c.renderer.getRepresentationByModel(a);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.show(c.ghost)})},hideNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));f&&f.ghost&&(a?f.hide_delay():f.hide())})},showNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));if(f&&f.hidden&&(f.show(a),!a)){var g=c.renderer.view.hiddenNodes.indexOf(f.model.id);g!==-1&&c.renderer.view.hiddenNodes.splice(g,1)}})},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},saveCoords:function(){var a=this.renderer.toModelCoords(this.paper_coords),b={position:{x:a.x,y:a.y}};this.renderer.isEditable()&&this.model.set(b)},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){if(this.renderer.is_dragging&&this.renderer.isEditable())this.saveCoords();else if(this.hidden){var c=this.renderer.view.hiddenNodes.indexOf(this.model.id);c!==-1&&this.renderer.view.hiddenNodes.splice(c,1),this.show(!1),this.select()}else b||this.model.get("delete_scheduled")||this.openEditor(),this.model.trigger("clicked");this.renderer.click_target=null,this.renderer.is_dragging=!1,this.is_dragging=!1},destroy:function(a){this._super("destroy"),this.all_buttons.forEach(function(a){a.destroy()}),this.circle.remove(),this.title.remove(),this.renderer.minimap&&this.minimap_circle.remove(),this.node_image&&this.node_image.remove()}}).value(),g}),define("renderer/edge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){if(this.renderer.edge_layer.activate(),this.type="Edge",this.hidden=!1,this.ghost=!1,this.highlighted=!1,this.from_representation=this.renderer.getRepresentationByModel(this.model.get("from")),this.to_representation=this.renderer.getRepresentationByModel(this.model.get("to")),this.bundle=this.renderer.addToBundles(this),this.line=new paper.Path,this.line.add([0,0],[0,0],[0,0]),this.line.__representation=this,this.line.strokeWidth=this.options.edge_stroke_width,this.arrow_scale=1,this.arrow=new paper.Path,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.pivot=new paper.Point([this.options.edge_arrow_length/2,this.options.edge_arrow_width/2]),this.arrow.__representation=this,this.text=a('
                                        ').appendTo(this.renderer.labels_$),this.arrow_angle=0,this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.EdgeEditButton(this.renderer,null),new b.EdgeRemoveButton(this.renderer,null)],this.pending_delete_buttons=[new b.EdgeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d90&&(r-=180,s=s.multiply(-1)),r<-90&&(r+=180,s=s.multiply(-1));var x=this.model.get("title")||this.renkan.translate(this.options.label_untitled_edges)||"";x=e.shortenText(x,this.options.node_label_max_length),"object"==typeof this.highlighted?this.text.html(this.highlighted.replace(b(x).escape(),'$1')):this.text.text(x);var y=this.paper_coords.add(s);this.text.css({left:y.x,top:y.y,transform:"rotate("+r+"deg)","-moz-transform":"rotate("+r+"deg)","-webkit-transform":"rotate("+r+"deg)",opacity:d}),this.text_angle=r;var z=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(z)}),this.renderer.minimap&&(this.minimap_line.strokeColor=u,this.minimap_line.segments[0].point=this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position"))),this.minimap_line.segments[1].point=this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position"))))}},hide:function(){this.hidden=!0,this.ghost=!1,this.text.hide(),this.line.visible=!1,this.arrow.visible=!1,this.minimap_line.visible=!1},show:function(a){this.ghost=a,this.ghost?(this.text.css("opacity",.3),this.line.opacity=.3,this.arrow.opacity=.3,this.minimap_line.opacity=.3):(this.hidden=!1,this.text.css("opacity",1),this.line.opacity=1,this.arrow.opacity=1,this.minimap_line.opacity=1),this.text.show(),this.line.visible=!0,this.arrow.visible=!0,this.minimap_line.visible=!0,this.redraw()},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("EdgeEditor",null);a.source_representation=this,a.draw()},select:function(){this.selected=!0,this.line.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&this.active_buttons.forEach(function(a){a.show()}),this.options.editor_mode||this.openEditor(),this._super("select")},unselect:function(a){a&&a.source_representation===this||(this.selected=!1,this.options.editor_mode&&this.all_buttons.forEach(function(a){a.hide()}),this.hidden&&this.renderer.removeRepresentationsOfType("editor"),this.line.strokeWidth=this._getStrokeWidth(),this._super("unselect"))},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){!this.renkan.read_only&&this.renderer.is_dragging?(this.from_representation.saveCoords(),this.to_representation.saveCoords(),this.from_representation.is_dragging=!1,this.to_representation.is_dragging=!1):(b||this.openEditor(),this.model.trigger("clicked")),this.renderer.click_target=null,this.renderer.is_dragging=!1},paperShift:function(a){this.options.editor_mode?this.options.read_only||(this.from_representation.paperShift(a),this.to_representation.paperShift(a)):this.renderer.paperShift(a)},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},destroy:function(){this._super("destroy"),this.line.remove(),this.arrow.remove(),this.text.remove(),this.renderer.minimap&&this.minimap_line.remove(),this.all_buttons.forEach(function(a){a.destroy()});var a=this;this.bundle.edges=b.reject(this.bundle.edges,function(b){return a===b})}}).value(),f}),define("renderer/tempedge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.edge_layer.activate(),this.type="Temp-edge",this.origin=e.OriginEnum.NONE;var a=(this.project.get("users").get(this.renkan.current_user)||e._USER_PLACEHOLDER(this.renkan)).get("color");this.line=new paper.Path,this.line.strokeColor=a,this.line.dashArray=[4,2],this.line.strokeWidth=this.options.selected_edge_stroke_width,this.line.add([0,0],[0,0]),this.line.__representation=this,this.arrow=new paper.Path,this.arrow.fillColor=a,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.__representation=this,this.arrow_angle=0},redraw:function(){var a=this.from_representation.paper_coords,b=this.end_pos,c=b.subtract(a).angle,d=a.add(b).divide(2);this.line.segments[0].point=a,this.line.segments[1].point=b,this.arrow.rotate(c-this.arrow_angle),this.arrow.position=d,this.arrow_angle=c},paperShift:function(a){if(!this.renderer.isEditable())return this.renderer.removeRepresentation(_this),void paper.view.draw();this.end_pos=this.end_pos.add(a);var b=paper.project.hitTest(this.end_pos);this.renderer.findTarget(b),this.redraw()},mouseup:function(a,b){var c=paper.project.hitTest(a.point),d=this.from_representation.model,f=!0;if(c&&"undefined"!=typeof c.item.__representation){var g=c.item.__representation;if("Node"===g.type.substr(0,4)){var h=g.model||g.source_representation.model;if(d!==h){var i={id:e.getUID("edge"),created_by:this.renkan.current_user,from:d,to:h,origin:this.origin};this.renderer.isEditable()&&this.project.addEdge(i)}}(d===g.model||g.source_representation&&g.source_representation.model===d)&&(f=!1,this.renderer.is_dragging=!0)}f&&(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentation(this), +paper.view.draw())},destroy:function(){this.arrow.remove(),this.line.remove()}}).value(),f}),define("renderer/baseeditor",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.buttons_layer.activate(),this.type="editor",this.editor_block=new paper.Path;var c=b.map(b.range(8),function(){return[0,0]});this.editor_block.add.apply(this.editor_block,c),this.editor_block.strokeWidth=this.options.tooltip_border_width,this.editor_block.strokeColor=this.options.tooltip_border_color,this.editor_block.opacity=this.options.tooltip_opacity,this.editor_$=a("
                                        ").appendTo(this.renderer.editor_$).css({position:"absolute",opacity:this.options.tooltip_opacity}).hide()},destroy:function(){this.editor_block.remove(),this.editor_$.remove()}}).value(),f}),define("renderer/nodeeditor",["jquery","underscore","requtils","renderer/baseeditor","renderer/shapebuilder","ckeditor-core"],function(a,b,c,d,e,f){"use strict";var g=c.getUtils(),h=g.inherit(d);return b(h.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/nodeeditor.html"],this.readOnlyTemplate=this.options.node_editor_templates},draw:function(){var c=this.source_representation.model,d=c.get("created_by")||g._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate[c.get("type")]||this.readOnlyTemplate.default,i=this.options.static_url+"img/image-placeholder.png",j=c.get("size")||0;this.editor_$.html(h({node:{_id:c.get("_id"),has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),type:c.get("type")||"default",short_uri:g.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),image:c.get("image")||"",image_placeholder:i,color:c.has("style")&&c.get("style").color||d.get("color"),title_size:c.has("style")&&c.get("style").title_size||1,title_color:c.has("style")&&c.get("style").title_color||this.options.node_title_color,thickness:c.has("style")&&c.get("style").thickness||1,dash:c.has("style")&&c.get("style").dash?"checked":"",clip_path:c.get("clip_path")||!1,created_by_color:d.get("color"),created_by_title:d.get("title"),size:(j>0?"+":"")+j,shape:c.get("shape")||"circle"},renkan:this.renkan,options:this.options,shortenText:g.shortenText,shapes:b(e.builders).omit("svg").keys().value(),types:b(this.options.node_editor_templates).keys().value()})),this.redraw();var k=this,l=!(!this.renderer.isEditable()||!k.options.show_node_editor_description_richtext)&&f.inline("Rk-Edit-Description-"+c.get("_id"),k.options.richtext_editor_config),m=!(!this.renderer.isEditable()||!k.options.show_node_editor_title_richtext)&&f.inline("Rk-Edit-Title-"+c.get("_id"),k.options.richtext_editor_config),n=function(){k.renderer.removeRepresentation(k),paper.view.draw()};if(k.cleanEditor=function(){k.editor_$.off("keyup"),k.editor_$.find("input, textarea, select").off("change keyup paste"),k.editor_$.find(".Rk-Edit-Image-File").off("change"),k.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").off("hover"),k.editor_$.find(".Rk-Edit-Size-Btn").off("click"),k.editor_$.find(".Rk-Edit-Image-Del").off("click"),k.editor_$.find(".Rk-Edit-ColorPicker").find("li").off("hover click"),k.editor_$.find(".Rk-CloseX").off("click"),k.editor_$.find(".Rk-Edit-Goto").off("click"),k.options.show_node_editor_description_richtext&&l&&(l.focusManager.blur(!0),l.destroy()),k.options.show_node_editor_title_richtext&&m&&(m.focusManager.blur(!0),m.destroy())},this.editor_$.find(".Rk-CloseX").click(function(a){a.preventDefault(),n()}),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var o=b.debounce(function(){b.defer(function(){if(k.renderer.isEditable()){var a={};if(k.options.show_node_editor_uri&&(a.uri=k.editor_$.find(".Rk-Edit-URI").val(),k.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#")),k.options.show_node_editor_image&&(a.image=k.editor_$.find(".Rk-Edit-Image").val(),k.editor_$.find(".Rk-Edit-ImgPreview").attr("src",a.image||i)),k.options.show_node_editor_description&&(k.options.show_node_editor_description_richtext?l&&l.checkDirty()&&(a.description=l.getData(),l.resetDirty()):a.description=k.editor_$.find(".Rk-Edit-Description").val()),k.options.show_node_editor_title&&(k.options.show_node_editor_title_richtext?m&&m.checkDirty()&&(a.title=m.getData(),m.resetDirty()):a.title=k.editor_$.find(".Rk-Edit-Title").val()),k.options.show_node_editor_style){var d=k.editor_$.find(".Rk-Edit-Dash").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d})}k.options.change_shapes&&c.get("shape")!==k.editor_$.find(".Rk-Edit-Shape").val()&&(a.shape=k.editor_$.find(".Rk-Edit-Shape").val()),k.options.change_types&&c.get("type")!==k.editor_$.find(".Rk-Edit-Type").val()&&(a.type=k.editor_$.find(".Rk-Edit-Type").val()),c.set(a),k.redraw()}else n()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&n()}),this.editor_$.find("input, textarea, select").on("change keyup paste",o),k.options.show_node_editor_description&&k.options.show_node_editor_description_richtext&&l&&(l.on("change",o),l.on("blur",o)),k.options.show_node_editor_title&&k.options.show_node_editor_title_richtext&&m&&(m.on("change",o),m.on("blur",o)),k.options.allow_image_upload&&this.editor_$.find(".Rk-Edit-Image-File").change(function(){if(this.files.length){var a=this.files[0],b=new FileReader;if("image"!==a.type.substr(0,5))return void alert(k.renkan.translate("This file is not an image"));if(a.size>1024*k.options.uploaded_image_max_kb)return void alert(k.renkan.translate("Image size must be under ")+k.options.uploaded_image_max_kb+k.renkan.translate("KB"));b.onload=function(a){k.editor_$.find(".Rk-Edit-Image").val(a.target.result),o()},b.readAsDataURL(a)}}),this.editor_$.find(".Rk-Edit-Title")[0].focus();var p=k.editor_$.find(".Rk-Editor-ColorPicker-Node");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),p.show()},function(a){a.preventDefault(),p.hide()}),p.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||g._USER_PLACEHOLDER(k.renkan)).get("color"))}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),p.hide(),paper.view.draw()):n()});var q=function(a){if(k.renderer.isEditable()){var b=a+(c.get("size")||0);k.editor_$.find("#Rk-Edit-Size-Value").text((b>0?"+":"")+b),c.set("size",b),paper.view.draw()}else n()};this.editor_$.find("#Rk-Edit-Size-Down").click(function(){return q(-1),!1}),this.editor_$.find("#Rk-Edit-Size-Up").click(function(){return q(1),!1});var r=function(a){if(k.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>k.options.node_stroke_witdh_scale&&(e=k.options.node_stroke_witdh_scale),e!==d&&(k.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else n()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return r(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return r(1),!1});var s=function(a){var d=k.options.node_title_size_min,e=k.options.node_title_size_max;if(k.renderer.isEditable()){var f=c.has("style")&&c.get("style").title_size||1,g=a+f;ge&&(g=e),g!==f&&(k.editor_$.find("#Rk-Edit-Title-Size-Value").text(g.toFixed(1)),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_size:g})),paper.view.draw())}else n()},t=k.editor_$.find(".Rk-Editor-ColorPicker-Title");this.editor_$.find(".Rk-Editor-p-title-color").hover(function(a){a.preventDefault(),t.show()},function(a){a.preventDefault(),t.hide()}),t.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault();var b=c.has("style")&&c.get("style").title_color||k.options.node_fill_color;k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",b)}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_color:a(this).attr("data-color")})),t.hide(),paper.view.draw()):n()}),this.editor_$.find("#Rk-Edit-Title-Size-Down").click(function(){var a=k.options.node_title_size_step;return s(-a),!1}),this.editor_$.find("#Rk-Edit-Title-Size-Up").click(function(){var a=k.options.node_title_size_step;return s(a),!1}),this.editor_$.find(".Rk-Edit-Image-Del").click(function(){return k.editor_$.find(".Rk-Edit-Image").val(""),o(),!1})}else if("object"==typeof this.source_representation.highlighted){var u=this.source_representation.highlighted.replace(b(c.get("title")).escape(),'$1');this.editor_$.find(".Rk-Display-Title"+(c.get("uri")?" a":"")).html(u),this.options.show_node_tooltip_description&&this.editor_$.find(".Rk-Display-Description").html(this.source_representation.highlighted.replace(b(c.get("description")).escape(),'$1'))}this.editor_$.find("img").load(function(){k.redraw()})},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;g.drawEditBox(this.options,a,this.editor_block,.75*this.source_representation.circle_radius,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()},destroy:function(){"undefined"!=typeof this.cleanEditor&&this.cleanEditor(),this.editor_block.remove(),this.editor_$.remove()}}).value(),h}),define("renderer/edgeeditor",["jquery","underscore","requtils","renderer/baseeditor"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/edgeeditor.html"],this.readOnlyTemplate=this.options.templates["templates/edgeeditor_readonly.html"]},draw:function(){var c=this.source_representation.model,d=c.get("from"),f=c.get("to"),g=c.get("created_by")||e._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate;this.editor_$.html(h({edge:{has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),short_uri:e.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),color:c.has("style")&&c.get("style").color||g.get("color"),dash:c.has("style")&&c.get("style").dash?"checked":"",arrow:c.has("style")&&c.get("style").arrow||!c.has("style")||"undefined"==typeof c.get("style").arrow?"checked":"",thickness:c.has("style")&&c.get("style").thickness||1,from_title:d.get("title"),to_title:f.get("title"),from_color:d.has("style")&&d.get("style").color||(d.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),to_color:f.has("style")&&f.get("style").color||(f.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),created_by_color:g.get("color"),created_by_title:g.get("title")},renkan:this.renkan,shortenText:e.shortenText,options:this.options})),this.redraw();var i=this,j=function(){i.renderer.removeRepresentation(i),i.editor_$.find(".Rk-Edit-Size-Btn").off("click"),paper.view.draw()};if(this.editor_$.find(".Rk-CloseX").click(j),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var k=b.debounce(function(){b.defer(function(){if(i.renderer.isEditable()){var a={title:i.editor_$.find(".Rk-Edit-Title").val()};if(i.options.show_edge_editor_uri&&(a.uri=i.editor_$.find(".Rk-Edit-URI").val()),i.options.show_node_editor_style){var d=i.editor_$.find(".Rk-Edit-Dash").is(":checked"),e=i.editor_$.find(".Rk-Edit-Arrow").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d,arrow:e})}i.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#"),c.set(a),paper.view.draw()}else j()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&j()}),this.editor_$.find("input").on("keyup change paste",k),this.editor_$.find(".Rk-Edit-Vocabulary").change(function(){var b=a(this),c=b.val();c&&(i.editor_$.find(".Rk-Edit-Title").val(b.find(":selected").text()),i.editor_$.find(".Rk-Edit-URI").val(c),k())}),this.editor_$.find(".Rk-Edit-Direction").click(function(){i.renderer.isEditable()?(c.set({from:c.get("to"),to:c.get("from")}),i.draw()):j()});var l=i.editor_$.find(".Rk-Editor-ColorPicker-Edge");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),l.show()},function(a){a.preventDefault(),l.hide()}),l.find("li").hover(function(b){b.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||e._USER_PLACEHOLDER(i.renkan)).get("color"))}).click(function(d){d.preventDefault(),i.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),l.hide(),paper.view.draw()):j()});var m=function(a){if(i.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>i.options.node_stroke_witdh_scale&&(e=i.options.node_stroke_witdh_scale),e!==d&&(i.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else j()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return m(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return m(1),!1})}},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;e.drawEditBox(this.options,a,this.editor_block,5,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()}}).value(),f}),define("renderer/nodebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({setSectorSize:function(){var a=this.source_representation.circle_radius;a!==this.lastSectorInner&&(this.sector&&this.sector.destroy(),this.sector=this.renderer.drawSector(this,1+a,e._NODE_BUTTON_WIDTH+a,this.startAngle,this.endAngle,1,this.imageName,this.renkan.translate(this.text)),this.lastSectorInner=a)},unselect:function(){d.prototype.unselect.apply(this,Array.prototype.slice.call(arguments,1)),this.source_representation&&this.source_representation.buttons_timeout&&(clearTimeout(this.source_representation.buttons_timeout),this.source_representation.hideButtons())},select:function(){this.source_representation&&this.source_representation.buttons_timeout&&clearTimeout(this.source_representation.buttons_timeout),this.sector.select()}}).value(),f}),define("renderer/nodeeditbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-edit-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-125:-135,this.endAngle=this.options.hide_nodes?-55:-45,this.imageName="edit",this.text="Edit"},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/noderemovebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-remove-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-10:0,this.endAngle=this.options.hide_nodes?45:90,this.imageName="remove",this.text="Remove"},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove node ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeNode(this.source_representation.model)}}).value(),f}),define("renderer/nodehidebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-hide-button",this.lastSectorInner=0,this.startAngle=45,this.endAngle=90,this.imageName="hide",this.text="Hide"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.renderer.view.addHiddenNode(this.source_representation.model)}}).value(),f}),define("renderer/nodeshowbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-show-button",this.lastSectorInner=0,this.startAngle=90,this.endAngle=135,this.imageName="show",this.text="Show neighbors"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.source_representation.showNeighbors(!1)}}).value(),f}),define("renderer/noderevertbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-revert-button",this.lastSectorInner=0,this.startAngle=-135,this.endAngle=135,this.imageName="revert",this.text="Cancel deletion"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/nodelinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-link-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?135:90,this.endAngle=this.options.hide_nodes?190:180,this.imageName="link",this.text="Link to another node"},mousedown:function(a,b){if(this.renderer.isEditable()){var c=this.renderer.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]);this.renderer.click_target=null,this.renderer.removeRepresentationsOfType("editor"),this.renderer.addTempEdge(this.source_representation,d,e.OriginEnum.EDGE_BUTTON_CIRCLE)}}}).value(),f}),define("renderer/nodeenlargebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-enlarge-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-55:-45,this.endAngle=this.options.hide_nodes?-10:0,this.imageName="enlarge",this.text="Enlarge"},mouseup:function(){var a=1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/nodeshrinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-shrink-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-170:-180,this.endAngle=this.options.hide_nodes?-125:-135,this.imageName="shrink",this.text="Shrink"},mouseup:function(){var a=-1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/edgeeditbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-edit-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-270,-90,1,"edit",this.renkan.translate("Edit"))},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/edgeremovebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-remove-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-90,90,1,"remove",this.renkan.translate("Remove"))},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove edge ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeEdge(this.source_representation.model)}}).value(),f}),define("renderer/edgerevertbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-revert-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-135,135,1,"revert",this.renkan.translate("Cancel deletion"))},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/miniframe",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({paperShift:function(a){this.renderer.offset=this.renderer.offset.subtract(a.divide(this.renderer.minimap.scale).multiply(this.renderer.scale)),this.renderer.redraw()},mouseup:function(a){this.renderer.click_target=null,this.renderer.is_dragging=!1}}).value(),f}),define("renderer/scene",["jquery","underscore","filesaver","requtils","renderer/miniframe","screenfull"],function(a,b,c,d,e,f){"use strict";var g=d.getUtils(),h=function(c){this.renkan=c,this.$=a(".Rk-Render"),this.representations=[],this.$.html(c.options.templates["templates/scene.html"](c)),this.onStatusChange(),this.canvas_$=this.$.find(".Rk-Canvas"),this.labels_$=this.$.find(".Rk-Labels"),c.options.popup_editor?this.editor_$=this.$.find(".Rk-Editor"):this.editor_$=a("#"+c.options.editor_panel),this.notif_$=this.$.find(".Rk-Notifications"),paper.setup(this.canvas_$[0]),this.totalScroll=0,this.mouse_down=!1,this.click_target=null,this.selected_target=null,this.edge_layer=new paper.Layer,this.node_layer=new paper.Layer,this.buttons_layer=new paper.Layer,this.delete_list=[],this.redrawActive=!1,c.options.show_minimap&&(this.minimap={background_layer:new paper.Layer,edge_layer:new paper.Layer,node_layer:new paper.Layer,node_group:new paper.Group,size:new paper.Size(c.options.minimap_width,c.options.minimap_height)},this.minimap.background_layer.activate(),this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle=new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.rectangle.fillColor=c.options.minimap_background_color,this.minimap.rectangle.strokeColor=c.options.minimap_border_color,this.minimap.rectangle.strokeWidth=4,this.minimap.offset=new paper.Point(this.minimap.size.divide(2)),this.minimap.scale=.1,this.minimap.node_layer.activate(),this.minimap.cliprectangle=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.cliprectangle),this.minimap.node_group.clipped=!0,this.minimap.miniframe=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.miniframe),this.minimap.miniframe.fillColor="#c0c0ff",this.minimap.miniframe.opacity=.3,this.minimap.miniframe.strokeColor="#000080",this.minimap.miniframe.strokeWidth=2,this.minimap.miniframe.__representation=new e(this,null)),this.throttledPaperDraw=b(function(){paper.view.draw()}).throttle(100).value(),this.bundles=[],this.click_mode=!1;var d=this,h=!0,i=1,j=!1,k=0,l=0,m=0;this.image_cache={},this.icon_cache={},["edit","remove","hide","show","link","enlarge","shrink","revert"].forEach(function(a){var b=new Image;b.src=c.options.static_url+"img/"+a+".png",d.icon_cache[a]=b});var n=b.throttle(function(a,b){d.onMouseMove(a,b)},g._MOUSEMOVE_RATE);this.canvas_$.on({mousedown:function(a){a.preventDefault(),d.onMouseDown(a,!1)},mousemove:function(a){a.preventDefault(),n(a,!1)},mouseup:function(a){a.preventDefault(),d.onMouseUp(a,!1)},mousewheel:function(a,b){c.options.zoom_on_scroll&&(a.preventDefault(),h&&d.onScroll(a,b))},touchstart:function(a){a.preventDefault();var b=a.originalEvent.touches[0];c.options.allow_double_click&&new Date-m0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show(),this.$.find(".Rk-CurrentUser").mouseenter(function(){d.$.find(".Rk-UserList").slideDown()}),this.$.find(".Rk-Users").mouseleave(function(){d.$.find(".Rk-UserList").slideUp()}),f.enabled?(o(".Rk-FullScreen-Button","fullScreen"),document.addEventListener(f.raw.fullscreenchange,function(){setTimeout(function(){var a=d.$.width(),b=d.$.height();d.renkan.options.show_top_bar&&(b-=d.$.find(".Rk-TopBar").height()),d.renkan.options.show_bins&&this.renkan.$.find(".Rk-Bins").position().left>0&&(a-=this.renkan.$.find(".Rk-Bins").width()),paper.view.viewSize=new paper.Size([a,b]),d.resize(d.currentWidth,a,d.currentHeight,b),d.currentWidth=a,d.currentHeight=b,f.isFullscreen||(paper.view.onResize=function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)})},600)})):(this.$.find(".Rk-FullScreen-Button").addClass("disabled"),this.$.find(".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents").html(this.renkan.translate("Fullscreen not supported by your browser"))),o(".Rk-AddNode-Button","addNodeBtn"),o(".Rk-AddEdge-Button","addEdgeBtn"),o(".Rk-Save-Button","save"),o(".Rk-Open-Button","open"),o(".Rk-Export-Button","exportProject"),this.$.find(".Rk-Bookmarklet-Button").attr("href","javascript:"+g._BOOKMARKLET_CODE(c)).click(function(){return d.notif_$.text(c.translate("Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.")).fadeIn().delay(5e3).fadeOut(),!1}),this.$.find(".Rk-TopBar-Button").mouseover(function(){a(this).find(".Rk-TopBar-Tooltip").show()}).mouseout(function(){a(this).find(".Rk-TopBar-Tooltip").hide()}),o(".Rk-Fold-Bins","foldBins"),paper.view.on("resize",function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)});var p=b.throttle(function(){d.redraw()},50);this.addRepresentations("Node",this.renkan.project.get("nodes")),this.addRepresentations("Edge",this.renkan.project.get("edges")),this.renkan.project.on("change:title",function(){d.$.find(".Rk-PadTitle").val(c.project.get("title")).prop("title",c.project.get("title"))}),this.$.find(".Rk-PadTitle").on("keyup input paste",function(){c.project.set({title:a(this).val()})});var q=b.throttle(function(){d.redrawUsers()},100);if(q(),this.renkan.project.on("change:saveStatus",function(){switch(d.renkan.project.get("saveStatus")){case 0:d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("saved");break;case 1:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("to-save");break;case 2:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").addClass("saving")}}),this.renkan.project.on("loaded",function(){d.renkan.options.url_parameters?Backbone.history.start():d.fixSize(),d.redrawActive=!0,p()}),this.renkan.router.on("router",function(a){d.setViewParameters(a)}),this.renkan.project.on("change:loadingStatus",function(){if(d.renkan.project.get("loadingStatus")){d.$.find(".loader").addClass("run"),setTimeout(function(){d.$.find(".loader").hide(250)},3e3)}}),this.renkan.project.on("add:users remove:users",q),this.renkan.project.on("add:views remove:views",function(a){d.renkan.project.get("views").length>1?d.$.find(".Rk-ZoomSetSaved").show():d.$.find(".Rk-ZoomSetSaved").hide()}),this.renkan.project.on("add:nodes",function(a){d.addRepresentation("Node",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("add:edges",function(a){d.addRepresentation("Edge",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("change:title",function(a,b){var c=d.$.find(".Rk-PadTitle");c.is("input")?c.val()!==b&&c.val(b):c.text(b)}),c.options.size_bug_fix){var r="number"==typeof c.options.size_bug_fix?c.options.size_bug_fix:500;window.setTimeout(function(){d.fixSize()},r)}if(c.options.force_resize&&a(window).resize(function(){d.autoScale()}),c.options.show_user_list&&c.options.user_color_editable){var s=this.$.find(".Rk-Users .Rk-Edit-ColorPicker-Wrapper"),t=this.$.find(".Rk-Users .Rk-Editor-ColorPicker-User");s.hover(function(a){d.isEditable()&&(a.preventDefault(),t.show())},function(a){a.preventDefault(),t.hide()}),t.find("li").mouseenter(function(b){d.isEditable()&&(b.preventDefault(),d.$.find(".Rk-CurrentUser-Color").css("background",a(this).attr("data-color")))})}if(c.options.show_search_field){var u="";this.$.find(".Rk-GraphSearch-Field").on("keyup change paste input",function(){ +var b=a(this),e=b.val();if(e!==u)if(u=e,e.length<2)c.project.get("nodes").each(function(a){d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){d.getRepresentationByModel(a).unhighlight()});else{var f=g.regexpFromTextOrArray(e);c.project.get("nodes").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()})}})}this.redraw(),window.setInterval(function(){var a=(new Date).valueOf();d.delete_list.forEach(function(b){if(a>=b.time){var d=c.project.get("nodes").findWhere({delete_scheduled:b.id});d&&project.removeNode(d),d=c.project.get("edges").findWhere({delete_scheduled:b.id}),d&&project.removeEdge(d)}}),d.delete_list=d.delete_list.filter(function(a){return c.project.get("nodes").findWhere({delete_scheduled:a.id})||c.project.get("edges").findWhere({delete_scheduled:a.id})})},500),this.minimap&&window.setInterval(function(){d.rescaleMinimap()},2e3)};return b(h.prototype).extend({fixSize:function(){"undefined"==typeof this.view&&(this.view=this.addRepresentation("View",this.renkan.project.get("views").last())),this.view.autoScale()},drawSector:function(b,c,d,e,f,g,h,i){var j=this.renkan.options,k=e*Math.PI/180,l=f*Math.PI/180,m=this.icon_cache[h],n=-Math.sin(k),o=Math.cos(k),p=Math.cos(k)*c+g*n,q=Math.sin(k)*c+g*o,r=Math.cos(k)*d+g*n,s=Math.sin(k)*d+g*o,t=-Math.sin(l),u=Math.cos(l),v=Math.cos(l)*c-g*t,w=Math.sin(l)*c-g*u,x=Math.cos(l)*d-g*t,y=Math.sin(l)*d-g*u,z=(c+d)/2,A=(k+l)/2,B=Math.cos(A)*z,C=Math.sin(A)*z,D=Math.cos(A)*c,E=Math.cos(A)*d,F=Math.sin(A)*c,G=Math.sin(A)*d,H=Math.cos(A)*(d+3),I=Math.sin(A)*(d+j.buttons_label_font_size)+j.buttons_label_font_size/2;this.buttons_layer.activate();var J=new paper.Path;J.add([p,q]),J.arcTo([D,F],[v,w]),J.lineTo([x,y]),J.arcTo([E,G],[r,s]),J.fillColor=j.buttons_background,J.opacity=.5,J.closed=!0,J.__representation=b;var K=new paper.PointText(H,I);K.characterStyle={fontSize:j.buttons_label_font_size,fillColor:j.buttons_label_color},H>2?K.paragraphStyle.justification="left":H<-2?K.paragraphStyle.justification="right":K.paragraphStyle.justification="center",K.visible=!1;var L=!1,M=new paper.Point(-200,-200),N=new paper.Group([J,K]),O=N.position,P=new paper.Point([B,C]),Q=new paper.Point(0,0);K.content=i,N.pivot=N.bounds.center,N.visible=!1,N.position=M;var R={show:function(){L=!0,N.position=Q.add(O),N.visible=!0},moveTo:function(a){Q=a,L&&(N.position=a.add(O))},hide:function(){L=!1,N.visible=!1,N.position=M},select:function(){J.opacity=.8,K.visible=!0},unselect:function(){J.opacity=.5,K.visible=!1},destroy:function(){N.remove()}},S=function(){var a=new paper.Raster(m);a.position=P.add(N.position).subtract(O),a.locked=!0,N.addChild(a)};return m.width?S():a(m).on("load",S),R},addToBundles:function(a){var c=b(this.bundles).find(function(b){return b.from===a.from_representation&&b.to===a.to_representation||b.from===a.to_representation&&b.to===a.from_representation});return"undefined"!=typeof c?c.edges.push(a):(c={from:a.from_representation,to:a.to_representation,edges:[a],getPosition:function(a){var c=a.from_representation===this.from?1:-1;return c*(b(this.edges).indexOf(a)-(this.edges.length-1)/2)}},this.bundles.push(c)),c},isEditable:function(){return this.renkan.options.editor_mode&&!this.renkan.read_only},onStatusChange:function(){var a=this.$.find(".Rk-Save-Button"),b=a.find(".Rk-TopBar-Tooltip-Contents");this.renkan.read_only?(a.removeClass("disabled Rk-Save-Online").addClass("Rk-Save-ReadOnly"),b.text(this.renkan.translate("Connection lost"))):this.renkan.options.manual_save?(a.removeClass("Rk-Save-ReadOnly Rk-Save-Online"),b.text(this.renkan.translate("Save Project"))):(a.removeClass("disabled Rk-Save-ReadOnly").addClass("Rk-Save-Online"),b.text(this.renkan.translate("Auto-save enabled"))),this.redrawUsers()},redrawMiniframe:function(){var a=this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),b=this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));this.minimap.miniframe.fitBounds(a,b)},rescaleMinimap:function(){var a=this.renkan.project.get("nodes");if(a.length>1){var b=a.map(function(a){return a.get("position").x}),c=a.map(function(a){return a.get("position").y}),d=Math.min.apply(Math,b),e=Math.min.apply(Math,c),f=Math.max.apply(Math,b),g=Math.max.apply(Math,c),h=Math.min(.8*this.view.scale*this.renkan.options.minimap_width/paper.view.bounds.width,.8*this.view.scale*this.renkan.options.minimap_height/paper.view.bounds.height,(this.renkan.options.minimap_width-2*this.renkan.options.minimap_padding)/(f-d),(this.renkan.options.minimap_height-2*this.renkan.options.minimap_padding)/(g-e));this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([(f+d)/2,(g+e)/2]).multiply(h)),this.minimap.scale=h}1===a.length&&(this.minimap.scale=.1,this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([a.at(0).get("position").x,a.at(0).get("position").y]).multiply(this.minimap.scale))),this.redraw()},toPaperCoords:function(a){return a.multiply(this.view.scale).add(this.view.offset)},toMinimapCoords:function(a){return a.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft)},toModelCoords:function(a){return a.subtract(this.view.offset).divide(this.view.scale)},addRepresentation:function(a,b){var c=d.getRenderer()[a],e=new c(this,b);return this.representations.push(e),e},addRepresentations:function(a,b){var c=this;b.forEach(function(b){c.addRepresentation(a,b)})},userTemplate:b.template('
                                      • <%=name%>
                                      • '),redrawUsers:function(){if(this.renkan.options.show_user_list){var b=[].concat((this.renkan.project.current_user_list||{}).models||[],(this.renkan.project.get("users")||{}).models||[]),c="",d=this.$.find(".Rk-Users"),e=d.find(".Rk-CurrentUser-Name"),f=d.find(".Rk-Edit-ColorPicker li"),g=d.find(".Rk-CurrentUser-Color"),h=this;e.off("click").text(this.renkan.translate("")),f.off("mouseleave click"),b.forEach(function(b){b.get("_id")===h.renkan.current_user?(e.text(b.get("title")),g.css("background",b.get("color")),h.isEditable()&&(h.renkan.options.user_name_editable&&e.click(function(){var c=a(this),d=a("").val(b.get("title")).blur(function(){b.set("title",a(this).val()),h.redrawUsers(),h.redraw()});c.empty().html(d),d.select()}),h.renkan.options.user_color_editable&&f.click(function(c){c.preventDefault(),h.isEditable()&&b.set("color",a(this).attr("data-color")),a(this).parent().hide()}).mouseleave(function(){g.css("background",b.get("color"))}))):c+=h.userTemplate({name:b.get("title"),background:b.get("color")})}),d.find(".Rk-UserList").html(c)}},removeRepresentation:function(a){a.destroy(),this.representations=b.reject(this.representations,function(b){return b===a})},getRepresentationByModel:function(a){if(a)return b.find(this.representations,function(b){return b.model===a})},removeRepresentationsOfType:function(a){var c=b.filter(this.representations,function(b){return b.type===a}),d=this;b.each(c,function(a){d.removeRepresentation(a)})},highlightModel:function(a){var b=this.getRepresentationByModel(a);b&&b.highlight()},unhighlightAll:function(a){b.each(this.representations,function(a){a.unhighlight()})},unselectAll:function(a){b.each(this.representations,function(a){a.unselect()})},redraw:function(){this.redrawActive&&(b.each(this.representations,function(a){a.redraw({dontRedrawEdges:!0})}),this.minimap&&"undefined"!=typeof this.view&&this.redrawMiniframe(),paper.view.draw())},resize:function(a,b,c,d){var e;this.minimap&&(this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.cliprectangle.fitBounds(this.minimap.topleft,this.minimap.size));var f=d/c,g=b/a;e=dg._MIN_DRAG_DISTANCE&&(this.is_dragging=!0);var e=paper.project.hitTest(c);this.is_dragging?this.click_target&&"function"==typeof this.click_target.paperShift?this.click_target.paperShift(d):this.view.paperShift(d):this.findTarget(e),paper.view.draw()},onMouseDown:function(b,c){var d=this.canvas_$.offset(),e=new paper.Point([b.pageX-d.left,b.pageY-d.top]);if(this.last_point=e,this.mouse_down=!0,!this.click_target||"Temp-edge"!==this.click_target.type){this.removeRepresentationsOfType("editor"),this.is_dragging=!1;var f=paper.project.hitTest(e);if(f&&"undefined"!=typeof f.item.__representation)this.click_target=f.item.__representation,this.click_target.mousedown(b,c);else if(this.click_target=null,this.isEditable()&&this.click_mode===g._CLICKMODE_ADDNODE){var h=this.toModelCoords(e),i={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:h.x,y:h.y},origin:g.OriginEnum.NODE_BUTTON},j=this.renkan.project.addNode(i);this.getRepresentationByModel(j).openEditor()}}this.click_mode&&(this.isEditable()&&this.click_mode===g._CLICKMODE_STARTEDGE&&this.click_target&&"Node"===this.click_target.type?(this.removeRepresentationsOfType("editor"),this.addTempEdge(this.click_target,e,g.OriginEnum.EDGE_BUTTON_BAR),this.click_mode=g._CLICKMODE_ENDEDGE,this.notif_$.fadeOut(function(){a(this).html(this.renkan.translate("Click on a second node to complete the edge")).fadeIn()})):(this.notif_$.hide(),this.click_mode=!1)),paper.view.draw()},onMouseUp:function(a,b){if(this.mouse_down=!1,this.click_target){var c=this.canvas_$.offset();this.click_target.mouseup({point:new paper.Point([a.pageX-c.left,a.pageY-c.top])},b)}else this.click_target=null,this.is_dragging=!1,b&&this.unselectAll(),this.view.updateUrl();paper.view.draw()},onScroll:function(a,b){if(this.totalScroll+=b,Math.abs(this.totalScroll)>=1){var c=this.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]).subtract(this.view.offset).multiply(Math.SQRT2-1);this.totalScroll>0?this.view.setScale(this.view.scale*Math.SQRT2,this.view.offset.subtract(d)):this.view.setScale(this.view.scale*Math.SQRT1_2,this.view.offset.add(d.divide(Math.SQRT2))),this.totalScroll=0}},onClick:function(a){if(!this.isEditable()){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);!this._open_uri_cb&&this.renkan.options.simple_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&(this._node_click_open_url=setTimeout(function(){window.open(d.item.__representation.model.get("uri"),"_blank"),this._node_click_open_url=null}.bind(this),200))}},onDoubleClick:function(a){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);if(!this.isEditable())return void(this.renkan.options.double_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&window.open(d.item.__representation.model.get("uri"),"_blank"));if(this.isEditable()&&(!d||"undefined"==typeof d.item.__representation)){var e=this.toModelCoords(c),f={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:e.x,y:e.y},origin:g.OriginEnum.NODE_DOUBLE_CLICK},h=this.renkan.project.addNode(f);this.getRepresentationByModel(h).openEditor()}paper.view.draw()},defaultDropHandler:function(b){var c={},d="";switch(b["text/x-iri-specific-site"]){case"twitter":d=a("
                                        ").html(b["text/x-iri-selected-html"]);var e=d.find(".tweet");c.title=this.renkan.translate("Tweet by ")+e.attr("data-name"),c.uri="http://twitter.com/"+e.attr("data-screen-name")+"/status/"+e.attr("data-tweet-id"),c.image=e.find(".avatar").attr("src"),c.description=e.find(".js-tweet-text:first").text();break;case"google":d=a("
                                        ").html(b["text/x-iri-selected-html"]),c.title=d.find("h3:first").text().trim(),c.uri=d.find("h3 a").attr("href"),c.description=d.find(".st:first").text().trim();break;default:b["text/x-iri-source-uri"]&&(c.uri=b["text/x-iri-source-uri"])}if((b["text/plain"]||b["text/x-iri-selected-text"])&&(c.description=(b["text/plain"]||b["text/x-iri-selected-text"]).replace(/[\s\n]+/gm," ").trim()),b["text/html"]||b["text/x-iri-selected-html"]){d=a("
                                        ").html(b["text/html"]||b["text/x-iri-selected-html"]);var f=d.find("image");f.length&&(c.image=f.attr("xlink:href"));var g=d.find("path");g.length&&(c.clipPath=g.attr("d"));var h=d.find("img");h.length&&(c.image=h[0].src);var i=d.find("a");i.length&&(c.uri=i[0].href),c.title=d.find("[title]").attr("title")||c.title,c.description=d.text().replace(/[\s\n]+/gm," ").trim()}b["text/uri-list"]&&(c.uri=b["text/uri-list"]),b["text/x-moz-url"]&&!c.title&&(c.title=(b["text/x-moz-url"].split("\n")[1]||"").trim(),c.title===c.uri&&(c.title=!1)),b["text/x-iri-source-title"]&&!c.title&&(c.title=b["text/x-iri-source-title"]),(b["text/html"]||b["text/x-iri-selected-html"])&&(d=a("
                                        ").html(b["text/html"]||b["text/x-iri-selected-html"]),c.image=d.find("[data-image]").attr("data-image")||c.image,c.uri=d.find("[data-uri]").attr("data-uri")||c.uri,c.title=d.find("[data-title]").attr("data-title")||c.title,c.description=d.find("[data-description]").attr("data-description")||c.description,c.clipPath=d.find("[data-clip-path]").attr("data-clip-path")||c.clipPath),c.title||(c.title=this.renkan.translate("Dragged resource"));for(var j=["title","description","uri","image"],k=0;k=3){var c=b.view.split(","),d={project:this.renkan.project,offset:{x:parseFloat(c[0]),y:parseFloat(c[1])},zoom_level:parseFloat(c[2])};this.view.setScale(d.zoom_level,new paper.Point(d.offset))}"undefined"!=typeof b.view&&"autoscale"===b.view&&this.view.autoScale(),"undefined"!=typeof b.viewsNodes&&("true"===b.viewsNodes?(this.view.hiddenNodes=(this.view.params.hidden_nodes||[]).concat(),this.view.hideNodes()):this.view.showNodes(!1)),this.unhighlightAll(),"undefined"!=typeof b.node&&b.node&&this.highlightModel(this.renkan.project.get("nodes").get(b.node)),"undefined"!=typeof b.edge&&b.edge&&this.highlightModel(this.renkan.project.get("edges").get(b.edge))},validViewIndex:function(a){var b=parseInt(a),c=0;return c=b<0?this.renkan.project.get("views").length+b:b,"undefined"==typeof this.renkan.project.get("views").at(b)&&(c=0),c},foldBins:function(){var a,b=this.$.find(".Rk-Fold-Bins"),c=this.renkan.$.find(".Rk-Bins"),d=0,e=this,f=e.canvas_$.width();c.position().left<0?(d=new paper.Point([-c.width()/2,0]),c.animate({left:0},250),this.$.animate({left:300},250,function(){var a=e.$.width();paper.view.viewSize=new paper.Size([a,e.canvas_$.height()])}),a=f-c.width()0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show()},redraw:function(a){},initWithParams:function(){var a=this;a.options.view_force_autoscale?this.autoScale():a.setScale(a.params.zoom_level,new paper.Point(a.params.offset)),a.options.hide_nodes&&!a.options.view_show_hiddennodes?(a.hiddenNodes=(a.params.hidden_nodes||[]).concat(),a.hideNodes()):a.showNodes(!1)},saveView:function(){var a=this,b={x:a.offset.x,y:a.offset.y};a.model=a.renkan.project.addView({zoom_level:a.scale,offset:b,hidden_nodes:a.hiddenNodes.concat()}),a.params={zoom_level:a.model.get("zoom_level"),offset:a.model.get("offset"),hidden_nodes:a.model.get("hidden_nodes")},this.$.find(".Rk-ZoomSetSaved").show(),a.updateUrl()},addHiddenNode:function(a){this.hideNode(a),this.hiddenNodes.push(a.id),this.updateUrl()},hideNode:function(a){"undefined"!=typeof this.renderer.getRepresentationByModel(a)&&this.renderer.getRepresentationByModel(a).hide()},hideNodes:function(){var a=this;this.hiddenNodes.forEach(function(b,c){var d=a.renkan.project.get("nodes").get(b);return"undefined"!=typeof d?a.hideNode(a.renkan.project.get("nodes").get(b)):void a.hiddenNodes.splice(c,1)}),paper.view.draw()},showNodes:function(a){var b=this;this.hiddenNodes.forEach(function(c){b.renderer.getRepresentationByModel(b.renkan.project.get("nodes").get(c)).show(a)}),a||(this.hiddenNodes=[]),paper.view.draw()},setScale:function(a,b){a/this.initialScale>e._MIN_SCALE&&a/this.initialScale1){var c=b.map(function(a){return a.get("position").x}),d=b.map(function(a){return a.get("position").y}),e=Math.min.apply(Math,c),f=Math.min.apply(Math,d),g=Math.max.apply(Math,c),h=Math.max.apply(Math,d),i=Math.min((paper.view.size.width-2*this.renkan.options.autoscale_padding)/(g-e),(paper.view.size.height-2*this.renkan.options.autoscale_padding)/(h-f));this.initialScale=i,"undefined"!=typeof a&&parseFloat(a.zoom_level)>0&&parseFloat(a.offset.x)>0&&parseFloat(a.offset.y)>0?this.setScale(parseFloat(a.zoom_level),new paper.Point(parseFloat(a.offset.x),parseFloat(a.offset.y))):this.setScale(i,paper.view.center.subtract(new paper.Point([(g+e)/2,(h+f)/2]).multiply(i)))}1===b.length&&this.setScale(1,paper.view.center.subtract(new paper.Point([b.at(0).get("position").x,b.at(0).get("position").y])))},paperShift:function(a){this.offset=this.offset.add(a),this.renderer.redraw()},updateUrl:function(){if(this.options.url_parameters&&this.options.update_url){var b={},c=Backbone.history.getFragment().split("?");c.length>1&&c[1].split("&").forEach(function(a){var c=a.split("=");b[c[0]]=decodeURIComponent(c[1])}),b.view=Math.round(1e3*this.offset.x)/1e3+","+Math.round(1e3*this.offset.y)/1e3+","+Math.round(1e3*this.scale)/1e3,this.renkan.project.get("views").indexOf(this.model)>-1?(b.viewIndex=this.renkan.project.get("views").indexOf(this.model),b.viewIndex===this.renkan.project.get("views").length-1&&(b.viewIndex=-1)):b.viewIndex&&delete b.viewIndex,this.renkan.router.navigate("?"+decodeURIComponent(a.param(b)),{trigger:!1,replace:!0})}},destroy:function(a){this._super("destroy"),this.showNodes(!1)}}).value(),f}),"function"==typeof require.config&&require.config({paths:{jquery:"../lib/jquery/jquery",underscore:"../lib/lodash/lodash",filesaver:"../lib/FileSaver/FileSaver",requtils:"require-utils","jquery-private":"jquery-private","ckeditor-core":"../lib/ckeditor/ckeditor",screenfull:"../lib/screenfull/screenfull-umd"},map:{"*":{jquery:"jquery-private"},"jquery-private":{jquery:"jquery"}},shim:{"ckeditor-core":{exports:"CKEDITOR"}}}),require(["renderer/baserepresentation","renderer/basebutton","renderer/noderepr","renderer/edge","renderer/tempedge","renderer/baseeditor","renderer/nodeeditor","renderer/edgeeditor","renderer/nodebutton","renderer/nodeeditbutton","renderer/noderemovebutton","renderer/nodehidebutton","renderer/nodeshowbutton","renderer/noderevertbutton","renderer/nodelinkbutton","renderer/nodeenlargebutton","renderer/nodeshrinkbutton","renderer/edgeeditbutton","renderer/edgeremovebutton","renderer/edgerevertbutton","renderer/miniframe","renderer/scene","renderer/viewrepr"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){"use strict";var x=window.Rkns;"undefined"==typeof x.Renderer&&(x.Renderer={});var y=x.Renderer;y._BaseRepresentation=a,y._BaseButton=b,y.Node=c,y.Edge=d,y.View=w,y.TempEdge=e,y._BaseEditor=f,y.NodeEditor=g,y.EdgeEditor=h,y._NodeButton=i,y.NodeEditButton=j,y.NodeRemoveButton=k,y.NodeHideButton=l,y.NodeShowButton=m,y.NodeRevertButton=n,y.NodeLinkButton=o,y.NodeEnlargeButton=p,y.NodeShrinkButton=q,y.EdgeEditButton=r,y.EdgeRemoveButton=s,y.EdgeRevertButton=t,y.MiniFrame=u,y.Scene=v,startRenkan()}),define("main-renderer",function(){}),define("jquery-private",["jquery"],function(a){"use strict";return a.noConflict(!0)}); //# sourceMappingURL=renkan.min.js.map \ No newline at end of file diff -r 50f5e8d2c839 -r cac26275af31 server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js.map --- a/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js.map Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js.map Fri Sep 15 14:11:36 2017 +0200 @@ -1,1 +1,1 @@ -{"version":3,"sources":["templates.js","../../js/main.js","../../js/router.js","../../js/dataloader.js","../../js/models.js","../../js/defaults.js","../../js/i18n.js","../../js/full-json.js","../../js/save-once.js","../../js/ldtjson-bin.js","../../js/list-bin.js","../../js/wikipedia-bin.js","paper-renderer.js"],"names":["this","obj","__t","__p","__e","_","escape","print","__j","call","arguments","Array","prototype","join","options","show_edge_tooltip_color","edge","color","uri","title","show_edge_tooltip_uri","short_uri","show_edge_tooltip_nodes","renkan","translate","from_color","shortenText","from_title","to_color","to_title","show_edge_tooltip_creator","has_creator","created_by_color","created_by_title","show_edge_editor_uri","properties","length","each","ontology","label","property","show_edge_editor_style","show_edge_editor_style_color","colorPicker","show_edge_editor_style_dash","dash","show_edge_editor_style_thickness","thickness","show_edge_editor_style_arrow","arrow","show_edge_editor_direction","show_edge_editor_nodes","show_edge_editor_creator","Rkns","Utils","getFullURL","image","description","static_url","url","show_bins","show_editor","show_node_tooltip_color","node","show_node_tooltip_uri","show_node_tooltip_description","show_node_tooltip_image","show_node_tooltip_creator","_id","show_node_editor_title_richtext","show_node_title_style","title_color","title_size","toFixed","show_node_editor_uri","change_types","types","type","charAt","toUpperCase","substring","show_node_editor_description","show_node_editor_description_richtext","show_node_editor_size","size","show_node_editor_style","show_node_editor_style_color","show_node_editor_style_dash","show_node_editor_style_thickness","show_node_editor_image","image_placeholder","clip_path","allow_image_upload","show_node_editor_creator","change_shapes","shapes","shape","show_top_bar","editor_mode","title_editable","project","get","show_user_list","show_user_color","user_color_editable","home_button_url","home_button_title","show_fullscreen_button","show_addnode_button","show_addedge_button","show_export_button","show_save_button","show_open_button","show_bookmarklet","show_search_field","resize","show_zoom","save_view","hide_nodes","root","$","jQuery","pickerColors","__renkans","_BaseBin","_renkan","_opts","find","hide","addClass","appendTo","title_icon_$","_this","attr","href","html","click","destroy","slideDown","resizeBins","refresh","count_$","title_$","main_$","auto_refresh","window","setInterval","detach","Renkan","push","defaults","templates","renkanJST","node_editor_templates","template","types_templates","value","key","property_files","f","getJSON","data","concat","read_only","router","Router","Models","Project","dataloader","DataLoader","Loader","setCurrentUser","user_id","user_name","addUser","current_user","renderer","redrawUsers","container","tabs","search_engines","current_user_list","UsersList","on","pickerClass","_tmpl","map","c","Renderer","Scene","search","_select","_input","_form","_search","_key","Search","getSearchTitle","className","getBgClass","_el","setSearchEngine","submit","val","search_engine","mouseenter","mouseleave","bins","_bin","Bin","elementDropped","_mainDiv","siblings","is","slideUp","_e","_t","_models","where","_model","highlightModel","mouseout","unhighlightAll","e","dragDrop","err","preventDefault","touch","originalEvent","changedTouches","off","canvas_$","offset","w","width","h","height","pageX","left","pageY","top","onMouseMove","div","document","createElement","appendChild","cloneNode","dropData","text/html","innerHTML","onMouseDown","onMouseUp","dataTransfer","setData","lastsearch","lastval","regexpFromTextOrArray","source","tab","render","_text","i18n","language","substr","onStatusChange","listClasses","split","classes","i","_d","outerHeight","css","getUUID4","replace","r","Math","random","v","toString","OriginEnum","o","Object","freeze","NONE","NODE_BUTTON","NODE_DOUBLE_CLICK","NODE_DROP_EXT","NODE_DROP_BIN","EDGE_BUTTON_BAR","EDGE_BUTTON_CIRCLE","getUID","pad","n","Date","ID_AUTO_INCREMENT","ID_BASE","getUTCFullYear","getUTCMonth","getUTCDate","_base","_n","_uidbase","test","img","Image","src","res","inherit","_baseClass","_callbefore","_class","_arg","apply","slice","_init","_initialized","extend","replaceText","makeReplaceFunc","l","k","charsrx","txt","toLowerCase","remrx","j","remsrc","charsub","getSource","inp","removeChars","String","fromCharCode","RegExp","_textOrArray","testrx","replacerx","isempty","_replace","text","_MIN_DRAG_DISTANCE","_NODE_BUTTON_WIDTH","_EDGE_BUTTON_INNER","_EDGE_BUTTON_OUTER","_CLICKMODE_ADDNODE","_CLICKMODE_STARTEDGE","_CLICKMODE_ENDEDGE","_NODE_SIZE_STEP","LN2","_MIN_SCALE","_MAX_SCALE","_MOUSEMOVE_RATE","_DOUBLETAP_DELAY","_DOUBLETAP_DISTANCE","_USER_PLACEHOLDER","default_user_color","_BOOKMARKLET_CODE","_maxlength","drawEditBox","_options","_coords","_path","_xmargin","_selector","tooltip_width","tooltip_padding","rect","getBoundingClientRect","container_rect","bottom","overflow-x","overflow-y","max-height","_height","_isLeft","x","paper","view","center","_left","tooltip_arrow_length","_right","_top","y","tooltip_margin","max","tooltip_arrow_width","min","_bottom","segments","point","add","fillColor","Color","Gradient","tooltip_top_color","tooltip_bottom_color","increaseBrightness","hex","percent","parseInt","g","b","Backbone","routes","","index","parameters","result","forEach","part","item","decodeURIComponent","trigger","converters","from1to2","len","nodes","style","edges","schema_version","dataConverters","convert","schemaVersionFrom","getSchemaVersion","schemaVersionTo","converterName","load","set","validate","guid","RenkanModel","RelationalModel","idAttribute","constructor","id","prepare","addReference","_propName","_list","_default","_element","User","toJSON","Node","relations","HasOne","relatedModel","created_by","position","Edge","from","to","View","isArray","zoom_level","hidden_nodes","RosterUser","blacklist","HasMany","reverseRelation","includeInJSON","_props","_user","findOrCreate","addNode","_node","addEdge","_edge","addView","_view","removeNode","remove","removeEdge","_project","users","views","_item","t","version","initialize","filter","json","clone","attributes","Model","Collection","omit","site_id","model","navigator","userLanguage","popup_editor","editor_panel","manual_save","size_bug_fix","force_resize","allow_double_click","double_click_open_url","simple_click_open_url","zoom_on_scroll","element_delete_delay","autoscale_padding","view_force_autoscale","view_show_hiddennodes","default_index_view","url_parameters","update_url","user_name_editable","show_minimap","minimap_width","minimap_height","minimap_padding","minimap_background_color","minimap_border_color","minimap_highlight_color","minimap_highlight_weight","buttons_background","buttons_label_color","buttons_label_font_size","ghost_opacity","default_dash_array","show_node_circles","clip_node_images","node_images_fill_mode","node_size_base","node_stroke_width","node_stroke_max_width","selected_node_stroke_width","selected_node_stroke_max_width","node_stroke_witdh_scale","node_title_size_min","node_title_size_max","node_title_size_step","node_fill_color","highlighted_node_fill_color","node_title_color","node_label_distance","node_label_max_length","label_untitled_nodes","default","video","edge_stroke_width","edge_stroke_max_width","selected_edge_stroke_width","selected_edge_stroke_max_width","edge_stroke_witdh_scale","edge_label_distance","edge_label_max_length","edge_arrow_length","edge_arrow_width","edge_arrow_max_width","edge_gap_in_bundles","highlighted_edge_color","label_untitled_edges","tooltip_border_color","tooltip_border_width","tooltip_opacity","richtext_editor_config","toolbarGroups","name","groups","removePlugins","show_node_editor_title","uploaded_image_max_kb","fr","Edit Node","Edit Edge","Title:","URI:","Description:","From:","To:","Image URL:","Choose Image File:","Full Screen","Add Node","Add Edge","Save Project","Open Project","Auto-save enabled","Connection lost","Created by:","Zoom In","Zoom Out","Edit","Remove","Cancel deletion","Link to another node","Enlarge","Shrink","Click on the background canvas to add a node","Click on a first node to start the edge","Click on a second node to complete the edge","Wikipedia","Wikipedia in ","French","English","Japanese","Untitled project","Lignes de Temps","Loading, please wait","Edge color:","Dash:","Thickness:","Arrow:","Node color:","Choose color","Change edge direction","Do you really wish to remove node ","Do you really wish to remove edge ","This file is not an image","Image size must be under ","Size:","KB","Choose from vocabulary:","SKOS Documentation properties","has note","has example","has definition","SKOS Semantic relations","has broader","has narrower","has related","Dublin Core Metadata","has contributor","covers","created by","has date","published by","has source","has subject","Dragged resource","Search the Web","Search in Bins","Close bin","Refresh bin","(untitled)","Select contents:","Drag items from this website, drop them in Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.","Shapes available","Circle","Square","Diamond","Hexagone","Ellipse","Star","Cloud","Triangle","Polygon","Zoom Fit","Download Project","Save view","View saved view","Renkan 'Drag-to-Add' bookmarklet","(unknown user)","","Search in graph","Search in ","Show hidden nodes","Show neighbors","Hide","Fullscreen not supported by your browser","Title size:","Title color:","jsonIO","_proj","http_method","_load","loadingStatus","_data","saveStatus","_save","ajax","contentType","JSON","stringify","success","textStatus","jqXHR","_thrSave","throttle","setTimeout","changedAttributes","hasChanged","jsonIOSaveOnClick","_saveWarn","_onLeave","getdata","rx","matches","location","hash","match","beforeSend","_checkLeave","removeClass","save","hasClass","Ldt","ProjectBin","ldt_type","Resclass","console","error","tagTemplate","annotationTemplate","proj_id","project_id","ldt_platform","searchbase","highlight","convertTC","_ms","_res","_totalSeconds","abs","floor","_hours","_minutes","_seconds","_html","_projtitle","meta","count","tags","_tag","_title","htitle","encodedtitle","encodeURIComponent","annotations","_annotation","_description","content","_duration","end","begin","_img","hdescription","start","duration","mediaid","media","annotationid","show","dataType","lang","_q","ResultsBin","segmentTemplate","max_results","highlightrx","objects","_segment","abstract","_begin","start_ts","_end","iri_id","element_id","format","q","limit","ResourceList","resultTemplate","list","trim","_match","langs","en","ja","query","_result","encodeURI","snippet","define","_BaseRepresentation","_renderer","_changeBinding","redraw","change","_removeBinding","removeRepresentation","defer","_selectBinding","select","_unselectBinding","unselect","_super","_func","moveTo","unhighlight","mousedown","mouseup","getUtils","getRenderer","requtils","BaseRepresentation","_BaseButton","_pos","sector","_newTarget","source_representation","cloud_path","builders","circle","getShape","Path","getImageShape","radius","rectangle","Rectangle","ellipse","polygon","RegularPolygon","diamond","d","SQRT2","rotate","star","cloud","path","scale","triangle","svg","ShapeBuilder","NodeRepr","node_layer","activate","buildShape","hidden","ghost","strokeWidth","h_ratio","labels_$","normal_buttons","NodeEditButton","NodeRemoveButton","NodeLinkButton","NodeEnlargeButton","NodeShrinkButton","NodeHideButton","NodeShowButton","pending_delete_buttons","NodeRevertButton","all_buttons","active_buttons","last_circle_radius","minimap","minimap_circle","__representation","miniframe","node_group","addChild","_getStrokeWidth","has","_getSelectedStrokeWidth","changed","shapeBuilder","sendToBack","_model_coords","Point","_baseRadius","exp","is_dragging","paper_coords","toPaperCoords","circle_radius","setSectorSize","node_image","subtract","image_delta","multiply","old_act_btn","opacity","dashArray","selected","isEditable","highlighted","clean_title","textContent","innerText","node_style","title-color","text_size","text_color","text_style","line-height","text_node","empty","append","_strokeWidth","_color","_dash","strokeColor","_pc","lastImage","showImage","minipos","toMinimapCoords","miniradius","minisize","Size","fitBounds","dontRedrawEdges","ed","repr","getRepresentationByModel","from_representation","to_representation","_image","image_cache","clipPath","hasClipPath","_clip","baseRadius","centerPoint","instructions","lastCoords","minX","Infinity","minY","maxX","maxY","transformCoords","tabc","relative","newCoords","parseFloat","isY","instr","coords","lineTo","cubicCurveTo","quadraticCurveTo","_raster","Raster","locked","Group","clipped","_circleClip","divide","insertAbove","paperShift","_delta","openEditor","removeRepresentationsOfType","_editor","addRepresentation","draw","clearTimeout","hide_timeout","_uri","showNeighbors","hideButtons","buttons_timeout","undefined","hideNeighbors","hide_delay","delay","indexNode","hiddenNodes","indexOf","splice","textToReplace","hlvalue","throttledPaperDraw","saveCoords","toModelCoords","_event","_isTouch","unselectAll","click_target","edge_layer","bundle","addToBundles","line","arrow_scale","pivot","arrow_angle","EdgeEditButton","EdgeRemoveButton","EdgeRevertButton","minimap_line","_getArrowScale","_opacity","_arrow_scale","_p0a","_p1a","_v","_r","_u","_ortho","_group_pos","getPosition","_p0b","_p1b","_a","angle","_textdelta","_handle","visible","handleIn","handleOut","bounds","_textpos","transform","-moz-transform","-webkit-transform","text_angle","reject","TempEdge","origin","_p0","_p1","end_pos","_c","_hitResult","hitTest","findTarget","_endDrag","_target","_destmodel","_BaseEditor","buttons_layer","editor_block","_pts","range","editor_$","BaseEditor","CKEditor","NodeEditor","readOnlyTemplate","_created_by","_template","_image_placeholder","_size","keys","editorInstance","inline","editorInstanceTitle","closeEditor","cleanEditor","focusManager","blur","onFieldChange","debounce","checkDirty","getData","resetDirty","assign","keyCode","files","FileReader","alert","onload","target","readAsDataURL","focus","_picker","hover","shiftSize","_newsize","shiftThickness","_oldThickness","_newThickness","shiftTitleSize","_oldTitleSize","_newTitleSize","_pickerTitle","step","titlehtml","EdgeEditor","_from_model","_to_model","BaseButton","_NodeButton","sectorInner","lastSectorInner","drawSector","startAngle","endAngle","imageName","NodeButton","delid","delete_list","time","valueOf","confirm","addHiddenNode","unset","_off","_point","addTempEdge","MiniFrame","filesaver","Screenfull","representations","notif_$","setup","totalScroll","mouse_down","selected_target","Layer","redrawActive","background_layer","topleft","bottomRight","cliprectangle","bundles","click_mode","_allowScroll","_originalScale","_zooming","_lastTapX","_lastTapY","_lastTap","icon_cache","imgname","throttledMouseMove","mousemove","mousewheel","onScroll","touchstart","_touches","touches","pow","onDoubleClick","touchmove","_newScale","_scaleRatio","_newOffset","setScale","touchend","onClick","dblclick","dragover","dragenter","dragleave","drop","parse","bindClick","selector","fname","evt","enabled","addEventListener","raw","fullscreenchange","widthAft","heightAft","viewSize","currentWidth","currentHeight","isFullscreen","onResize","newWidth","_width","newHeight","prevHeight","delta","prevWidth","fadeIn","fadeOut","mouseover","_thRedraw","addRepresentations","prop","_thRedrawUsers","history","fixSize","_params","setViewParameters","el","_delay","autoScale","$cpwrapper","$cplist","$this","rxs","_now","findWhere","delete_scheduled","rescaleMinimap","last","_repr","_inR","_outR","_startAngle","_endAngle","_padding","_imgname","_caption","_startRads","PI","_endRads","_startdx","sin","_startdy","cos","_startXIn","_startYIn","_startXOut","_startYOut","_enddx","_enddy","_endXIn","_endYIn","_endXOut","_endYOut","_centerR","_centerRads","_centerX","_centerY","_centerXIn","_centerXOut","_centerYIn","_centerYOut","_textX","_textY","arcTo","closed","PointText","characterStyle","fontSize","paragraphStyle","justification","_visible","_restPos","_grp","_imgdelta","_currentPos","_edgeRepr","_bundle","_er","_dir","savebtn","tip","redrawMiniframe","bottomright","_xx","_yy","_minx","_miny","_maxx","_maxy","_scale","at","_type","RendererType","_collection","userTemplate","allUsers","models","ulistHtml","$userpanel","$name","$cpitems","$colorsquare","$input","parent","background","_representation","_representations","_ratio","ratioH","ratioW","resizeZoom","_from","_origin","_tmpEdge","last_point","updateUrl","_scrolldelta","SQRT1_2","_open_uri_cb","_node_click_open_url","open","bind","defaultDropHandler","newNode","tweetdiv","_svgimgs","_svgpaths","_imgs","_as","fields","drop_enhancer","jsondata","drop_handler","_nodedata","fullScreen","toggle","addNodeBtn","addEdgeBtn","exportProject","projectJSON","projectId","fileNameToSaveAs","space_id","objId","idsMap","projectJSONStr","blob","Blob","isEmptyObject","validViewIndex","viewIndex","viewParams","params","viewsNodes","hideNodes","showNodes","_index","validIndex","foldBins","sizeAft","foldBinsButton","sizeBef","animate","ViewRepr","initialScale","initWithParams","saveView","hideNode","_offset","zoomOut","zoomIn","deltaW","deltaH","force_view","getFragment","round","navigate","param","require","config","paths","jquery","underscore","jquery-private","ckeditor-core","screenfull","*","shim","exports","startRenkan","jq","noConflict"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAA,KAAgB,UAAIA,KAAgB,cAEpCA,KAAgB,UAAE,8BAAgC,SAASC,KAC3DA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,oBACS,OAAdD,IAAM,GAAe,GAAKA,KAC5B,yBACgB,OAAdA,IAAM,GAAe,GAAKA,KAC5B,SAGA,OAAOC,MAGPH,KAAgB,UAAE,sCAAwC,SAASC,KAGnE,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,yDACFW,QAAQC,0BACbZ,KAAO,2DACPC,IAAKY,KAAKC,OACV,oBAEAd,KAAO,kDACFa,KAAKE,MACVf,KAAO,0BACPC,IAAIY,KAAKE,KACT,gCAEAf,KAAO,aACPC,IAAIY,KAAKG,OACT,aACKH,KAAKE,MACVf,KAAO,UAEPA,KAAO,yBACFW,QAAQM,uBAAyBJ,KAAKE,MAC3Cf,KAAO,sDACPC,IAAIY,KAAKE,KACT,qBACAd,IAAKY,KAAKK,WACV,oBAEAlB,KAAO,SACwB,OAA7BD,IAAOc,KAAgB,aAAa,GAAKd,KAC3C,SACKY,QAAQQ,0BACbnB,KAAO,oDACPC,IAAImB,OAAOC,UAAU,UACrB,kEACApB,IAAKY,KAAKS,YACV,uBACArB,IAAKsB,YAAYV,KAAKW,WAAY,KAClC,8DACAvB,IAAImB,OAAOC,UAAU,QACrB,kEACApB,IAAKY,KAAKY,UACV,uBACAxB,IAAKsB,YAAYV,KAAKa,SAAU,KAChC,gBAEA1B,KAAO,KACFW,QAAQgB,2BAA6Bd,KAAKe,cAC/C5B,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,kEACApB,IAAKY,KAAKgB,kBACV,uBACA5B,IAAKsB,YAAYV,KAAKiB,iBAAkB,KACxC,gBAEA9B,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,6BAA+B,SAASC,KAG1D,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,mDACPC,IAAImB,OAAOC,UAAU,cACrB,mCACApB,IAAImB,OAAOC,UAAU,WACrB,iEACApB,IAAIY,KAAKG,OACT,eACKL,QAAQoB,uBACb/B,KAAO,6BACPC,IAAImB,OAAOC,UAAU,SACrB,mEACApB,IAAIY,KAAKE,KACT,+CACAd,IAAIY,KAAKE,KACT,yCACKJ,QAAQqB,WAAWC,SACxBjC,KAAO,qCACPC,IAAImB,OAAOC,UAAU,4BACrB,8EACCnB,EAAEgC,KAAKvB,QAAQqB,WAAY,SAASG,GACrCnC,KAAO,qGACPC,IAAKmB,OAAOC,UAAUc,EAASC,QAC/B,wDACClC,EAAEgC,KAAKC,EAASH,WAAY,SAASK,GAAY,GAAItB,GAAMoB,EAAS,YAAcE,EAAStB,GAC5Ff,MAAO,gFACPC,IAAKc,GACL,kCACKA,IAAQF,KAAKE,MAClBf,KAAO,aAEPA,KAAO,kCACPC,IAAKmB,OAAOC,UAAUgB,EAASD,QAC/B,8DAEApC,KAAO,uBAEPA,KAAO,4CAEPA,KAAO,KACFW,QAAQ2B,yBACbtC,KAAO,0CACFW,QAAQ4B,+BACbvC,KAAO,+EACPC,IAAImB,OAAOC,UAAU,gBACrB,2OACiE,OAA/DtB,IAAQqB,OAAOoB,YAAY,+BAA2C,GAAKzC,KAC7E,wDACAE,IAAKmB,OAAOC,UAAU,iBACtB,iDAEArB,KAAO,WACFW,QAAQ8B,8BACbzC,KAAO,8EACPC,IAAImB,OAAOC,UAAU,UACrB,oFACApB,IAAKY,KAAK6B,MACV,6BAEA1C,KAAO,WACFW,QAAQgC,mCACb3C,KAAO,qFACPC,IAAImB,OAAOC,UAAU,eACrB,qKACApB,IAAKY,KAAK+B,WACV,iHAEA5C,KAAO,WACFW,QAAQkC,+BACb7C,KAAO,+EACPC,IAAImB,OAAOC,UAAU,WACrB,sFACApB,IAAKY,KAAKiC,OACV,6BAEA9C,KAAO,kBAEPA,KAAO,KACFW,QAAQoC,6BACb/C,KAAO,sDACPC,IAAKmB,OAAOC,UAAU,0BACtB,uBAEArB,KAAO,KACFW,QAAQqC,yBACbhD,KAAO,oDACPC,IAAImB,OAAOC,UAAU,UACrB,kEACApB,IAAIY,KAAKS,YACT,uBACArB,IAAKsB,YAAYV,KAAKW,WAAY,KAClC,8DACAvB,IAAImB,OAAOC,UAAU,QACrB,wGACApB,IAAKsB,YAAYV,KAAKa,SAAU,KAChC,gBAEA1B,KAAO,KACFW,QAAQsC,0BAA4BpC,KAAKe,cAC9C5B,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,mHACApB,IAAKsB,YAAYV,KAAKiB,iBAAkB,KACxC,gBAEA9B,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,iDAAmD,SAASC,KAC9EA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,6DACPC,IAAKiD,KAAKC,MAAMC,WAAWC,QAC3B,qBAC2B,OAAzBtD,IAAM,cAA0B,GAAKA,KACvC,iCACsB,OAApBA,IAAM,SAAqB,GAAKA,KAClC,SAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,sBACAE,IAAIe,OACJ,uBACAf,IAAIqD,aACJ,uDACoB,OAAlBvD,IAAM,OAAmB,GAAKA,KAChC,kBACqB,OAAnBA,IAAM,QAAoB,GAAKA,KACjC,kBAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,wBACoB,OAAlBA,IAAM,OAAmB,GAAKA,KAChC,WACkB,OAAhBA,IAAM,KAAiB,GAAKA,KAC9B,gBACuB,OAArBA,IAAM,UAAsB,GAAKA,KACnC,iDAGA,OAAOC,MAGPH,KAAgB,UAAE,8CAAgD,SAASC,KAC3EA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,6DACPC,IAAKiD,KAAKC,MAAMC,WAAWC,QAC3B,qBAC2B,OAAzBtD,IAAM,cAA0B,GAAKA,KACvC,iCACsB,OAApBA,IAAM,SAAqB,GAAKA,KAClC,SAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,sBACAE,IAAIe,OACJ,uBACAf,IAAIqD,aACJ,uDACoB,OAAlBvD,IAAM,OAAmB,GAAKA,KAChC,kBACqB,OAAnBA,IAAM,QAAoB,GAAKA,KACjC,kBAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,wBACoB,OAAlBA,IAAM,OAAmB,GAAKA,KAChC,WACkB,OAAhBA,IAAM,KAAiB,GAAKA,KAC9B,gBACuB,OAArBA,IAAM,UAAsB,GAAKA,KACnC,iDAGA,OAAOC,MAGPH,KAAgB,UAAE,0CAA4C,SAASC,KACvEA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,6DACPC,IAAKiD,KAAKC,MAAMC,WAAWG,WAAW,oBACtC,qBAC2B,OAAzBxD,IAAM,cAA0B,GAAKA,KACvC,yCAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,gCACAE,IAAIe,OACJ,6BACAf,IAAIe,OACJ,iDACAf,IAAIsD,YACJ,iCACqB,OAAnBxD,IAAM,QAAoB,GAAKA,KACjC,kDAGA,OAAOC,MAGPH,KAAgB,UAAE,2BAA6B,SAASC,KAGxD,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,gFACPC,IAAIuD,KACJ,iBACAvD,IAAIe,OACJ,4BACAf,IAAIqD,aACJ,UAEAtD,KADKqD,MACE,yBACPpD,IAAKiD,KAAKC,MAAMC,WAAWC,QAC3B,UAEO,gCAEPrD,KAAO,MACFqD,QACLrD,KAAO,iDACPC,IAAIoD,OACJ,UAEArD,KAAO,6CACFwD,MACLxD,KAAO,sBACPC,IAAIuD,KACJ,4BAEAxD,KAAO,UACc,OAAnBD,IAAM,QAAoB,GAAKA,KACjC,SACKyD,MACLxD,KAAO,QAEPA,KAAO,oBACFsD,cACLtD,KAAO,qDACoB,OAAzBD,IAAM,cAA0B,GAAKA,KACvC,cAEAC,KAAO,SACFqD,QACLrD,KAAO,oDAEPA,KAAO,WAGP,OAAOA,MAGPH,KAAgB,UAAE,uBAAyB,SAASC,KAGpD,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAEDa,QAAQ8C,YACbzD,KAAO,0GACPC,IAAKoB,UAAU,qBACf,2LACApB,IAAKoB,UAAU,mBACf,0TACApB,IAAKoB,UAAU,mBACf,iNACApB,IAAKoB,UAAU,mBACf,2JACApB,IAAKoB,UAAU,mBACf,kGAEArB,KAAO,IACFW,QAAQ+C,cACb1D,KAAO,yCAEPA,KADKW,QAAQ8C,UACN,QAEA,OAEPzD,KAAO,cAEPA,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,sCAAwC,SAASC,KAGnE,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,yDACFW,QAAQgD,0BACb3D,KAAO,2DACPC,IAAI2D,KAAK9C,OACT,oBAEAd,KAAO,kDACF4D,KAAK7C,MACVf,KAAO,0BACPC,IAAI2D,KAAK7C,KACT,gCAEAf,KAAO,cACkB,OAAvBD,IAAO6D,KAAU,OAAa,GAAK7D,KACrC,aACK6D,KAAK7C,MACVf,KAAO,QAEPA,KAAO,yBACF4D,KAAK7C,KAAOJ,QAAQkD,wBACzB7D,KAAO,sDACPC,IAAI2D,KAAK7C,KACT,qBACAd,IAAI2D,KAAK1C,WACT,oBAEAlB,KAAO,IACFW,QAAQmD,gCACb9D,KAAO,4CACwB,OAA7BD,IAAO6D,KAAgB,aAAa,GAAK7D,KAC3C,UAEAC,KAAO,IACF4D,KAAKP,OAAS1C,QAAQoD,0BAC3B/D,KAAO,iDACPC,IAAI2D,KAAKP,OACT,UAEArD,KAAO,IACF4D,KAAKhC,aAAejB,QAAQqD,4BACjChE,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,kEACApB,IAAI2D,KAAK/B,kBACT,uBACA5B,IAAKsB,YAAYqC,KAAK9B,iBAAkB,KACxC,gBAEA9B,KAAO,yBACPC,IAAI2D,KAAKK,KACT,KACAhE,IAAImB,OAAOC,UAAU,qBACrB,QAGA,OAAOrB,MAGPH,KAAgB,UAAE,mCAAqC,SAASC,KAGhE,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,yDACFW,QAAQgD,0BACb3D,KAAO,2DACPC,IAAI2D,KAAK9C,OACT,oBAEAd,KAAO,kDACF4D,KAAK7C,MACVf,KAAO,0BACPC,IAAI2D,KAAK7C,KACT,gCAEAf,KAAO,cACkB,OAAvBD,IAAO6D,KAAU,OAAa,GAAK7D,KACrC,aACK6D,KAAK7C,MACVf,KAAO,QAEPA,KAAO,yBACF4D,KAAK7C,KAAOJ,QAAQkD,wBACzB7D,KAAO,0EACPC,IAAI2D,KAAK7C,KACT,yCAEAf,KAAO,2BACPC,IAAI2D,KAAKK,KACT,KACAhE,IAAImB,OAAOC,UAAU,qBACrB,QAGA,OAAOrB,MAGPH,KAAgB,UAAE,6BAA+B,SAASC,KAG1D,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAGNE,KAAO,qDACPC,IAAImB,OAAOC,UAAU,cACrB,mCACApB,IAAImB,OAAOC,UAAU,WACrB,iBAEArB,KADKW,QAAQuD,gCACN,iFACPjE,IAAI2D,KAAKK,KACT,OACyB,OAAvBlE,IAAO6D,KAAU,OAAa,GAAK7D,KACrC,eAEO,6DACPE,IAAI2D,KAAK5C,OACT,aAEAhB,KAAO,WACFW,QAAQwD,wBACbnE,KAAO,qJACPC,IAAImB,OAAOC,UAAU,iBACrB,uEACApB,IAAI2D,KAAKQ,aACT,kGACkE,OAAhErE,IAAQqB,OAAOoB,YAAY,gCAA4C,GAAKzC,KAC9E,6GACAE,IAAImB,OAAOC,UAAU,gBACrB,2KACApB,IAAI2D,KAAKS,WAAWC,QAAQ,IAC5B,4HAEAtE,KAAO,IACFW,QAAQ4D,uBACbvE,KAAO,6BACPC,IAAImB,OAAOC,UAAU,SACrB,mEACApB,IAAI2D,KAAK7C,KACT,+CACAd,IAAI2D,KAAK7C,KACT,sCAEAf,KAAO,IACFW,QAAQ6D,eACbxE,KAAO,6BACPC,IAAImB,OAAOC,UAAU,oBACrB,+DACCnB,EAAEgC,KAAKuC,MAAO,SAASC,GACxB1E,KAAO,oEACPC,IAAKyE,GACL,IACKd,KAAKc,OAASA,IACnB1E,KAAO,aAEPA,KAAO,sBACPC,IAAKmB,OAAOC,UAAUqD,EAAKC,OAAO,GAAGC,cAAgBF,EAAKG,UAAU,KACpE,wCAEA7E,KAAO,mCAEPA,KAAO,IACFW,QAAQmE,+BACb9E,KAAO,6BACPC,IAAImB,OAAOC,UAAU,iBACrB,qBAEArB,KADKW,QAAQoE,sCACN,iGACP9E,IAAI2D,KAAKK,KACT,MAC+B,OAA7BlE,IAAO6D,KAAgB,aAAa,GAAK7D,KAC3C,mBAEO,wDACwB,OAA7BA,IAAO6D,KAAgB,aAAa,GAAK7D,KAC3C,wBAEAC,KAAO,gBAEPA,KAAO,IACFW,QAAQqE,wBACbhF,KAAO,oDACPC,IAAImB,OAAOC,UAAU,UACrB,uJACApB,IAAI2D,KAAKqB,MACT,gGAEAjF,KAAO,IACFW,QAAQuE,yBACblF,KAAO,0CACFW,QAAQwE,+BACbnF,KAAO,yFACPC,IAAImB,OAAOC,UAAU,gBACrB,0HACApB,IAAI2D,KAAK9C,OACT,kGACiE,OAA/Df,IAAQqB,OAAOoB,YAAY,+BAA2C,GAAKzC,KAC7E,wDACAE,IAAKmB,OAAOC,UAAU,iBACtB,iDAEArB,KAAO,WACFW,QAAQyE,8BACbpF,KAAO,8EACPC,IAAImB,OAAOC,UAAU,UACrB,oFACApB,IAAK2D,KAAKlB,MACV,6BAEA1C,KAAO,WACFW,QAAQ0E,mCACbrF,KAAO,qFACPC,IAAImB,OAAOC,UAAU,eACrB,qKACApB,IAAI2D,KAAKhB,WACT,iHAEA5C,KAAO,kBAEPA,KAAO,IACFW,QAAQ2E,yBACbtF,KAAO,wGACPC,IAAI2D,KAAKP,OAASO,KAAK2B,mBACvB,qBACK3B,KAAK4B,YACVxF,KAAO,yNACPC,IAAK2D,KAAK4B,WACV,8CAEAxF,KAAO,yDACPC,IAAImB,OAAOC,UAAU,eACrB,iJACApB,IAAI2D,KAAKP,OACT,mCACK1C,QAAQ8E,qBACbzF,KAAO,6BACPC,IAAImB,OAAOC,UAAU,uBACrB,oGAIArB,KAAO,IACFW,QAAQ+E,0BAA4B9B,KAAKhC,cAC9C5B,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,kEACApB,IAAI2D,KAAK/B,kBACT,uBACA5B,IAAKsB,YAAYqC,KAAK9B,iBAAkB,KACxC,gBAEA9B,KAAO,IACFW,QAAQgF,gBACb3F,KAAO,6BACPC,IAAImB,OAAOC,UAAU,qBACrB,gEACCnB,EAAEgC,KAAK0D,OAAQ,SAASC,GACzB7F,KAAO,oEACPC,IAAK4F,GACL,IACKjC,KAAKiC,QAAUA,IACpB7F,KAAO,aAEPA,KAAO,sBACPC,IAAKmB,OAAOC,UAAUwE,EAAMlB,OAAO,GAAGC,cAAgBiB,EAAMhB,UAAU,KACtE,wCAEA7E,KAAO,mCAEPA,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,wBAA0B,SAASC,KAGrD,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAEDa,QAAQmF,eACb9F,KAAO,8EAMPA,KALMW,QAAQoF,aAAgBpF,QAAQqF,eAK/B,+DACP/F,IAAKgG,QAAQC,IAAI,UAAY,IAC7B,kBACAjG,IAAIoB,UAAU,qBACd,iBARO,2DACPpB,IAAKgG,QAAQC,IAAI,UAAY7E,UAAU,qBACvC,gCAQArB,KAAO,aACFW,QAAQwF,iBACbnG,KAAO,2GACFW,QAAQyF,kBACbpG,KAAO,qKACFW,QAAQ0F,sBACbrG,KAAO,0GAEPA,KAAO,sEACFW,QAAQ0F,qBAAuBjG,MAAMoC,YAAY,+BACtDxC,KAAO,0DAEPA,KAAO,4LAEPA,KAAO,aACFW,QAAQ2F,kBACbtG,KAAO,uHACPC,IAAKU,QAAQ2F,iBACb,8IACArG,IAAKoB,UAAUV,QAAQ4F,oBACvB,oFAEAvG,KAAO,aACFW,QAAQ6F,yBACbxG,KAAO,kQACPC,IAAIoB,UAAU,gBACd,sFAEArB,KAAO,aACFW,QAAQoF,aACb/F,KAAO,iBACFW,QAAQ8F,sBACbzG,KAAO,mRACPC,IAAIoB,UAAU,aACd,sGAEArB,KAAO,iBACFW,QAAQ+F,sBACb1G,KAAO,mRACPC,IAAIoB,UAAU,aACd,sGAEArB,KAAO,iBACFW,QAAQgG,qBACb3G,KAAO,kRACPC,IAAIoB,UAAU,qBACd,sGAEArB,KAAO,iBACFW,QAAQiG,mBACb5G,KAAO,2TAEPA,KAAO,iBACFW,QAAQkG,mBACb7G,KAAO,gRACPC,IAAIoB,UAAU,iBACd,sGAEArB,KAAO,iBACFW,QAAQmG,mBACb9G,KAAO,8RACPC,IAAIoB,UAAU,qCACd,6JAEArB,KAAO,eAEPA,KAAO,iBACFW,QAAQgG,qBACb3G,KAAO,kRACPC,IAAIoB,UAAU,qBACd,+JAEArB,KAAO,cAEPA,KAAO,aACFW,QAAQoG,oBACb/G,KAAO,+IACPC,IAAKoB,UAAU,oBACf,4FAEArB,KAAO,kBAEPA,KAAO,iCACDW,QAAQmF,eACd9F,KAAO,0BAEPA,KAAO,wEACFW,QAAQqG,SACbhH,KAAO,eAEPA,KAAO,+FACFW,QAAQ8C,YACbzD,KAAO,mEAEPA,KAAO,aACFW,QAAQsG,YACbjH,KAAO,6FACPC,IAAIoB,UAAU,YACd,4DACApB,IAAIoB,UAAU,aACd,4DACApB,IAAIoB,UAAU,aACd,6BACKV,QAAQoF,aAAepF,QAAQuG,YACpClH,KAAO,yDACPC,IAAIoB,UAAU,cACd,8BAEArB,KAAO,qBACFW,QAAQuG,YACblH,KAAO,6DACPC,IAAIoB,UAAU,oBACd,iCACKV,QAAQwG,aACbnH,KAAO,iEACPC,IAAIoB,UAAU,sBACd,kCAEArB,KAAO,6BAEPA,KAAO,kCAEPA,KAAO,wBAGP,OAAOA,MAGPH,KAAgB,UAAE,yBAA2B,SAASC,KACtDA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,eACmB,OAAxBD,IAAM,WAAyB,GAAKA,KACtC,gBACoB,OAAlBA,IAAM,KAAmB,GAAKA,KAChC,MACsB,OAApBA,IAAM,OAAqB,GAAKA,KAClC,OAGA,OAAOC,MAGPH,KAAgB,UAAE,+CAAiD,SAASC,KAC5EA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,+EACPC,IAAIuD,KACJ,4BACAvD,IAAIe,OACJ,4BACAf,IAAIqD,aACJ,sBACArD,IAAKiD,KAAKC,MAAMC,WAAYG,WAAa,sBACzC,iDACAtD,IAAIsD,YACJ,8EACAtD,IAAIuD,KACJ,sBACqB,OAAnBzD,IAAM,QAAoB,GAAKA,KACjC,yDAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,eAGA,OAAOC,MCz0BP,SAAUoH,GAEN,YAEyB,iBAAdA,GAAKlE,OACZkE,EAAKlE,QAGT,IAAIA,GAAOkE,EAAKlE,KACZmE,EAAInE,EAAKmE,EAAID,EAAKE,OAClBpH,EAAIgD,EAAKhD,EAAIkH,EAAKlH,CAEtBgD,GAAKqE,cAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC9F,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAGjFrE,EAAKsE,YAEL,IAAIC,GAAWvE,EAAKuE,SAAW,SAASC,EAASC,GAC7C,GAAuB,mBAAZD,GAAyB,CAChC7H,KAAKuB,OAASsG,EACd7H,KAAKuB,OAAOiG,EAAEO,KAAK,gBAAgBC,OACnChI,KAAKwH,EAAInE,EAAKmE,EAAE,QACXS,SAAS,UACTC,SAASL,EAAQL,EAAEO,KAAK,iBAC7B/H,KAAKmI,aAAe9E,EAAKmE,EAAE,UACtBS,SAAS,qBACTC,SAASlI,KAAKwH,EAEnB,IAAIY,GAAQpI,IAEZqD,GAAKmE,EAAE,OACFa,MACGC,KAAM,IACNnH,MAAO0G,EAAQrG,UAAU,eAE5ByG,SAAS,gBACTM,KAAK,WACLL,SAASlI,KAAKwH,GACdgB,MAAM,WAMH,MALAJ,GAAMK,UACDZ,EAAQL,EAAEO,KAAK,wBAAwB3F,QACxCyF,EAAQL,EAAEO,KAAK,qBAAqBW,YAExCb,EAAQc,cACD,IAEftF,EAAKmE,EAAE,OACFa,MACGC,KAAM,IACNnH,MAAO0G,EAAQrG,UAAU,iBAE5ByG,SAAS,kBACTC,SAASlI,KAAKwH,GACdgB,MAAM,WAEH,MADAJ,GAAMQ,WACC,IAEf5I,KAAK6I,QAAUxF,EAAKmE,EAAE,SACjBS,SAAS,gBACTC,SAASlI,KAAKwH,GACnBxH,KAAK8I,QAAUzF,EAAKmE,EAAE,QACjBS,SAAS,gBACTC,SAASlI,KAAKwH,GACnBxH,KAAK+I,OAAS1F,EAAKmE,EAAE,SAChBS,SAAS,eACTC,SAASlI,KAAKwH,GACde,KAAK,8BAAgCV,EAAQrG,UAAU,wBAA0B,SACtFxB,KAAK8I,QAAQP,KAAKT,EAAM3G,OAAS,aACjCnB,KAAKuB,OAAOoH,aAERb,EAAMkB,cACNC,OAAOC,YAAY,WACfd,EAAMQ,WACPd,EAAMkB,eAKrBpB,GAAShH,UAAU6H,QAAU,WACzBzI,KAAKwH,EAAE2B,SACPnJ,KAAKuB,OAAOoH,aAKhB,IAAIS,GAAS/F,EAAK+F,OAAS,SAAStB,GAChC,GAAIM,GAAQpI,IAEZqD,GAAKsE,UAAU0B,KAAKrJ,MAEpBA,KAAKc,QAAUT,EAAEiJ,SAASxB,EAAOzE,EAAKiG,UAClCC,UAAWlJ,EAAEiJ,SAASxB,EAAMyB,UAAWC,YAAcA,UACrDC,sBAAuBpJ,EAAEiJ,SAASxB,EAAM2B,sBAAuBpG,EAAKiG,SAASG,yBAEjFzJ,KAAK0J,SAAW1J,KAAKc,QAAQyI,UAAU,sBAEvC,IAAII,KA6DJ,IA5DAtJ,EAAEgC,KAAKrC,KAAKc,QAAQ2I,sBAAuB,SAASG,EAAOC,GACvDF,EAAgBE,GAAOzB,EAAMtH,QAAQyI,UAAUK,SACxCxB,GAAMtH,QAAQyI,UAAUK,KAEnC5J,KAAKc,QAAQ2I,sBAAwBE,EAErCtJ,EAAEgC,KAAKrC,KAAKc,QAAQgJ,eAAgB,SAASC,GACzC1G,EAAKmE,EAAEwC,QAAQD,EAAG,SAASE,GACvB7B,EAAMtH,QAAQqB,WAAaiG,EAAMtH,QAAQqB,WAAW+H,OAAOD,OAInEjK,KAAKmK,UAAYnK,KAAKc,QAAQqJ,YAAcnK,KAAKc,QAAQoF,YAEzDlG,KAAKoK,OAAS,GAAI/G,GAAKgH,OAEvBrK,KAAKoG,QAAU,GAAI/C,GAAKiH,OAAOC,QAC/BvK,KAAKwK,WAAa,GAAInH,GAAKoH,WAAWC,OAAO1K,KAAKoG,QAASpG,KAAKc,SAEhEd,KAAK2K,eAAiB,SAASC,EAASC,GACpC7K,KAAKoG,QAAQ0E,SACT1G,IAAKwG,EACLzJ,MAAO0J,IAEX7K,KAAK+K,aAAeH,EACpB5K,KAAKgL,SAASC,eAGkB,mBAAzBjL,MAAKc,QAAQ8J,UACpB5K,KAAK+K,aAAe/K,KAAKc,QAAQ8J,SAErC5K,KAAKwH,EAAInE,EAAKmE,EAAE,IAAMxH,KAAKc,QAAQoK,WACnClL,KAAKwH,EACAS,SAAS,WACTM,KAAKvI,KAAK0J,SAAS1J,OAExBA,KAAKmL,QACLnL,KAAKoL,kBAELpL,KAAKqL,kBAAoB,GAAIhI,GAAKiH,OAAOgB;AAEzCtL,KAAKqL,kBAAkBE,GAAG,aAAc,WAChCvL,KAAKgL,UACLhL,KAAKgL,SAASC,gBAItBjL,KAAK2C,YAAc,SAAS6I,GACxB,GAAIC,GAAQrD,EAAMtH,QAAQyI,UAAU,6BACpC,OAAO,kCAAkCiC,EAAY,KAAOnI,EAAKqE,aAAagE,IAAI,SAASC,GACvF,MAAOF,IACHE,EAAGA,MAER9K,KAAK,IAAM,SAGdb,KAAKc,QAAQ+C,cACb7D,KAAKgL,SAAW,GAAI3H,GAAKuI,SAASC,MAAM7L,OAGvCA,KAAKc,QAAQgL,OAAO1J,OAElB,CACH,GAAIqJ,GAAQrD,EAAMtH,QAAQyI,UAAU,yBAChCwC,EAAU/L,KAAKwH,EAAEO,KAAK,mBACtBiE,EAAShM,KAAKwH,EAAEO,KAAK,wBACrBkE,EAAQjM,KAAKwH,EAAEO,KAAK,sBACxB1H,GAAEgC,KAAKrC,KAAKc,QAAQgL,OAAQ,SAASI,EAASC,GACtC9I,EAAK6I,EAAQrH,OAASxB,EAAK6I,EAAQrH,MAAMuH,QACzChE,EAAMgD,eAAe/B,KAAK,GAAIhG,GAAK6I,EAAQrH,MAAMuH,OAAOhE,EAAO8D,MAGvEH,EAAQxD,KACJlI,EAAEL,KAAKoL,gBAAgBM,IAAI,SAASQ,EAASC,GACzC,MAAOV,IACH5B,IAAKsC,EACLhL,MAAO+K,EAAQG,iBACfC,UAAWJ,EAAQK,iBAExB1L,KAAK,KAEZkL,EAAQhE,KAAK,MAAMS,MAAM,WACrB,GAAIgE,GAAMnJ,EAAKmE,EAAExH,KACjBoI,GAAMqE,gBAAgBD,EAAInE,KAAK,aAC/B4D,EAAMS,WAEVT,EAAMS,OAAO,WACT,GAAIV,EAAOW,MAAO,CACd,GAAIT,GAAU9D,EAAMwE,aACpBV,GAAQJ,OAAOE,EAAOW,OAE1B,OAAO,IAEX3M,KAAKwH,EAAEO,KAAK,sBAAsB8E,WAC9B,WACId,EAAQrD,cAGhB1I,KAAKwH,EAAEO,KAAK,qBAAqB+E,WAC7B,WACIf,EAAQ/D,SAGhBhI,KAAKyM,gBAAgB,OA1CrBzM,MAAKwH,EAAEO,KAAK,uBAAuBoB,QA4CvC9I,GAAEgC,KAAKrC,KAAKc,QAAQiM,KAAM,SAASC,GAC3B3J,EAAK2J,EAAKnI,OAASxB,EAAK2J,EAAKnI,MAAMoI,KACnC7E,EAAM+C,KAAK9B,KAAK,GAAIhG,GAAK2J,EAAKnI,MAAMoI,IAAI7E,EAAO4E,KAIvD,IAAIE,IAAiB,CAErBlN,MAAKwH,EAAEO,KAAK,YACPwD,GAAG,QAAS,mCAAoC,WAC7C,GAAI4B,GAAW9J,EAAKmE,EAAExH,MAAMoN,SAAS,eACjCD,GAASE,GAAG,aACZjF,EAAMZ,EAAEO,KAAK,gBAAgBuF,UAC7BH,EAASzE,eAIjB1I,KAAKc,QAAQ+C,aAEb7D,KAAKwH,EAAEO,KAAK,YAAYwD,GAAG,YAAa,eAAgB,SAASgC,GAC7D,GAAIC,GAAKnK,EAAKmE,EAAExH,KAChB,IAAIwN,GAAMhG,EAAEgG,GAAInF,KAAK,YAAa,CAC9B,GAAIoF,GAAUrF,EAAMhC,QAAQC,IAAI,SAASqH,OACrCxM,IAAKsG,EAAEgG,GAAInF,KAAK,aAEpBhI,GAAEgC,KAAKoL,EAAS,SAASE,GACrBvF,EAAM4C,SAAS4C,eAAeD,QAGvCE,SAAS,WACRzF,EAAM4C,SAAS8C,mBAChBvC,GAAG,YAAa,eAAgB,SAASwC,GACxC,IACI/N,KAAKgO,WACP,MAAOC,OACV1C,GAAG,aAAc,eAAgB,SAASwC,GACzCb,GAAiB,IAClB3B,GAAG,YAAa,eAAgB,SAASwC,GACxCA,EAAEG,gBACF,IAAIC,GAAQJ,EAAEK,cAAcC,eAAe,GACvCC,EAAMlG,EAAM4C,SAASuD,SAASC,SAC9BC,EAAIrG,EAAM4C,SAASuD,SAASG,QAC5BC,EAAIvG,EAAM4C,SAASuD,SAASK,QAChC,IAAIT,EAAMU,OAASP,EAAIQ,MAAQX,EAAMU,MAASP,EAAIQ,KAAOL,GAAMN,EAAMY,OAAST,EAAIU,KAAOb,EAAMY,MAAST,EAAIU,IAAML,EAC9G,GAAIzB,EACA9E,EAAM4C,SAASiE,YAAYd,GAAO,OAC/B,CACHjB,GAAiB,CACjB,IAAIgC,GAAMC,SAASC,cAAc,MACjCF,GAAIG,YAAYrP,KAAKsP,WAAU,IAC/BlH,EAAM4C,SAASuE,UACXC,YAAaN,EAAIO,WAClBtB,GACH/F,EAAM4C,SAAS0E,YAAYvB,GAAO,MAG3C5C,GAAG,WAAY,eAAgB,SAASwC,GACnCb,GACA9E,EAAM4C,SAAS2E,UAAU5B,EAAEK,cAAcC,eAAe,IAAI,GAEhEnB,GAAiB,IAClB3B,GAAG,YAAa,eAAgB,SAASwC,GACxC,GAAImB,GAAMC,SAASC,cAAc,MACjCF,GAAIG,YAAYrP,KAAKsP,WAAU,GAC/B,KACIvB,EAAEK,cAAcwB,aAAaC,QAAQ,YAAaX,EAAIO,WACxD,MAAOxB,GACLF,EAAEK,cAAcwB,aAAaC,QAAQ,OAAQX,EAAIO,cAM7DpM,EAAKmE,EAAEyB,QAAQ9B,OAAO,WAClBiB,EAAMO,cAGV,IAAImH,IAAa,EACbC,EAAU,EAEd/P,MAAKwH,EAAEO,KAAK,yBAAyBwD,GAAG,2BAA4B,WAChE,GAAIoB,GAAMtJ,EAAKmE,EAAExH,MAAM2M,KACvB,IAAIA,IAAQoD,EAAZ,CAGA,GAAIjE,GAASzI,EAAKC,MAAM0M,sBAAsBrD,EAAIvK,OAAS,EAAIuK,EAAM,KACjEb,GAAOmE,SAAWH,IAGtBA,EAAahE,EAAOmE,OACpB5P,EAAEgC,KAAK+F,EAAM+C,KAAM,SAAS+E,GACxBA,EAAIC,OAAOrE,SAInB9L,KAAKwH,EAAEO,KAAK,wBAAwB2E,OAAO,WACvC,OAAO,IAIftD,GAAOxI,UAAUY,UAAY,SAAS4O,GAClC,MAAI/M,GAAKgN,KAAKrQ,KAAKc,QAAQwP,WAAajN,EAAKgN,KAAKrQ,KAAKc,QAAQwP,UAAUF,GAC9D/M,EAAKgN,KAAKrQ,KAAKc,QAAQwP,UAAUF,GAExCpQ,KAAKc,QAAQwP,SAASlO,OAAS,GAAKiB,EAAKgN,KAAKrQ,KAAKc,QAAQwP,SAASC,OAAO,EAAG,KAAOlN,EAAKgN,KAAKrQ,KAAKc,QAAQwP,SAASC,OAAO,EAAG,IAAIH,GAC5H/M,EAAKgN,KAAKrQ,KAAKc,QAAQwP,SAASC,OAAO,EAAG,IAAIH,GAElDA,GAGXhH,EAAOxI,UAAU4P,eAAiB,WAC9BxQ,KAAKgL,SAASwF,kBAGlBpH,EAAOxI,UAAU6L,gBAAkB,SAASN,GACxCnM,KAAK4M,cAAgB5M,KAAKoL,eAAee,GACzCnM,KAAKwH,EAAEO,KAAK,sBAAsBM,KAAK,QAAS,qBAAuBrI,KAAK4M,cAAcL,aAG1F,KAAK,GAFDkE,GAAczQ,KAAK4M,cAAcL,aAAamE,MAAM,KACpDC,EAAU,GACLC,EAAI,EAAGA,EAAIH,EAAYrO,OAAQwO,IACpCD,GAAW,IAAMF,EAAYG,EAEjC5Q,MAAKwH,EAAEO,KAAK,wCAAwCM,KAAK,cAAerI,KAAKwB,UAAU,cAAgBxB,KAAKwH,EAAEO,KAAK,mBAAqB4I,GAASpI,SAGrJa,EAAOxI,UAAU+H,WAAa,WAC1B,GAAIkI,IAAM7Q,KAAKwH,EAAEO,KAAK,iBAAiB+I,aACvC9Q,MAAKwH,EAAEO,KAAK,yBAAyB1F,KAAK,WACtCwO,GAAMxN,EAAKmE,EAAExH,MAAM8Q,gBAEvB9Q,KAAKwH,EAAEO,KAAK,gBAAgBgJ,KACxBnC,OAAQ5O,KAAKwH,EAAEO,KAAK,YAAY6G,SAAWiC,IAKnD,IAAIG,GAAW,WACX,MAAO,uCAAuCC,QAAQ,QAAS,SAAStF,GACpE,GAAIuF,GAAoB,GAAhBC,KAAKC,SAAgB,EACzBC,EAAU,MAAN1F,EAAYuF,EAAS,EAAJA,EAAU,CACnC,OAAOG,GAAEC,SAAS,MAI1BjO,GAAKC,OAEDiO,WAAY,SAAUC,GAAK,MAAQC,QAAOC,QAAUD,OAAOC,OAAOF,IAAOA,IACrEG,KAAM,EACNC,YAAa,EACbC,kBAAmB,EACnBC,cAAe,EACfC,cAAe,EACfC,gBAAiB,IACjBC,mBAAoB,MAGxBjB,SAAUA,EACVkB,OAAQ,WACJ,QAASC,GAAIC,GACT,MAAOA,GAAI,GAAK,IAAMA,EAAIA,EAE9B,GAAIvB,GAAK,GAAIwB,MACTC,EAAoB,EACpBC,EAAU1B,EAAG2B,iBAAmB,IAChCL,EAAItB,EAAG4B,cAAgB,GAAK,IAC5BN,EAAItB,EAAG6B,cAAgB,IACvB1B,GACJ,OAAO,UAAS2B,GAGZ,IAFA,GAAIC,MAAQN,GAAmBhB,SAAS,IACpCuB,EAA6B,mBAAVF,GAAwB,GAAKA,EAAQ,IACrDC,EAAGxQ,OAAS,GACfwQ,EAAK,IAAMA,CAEf,OAAOC,GAAWN,EAAU,IAAMK,MAG1CrP,WAAY,SAASI,GAEjB,GAAoB,mBAAV,IAAgC,MAAPA,EAC/B,MAAO,EAEX,IAAI,cAAcmP,KAAKnP,GACnB,MAAOA,EAEX,IAAIoP,GAAM,GAAIC,MACdD,GAAIE,IAAMtP,CACV,IAAIuP,GAAMH,EAAIE,GAEd,OADAF,GAAIE,IAAM,KACHC,GAGXC,QAAS,SAASC,EAAYC,GAE1B,GAAIC,GAAS,SAASC,GACS,kBAAhBF,IACPA,EAAYG,MAAMxT,KAAMW,MAAMC,UAAU6S,MAAMhT,KAAKC,UAAW,IAElE0S,EAAWI,MAAMxT,KAAMW,MAAMC,UAAU6S,MAAMhT,KAAKC,UAAW,IACnC,kBAAfV,MAAK0T,OAAyB1T,KAAK2T,eAC1C3T,KAAK0T,MAAMF,MAAMxT,KAAMW,MAAMC,UAAU6S,MAAMhT,KAAKC,UAAW,IAC7DV,KAAK2T,cAAe,GAK5B,OAFAtT,GAAEuT,OAAON,EAAO1S,UAAWwS,EAAWxS,WAE/B0S,GAGXtD,sBAAuB,WAoBnB,QAAS6D,GAAYzD,GAIjB,QAAS0D,GAAgBC,GACrB,MAAO,UAASC,EAAG3C,GACf0C,EAAIA,EAAE9C,QAAQgD,EAAQD,GAAI3C,IAGlC,IAAK,GARD6C,GAAM9D,EAAM+D,cAAclD,QAAQmD,EAAO,IACzCnB,EAAM,GAODoB,EAAI,EAAGA,EAAIH,EAAI9R,OAAQiS,IAAK,CAC7BA,IACApB,GAAOqB,EAAS,IAEpB,IAAIP,GAAIG,EAAIG,EACZhU,GAAEgC,KAAKkS,EAAST,EAAgBC,IAChCd,GAAOc,EAEX,MAAOd,GAGX,QAASuB,GAAUC,GACf,aAAeA,IACX,IAAK,SACD,MAAOZ,GAAYY,EACvB,KAAK,SACD,GAAIxB,GAAM,EAUV,OATA5S,GAAEgC,KAAKoS,EAAK,SAASpD,GACjB,GAAI6B,GAAMsB,EAAUnD,EAChB6B,KACID,IACAA,GAAO,KAEXA,GAAOC,KAGRD,EAEf,MAAO,GAxDX,GAAIsB,IACI,UACA,OACA,UACA,UACA,UACA,UAEJG,GACIC,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAC5H,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAE1FN,EAAS,MAAQI,EAAY7T,KAAK,MAAQ,IAC1CuT,EAAQ,GAAIS,QAAOP,EAAQ,MAC3BL,EAAU5T,EAAEqL,IAAI6I,EAAS,SAAS5I,GAC9B,MAAO,IAAIkJ,QAAOlJ,IA2C1B,OAAO,UAASmJ,GACZ,GAAI7E,GAASuE,EAAUM,EACvB,IAAI7E,EAAQ,CACR,GAAI8E,GAAS,GAAIF,QAAO5E,EAAQ,MAC5B+E,EAAY,GAAIH,QAAO,IAAM5E,EAAS,IAAK,MAC/C,QACIgF,SAAS,EACThF,OAAQA,EACR6C,KAAM,SAAStF,GACX,MAAOuH,GAAOjC,KAAKtF,IAEvByD,QAAS,SAASb,EAAO8E,GACrB,MAAO9E,GAAMa,QAAQ+D,EAAWE,KAIxC,OACID,SAAS,EACThF,OAAQ,GACR6C,KAAM,WACF,OAAO,GAEX7B,QAAS,SAASb,GACd,MAAO+E,YAO3BC,mBAAoB,EAEpBC,mBAAoB,GAEpBC,mBAAoB,EACpBC,mBAAoB,GAEpBC,mBAAoB,EACpBC,qBAAsB,EACtBC,mBAAoB,EAEpBC,gBAAiBxE,KAAKyE,IAAM,EAC5BC,WAAY,IACZC,WAAY,GACZC,gBAAiB,GACjBC,iBAAkB,IAGlBC,oBAAqB,IAErBC,kBAAmB,SAASrO,GACxB,OACI5G,MAAO4G,EAAQ/G,QAAQqV,mBACvBhV,MAAO0G,EAAQrG,UAAU,kBACzB6E,IAAK,SAASgC,GACV,MAAOrI,MAAKqI,KAAS,KAOjC+N,kBAAmB,SAASvO,GACxB,MAAO,sRACHA,EAAQrG,UAAU,qDAAqDyP,QAAQ,KAAM,KACrF,ymCAGRvP,YAAa,SAAS0O,EAAOiG,GACzB,MAAQjG,GAAMhO,OAASiU,EAAcjG,EAAMG,OAAO,EAAG8F,GAAc,IAAOjG,GAI9EkG,YAAa,SAASC,EAAUC,EAASC,EAAOC,EAAUC,EAAW9O,GACjE8O,EAAU5F,KACNrC,MAAQ6H,EAASK,cAAgB,EAAIL,EAASM,iBAGlD,IAAIC,GAAOH,EAAU,GAAGI,wBACpBC,EAAiBnP,EAAQL,EAAE,GAAGuP,uBAE/BD,GAAKG,OAAUD,EAAeC,OAAS,EAAIV,EAASM,gBAAkB,IACrEF,EAAU5F,KACNmG,aAAc,SACdC,aAAc,SACdC,aAAcJ,EAAeC,OAAS,EAAIV,EAASM,gBAAkB,EAAIC,EAAK9H,IAAO,MAI7F,IAAIqI,GAAUV,EAAU7F,cAAgB,EAAIyF,EAASM,gBAAkB,EACnES,EAAWd,EAAQe,EAAIC,MAAMC,KAAKC,OAAOH,EAAI,GAAI,EACjDI,EAAQnB,EAAQe,EAAID,GAAWZ,EAAWH,EAASqB,sBACnDC,EAASrB,EAAQe,EAAID,GAAWZ,EAAWH,EAASqB,qBAAuBrB,EAASK,eACpFkB,EAAOtB,EAAQuB,EAAIV,EAAU,CAC7BS,GAAOT,EAAWG,MAAMC,KAAKrS,KAAKwJ,OAAS2H,EAASyB,iBACpDF,EAAO3G,KAAK8G,IAAIT,MAAMC,KAAKrS,KAAKwJ,OAAS2H,EAASyB,eAAgBxB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,GAAKb,GAElHS,EAAOvB,EAASyB,iBAChBF,EAAO3G,KAAKgH,IAAI5B,EAASyB,eAAgBxB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,GAExF,IAAIE,GAAUN,EAAOT,CAgBrB,OAdAZ,GAAM4B,SAAS,GAAGC,MAAQ7B,EAAM4B,SAAS,GAAGC,MAAQ9B,EAAQ+B,KAAKjB,EAAUZ,EAAU,IACrFD,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAII,EAChHlB,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAIM,EACxDpB,EAAM4B,SAAS,GAAGC,MAAMP,EAAItB,EAAM4B,SAAS,GAAGC,MAAMP,EAAID,EACxDrB,EAAM4B,SAAS,GAAGC,MAAMP,EAAItB,EAAM4B,SAAS,GAAGC,MAAMP,EAAIK,EACxD3B,EAAM4B,SAAS,GAAGC,MAAMP,EAAIvB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,EACvEzB,EAAM4B,SAAS,GAAGC,MAAMP,EAAIvB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,EACvEzB,EAAM+B,UAAY,GAAIhB,OAAMiB,MAAM,GAAIjB,OAAMkB,UAAUnC,EAASoC,kBAAmBpC,EAASqC,wBAAyB,EAAGd,IAAQ,EAAGM,IAElIzB,EAAU5F,KACNjC,KAAOyH,EAASM,gBAAkB1F,KAAKgH,IAAIR,EAAOE,GAClD7I,IAAMuH,EAASM,gBAAkBiB,IAG9BrB,GAGXoC,mBAAoB,SAAUC,EAAKC,GAE/BD,EAAMA,EAAI7H,QAAQ,cAAe,IAGf,IAAf6H,EAAI1W,SACH0W,EAAMA,EAAI7H,QAAQ,OAAQ,QAG9B,IAAIC,GAAI8H,SAASF,EAAIvI,OAAO,EAAG,GAAI,IAC/B0I,EAAID,SAASF,EAAIvI,OAAO,EAAG,GAAI,IAC/B2I,EAAIF,SAASF,EAAIvI,OAAO,EAAG,GAAI,GAEnC,OAAO,KACF,EAAE,IAASW,GAAK,IAAMA,GAAK6H,EAAU,KAAKzH,SAAS,IAAKf,OAAO,IAC/D,EAAE,IAAS0I,GAAK,IAAMA,GAAKF,EAAU,KAAKzH,SAAS,IAAKf,OAAO,IAC/D,EAAE,IAAS2I,GAAK,IAAMA,GAAKH,EAAU,KAAKzH,SAAS,IAAKf,OAAO,MAG7EtH,QCzmBH,SAAU1B,GACN,YAEA,IAAI4R,GAAW5R,EAAK4R,QAEP5R,GAAKlE,KAAKgH,OAAS8O,EAAS9O,OAAOuJ,QAC5CwF,QACIC,GAAI,SAGRC,MAAO,SAAUC,GAEb,GAAIC,KACe,QAAfD,GACAA,EAAW7I,MAAM,KAAK+I,QAAQ,SAASC,GACnC,GAAIC,GAAOD,EAAKhJ,MAAM,IACtB8I,GAAOG,EAAK,IAAMC,mBAAmBD,EAAK,MAGlD3Z,KAAK6Z,QAAQ,SAAUL,OAIhCvQ,QCvBH,SAAU1B,GAEN,YAEA,IAAIkD,GAAalD,EAAKlE,KAAKoH,YACvBqP,YACIC,SAAU,SAAS9P,GAEf,GAAI2G,GAAGoJ,CACP,IAAyB,mBAAf/P,GAAKgQ,MACX,IAAIrJ,EAAE,EAAGoJ,EAAI/P,EAAKgQ,MAAM7X,OAAQwO,EAAEoJ,EAAKpJ,IAAK,CACxC,GAAI7M,GAAOkG,EAAKgQ,MAAMrJ,EACnB7M,GAAK9C,MACJ8C,EAAKmW,OACDjZ,MAAO8C,EAAK9C,OAIhB8C,EAAKmW,SAIjB,GAAyB,mBAAfjQ,GAAKkQ,MACX,IAAIvJ,EAAE,EAAGoJ,EAAI/P,EAAKkQ,MAAM/X,OAAQwO,EAAEoJ,EAAKpJ,IAAK,CACxC,GAAI5P,GAAOiJ,EAAKkQ,MAAMvJ,EACnB5P,GAAKC,MACJD,EAAKkZ,OACDjZ,MAAOD,EAAKC,OAIhBD,EAAKkZ,SAOjB,MAFAjQ,GAAKmQ,eAAiB,IAEfnQ,IAMnBQ,GAAWC,OAAS,SAAStE,EAAStF,GAClCd,KAAKoG,QAAUA,EACfpG,KAAKqa,eAAiBha,EAAEiJ,SAASxI,EAAQgZ,eAAkBrP,EAAWqP,aAI1ErP,EAAWC,OAAO9J,UAAU0Z,QAAU,SAASrQ,GAC3C,GAAIsQ,GAAoBva,KAAKoG,QAAQoU,iBAAiBvQ,GAClDwQ,EAAkBza,KAAKoG,QAAQoU,kBAEnC,IAAID,IAAsBE,EAAiB,CACvC,GAAIC,GAAgB,OAASH,EAAoB,KAAOE,CACN,mBAAvCza,MAAKqa,eAAeK,KAC3BzQ,EAAOjK,KAAKqa,eAAeK,GAAezQ,IAGlD,MAAOA,IAGXQ,EAAWC,OAAO9J,UAAU+Z,KAAO,SAAS1Q,GACxCjK,KAAKoG,QAAQwU,IAAI5a,KAAKsa,QAAQrQ,IAC1B4Q,UAAU,IAEd7a,KAAKoG,QAAQyT,QAAQ,UAAU,KAGpC5Q,QCtEH,SAAU1B,GACN,YAEA,IAAI4R,GAAW5R,EAAK4R,SAEhB7O,EAAS/C,EAAKlE,KAAKiH,SAEvBA,GAAO4H,OAAS,SAASjS,GACrB,GAAI6a,GAAO,uCACN7J,QAAQ,QACA,SAAStF,GACL,GAAIuF,GAAoB,GAAhBC,KAAKC,SAAgB,EAAGC,EAAU,MAAN1F,EAAYuF,EACrC,EAAJA,EAAU,CACjB,OAAOG,GAAEC,SAAS,KAEnC,OAAmB,mBAARrR,GACAA,EAAI4E,KAAO,IAAMiW,EAGjBA,EAIf,IAAIC,GAAc5B,EAAS6B,gBAAgBpH,QACvCqH,YAAc,MACdC,YAAc,SAASpa,GAEI,mBAAZA,KACPA,EAAQsD,IAAMtD,EAAQsD,KAAOtD,EAAQqa,IAAM7Q,EAAO4H,OAAOlS,MACzDc,EAAQK,MAAQL,EAAQK,OAAS,GACjCL,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GAC7C3C,EAAQI,IAAMJ,EAAQI,KAAO,GAED,kBAAjBlB,MAAKob,UACZta,EAAUd,KAAKob,QAAQta,KAG/BqY,EAAS6B,gBAAgBpa,UAAUsa,YAAYza,KAAKT,KAAMc,IAE9D+Z,SAAW,WACP,IAAK7a,KAAK6E,KACN,MAAO,sBAGfwW,aAAe,SAAS9E,EAAU+E,EAAWC,EAAOnX,EAAKoX,GACrD,GAAIC,GAAWF,EAAMlV,IAAIjC,EACD,oBAAbqX,IACa,mBAAbD,GACPjF,EAAS+E,GAAaE,EAGtBjF,EAAS+E,GAAaG,KAM9BC,EAAOpR,EAAOoR,KAAOX,EAAYnH,QACjC/O,KAAO,OACPuW,QAAU,SAASta,GAEf,MADAA,GAAQG,MAAQH,EAAQG,OAAS,UAC1BH,GAEX6a,OAAS,WACL,OACIvX,IAAMpE,KAAKqG,IAAI,OACflF,MAAQnB,KAAKqG,IAAI,SACjBnF,IAAMlB,KAAKqG,IAAI,OACf5C,YAAczD,KAAKqG,IAAI,eACvBpF,MAAQjB,KAAKqG,IAAI,aAMzBuV,EAAOtR,EAAOsR,KAAOb,EAAYnH,QACjC/O,KAAO,OACPgX,YACIhX,KAAOsU,EAAS2C,OAChBjS,IAAM,aACNkS,aAAeL,IAEnBN,QAAU,SAASta,GACf,GAAIsF,GAAUtF,EAAQsF,OAItB,OAHApG,MAAKqb,aAAava,EAAS,aAAcsF,EAAQC,IAAI,SACnCvF,EAAQkb,WAAY5V,EAAQ2E,cAC9CjK,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GACtC3C,GAEX6a,OAAS,WACL,OACIvX,IAAMpE,KAAKqG,IAAI,OACflF,MAAQnB,KAAKqG,IAAI,SACjBnF,IAAMlB,KAAKqG,IAAI,OACf5C,YAAczD,KAAKqG,IAAI,eACvB4V,SAAWjc,KAAKqG,IAAI,YACpB7C,MAAQxD,KAAKqG,IAAI,SACjB6T,MAAQla,KAAKqG,IAAI,SACjB2V,WAAahc,KAAKqG,IAAI,cAAgBrG,KAAKqG,IAAI,cAC1CA,IAAI,OAAS,KAClBjB,KAAOpF,KAAKqG,IAAI,QAChBV,UAAY3F,KAAKqG,IAAI,aACrBL,MAAQhG,KAAKqG,IAAI,SACjBxB,KAAO7E,KAAKqG,IAAI,YAMxB6V,EAAO5R,EAAO4R,KAAOnB,EAAYnH,QACjC/O,KAAO,OACPgX,YACIhX,KAAOsU,EAAS2C,OAChBjS,IAAM,aACNkS,aAAeL,IAEf7W,KAAOsU,EAAS2C,OAChBjS,IAAM,OACNkS,aAAeH,IAEf/W,KAAOsU,EAAS2C,OAChBjS,IAAM,KACNkS,aAAeH,IAEnBR,QAAU,SAASta,GACf,GAAIsF,GAAUtF,EAAQsF,OAMtB,OALApG,MAAKqb,aAAava,EAAS,aAAcsF,EAAQC,IAAI,SACnCvF,EAAQkb,WAAY5V,EAAQ2E,cAC9C/K,KAAKqb,aAAava,EAAS,OAAQsF,EAAQC,IAAI,SAC7BvF,EAAQqb,MAC1Bnc,KAAKqb,aAAava,EAAS,KAAMsF,EAAQC,IAAI,SAAUvF,EAAQsb,IACxDtb,GAEX6a,OAAS,WACL,OACIvX,IAAMpE,KAAKqG,IAAI,OACflF,MAAQnB,KAAKqG,IAAI,SACjBnF,IAAMlB,KAAKqG,IAAI,OACf5C,YAAczD,KAAKqG,IAAI,eACvB8V,KAAOnc,KAAKqG,IAAI,QAAUrG,KAAKqG,IAAI,QAAQA,IAAI,OAAS,KACxD+V,GAAKpc,KAAKqG,IAAI,MAAQrG,KAAKqG,IAAI,MAAMA,IAAI,OAAS,KAClD6T,MAAQla,KAAKqG,IAAI,SACjB2V,WAAahc,KAAKqG,IAAI,cAAgBrG,KAAKqG,IAAI,cAC1CA,IAAI,OAAS,SAM1BgW,EAAO/R,EAAO+R,KAAOtB,EAAYnH,QACjC/O,KAAO,OACPgX,YACIhX,KAAOsU,EAAS2C,OAChBjS,IAAM,aACNkS,aAAeL,IAEnBN,QAAU,SAASta,GACf,GAAIsF,GAAUtF,EAAQsF,OAItB,IAHApG,KAAKqb,aAAava,EAAS,aAAcsF,EAAQC,IAAI,SACnCvF,EAAQkb,WAAY5V,EAAQ2E,cAC9CjK,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GACf,mBAAnB3C,GAAQ0N,OAAwB,CACvC,GAAIA,KACA7N,OAAM2b,QAAQxb,EAAQ0N,SACtBA,EAAO+I,EAAIzW,EAAQ0N,OAAO,GAC1BA,EAAOuJ,EAAIjX,EAAQ0N,OAAOpM,OAAS,EAAItB,EAAQ0N,OAAO,GAChD1N,EAAQ0N,OAAO,IAEI,MAApB1N,EAAQ0N,OAAO+I,IACpB/I,EAAO+I,EAAIzW,EAAQ0N,OAAO+I,EAC1B/I,EAAOuJ,EAAIjX,EAAQ0N,OAAOuJ,GAE9BjX,EAAQ0N,OAASA,EAErB,MAAO1N,IAEX6a,OAAS,WACL,OACIvX,IAAMpE,KAAKqG,IAAI,OACfkW,WAAavc,KAAKqG,IAAI,cACtBmI,OAASxO,KAAKqG,IAAI,UAClBlF,MAAQnB,KAAKqG,IAAI,SACjB5C,YAAczD,KAAKqG,IAAI,eACvB2V,WAAahc,KAAKqG,IAAI,cAAgBrG,KAAKqG,IAAI,cAC1CA,IAAI,OAAS,KAClBmW,aAAcxc,KAAKqG,IAAI,oBA6H/BoW,GAtHUnS,EAAOC,QAAUwQ,EAAYnH,QACvCwG,eAAiB,IACjBvV,KAAO,UACP6X,WAAc,aAAc,iBAC5Bb,YACIhX,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeL,EACfkB,iBACI/S,IAAM,UACNgT,cAAgB,SAGpBhY,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeH,EACfgB,iBACI/S,IAAM,UACNgT,cAAgB,SAGpBhY,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeG,EACfU,iBACI/S,IAAM,UACNgT,cAAgB,SAGpBhY,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeM,EACfO,iBACI/S,IAAM,UACNgT,cAAgB,SAGxB/R,QAAU,SAASgS,EAAQvG,GACvBuG,EAAO1W,QAAUpG,IACjB,IAAI+c,GAAQrB,EAAKsB,aAAaF,EAE9B,OADA9c,MAAKqG,IAAI,SAASgD,KAAK0T,EAAOxG,GACvBwG,GAEXE,QAAU,SAASH,EAAQvG,GACvBuG,EAAO1W,QAAUpG,IACjB,IAAIkd,GAAQtB,EAAKoB,aAAaF,EAE9B,OADA9c,MAAKqG,IAAI,SAASgD,KAAK6T,EAAO3G,GACvB2G,GAEXC,QAAU,SAASL,EAAQvG,GACvBuG,EAAO1W,QAAUpG,IACjB,IAAIod,GAAQlB,EAAKc,aAAaF,EAE9B,OADA9c,MAAKqG,IAAI,SAASgD,KAAK+T,EAAO7G,GACvB6G,GAEXC,QAAU,SAASP,EAAQvG,GACvBuG,EAAO1W,QAAUpG,IAEjB,IAAIsd,GAAQjB,EAAKW,aAAaF,EAG9B,OADA9c,MAAKqG,IAAI,SAASgD,KAAKiU,EAAO/G,GACvB+G,GAEXC,WAAa,SAAS5P,GAClB3N,KAAKqG,IAAI,SAASmX,OAAO7P,IAE7B8P,WAAa,SAAS9P,GAClB3N,KAAKqG,IAAI,SAASmX,OAAO7P,IAE7BkN,SAAW,SAAS/Z,GAChB,GAAI4c,GAAW1d,IACfK,GAAEgC,QACK6H,OAAOpJ,EAAQ6c,MAAO7c,EAAQmZ,MAAOnZ,EAAQqZ,MAAMrZ,EAAQ8c,OAC9D,SAASC,GACDA,IACAA,EAAMzX,QAAUsX,MAKhClD,iBAAmB,SAASvQ,GACxB,GAAI6T,GAAI7T,CACS,oBAAR,KACL6T,EAAI9d,KAER,IAAI+d,GAAUD,EAAE1D,cAChB,OAAI2D,GAIOA,EAHA,GAOfC,WAAa,WACT,GAAI5V,GAAQpI,IACZA,MAAKuL,GAAG,eAAgB,SAAS2R,GAC7B9U,EAAM/B,IAAI,SAASmX,OACfpV,EAAM/B,IAAI,SAAS4X,OACf,SAASb,GACL,MAAOA,GAAM/W,IAAI,UAAY6W,GACzBE,EAAM/W,IAAI,QAAU6W,QAI5CvB,OAAS,WACL,GAAIuC,GAAO7d,EAAE8d,MAAMne,KAAKoe,WACxB,KAAM,GAAI/V,KAAQ6V,IACTA,EAAK7V,YAAiB8Q,GAASkF,OAC/BH,EAAK7V,YAAiB8Q,GAASmF,YAC/BJ,EAAK7V,YAAiB0S,MACvBmD,EAAK7V,GAAQ6V,EAAK7V,GAAMsT,SAGhC,OAAOtb,GAAEke,KAAKL,EAAMle,KAAK0c,cAIhBpS,EAAOmS,WAAatD,EAASkF,MACzCzK,QACG/O,KAAO,cACPoW,YAAc,MAEdC,YAAc,SAASpa,GAEI,mBAAZA,KACPA,EAAQsD,IAAMtD,EAAQsD,KAClBtD,EAAQqa,IACR7Q,EAAO4H,OAAOlS,MAClBc,EAAQK,MAAQL,EAAQK,OAAS,aAAenB,KAAK6E,KAAO,IAC5D/D,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GAC7C3C,EAAQI,IAAMJ,EAAQI,KAAO,GAC7BJ,EAAQsF,QAAUtF,EAAQsF,SAAW,KACrCtF,EAAQ0d,QAAU1d,EAAQ0d,SAAW,EAET,kBAAjBxe,MAAKob,UACZta,EAAUd,KAAKob,QAAQta,KAG/BqY,EAASkF,MAAMzd,UAAUsa,YAAYza,KAAKT,KAAMc,IAGpD+Z,SAAW,WACP,IAAK7a,KAAK6E,KACN,MAAO,sBAIfuW,QAAU,SAASta,GAEf,MADAA,GAAQG,MAAQH,EAAQG,OAAS,UAC1BH,GAGX6a,OAAS,WACL,OACIvX,IAAMpE,KAAKqG,IAAI,OACflF,MAAQnB,KAAKqG,IAAI,SACjBnF,IAAMlB,KAAKqG,IAAI,OACf5C,YAAczD,KAAKqG,IAAI,eACvBpF,MAAQjB,KAAKqG,IAAI,SACjBD,QAAkC,MAAvBpG,KAAKqG,IAAI,WAAsBrG,KAAKqG,IAC3C,WAAWA,IAAI,MAAQ,KAC3BmY,QAAUxe,KAAKqG,IAAI,eAKnBiE,GAAOgB,UAAY6N,EAASmF,WAAW1K,QACnD6K,MAAQhC,KAGbxT,QC3WH5F,KAAKiG,UAEDgH,SAAWoO,UAAUpO,UAAYoO,UAAUC,cAAgB,KAE3DzT,UAAW,SAEXY,UAEAiB,QAEArJ,WAAY,GAEZkb,cAAc,EAEdC,aAAc,eAEdjb,WAAW,EAEXzB,cAEA0B,aAAa,EAEbsG,WAAW,EAEXjE,aAAa,EAEb4Y,aAAa,EAEb7Y,cAAc,EAEdkQ,mBAAoB,UACpB4I,cAAc,EAEdC,cAAc,EACdC,oBAAoB,EAEpBC,uBAAuB,EAEvBC,uBAAuB,EAEvBC,gBAAgB,EAEhBC,qBAAsB,EAGtBC,kBAAmB,GACnBnY,QAAQ,EAGRC,WAAW,EAEXC,WAAW,EAEXkY,sBAAsB,EAEtBC,uBAAuB,EAEvBC,oBAAoB,EAGpBC,gBAAgB,EAEhBC,YAAY,EAMZzY,mBAAmB,EACnBZ,gBAAgB,EAEhBsZ,oBAAoB,EAEpBpZ,qBAAqB,EAErBL,gBAAgB,EAEhBI,iBAAiB,EAEjBQ,kBAAkB,EAClBD,oBAAoB,EACpBE,kBAAkB,EAClBJ,qBAAqB,EACrBC,qBAAqB,EACrBI,kBAAkB,EAClBN,wBAAwB,EACxBF,iBAAiB,EACjBC,kBAAmB,OAInBmZ,cAAc,EAEdC,cAAe,IACfC,eAAgB,IAChBC,gBAAiB,GACjBC,yBAA0B,UAC1BC,qBAAsB,UACtBC,wBAAyB,UACzBC,yBAA0B,EAK1BC,mBAAoB,UACpBC,oBAAqB,UACrBC,wBAAyB,EAEzBC,cAAgB,GAEhBC,oBAAsB,EAAG,GAKzBC,mBAAmB,EAEnBC,kBAAkB,EAElBC,uBAAuB,EAGvBC,eAAgB,GAChBC,kBAAmB,EACnBC,sBAAuB,GACvBC,2BAA4B,EAC5BC,+BAAgC,GAChCC,wBAAyB,EACzBC,oBAAqB,EAErBC,oBAAqB,EAErBC,qBAAsB,GAEtBC,gBAAiB,UAEjBC,4BAA6B,UAE7BC,iBAAkB,UAElBC,oBAAqB,EAErBC,sBAAuB,GAEvBC,qBAAsB,aAEtBra,YAAY,EAEZxB,eAAe,EAEfnB,cAAc,EAKd8E,uBACImY,QAAW,qCACXC,MAAS,mCAKbC,kBAAmB,EACnBC,sBAAuB,GACvBC,2BAA4B,EAC5BC,+BAAgC,GAChCC,wBAAyB,EAEzBC,oBAAqB,EACrBC,sBAAuB,GACvBC,kBAAmB,GACnBC,iBAAkB,GAClBC,qBAAsB,GACtBC,oBAAqB,GACrBC,uBAAwB,UACxBC,qBAAsB,GAItB9L,cAAe,IACfC,gBAAiB,GACjBmB,eAAgB,GAChBJ,qBAAuB,GACvBM,oBAAsB,GACtBS,kBAAmB,UACnBC,qBAAsB,UACtB+J,qBAAsB,UACtBC,qBAAsB,EACtBC,gBAAiB,GAEjBC,wBACIC,gBACMC,KAAM,cAAeC,QAAU,cAAe,aAC9CD,KAAM,YAAeC,QAAU,YAAa,SAC9C,KACDD,KAAM,WAETE,cAAgB,mGAKpB5e,uBAAuB,EACvBI,sBAAsB,EACtBye,wBAAwB,EACxB9e,iCAAiC,EACjCY,8BAA8B,EAC9BC,uCAAuC,EACvCC,uBAAuB,EACvBE,wBAAwB,EACxBC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,kCAAkC,EAClCC,wBAAwB,EACxBI,0BAA0B,EAC1BD,oBAAoB,EACpBwd,sBAAuB,IAKvBpf,uBAAuB,EACvBC,+BAA+B,EAC/BH,yBAAyB,EACzBI,yBAAyB,EACzBC,2BAA2B,EAI3BjC,sBAAsB,EACtBO,wBAAwB,EACxBC,8BAA8B,EAC9BE,6BAA6B,EAC7BE,kCAAkC,EAClCE,8BAA8B,EAC9BE,4BAA4B,EAC5BC,wBAAwB,EACxBC,0BAA0B,EAI1BhC,uBAAuB,EACvBL,yBAAyB,EACzBO,yBAAyB,EACzBQ,2BAA2B,GCpP/BuB,KAAKgN,MACDgT,IACIC,YAAa,oBACbC,YAAa,oBACbC,SAAU,UACVC,OAAQ,QACRC,eAAgB,gBAChBC,QAAS,OACTC,MAAO,SACP5Q,MAAS,QACT6Q,aAAc,cACdC,qBAAsB,2BACtBC,cAAe,mBACfC,WAAY,kBACZC,WAAY,kBACZC,eAAgB,wBAChBC,eAAgB,mBAChBC,oBAAqB,oCACrBC,kBAAmB,mBACnBC,cAAe,aACfC,UAAW,qBACXC,WAAY,uBACZC,KAAQ,SACRC,OAAU,YACVC,kBAAmB,yBACnBC,uBAAwB,gBACxBC,QAAW,WACXC,OAAU,WACVC,+CAAgD,sDAChDC,0CAA2C,qDAC3CC,8CAA+C,mDAC/CC,UAAa,YACbC,gBAAiB,gBACjBC,OAAU,WACVC,QAAW,UACXC,SAAY,WACZC,mBAAoB,oBACpBC,kBAAmB,kBACnBC,uBAAwB,0CACxBC,cAAe,YACfC,QAAS,WACTC,aAAc,cACdC,SAAU,WACVC,cAAe,YACfC,eAAgB,sBAChBC,wBAAyB,0BACzBC,qCAAsC,4CACtCC,qCAAsC,4CACtCC,4BAA6B,iCAC7BC,4BAA6B,+BAC7BC,QAAS,WACTC,GAAM,KACNC,0BAA2B,gCAC3BC,gCAAiC,iCACjCC,WAAY,cACZC,cAAe,iBACfC,iBAAkB,oBAClBC,0BAA2B,8BAC3BC,cAAe,4BACfC,eAAgB,6BAChBC,cAAe,2BACfC,uBAAwB,0BACxBC,kBAAmB,sBACnBC,OAAU,SACVC,aAAc,WACdC,WAAY,cACZC,eAAgB,YAChBC,aAAc,gBACdC,cAAe,eACfC,mBAAoB,2BACpBC,iBAAkB,sBAClBC,iBAAkB,+BAClBC,YAAa,oBACbC,cAAe,wBACfC,aAAc,eACdC,mBAAoB,8BACpBC,oDAAqD,kDACrDC,qIAAsI,2KACtIC,mBAAoB,qBACpBC,OAAU,SACVC,OAAU,QACVC,QAAW,UACXC,SAAY,WACZC,QAAW,UACXC,KAAQ,SACRC,MAAS,QACTC,SAAY,WACZC,QAAW,WACXC,WAAY,kBACZC,mBAAoB,wBACpBC,YAAa,gBACbC,kBAAmB,mBACnBC,mCAAsC,wCACtCC,iBAAiB,oBACjBC,iBAAiB,oBACjBC,kBAAkB,wBAClBC,aAAe,iBACfC,oBAAqB,4BACrBC,iBAAkB,sBAClBC,KAAQ,SACRC,2CAA4C,yDAC5CC,cAAe,WACfC,eAAgB,cCpGxBpmB,KAAKqmB,OAAS,SAAS7hB,EAASC,GAC5B,GAAI6hB,GAAQ9hB,EAAQzB,OACa,oBAAtB0B,GAAM8hB,cACb9hB,EAAM8hB,YAAc,MAExB,IAAIC,GAAQ,WACRF,EAAM/O,KACFkP,eAAgB,IAEpBzmB,KAAKmE,EAAEwC,QAAQlC,EAAMnE,IAAK,SAASomB,GAC/BliB,EAAQ2C,WAAWmQ,KAAKoP,GAExBJ,EAAM/O,KACFkP,eAAgB,IAEpBH,EAAM/O,KACFoP,WAAa,OAIrBC,EAAQ,WACRN,EAAM/O,KACFoP,WAAa,GAEjB,IAAID,GAAQJ,EAAMhO,QACb9T,GAAQsC,WACT9G,KAAKmE,EAAE0iB,MACHrlB,KAAOiD,EAAM8hB,YACbjmB,IAAMmE,EAAMnE,IACZwmB,YAAc,mBACdlgB,KAAOmgB,KAAKC,UAAUN,GACtBO,QAAU,SAASrgB,EAAMsgB,EAAYC,GACjCb,EAAM/O,KACFoP,WAAa,QAO7BS,EAAWpnB,KAAKhD,EAAEqqB,SAAS,WAC3BC,WAAWV,EAAO,MACnB,IAIHN,GAAMpe,GAAG,0CAA2C,SAASoC,GACzDA,EAAOpC,GAAG,gBAAiB,SAASoC,GAChC8c,MAEJA,MAEJd,EAAMpe,GAAG,SAAU,WAC0B,IAAnCoe,EAAMiB,kBAAkBxoB,QAAgBunB,EACrCkB,WAAW,eAChBJ,MAIRZ,KC3DJxmB,KAAKynB,kBAAoB,SAASjjB,EAASC,GACvC,GAAI6hB,GAAQ9hB,EAAQzB,QAChB2kB,GAAY,EACZC,EAAW,WACP,MAAO,oBAEkB,oBAAtBljB,GAAM8hB,cACb9hB,EAAM8hB,YAAc,OAExB,IAAIC,GAAQ,WACR,GAAIoB,MACAC,EAAK,gBACLC,EAAUhc,SAASic,SAASC,KAAKC,MAAMJ,EACvCC,KACAF,EAAQ9P,GAAKgQ,EAAQ,IAEzB9nB,KAAKmE,EAAE0iB,MACHvmB,IAAKmE,EAAMnE,IACXsG,KAAMghB,EACNM,WAAY,WACX5B,EAAM/O,KAAKkP,eAAc,KAE1BQ,QAAS,SAASP,GACdliB,EAAQ2C,WAAWmQ,KAAKoP,GACxBJ,EAAM/O,KAAKkP,eAAc,IACzBH,EAAM/O,KAAKoP,WAAW,QAI9BC,EAAQ,WACRN,EAAM/O,IAAI,WAAY,GAAIvI,MAC1B,IAAI0X,GAAQJ,EAAMhO,QAClBtY,MAAKmE,EAAE0iB,MACHrlB,KAAMiD,EAAM8hB,YACZjmB,IAAKmE,EAAMnE,IACXwmB,YAAa,mBACblgB,KAAMmgB,KAAKC,UAAUN,GACrBwB,WAAY,WACX5B,EAAM/O,KAAKoP,WAAW,KAEvBM,QAAS,SAASrgB,EAAMsgB,EAAYC,GAChChjB,EAAEyB,QAAQqF,IAAI,eAAgB0c,GAC9BD,GAAY,EACZpB,EAAM/O,KAAKoP,WAAW,QAM9BwB,EAAc,WACjB7B,EAAM/O,KAAKoP,WAAW,GAEnB,IAAI7oB,GAAQwoB,EAAMtjB,IAAI,QAClBlF,IAASwoB,EAAMtjB,IAAI,SAASjE,OAC5BoF,EAAE,mBAAmBikB,YAAY,YAEjCjkB,EAAE,mBAAmBS,SAAS,YAE9B9G,GACAqG,EAAE,gBAAgBuJ,IAAI,eAAe,WAEpCga,IACDA,GAAY,EACZvjB,EAAEyB,QAAQsC,GAAG,eAAgByf,IAGrCnB,KACAF,EAAMpe,GAAG,uCAAwC,SAASoC,GACzDA,EAAOpC,GAAG,gBAAiB,SAASoC,GACM,IAApCA,EAAOid,kBAAkBxoB,QAAgBuL,EAAOkd,WAAW,eAC/DW,MAGmC,IAAnC7B,EAAMiB,kBAAkBxoB,QAAgBunB,EAAMkB,WAAW,eAC1DW,MAGF3jB,EAAQmD,SAAS0gB,KAAO,WAChBlkB,EAAE,mBAAmBmkB,SAAS,YACzBhC,EAAMtjB,IAAI,UACXmB,EAAE,gBAAgBuJ,IAAI,eAAe,WAGzCkZ,MCrFZ,SAAU5mB,GACV,YAEA,IAAIhD,GAAIgD,EAAKhD,EAETurB,EAAMvoB,EAAKuoB,OAYXC,GAVMD,EAAI3e,IAAM,SAASpF,EAASC,GAClC,GAAIA,EAAMgkB,SAAU,CAChB,GAAIC,GAAWH,EAAI9jB,EAAMgkB,SAAS,MAClC,IAAIC,EACA,MAAO,IAAIA,GAASlkB,EAASC,GAGrCkkB,QAAQC,MAAM,yBAGDL,EAAIC,WAAaxoB,EAAKC,MAAM6P,QAAQ9P,EAAKuE,UAG1DikB,GAAWjrB,UAAU8S,MAAQ,SAAS7L,EAASC,GAC3C9H,KAAKuB,OAASsG,EACd7H,KAAKksB,YAAcrkB,EAAQ/G,QAAQyI,UAAU,0CAC7CvJ,KAAKmsB,mBAAqBtkB,EAAQ/G,QAAQyI,UAAU,iDACpDvJ,KAAKosB,QAAUtkB,EAAMukB,WACrBrsB,KAAKssB,aAAexkB,EAAMwkB,cAAgB,oCAC1CtsB,KAAK8I,QAAQP,KAAKT,EAAM3G,OACxBnB,KAAKmI,aAAaF,SAAS,qBAC3BjI,KAAK4I,WAGTijB,EAAWjrB,UAAUuP,OAAS,SAASoc,GAEnC,QAASC,GAAUpc,GACf,GAAI7C,GAAKlN,EAAE+P,GAAO9P,QAClB,OAAOwL,GAAOmJ,QAAU1H,EAAKzB,EAAOmF,QAAQ1D,EAAI,uCAEpD,QAASkf,GAAUC,GACf,QAASva,GAAIS,GAET,IADA,GAAI+Z,GAAO/Z,EAAGtB,WACPqb,EAAKvqB,OAAS,GACjBuqB,EAAO,IAAMA,CAEjB,OAAOA,GAEX,GAAIC,GAAgBzb,KAAK0b,IAAI1b,KAAK2b,MAAMJ,EAAI,MACxCK,EAAS5b,KAAK2b,MAAMF,EAAgB,MACpCI,EAAY7b,KAAK2b,MAAMF,EAAgB,IAAM,GAC7CK,EAAWL,EAAgB,GAC3BD,EAAO,EAKX,OAJII,KACAJ,GAAQxa,EAAI4a,GAAU,KAE1BJ,GAAQxa,EAAI6a,GAAY,IAAM7a,EAAI8a,GArBtC,GAAInhB,GAASygB,GAAclpB,EAAKC,MAAM0M,wBAyBlCkd,EAAQ,yBACRC,EAAantB,KAAKiK,KAAKmjB,KAAK,YAC5BhlB,EAAQpI,KACRqtB,EAAQ,CACZjlB,GAAMU,QAAQqM,KAAK,iBAAmBgY,EAAa,KACnD9sB,EAAEqL,IAAItD,EAAM6B,KAAKqjB,KAAK,SAASC,GAC3B,GAAIC,GAASD,EAAKH,KAAK,aAClBthB,EAAOmJ,SAAYnJ,EAAOgH,KAAK0a,MAGpCH,IACAH,GAAS9kB,EAAM8jB,aACXI,aAAclkB,EAAMkkB,aACpBnrB,MAAOqsB,EACPC,OAAQjB,EAAUgB,GAClBE,aAAeC,mBAAmBH,GAClC9pB,WAAY0E,EAAM7G,OAAOT,QAAQ4C,gBAGzCwpB,GAAS,gCACT7sB,EAAEqL,IAAItD,EAAM6B,KAAK2jB,YAAY,SAASC,GAClC,GAAIC,GAAeD,EAAYE,QAAQtqB,YACnC+pB,EAASK,EAAYE,QAAQ5sB,MAAM8P,QAAQ6c,EAAa,GAC5D,IAAKhiB,EAAOmJ,SAAYnJ,EAAOgH,KAAK0a,IAAY1hB,EAAOgH,KAAKgb,GAA5D,CAGAT,GACA,IAAIW,GAAYH,EAAYI,IAAMJ,EAAYK,MAC1CC,EACKN,EAAYE,SAAWF,EAAYE,QAAQhb,KAAO8a,EAAYE,QAAQhb,IAAIE,IACzE4a,EAAYE,QAAQhb,IAAIE,IACtB+a,EAAY5lB,EAAM7G,OAAOT,QAAQ4C,WAAW,sBAAwB0E,EAAM7G,OAAOT,QAAQ4C,WAAW,mBAEhHwpB,IAAS9kB,EAAM+jB,oBACXG,aAAclkB,EAAMkkB,aACpBnrB,MAAOqsB,EACPC,OAAQjB,EAAUgB,GAClB/pB,YAAaqqB,EACbM,aAAc5B,EAAUsB,GACxBO,MAAO5B,EAAUoB,EAAYK,OAC7BD,IAAKxB,EAAUoB,EAAYI,KAC3BK,SAAU7B,EAAUuB,GACpBO,QAASV,EAAYW,MACrBC,aAAcZ,EAAY1S,GAC1B3X,MAAO2qB,EACPzqB,WAAY0E,EAAM7G,OAAOT,QAAQ4C,gBAIzC1D,KAAK+I,OAAOR,KAAK2kB,IACZphB,EAAOmJ,SAAWoY,EACnBrtB,KAAK6I,QAAQsM,KAAKkY,GAAOqB,OAEzB1uB,KAAK6I,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpBrtB,KAAKwH,EAAEknB,OAFP1uB,KAAKwH,EAAEQ,OAIXhI,KAAKuB,OAAOoH,cAGhBkjB,EAAWjrB,UAAUgI,QAAU,WAC3B,GAAIR,GAAQpI,IACZqD,GAAKmE,EAAE0iB,MACHvmB,IAAK3D,KAAKssB,aAAe,6BAA+BtsB,KAAKosB,QAC7DuC,SAAU,QACVrE,QAAS,SAASP,GACd3hB,EAAM6B,KAAO8f,EACb3hB,EAAM+H,YAKlB,IAAI/D,GAASwf,EAAIxf,OAAS,SAASvE,EAASC,GACxC9H,KAAKuB,OAASsG,EACd7H,KAAK4uB,KAAO9mB,EAAM8mB,MAAQ,KAG9BxiB,GAAOxL,UAAU2L,WAAa,WAC1B,MAAO,eAGXH,EAAOxL,UAAUyL,eAAiB,WAC9B,MAAOrM,MAAKuB,OAAOC,UAAU,oBAGjC4K,EAAOxL,UAAUkL,OAAS,SAAS+iB,GAC/B7uB,KAAKuB,OAAO4J,KAAK9B,KACb,GAAIylB,GAAW9uB,KAAKuB,QAChBuK,OAAQ+iB,KAKpB,IAAIC,GAAalD,EAAIkD,WAAazrB,EAAKC,MAAM6P,QAAQ9P,EAAKuE,SAG1DknB,GAAWluB,UAAU8S,MAAQ,SAAS7L,EAASC,GAC3C9H,KAAKuB,OAASsG,EACd7H,KAAK+uB,gBAAkBlnB,EAAQ/G,QAAQyI,UAAU,8CACjDvJ,KAAKssB,aAAexkB,EAAMwkB,cAAgB,oCAC1CtsB,KAAKgvB,YAAclnB,EAAMknB,aAAe,GACxChvB,KAAK8L,OAAShE,EAAMgE,OACpB9L,KAAK8I,QAAQP,KAAK,qBAAuBT,EAAMgE,OAAS,KACxD9L,KAAKmI,aAAaF,SAAS,qBAC3BjI,KAAK4I,WAGTkmB,EAAWluB,UAAUuP,OAAS,SAASoc,GAMnC,QAASC,GAAUpc,GACf,MAAO6e,GAAYhe,QAAQ5Q,EAAE+P,GAAO9P,SAAU,uCAElD,QAASmsB,GAAUC,GACf,QAASva,GAAIS,GAET,IADA,GAAI+Z,GAAO/Z,EAAGtB,WACPqb,EAAKvqB,OAAS,GACjBuqB,EAAO,IAAMA,CAEjB,OAAOA,GAEX,GAAIC,GAAgBzb,KAAK0b,IAAI1b,KAAK2b,MAAMJ,EAAI,MACxCK,EAAS5b,KAAK2b,MAAMF,EAAgB,MACpCI,EAAY7b,KAAK2b,MAAMF,EAAgB,IAAM,GAC7CK,EAAWL,EAAgB,GAC3BD,EAAO,EAKX,OAJII,KACAJ,GAAQxa,EAAI4a,GAAU,KAE1BJ,GAAQxa,EAAI6a,GAAY,IAAM7a,EAAI8a,GAxBtC,GAAKjtB,KAAKiK,KAAV,CAGA,GAAI6B,GAASygB,GAAclpB,EAAKC,MAAM0M,wBAClCif,EAAenjB,EAAOmJ,QAAU5R,EAAKC,MAAM0M,sBAAsBhQ,KAAK8L,QAAUA,EAwBhFohB,EAAQ,GACR9kB,EAAQpI,KACRqtB,EAAQ,CACZhtB,GAAEgC,KAAKrC,KAAKiK,KAAKilB,QAAQ,SAASC,GAC9B,GAAIrB,GAAeqB,EAASC,SACxB5B,EAAS2B,EAAShuB,KACtB,IAAK2K,EAAOmJ,SAAYnJ,EAAOgH,KAAK0a,IAAY1hB,EAAOgH,KAAKgb,GAA5D,CAGAT,GACA,IAAIW,GAAYmB,EAASb,SACrBe,EAASF,EAASG,SAClBC,GAASJ,EAASb,SAAWe,EAC7BlB,EACIH,EACE5lB,EAAM7G,OAAOT,QAAQ4C,WAAa,sBAClC0E,EAAM7G,OAAOT,QAAQ4C,WAAa,mBAE5CwpB,IAAS9kB,EAAM2mB,iBACXzC,aAAclkB,EAAMkkB,aACpBnrB,MAAOqsB,EACPC,OAAQjB,EAAUgB,GAClB/pB,YAAaqqB,EACbM,aAAc5B,EAAUsB,GACxBO,MAAO5B,EAAU4C,GACjBpB,IAAKxB,EAAU8C,GACfjB,SAAU7B,EAAUuB,GACpBO,QAASY,EAASK,OAGlBf,aAAcU,EAASM,WACvBjsB,MAAO2qB,OAIfnuB,KAAK+I,OAAOR,KAAK2kB,IACZphB,EAAOmJ,SAAWoY,EACnBrtB,KAAK6I,QAAQsM,KAAKkY,GAAOqB,OAEzB1uB,KAAK6I,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpBrtB,KAAKwH,EAAEknB,OAFP1uB,KAAKwH,EAAEQ,OAIXhI,KAAKuB,OAAOoH,eAGhBmmB,EAAWluB,UAAUgI,QAAU,WAC3B,GAAIR,GAAQpI,IACZqD,GAAKmE,EAAE0iB,MACHvmB,IAAK3D,KAAKssB,aAAe,2CACzBriB,MACIylB,OAAQ,QACRC,EAAG3vB,KAAK8L,OACR8jB,MAAO5vB,KAAKgvB,aAEhBL,SAAU,QACVrE,QAAS,SAASP,GACd3hB,EAAM6B,KAAO8f,EACb3hB,EAAM+H,cAKflH,OAAO5F,MCtQVA,KAAKwsB,gBAELxsB,KAAKwsB,aAAa5iB,IAAM5J,KAAKC,MAAM6P,QAAQ9P,KAAKuE,UAEhDvE,KAAKwsB,aAAa5iB,IAAIrM,UAAU8S,MAAQ,SAAS7L,EAASC,GACtD9H,KAAKuB,OAASsG,EACd7H,KAAK8vB,eAAiBjoB,EAAQ/G,QAAQyI,UAAU,2BAChDvJ,KAAK8I,QAAQP,KAAKT,EAAM3G,OACpB2G,EAAMioB,OACN/vB,KAAKiK,KAAOnC,EAAMioB,MAEtB/vB,KAAK4I,WAGTvF,KAAKwsB,aAAa5iB,IAAIrM,UAAUuP,OAAS,SAASoc,GAE9C,QAASC,GAAUpc,GACf,GAAI7C,GAAKlN,EAAE+P,GAAO9P,QAClB,OAAOwL,GAAOmJ,QAAU1H,EAAKzB,EAAOmF,QAAQ1D,EAAI,uCAHpD,GAAIzB,GAASygB,GAAclpB,KAAKC,MAAM0M,wBAKlCkd,EAAQ,GACR9kB,EAAQpI,KACRqtB,EAAQ,CACZhqB,MAAKhD,EAAEgC,KAAKrC,KAAKiK,KAAK,SAAS4T,GAC3B,GAAIpC,EACJ,IAAqB,gBAAVoC,GACP,GAAI,qBAAqB/K,KAAK+K,GAC1BpC,GAAa9X,IAAKka,OACf,CACHpC,GAAata,MAAO0c,EAAM5M,QAAQ,gDAAgD,IAAI+e,OACtF,IAAIC,GAASpS,EAAMyN,MAAM,qCACrB2E,KACAxU,EAAS9X,IAAMssB,EAAO,IAEtBxU,EAASta,MAAMiB,OAAS,KACxBqZ,EAAShY,YAAcgY,EAASta,MAChCsa,EAASta,MAAQsa,EAASta,MAAM8P,QAAQ,mBAAmB,YAInEwK,GAAWoC,CAEf,IAAI1c,GAAQsa,EAASta,QAAUsa,EAAS9X,KAAO,IAAIsN,QAAQ,uBAAuB,IAAIA,QAAQ,cAAc,OACxGtN,EAAM8X,EAAS9X,KAAO,GACtBF,EAAcgY,EAAShY,aAAe,GACtCD,EAAQiY,EAASjY,OAAS,EAC1BG,KAAQ,eAAemP,KAAKnP,KAC5BA,EAAM,UAAYA,IAEjBmI,EAAOmJ,SAAYnJ,EAAOgH,KAAK3R,IAAW2K,EAAOgH,KAAKrP,MAG3D4pB,IACAH,GAAS9kB,EAAM0nB,gBACXnsB,IAAKA,EACLxC,MAAOA,EACPssB,OAAQjB,EAAUrrB,GAClBqC,MAAOA,EACPC,YAAaA,EACb2qB,aAAc5B,EAAU/oB,GACxBC,WAAY0E,EAAM7G,OAAOT,QAAQ4C,gBAGzC0E,EAAMW,OAAOR,KAAK2kB,IACbphB,EAAOmJ,SAAWoY,EACnBrtB,KAAK6I,QAAQsM,KAAKkY,GAAOqB,OAEzB1uB,KAAK6I,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpBrtB,KAAKwH,EAAEknB,OAFP1uB,KAAKwH,EAAEQ,OAIXhI,KAAKuB,OAAOoH,cAGhBtF,KAAKwsB,aAAa5iB,IAAIrM,UAAUgI,QAAU,WAClC5I,KAAKiK,MACLjK,KAAKmQ,UC/Eb9M,KAAK6hB,aAGL7hB,KAAK6hB,UAAU9Y,OAAS,SAASvE,EAASC,GACtC9H,KAAKuB,OAASsG,EACd7H,KAAK4uB,KAAO9mB,EAAM8mB,MAAQ,MAG9BvrB,KAAK6hB,UAAU9Y,OAAOxL,UAAU2L,WAAa;AACzC,MAAO,8CAAgDvM,KAAK4uB,MAGhEvrB,KAAK6hB,UAAU9Y,OAAOxL,UAAUyL,eAAiB,WAC7C,GAAI6jB,IACA7M,GAAM,SACN8M,GAAM,UACNC,GAAM,WAEV,OAAIF,GAAMlwB,KAAK4uB,MACJ5uB,KAAKuB,OAAOC,UAAU,iBAAmBxB,KAAKuB,OAAOC,UAAU0uB,EAAMlwB,KAAK4uB,OAE1E5uB,KAAKuB,OAAOC,UAAU,aAAe,KAAOxB,KAAK4uB,KAAO,KAIvEvrB,KAAK6hB,UAAU9Y,OAAOxL,UAAUkL,OAAS,SAAS+iB,GAC9C7uB,KAAKuB,OAAO4J,KAAK9B,KACb,GAAIhG,MAAK6hB,UAAUjY,IAAIjN,KAAKuB,QACxBqtB,KAAM5uB,KAAK4uB,KACX9iB,OAAQ+iB,MAKpBxrB,KAAK6hB,UAAUjY,IAAM5J,KAAKC,MAAM6P,QAAQ9P,KAAKuE,UAE7CvE,KAAK6hB,UAAUjY,IAAIrM,UAAU8S,MAAQ,SAAS7L,EAASC,GACnD9H,KAAKuB,OAASsG,EACd7H,KAAK8L,OAAShE,EAAMgE,OACpB9L,KAAK8vB,eAAiBjoB,EAAQ/G,QAAQyI,UAAU,+CAChDvJ,KAAK4uB,KAAO9mB,EAAM8mB,MAAQ,KAC1B5uB,KAAKmI,aAAaF,SAAS,6CAA+CjI,KAAK4uB,MAC/E5uB,KAAK8I,QAAQP,KAAKvI,KAAK8L,QAAQ7D,SAAS,sBACxCjI,KAAK4I,WAGTvF,KAAK6hB,UAAUjY,IAAIrM,UAAUuP,OAAS,SAASoc,GAG3C,QAASC,GAAUpc,GACf,MAAO6e,GAAYhe,QAAQ5Q,EAAE+P,GAAO9P,SAAU,uCAHlD,GAAIwL,GAASygB,GAAclpB,KAAKC,MAAM0M,wBAClCif,EAAenjB,EAAOmJ,QAAU5R,KAAKC,MAAM0M,sBAAsBhQ,KAAK8L,QAAUA,EAIhFohB,EAAQ,GACR9kB,EAAQpI,KACRqtB,EAAQ,CACZhqB,MAAKhD,EAAEgC,KAAKrC,KAAKiK,KAAKomB,MAAMvkB,OAAQ,SAASwkB,GACzC,GAAInvB,GAAQmvB,EAAQnvB,MAChBwC,EAAM,UAAYyE,EAAMwmB,KAAO,uBAAyB2B,UAAUpvB,EAAM8P,QAAQ,KAAK,MACrFxN,EAAcJ,KAAKmE,EAAE,SAASe,KAAK+nB,EAAQE,SAASrb,QACnDrJ,EAAOmJ,SAAYnJ,EAAOgH,KAAK3R,IAAW2K,EAAOgH,KAAKrP,MAG3D4pB,IACAH,GAAS9kB,EAAM0nB,gBACXnsB,IAAKA,EACLxC,MAAOA,EACPssB,OAAQjB,EAAUrrB,GAClBsC,YAAaA,EACb2qB,aAAc5B,EAAU/oB,GACxBC,WAAY0E,EAAM7G,OAAOT,QAAQ4C,gBAGzC0E,EAAMW,OAAOR,KAAK2kB,IACbphB,EAAOmJ,SAAWoY,EACnBrtB,KAAK6I,QAAQsM,KAAKkY,GAAOqB,OAEzB1uB,KAAK6I,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpBrtB,KAAKwH,EAAEknB,OAFP1uB,KAAKwH,EAAEQ,OAIXhI,KAAKuB,OAAOoH,cAGhBtF,KAAK6hB,UAAUjY,IAAIrM,UAAUgI,QAAU,WACnC,GAAIR,GAAQpI,IACZqD,MAAKmE,EAAE0iB,MACHvmB,IAAK,UAAYyE,EAAMwmB,KAAO,8DAAgEjB,mBAAmB3tB,KAAK8L,QAAU,eAChI6iB,SAAU,QACVrE,QAAS,SAASP,GACd3hB,EAAM6B,KAAO8f,EACb3hB,EAAM+H,aC5FlBsgB,OAAO,+BAA+B,SAAU,cAAe,SAAUjpB,EAAGnH,GACxE,YAQA,IAAIqwB,GAAsB,SAASC,EAAWhjB,GAC1C,GAAyB,mBAAdgjB,KACP3wB,KAAKgL,SAAW2lB,EAChB3wB,KAAKuB,OAASovB,EAAUpvB,OACxBvB,KAAKoG,QAAUuqB,EAAUpvB,OAAO6E,QAChCpG,KAAKc,QAAU6vB,EAAUpvB,OAAOT,QAChCd,KAAKye,MAAQ9Q,EACT3N,KAAKye,OAAO,CACZ,GAAIrW,GAAQpI,IACZA,MAAK4wB,eAAiB,WAClBxoB,EAAMyoB,QAAQC,QAAQ,KAE1B9wB,KAAK+wB,eAAiB,WAClBJ,EAAUK,qBAAqB5oB,GAC/B/H,EAAE4wB,MAAM,WACJN,EAAUE,YAGlB7wB,KAAKkxB,eAAiB,WAClB9oB,EAAM+oB,UAEVnxB,KAAKoxB,iBAAmB,WACpBhpB,EAAMipB,YAEVrxB,KAAKye,MAAMlT,GAAG,SAAUvL,KAAK4wB,gBAC7B5wB,KAAKye,MAAMlT,GAAG,SAAUvL,KAAK+wB,gBAC7B/wB,KAAKye,MAAMlT,GAAG,SAAUvL,KAAKkxB,gBAC7BlxB,KAAKye,MAAMlT,GAAG,WAAYvL,KAAKoxB,mBA6C3C,OAtCA/wB,GAAEqwB,EAAoB9vB,WAAWgT,QAC7B0d,OAAQ,SAASC,GACb,MAAOb,GAAoB9vB,UAAU2wB,GAAO/d,MAAMxT,KAAMW,MAAMC,UAAU6S,MAAMhT,KAAKC,UAAW,KAElGmwB,OAAQ,aACRW,OAAQ,aACR9C,KAAM,WAAa,MAAO,2BAC1B1mB,KAAM,aACNmpB,OAAQ,WACAnxB,KAAKye,OACLze,KAAKye,MAAM5E,QAAQ,aAG3BwX,SAAU,WACFrxB,KAAKye,OACLze,KAAKye,MAAM5E,QAAQ,eAG3B2S,UAAW,aACXiF,YAAa,aACbC,UAAW,aACXC,QAAS,WACD3xB,KAAKye,OACLze,KAAKye,MAAM5E,QAAQ,YAG3BpR,QAAS,WACDzI,KAAKye,QACLze,KAAKye,MAAMnQ,IAAI,SAAUtO,KAAK4wB,gBAC9B5wB,KAAKye,MAAMnQ,IAAI,SAAUtO,KAAK+wB,gBAC9B/wB,KAAKye,MAAMnQ,IAAI,SAAUtO,KAAKkxB,gBAC9BlxB,KAAKye,MAAMnQ,IAAI,WAAYtO,KAAKoxB,sBAGzCxnB,QAII8mB,IAIXD,OAAO,cAAe,SAAUjpB,EAAGnH,GAC/B,YACA,QACIuxB,SAAU,WACN,MAAO3oB,QAAO5F,KAAKC,OAEvBuuB,YAAa,WACT,MAAO5oB,QAAO5F,KAAKuI,aAO/B6kB,OAAO,uBAAuB,SAAU,aAAc,WAAY,+BAAgC,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,GACxH,YAEA,IAAIzuB,GAAQwuB,EAASF,WAMjBI,EAAc1uB,EAAM6P,QAAQ4e,EA4BhC,OA1BA1xB,GAAE2xB,EAAYpxB,WAAWgT,QACrB4d,OAAQ,SAASS,GACbjyB,KAAKkyB,OAAOV,OAAOS,IAEvBvD,KAAM,WACF1uB,KAAKkyB,OAAOxD,QAEhB1mB,KAAM,WACEhI,KAAKkyB,QACLlyB,KAAKkyB,OAAOlqB,QAGpBmpB,OAAQ,WACJnxB,KAAKkyB,OAAOf,UAEhBE,SAAU,SAASc,GACfnyB,KAAKkyB,OAAOb,aACPc,GAAeA,IAAenyB,KAAKoyB,uBAAyBD,EAAWC,wBAA0BpyB,KAAKoyB,wBACvGpyB,KAAKoyB,sBAAsBf,YAGnC5oB,QAAS,WACLzI,KAAKkyB,OAAOzpB,aAEjBmB,QAEIooB,IAKXvB,OAAO,2BAA4B,WAC/B,YAEA,IAAI4B,GAAa,s7CAGbC,GACAC,QACIC,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKvK,QAAQ,EAAG,GAAI,IAEzCwK,cAAe,SAAShb,EAAQib,GAC5B,MAAO,IAAInb,OAAMib,KAAKvK,OAAOxQ,EAAQib,KAG7CC,WACIJ,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKI,YAAW,GAAI,IAAM,EAAG,KAElDH,cAAe,SAAShb,EAAQib,GAC5B,MAAO,IAAInb,OAAMib,KAAKI,YAAYF,GAASA,IAAiB,EAAPA,EAAiB,EAAPA,MAGvEG,SACIN,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKnK,QAAQ,GAAI9Q,OAAMqb,YAAW,GAAI,IAAM,EAAG,MAEpEH,cAAe,SAAShb,EAAQib,GAC5B,MAAO,IAAInb,OAAMib,KAAKnK,QAAQ,GAAI9Q,OAAMqb,YAAYF,GAASA,EAAO,IAAY,EAAPA,EAAUA,OAG3FI,SACIP,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKO,gBAAgB,EAAG,GAAI,EAAG,IAEpDN,cAAe,SAAShb,EAAQib,GAC5B,MAAO,IAAInb,OAAMib,KAAKO,eAAetb,EAAQ,EAAGib,KAGxDM,SACIT,SAAU,WACN,GAAIU,GAAI,GAAI1b,OAAMib,KAAKI,YAAY1hB,KAAKgiB,OAAQhiB,KAAKgiB,QAAShiB,KAAKgiB,MAAOhiB,KAAKgiB,OAE/E,OADAD,GAAEE,OAAO,IACFF,GAEXR,cAAe,SAAShb,EAAQib,GAC5B,GAAIO,GAAI,GAAI1b,OAAMib,KAAKI,YAAYF,EAAOxhB,KAAKgiB,MAAM,GAAIR,EAAOxhB,KAAKgiB,MAAM,IAAKR,EAAOxhB,KAAKgiB,MAAOR,EAAOxhB,KAAKgiB,OAE/G,OADAD,GAAEE,OAAO,IACFF,IAGfG,MACIb,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKlK,MAAM,EAAG,GAAI,EAAG,EAAG,KAE7CmK,cAAe,SAAShb,EAAQib,GAC5B,MAAO,IAAInb,OAAMib,KAAKlK,KAAK7Q,EAAQ,EAAU,EAAPib,EAAiB,GAAPA,KAGxDW,OACId,SAAU,WACN,GAAIe,GAAO,GAAI/b,OAAMib,KAAKJ,EAC1B,OAAOkB,IAGXb,cAAe,SAAShb,EAAQib,GAC5B,GAAIY,GAAO,GAAI/b,OAAMib,KAAKJ,EAG1B,OAFAkB,GAAKC,MAAMb,GACXY,EAAK/xB,UAAUkW,GACR6b,IAGfE,UACIjB,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKO,gBAAgB,EAAE,GAAI,EAAG,IAEnDN,cAAe,SAAShb,EAAQib,GAC5B,GAAI3sB,GAAQ,GAAIwR,OAAMib,KAAKO,gBAAgB,EAAE,GAAI,EAAG,EAGpD,OAFAhtB,GAAMwtB,MAAMb,GACZ3sB,EAAMxE,UAAUkW,GACT1R,IAGf0tB,IAAO,SAASH,GACZ,OACIf,SAAU,WACN,MAAO,IAAIhb,OAAMib,KAAKc,IAE1Bb,cAAe,SAAShb,EAAQib,GAE5B,MAAO,IAAInb,OAAMib,SAM7BkB,EAAe,SAAU3tB,GAIzB,MAHa,QAAVA,GAAmC,mBAAVA,KACxBA,EAAQ,UAEW,SAApBA,EAAMuK,OAAO,EAAE,GACP+hB,EAASoB,IAAI1tB,EAAMuK,OAAO,KAEhCvK,IAASssB,KACVtsB,EAAQ,UAELssB,EAAStsB,IAKpB,OAFA2tB,GAAarB,SAAWA,EAEjBqB,IAIXlD,OAAO,qBAAqB,SAAU,aAAc,WAAY,8BAA+B,yBAA0B,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,EAAoB4B,GACnK,YAEA,IAAIrwB,GAAQwuB,EAASF,WASjBgC,EAAWtwB,EAAM6P,QAAQ4e,EAqmB7B,OAnmBA1xB,GAAEuzB,EAAShzB,WAAWgT,QAClBF,MAAO,WAcH,GAbA1T,KAAKgL,SAAS6oB,WAAWC,WACzB9zB,KAAK6E,KAAO,OACZ7E,KAAK+zB,aACL/zB,KAAKg0B,QAAS,EACdh0B,KAAKi0B,OAAO,EACRj0B,KAAKc,QAAQ4f,mBACb1gB,KAAKuyB,OAAO2B,YAAcl0B,KAAKc,QAAQggB,kBACvC9gB,KAAKm0B,QAAU,GAEfn0B,KAAKm0B,QAAU,EAEnBn0B,KAAKmB,MAAQqG,EAAE,0BAA0BU,SAASlI,KAAKgL,SAASopB,UAE5Dp0B,KAAKc,QAAQoF,YAAa,CAC1B,GAAI0F,GAAWkmB,EAASD,aACxB7xB,MAAKq0B,gBACkB,GAAIzoB,GAAS0oB,eAAet0B,KAAKgL,SAAU,MAC3C,GAAIY,GAAS2oB,iBAAiBv0B,KAAKgL,SAAU,MAC7C,GAAIY,GAAS4oB,eAAex0B,KAAKgL,SAAU,MAC3C,GAAIY,GAAS6oB,kBAAkBz0B,KAAKgL,SAAU,MAC9C,GAAIY,GAAS8oB,iBAAiB10B,KAAKgL,SAAU,OAEhEhL,KAAKc,QAAQwG,YACbtH,KAAKq0B,eAAehrB,KACZ,GAAIuC,GAAS+oB,eAAe30B,KAAKgL,SAAU,MAC3C,GAAIY,GAASgpB,eAAe50B,KAAKgL,SAAU,OAGvDhL,KAAK60B,wBAC0B,GAAIjpB,GAASkpB,iBAAiB90B,KAAKgL,SAAU,OAE5EhL,KAAK+0B,YAAc/0B,KAAKq0B,eAAenqB,OAAOlK,KAAK60B,uBAEnD,KAAK,GAAIjkB,GAAI,EAAGA,EAAI5Q,KAAK+0B,YAAY3yB,OAAQwO,IACzC5Q,KAAK+0B,YAAYnkB,GAAGwhB,sBAAwBpyB,IAEhDA,MAAKg1B,sBAELh1B,MAAKg1B,eAAiBh1B,KAAK+0B,cAE/B/0B,MAAKi1B,mBAAqB,EAEtBj1B,KAAKgL,SAASkqB,UACdl1B,KAAKgL,SAASkqB,QAAQrB,WAAWC,WACjC9zB,KAAKm1B,eAAiB,GAAI3d,OAAMib,KAAKvK,QAAQ,EAAG,GAAI,GACpDloB,KAAKm1B,eAAeC,iBAAmBp1B,KAAKgL,SAASkqB,QAAQG,UAAUD,iBACvEp1B,KAAKgL,SAASkqB,QAAQI,WAAWC,SAASv1B,KAAKm1B,kBAGvDK,gBAAiB,WACb,GAAIzyB,GAAa/C,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAAStD,WAAc,CAClF,OAAO/C,MAAKc,QAAQggB,mBAAqB/d,EAAU,IAAM/C,KAAKc,QAAQigB,sBAAwB/gB,KAAKc,QAAQggB,oBAAsB9gB,KAAKc,QAAQogB,wBAAwB,IAE1KwU,wBAAyB,WACrB,GAAI3yB,GAAa/C,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAAStD,WAAc,CAClF,OAAO/C,MAAKc,QAAQkgB,4BAA8Bje,EAAU,IAAM/C,KAAKc,QAAQmgB,+BAAiCjhB,KAAKc,QAAQkgB,6BAA+BhhB,KAAKc,QAAQogB,wBAAwB,IAErM6S,WAAY,WACJ,SAAW/zB,MAAKye,MAAMkX,eACf31B,MAAK+S,IAEb/S,KAAKuyB,SACJvyB,KAAKuyB,OAAO/U,eACLxd,MAAKuyB,QAGhBvyB,KAAK41B,aAAe,GAAIjC,GAAa3zB,KAAKye,MAAMpY,IAAI,UACpDrG,KAAKuyB,OAASvyB,KAAK41B,aAAapD,WAChCxyB,KAAKuyB,OAAO6C,iBAAmBp1B,KAC/BA,KAAKuyB,OAAOsD,aACZ71B,KAAKi1B,mBAAqB,GAE9BpE,OAAQ,SAAS/vB,GACT,SAAWd,MAAKye,MAAMkX,SAAW,UAAY70B,IAAWA,EAAQgwB,QAEhE9wB,KAAK+zB,YAET,IAAI+B,GAAgB,GAAIte,OAAMue,MAAM/1B,KAAKye,MAAMpY,IAAI,aAC/C2vB,EAAch2B,KAAKc,QAAQ+f,eAAiB1P,KAAK8kB,KAAKj2B,KAAKye,MAAMpY,IAAI,SAAW,GAAK/C,EAAMqS,gBAC1F3V,MAAKk2B,aAAgBl2B,KAAKm2B,eAC3Bn2B,KAAKm2B,aAAen2B,KAAKgL,SAASorB,cAAcN,IAEpD91B,KAAKq2B,cAAgBL,EAAch2B,KAAKgL,SAASyM,KAAK+b,MAClDxzB,KAAKi1B,qBAAuBj1B,KAAKq2B,gBACjCr2B,KAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAEod,kBAENt2B,KAAKuyB,OAAOiB,MAAMxzB,KAAKq2B,cAAgBr2B,KAAKi1B,oBACxCj1B,KAAKu2B,YACLv2B,KAAKu2B,WAAW/C,MAAMxzB,KAAKq2B,cAAgBr2B,KAAKi1B,qBAGxDj1B,KAAKuyB,OAAOtW,SAAWjc,KAAKm2B,aACxBn2B,KAAKu2B,aACLv2B,KAAKu2B,WAAWta,SAAWjc,KAAKm2B,aAAaK,SAASx2B,KAAKy2B,YAAYC,SAAS12B,KAAKq2B,iBAEzFr2B,KAAKi1B,mBAAqBj1B,KAAKq2B,aAE/B,IAAIM,GAAc32B,KAAKg1B,eAEnB4B,EAAU,CACV52B,MAAKye,MAAMpY,IAAI,qBACfuwB,EAAU,GACV52B,KAAKg1B,eAAiBh1B,KAAK60B,uBAC3B70B,KAAKuyB,OAAOsE,WAAa,EAAE,KAE3BD,EAAU,EACV52B,KAAKg1B,eAAiBh1B,KAAKq0B,eAC3Br0B,KAAKuyB,OAAOsE,UAAY,MAExB72B,KAAK82B,UAAY92B,KAAKgL,SAAS+rB,eAAiB/2B,KAAKi0B,QACjD0C,IAAgB32B,KAAKg1B,gBACrB2B,EAAYld,QAAQ,SAASP,GACzBA,EAAElR,SAGVhI,KAAKg1B,eAAevb,QAAQ,SAASP,GACjCA,EAAEwV,UAIN1uB,KAAKu2B,aACLv2B,KAAKu2B,WAAWK,QAAU52B,KAAKg3B,YAAwB,GAAVJ,EAAiBA,EAAU,KAG5E52B,KAAKuyB,OAAO/Z,UAAYxY,KAAKg3B,YAAch3B,KAAKc,QAAQygB,4BAA8BvhB,KAAKc,QAAQwgB,gBAEnGthB,KAAKuyB,OAAOqE,QAAU52B,KAAKc,QAAQ4f,kBAAoBkW,EAAU,GAIjE,IAAIruB,GAAOvI,KAAKye,MAAMpY,IAAI,SACtB6I,EAAMC,SAASC,cAAc,MACjCF,GAAIO,UAAYlH,CAChB,IAAI0uB,GAAc/nB,EAAIgoB,aAAehoB,EAAIioB,WAAa,GAElD/mB,EAAQ6mB,GAAej3B,KAAKuB,OAAOC,UAAUxB,KAAKc,QAAQ6gB,uBAAyB,EACvFvR,GAAQ9M,EAAM5B,YAAY0O,EAAOpQ,KAAKc,QAAQ4gB,uBAKd,gBAArB1hB,MAAKg3B,cACZ5mB,EAAQpQ,KAAKg3B,YAAY/lB,QAAQ5Q,EAAE+P,GAAO9P,SAAS,0CAIvD,IAAI82B,GAAcp3B,KAAKye,MAAMpY,IAAI,WAAa7B,WAAc,EAAG6yB,cAAe,UAC1EC,EAAYF,EAAW5yB,YAAc,EACrC+yB,EAAaH,EAAW7yB,aAAevE,KAAKc,QAAQ0gB,iBAEpDgW,GACAC,cAAe,MAGF,KAAdH,IACCE,EAAW,aAAeF,EAAU7yB,QAAQ,GAAG,MAGjC,YAAf8yB,IACCC,EAAWv2B,MAAQs2B,EAGvB,IAAIG,GAAYlwB,EAAE,UAAUuJ,IAAIymB,GAAYjvB,KAAK6H,EAEjDpQ,MAAKmB,MAAMw2B,QAAQC,OAAOF,EAE1B,IAAIG,GAAe73B,KAAKw1B,iBACxBx1B,MAAKmB,MAAM4P,KACPjC,KAAM9O,KAAKm2B,aAAa5e,EACxBvI,IAAKhP,KAAKm2B,aAAape,EAAI/X,KAAKq2B,cAAgBr2B,KAAKm0B,QAAUn0B,KAAKc,QAAQ2gB,oBAAsB,GAAIoW,EACtGjB,QAASA,GAEb,IAAIkB,GAAU93B,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAASpF,QAAWjB,KAAKye,MAAMpY,IAAI,eAAiB/C,EAAM4S,kBAAkBlW,KAAKuB,SAAS8E,IAAI,SAClJ0xB,EAAS/3B,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAASxD,KAAQ7C,KAAKc,QAAQ2f,mBAAqB,IAC1GzgB,MAAKuyB,OAAO2B,YAAc2D,EAC1B73B,KAAKuyB,OAAOyF,YAAcF,EAC1B93B,KAAKuyB,OAAOsE,UAAYkB,CACxB,IAAIE,GAAMj4B,KAAKm2B,YACfn2B,MAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAEsY,OAAOyG,IAEb,IAAIC,GAAYl4B,KAAK+S,GAarB,IAZA/S,KAAK+S,IAAM/S,KAAKye,MAAMpY,IAAI,SACtBrG,KAAK+S,KAAO/S,KAAK+S,MAAQmlB,IACzBl4B,KAAKm4B,YACFn4B,KAAKuyB,QACJvyB,KAAKuyB,OAAOsD,cAGhB71B,KAAKu2B,aAAev2B,KAAK+S,MACzB/S,KAAKu2B,WAAW/Y,eACTxd,MAAKu2B,YAGZv2B,KAAKgL,SAASkqB,QAAS,CACvBl1B,KAAKm1B,eAAe3c,UAAYsf,CAChC,IAAIM,GAAUp4B,KAAKgL,SAASqtB,gBAAgBvC,GAC5CwC,EAAat4B,KAAKgL,SAASkqB,QAAQ1B,MAAQwC,EAC3CuC,EAAW,GAAI/gB,OAAMghB,MAAMF,EAAYA,GACvCt4B,MAAKm1B,eAAesD,UAAUL,EAAQ5B,SAAS+B,GAAWA,EAAS7B,SAAS,IAGhF,KAAuB,mBAAZ51B,IAA6B,mBAAqBA,IAAaA,EAAQ43B,iBAAiB,CAC/F,GAAItwB,GAAQpI,IACZK,GAAEgC,KACMrC,KAAKoG,QAAQC,IAAI,SAAS4X,OAClB,SAAU0a,GACN,MAASA,GAAGtyB,IAAI,QAAU+B,EAAMqW,OAAWka,EAAGtyB,IAAI,UAAY+B,EAAMqW,QAGhF,SAASzd,EAAMsY,EAAOyW,GAClB,GAAI6I,GAAOxwB,EAAM4C,SAAS6tB,yBAAyB73B,EAC/C43B,IAA4C,mBAA7BA,GAAKE,qBAAwF,mBAA1CF,GAAKE,oBAAoB3C,cAAkE,mBAA3ByC,GAAKG,mBAAoF,mBAAxCH,GAAKG,kBAAkB5C,cAC1MyC,EAAK/H,WAKrB7wB,KAAKi0B,MACLj0B,KAAK0uB,MAAK,GAEN1uB,KAAKg0B,QAAUh0B,KAAKgI,QAGhCmwB,UAAW,WACP,GAAIa,GAAS,IACsC,oBAAxCh5B,MAAKgL,SAASiuB,YAAYj5B,KAAK+S,MACtCimB,EAAS,GAAIhmB,OACbhT,KAAKgL,SAASiuB,YAAYj5B,KAAK+S,KAAOimB,EACtCA,EAAO/lB,IAAMjT,KAAK+S,KAElBimB,EAASh5B,KAAKgL,SAASiuB,YAAYj5B,KAAK+S,IAE5C,IAAI3K,GAAQpI,IACZ,IAAIg5B,EAAOtqB,MAAO,CAEV1O,KAAKu2B,YACLv2B,KAAKu2B,WAAW/Y,SAEpBxd,KAAKgL,SAAS6oB,WAAWC,UACzB,IAAIplB,GAAQsqB,EAAOtqB,MACfE,EAASoqB,EAAOpqB,OAChBsqB,EAAWl5B,KAAKye,MAAMpY,IAAI,aAC1B8yB,EAAmC,mBAAbD,IAA4BA,EAClDE,EAAQ,KACRC,EAAa,KACbC,EAAc,IAElB,IAAIH,EAAa,CACbC,EAAQ,GAAI5hB,OAAMib,IAClB,IAAI8G,GAAeL,EAAS5N,MAAM,sBAClCkO,GAAc,EAAE,GAChBC,EAAOC,EAAAA,EACPC,EAAOD,EAAAA,EACPE,IAAQF,EAAAA,GACRG,IAAQH,EAAAA,GAEJI,EAAkB,SAASC,EAAMC,GACjC,GAAIC,GAAYF,EAAKtmB,MAAM,GAAG/H,IAAI,SAAS2F,EAAG2C,GAC1C,GAAId,GAAMgnB,WAAW7oB,GACrB8oB,EAAMnmB,EAAI,CAgBV,OAdId,GADAinB,GACQjnB,EAAM,IAAQtE,GAEdsE,EAAM,IAAQxE,EAEtBsrB,IACA9mB,GAAOsmB,EAAWW,IAElBA,GACAR,EAAOxoB,KAAKgH,IAAIwhB,EAAMzmB,GACtB2mB,EAAO1oB,KAAK8G,IAAI4hB,EAAM3mB,KAEtBumB,EAAOtoB,KAAKgH,IAAIshB,EAAMvmB,GACtB0mB,EAAOzoB,KAAK8G,IAAI2hB,EAAM1mB,IAEnBA,GAGX,OADAsmB,GAAaS,EAAUxmB,OAAM,GACtBwmB,EAGXV,GAAa9f,QAAQ,SAAS2gB,GAC1B,GAAIC,GAASD,EAAM9O,MAAM,wBAA0B,GACnD,QAAO+O,EAAO,IACd,IAAK,IACDjB,EAAM5H,OAAOsI,EAAgBO,GAC7B,MACJ,KAAK,IACDjB,EAAM5H,OAAOsI,EAAgBO,GAAQ,GACrC,MACJ,KAAK,IACDjB,EAAMkB,OAAOR,EAAgBO,GAC7B,MACJ,KAAK,IACDjB,EAAMkB,OAAOR,EAAgBO,GAAQ,GACrC,MACJ,KAAK,IACDjB,EAAMmB,aAAaT,EAAgBO,GACnC,MACJ,KAAK,IACDjB,EAAMmB,aAAaT,EAAgBO,GAAQ,GAC3C,MACJ,KAAK,IACDjB,EAAMoB,iBAAiBV,EAAgBO,GACvC,MACJ,KAAK,IACDjB,EAAMoB,iBAAiBV,EAAgBO,GAAQ,OAKvDhB,EAAaloB,KAAKnR,KAAKc,QAAQ8f,sBAAwB,MAAQ,OAAOgZ,EAAOH,EAAMI,EAAOF,GAAQ,EAClGL,EAAc,GAAI9hB,OAAMue,OAAO6D,EAAOH,GAAQ,GAAII,EAAOF,GAAQ,GAC5D35B,KAAKc,QAAQ4f,oBACd1gB,KAAKm0B,SAAW0F,EAAOF,IAAS,EAAIN,QAGxCA,GAAaloB,KAAKnR,KAAKc,QAAQ8f,sBAAwB,MAAQ,OAAOlS,EAAOE,GAAU,EACvF0qB,EAAc,GAAI9hB,OAAMue,MAAM,EAAE,GAC3B/1B,KAAKc,QAAQ4f,oBACd1gB,KAAKm0B,QAAUvlB,GAAU,EAAIyqB,GAGrC,IAAIoB,GAAU,GAAIjjB,OAAMkjB,OAAO1B,EAW/B,IAVAyB,EAAQE,QAAS,EACbxB,IACAsB,EAAU,GAAIjjB,OAAMojB,MAAMxB,EAAOqB,GACjCA,EAAQ7D,QAAU,IAIlB6D,EAAQI,SAAU,EAClBzB,EAAMhE,iBAAmBp1B,MAEzBA,KAAKc,QAAQ6f,iBAAkB,CAC/B,GAAIma,GAAc96B,KAAK41B,aAAalD,cAAc4G,EAAaD,EAC/DoB,GAAU,GAAIjjB,OAAMojB,MAAME,EAAaL,GACvCA,EAAQ7D,QAAU,IAClB6D,EAAQI,SAAU,EAClBC,EAAY1F,iBAAmBp1B,KAEnCA,KAAKy2B,YAAc6C,EAAYyB,OAAO1B,GACtCr5B,KAAKu2B,WAAakE,EAClBz6B,KAAKu2B,WAAWnB,iBAAmBhtB,EACnCpI,KAAKu2B,WAAW/C,MAAMxzB,KAAKq2B,cAAgBgD,GAC3Cr5B,KAAKu2B,WAAWta,SAAWjc,KAAKm2B,aAAaK,SAASx2B,KAAKy2B,YAAYC,SAAS12B,KAAKq2B,gBACrFr2B,KAAKu2B,WAAWyE,YAAYh7B,KAAKuyB,YAEjC/qB,GAAEwxB,GAAQztB,GAAG,OAAQ,WACjBnD,EAAM+vB,eAIlB8C,WAAY,SAASC,GACbl7B,KAAKc,QAAQoF,YACRlG,KAAKuB,OAAO4I,YACbnK,KAAKk2B,aAAc,EACnBl2B,KAAKm2B,aAAen2B,KAAKm2B,aAAa5d,IAAI2iB,GAC1Cl7B,KAAK6wB,UAGT7wB,KAAKgL,SAASyM,KAAKwjB,WAAWC,IAGtCC,WAAY,WACRn7B,KAAKgL,SAASowB,4BAA4B,SAC1C,IAAIC,GAAUr7B,KAAKgL,SAASswB,kBAAkB,aAAa,KAC3DD,GAAQjJ,sBAAwBpyB,KAChCq7B,EAAQE,QAEZpK,OAAQ,WACJqK,aAAax7B,KAAKy7B,cAClBz7B,KAAK82B,UAAW,EAChB92B,KAAKuyB,OAAO2B,YAAcl0B,KAAK01B,0BAC3B11B,KAAKgL,SAAS+rB,eAAiB/2B,KAAKg0B,QACpCh0B,KAAKg1B,eAAevb,QAAQ,SAASP,GACjCA,EAAEwV,QAGV,IAAIgN,GAAO17B,KAAKye,MAAMpY,IAAI,MACtBq1B,IACAl0B,EAAE,gBAAgBnF,KAAK,WACnB,GAAImK,GAAMhF,EAAExH,KACRwM,GAAInE,KAAK,cAAgBqzB,GACzBlvB,EAAIvE,SAAS,cAIpBjI,KAAKc,QAAQoF,aACdlG,KAAKm7B,aAGLn7B,KAAKgL,SAASkqB,UACdl1B,KAAKm1B,eAAejB,YAAcl0B,KAAKc,QAAQsf,yBAC/CpgB,KAAKm1B,eAAe6C,YAAch4B,KAAKc,QAAQqf,yBAG/CngB,KAAKg0B,OACLh0B,KAAK0uB,MAAK,GAGV1uB,KAAK27B,eAAc,GAEvB37B,KAAKsxB,OAAO,WAEhBsK,YAAa,WACT57B,KAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAElR,eAEChI,MAAkB,eAE7BqxB,SAAU,SAASc,GACf,IAAKA,GAAcA,EAAWC,wBAA0BpyB,KAAM,CAC1DA,KAAK82B,UAAW,CAChB,IAAI1uB,GAAQpI,IACZA,MAAK67B,gBAAkBlR,WAAW,WAAaviB,EAAMwzB,eAAkB,KACvE57B,KAAKuyB,OAAO2B,YAAcl0B,KAAKw1B,kBAC/BhuB,EAAE,gBAAgBikB,YAAY,YAC1BzrB,KAAKgL,SAASkqB,UACdl1B,KAAKm1B,eAAe6C,YAAc8D,QAGlC97B,KAAKg0B,QACLh0B,KAAKgL,SAASowB,4BAA4B,UAC1Cp7B,KAAKgI,QAGLhI,KAAK+7B,eAAc,GAEvB/7B,KAAKsxB,OAAO,cAGpB0K,WAAY,WACR,GAAI5zB,GAAQpI,IACZA,MAAKy7B,aAAe9Q,WAAW,WAC3BviB,EAAMJ,QACP,MAEPA,KAAM,WACF,GAAII,GAAQpI,IACZA,MAAKi0B,OAAQ,EACbj0B,KAAKg0B,QAAS,EACiB,mBAApBh0B,MAAKu2B,aACZv2B,KAAKu2B,WAAWK,QAAU,GAE9B52B,KAAK47B,cACL57B,KAAKuyB,OAAOqE,QAAU,EACtB52B,KAAKmB,MAAM4P,IAAI,UAAW,GAC1B/Q,KAAKm1B,eAAeyB,QAAU,EAG9Bv2B,EAAEgC,KACMrC,KAAKoG,QAAQC,IAAI,SAAS4X,OAClB,SAAU0a,GACN,MAASA,GAAGtyB,IAAI,QAAU+B,EAAMqW,OAAWka,EAAGtyB,IAAI,UAAY+B,EAAMqW,QAGhF,SAASzd,EAAMsY,EAAOyW,GAClB,GAAI6I,GAAOxwB,EAAM4C,SAAS6tB,yBAAyB73B,EAC/C43B,IAA4C,mBAA7BA,GAAKE,qBAAwF,mBAA1CF,GAAKE,oBAAoB3C,cAAkE,mBAA3ByC,GAAKG,mBAAoF,mBAAxCH,GAAKG,kBAAkB5C,cAC1MyC,EAAK5wB,SAIrBhI,KAAK+7B,eAAc,IAEvBrN,KAAM,SAASuF,GACX,GAAI7rB,GAAQpI,IACZA,MAAKi0B,MAAQA,EACTj0B,KAAKi0B,OAC0B,mBAApBj0B,MAAKu2B,aACZv2B,KAAKu2B,WAAWK,QAAU52B,KAAKc,QAAQ0f,eAE3CxgB,KAAKuyB,OAAOqE,QAAU52B,KAAKc,QAAQ0f,cACnCxgB,KAAKmB,MAAM4P,IAAI,UAAW/Q,KAAKc,QAAQ0f,eACvCxgB,KAAKm1B,eAAeyB,QAAU52B,KAAKc,QAAQ0f,gBAE3CxgB,KAAKm1B,eAAeyB,QAAU,EAC9B52B,KAAKg0B,QAAS,EACdh0B,KAAK6wB,UAGTxwB,EAAEgC,KACMrC,KAAKoG,QAAQC,IAAI,SAAS4X,OAClB,SAAU0a,GACN,MAASA,GAAGtyB,IAAI,QAAU+B,EAAMqW,OAAWka,EAAGtyB,IAAI,UAAY+B,EAAMqW,QAGhF,SAASzd,EAAMsY,EAAOyW,GAClB,GAAI6I,GAAOxwB,EAAM4C,SAAS6tB,yBAAyB73B,EAC/C43B,IAA4C,mBAA7BA,GAAKE,qBAAwF,mBAA1CF,GAAKE,oBAAoB3C,cAAkE,mBAA3ByC,GAAKG,mBAAoF,mBAAxCH,GAAKG,kBAAkB5C,cAC1MyC,EAAKlK,KAAKtmB,EAAM6rB,UAKpC8H,cAAe,SAASE,GACpB,GAAI7zB,GAAQpI,IACZK,GAAEgC,KACMrC,KAAKoG,QAAQC,IAAI,SAAS4X,OAClB,SAAU0a,GACN,MAAQA,GAAGtyB,IAAI,UAAY+B,EAAMqW,QAG7C,SAASzd,EAAMsY,EAAOyW,GAClB,GAAI6I,GAAOxwB,EAAM4C,SAAS6tB,yBAAyB73B,EAAKqF,IAAI,MACxDuyB,IAAQA,EAAK3E,QACTgI,EAAQrD,EAAKoD,aAAsBpD,EAAK5wB,WAKhE2zB,cAAe,SAAS1H,GACpB,GAAI7rB,GAAQpI,IACZK,GAAEgC,KACMrC,KAAKoG,QAAQC,IAAI,SAAS4X,OAClB,SAAU0a,GACN,MAAQA,GAAGtyB,IAAI,UAAY+B,EAAMqW,QAG7C,SAASzd,EAAMsY,EAAOyW,GAClB,GAAI6I,GAAOxwB,EAAM4C,SAAS6tB,yBAAyB73B,EAAKqF,IAAI,MAC5D,IAAIuyB,GAAQA,EAAK5E,SACb4E,EAAKlK,KAAKuF,IACLA,GAAM,CACP,GAAIiI,GAAY9zB,EAAM4C,SAASyM,KAAK0kB,YAAYC,QAAQxD,EAAKna,MAAMtD,GAC/D+gB,MAAc,GACd9zB,EAAM4C,SAASyM,KAAK0kB,YAAYE,OAAOH,EAAW,OAO9E1P,UAAW,SAAS8P,GAChB,GAAIC,GAAUD,IAAiB,CAC3Bt8B,MAAKg3B,cAAgBuF,IAGzBv8B,KAAKg3B,YAAcuF,EACnBv8B,KAAK6wB,SACL7wB,KAAKgL,SAASwxB,uBAElB/K,YAAa,WACJzxB,KAAKg3B,cAGVh3B,KAAKg3B,aAAc,EACnBh3B,KAAK6wB,SACL7wB,KAAKgL,SAASwxB,uBAElBC,WAAY,WACR,GAAIjmB,GAAUxW,KAAKgL,SAAS0xB,cAAc18B,KAAKm2B,cAC/CpM,GACI9N,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAGf/X,MAAKgL,SAAS+rB,cACd/2B,KAAKye,MAAM7D,IAAImP,IAGvB2H,UAAW,SAASiL,EAAQC,GACpBA,IACA58B,KAAKgL,SAAS6xB,cACd78B,KAAKmxB,WAGbQ,QAAS,SAASgL,EAAQC,GACtB,GAAI58B,KAAKgL,SAASkrB,aAAel2B,KAAKgL,SAAS+rB,aAC3C/2B,KAAKy8B,iBAEL,IAAIz8B,KAAKg0B,OAAQ,CACb,GAAI1a,GAAQtZ,KAAKgL,SAASyM,KAAK0kB,YAAYC,QAAQp8B,KAAKye,MAAMtD,GAC1D7B,MAAU,GACVtZ,KAAKgL,SAASyM,KAAK0kB,YAAYE,OAAO/iB,EAAO,GAEjDtZ,KAAK0uB,MAAK,GACV1uB,KAAKmxB,aAEAyL,IAAa58B,KAAKye,MAAMpY,IAAI,qBAC7BrG,KAAKm7B,aAETn7B,KAAKye,MAAM5E,QAAQ,UAG3B7Z,MAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EAC5Bl2B,KAAKk2B,aAAc,GAEvBztB,QAAS,SAASk0B,GACd38B,KAAKsxB,OAAO,WACZtxB,KAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAEzQ,YAENzI,KAAKuyB,OAAO/U,SACZxd,KAAKmB,MAAMqc,SACPxd,KAAKgL,SAASkqB,SACdl1B,KAAKm1B,eAAe3X,SAEpBxd,KAAKu2B,YACLv2B,KAAKu2B,WAAW/Y,YAGzB5T,QAEIgqB,IAKXnD,OAAO,iBAAiB,SAAU,aAAc,WAAY,+BAAgC,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,GAClH,YAEA,IAAIzuB,GAAQwuB,EAASF,WAKjB1V,EAAO5Y,EAAM6P,QAAQ4e,EAuTzB,OArTA1xB,GAAE6b,EAAKtb,WAAWgT,QACdF,MAAO,WAwBH,GAvBA1T,KAAKgL,SAAS+xB,WAAWjJ,WACzB9zB,KAAK6E,KAAO,OACZ7E,KAAKg0B,QAAS,EACdh0B,KAAKi0B,OAAQ,EACbj0B,KAAKg3B,aAAc,EACnBh3B,KAAK84B,oBAAsB94B,KAAKgL,SAAS6tB,yBAAyB74B,KAAKye,MAAMpY,IAAI,SACjFrG,KAAK+4B,kBAAoB/4B,KAAKgL,SAAS6tB,yBAAyB74B,KAAKye,MAAMpY,IAAI,OAC/ErG,KAAKg9B,OAASh9B,KAAKgL,SAASiyB,aAAaj9B,MACzCA,KAAKk9B,KAAO,GAAI1lB,OAAMib,KACtBzyB,KAAKk9B,KAAK3kB,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAC7BvY,KAAKk9B,KAAK9H,iBAAmBp1B,KAC7BA,KAAKk9B,KAAKhJ,YAAcl0B,KAAKc,QAAQghB,kBACrC9hB,KAAKm9B,YAAc,EACnBn9B,KAAKiD,MAAQ,GAAIuU,OAAMib,KACvBzyB,KAAKiD,MAAMsV,KACD,EAAG,IACHvY,KAAKc,QAAQuhB,kBAAmBriB,KAAKc,QAAQwhB,iBAAmB,IAChE,EAAGtiB,KAAKc,QAAQwhB,mBAE1BtiB,KAAKiD,MAAMm6B,MAAQ,GAAI5lB,OAAMue,OAAQ/1B,KAAKc,QAAQuhB,kBAAoB,EAAGriB,KAAKc,QAAQwhB,iBAAmB,IACzGtiB,KAAKiD,MAAMmyB,iBAAmBp1B,KAC9BA,KAAKmV,KAAO3N,EAAE,wCAAwCU,SAASlI,KAAKgL,SAASopB,UAC7Ep0B,KAAKq9B,YAAc,EACfr9B,KAAKc,QAAQoF,YAAa,CAC1B,GAAI0F,GAAWkmB,EAASD,aACxB7xB,MAAKq0B,gBACkB,GAAIzoB,GAAS0xB,eAAet9B,KAAKgL,SAAU,MAC3C,GAAIY,GAAS2xB,iBAAiBv9B,KAAKgL,SAAU,OAEpEhL,KAAK60B,wBAC0B,GAAIjpB,GAAS4xB,iBAAiBx9B,KAAKgL,SAAU,OAE5EhL,KAAK+0B,YAAc/0B,KAAKq0B,eAAenqB,OAAOlK,KAAK60B,uBACnD,KAAK,GAAIjkB,GAAI,EAAGA,EAAI5Q,KAAK+0B,YAAY3yB,OAAQwO,IACzC5Q,KAAK+0B,YAAYnkB,GAAGwhB,sBAAwBpyB,IAEhDA,MAAKg1B,sBAELh1B,MAAKg1B,eAAiBh1B,KAAK+0B,cAG3B/0B,MAAKgL,SAASkqB,UACdl1B,KAAKgL,SAASkqB,QAAQ6H,WAAWjJ,WACjC9zB,KAAKy9B,aAAe,GAAIjmB,OAAMib,KAC9BzyB,KAAKy9B,aAAallB,KAAK,EAAE,IAAI,EAAE,IAC/BvY,KAAKy9B,aAAarI,iBAAmBp1B,KAAKgL,SAASkqB,QAAQG,UAAUD,iBACrEp1B,KAAKy9B,aAAavJ,YAAc,IAGxCsB,gBAAiB,WACb,GAAIzyB,GAAa/C,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAAStD,WAAc,CAClF,OAAO/C,MAAKc,QAAQghB,mBAAqB/e,EAAU,IAAM/C,KAAKc,QAAQihB,sBAAwB/hB,KAAKc,QAAQghB,oBAAsB9hB,KAAKc,QAAQohB,wBAAwB,IAE1KwT,wBAAyB,WACrB,GAAI3yB,GAAa/C,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAAStD,WAAc,CAClF,OAAO/C,MAAKc,QAAQkhB,4BAA8Bjf,EAAU,IAAM/C,KAAKc,QAAQmhB,+BAAiCjiB,KAAKc,QAAQkhB,6BAA+BhiB,KAAKc,QAAQohB,wBAAwB,IAErMwb,eAAgB,WACZ,GAAI36B,GAAa/C,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAAStD,WAAc,CAClF,OAAO,IAAKA,EAAU,IAAO/C,KAAKc,QAAQyhB,qBAAuBviB,KAAKc,QAAQwhB,iBAAoB,IAAMtiB,KAAKc,QAAQohB,wBAAwB,IAEjJ2O,OAAQ,WACJ,GAAI1U,GAAOnc,KAAKye,MAAMpY,IAAI,QACtB+V,EAAKpc,KAAKye,MAAMpY,IAAI,KACxB,IAAK8V,GAASC,KAAOpc,KAAKg0B,QAAWh0B,KAAKi0B,OAA1C,CAKA,GAFAj0B,KAAK84B,oBAAsB94B,KAAKgL,SAAS6tB,yBAAyB1c,GAClEnc,KAAK+4B,kBAAoB/4B,KAAKgL,SAAS6tB,yBAAyBzc,GACxB,mBAA7Bpc,MAAK84B,qBAAyE,mBAA3B94B,MAAK+4B,mBAC1D/4B,KAAK84B,oBAAoB9E,SAAWh0B,KAAK84B,oBAAoB7E,OAC7Dj0B,KAAK+4B,kBAAkB/E,SAAWh0B,KAAK+4B,kBAAkB9E,MAE9D,WADAj0B,MAAKgI,MAGT,IAmBI21B,GAnBA9F,EAAe73B,KAAKw1B,kBACpBoI,EAAe59B,KAAK09B,iBACpBG,EAAO79B,KAAK84B,oBAAoB3C,aAChC2H,EAAO99B,KAAK+4B,kBAAkB5C,aAC9B4H,EAAKD,EAAKtH,SAASqH,GACnBG,EAAKD,EAAG37B,OACR67B,EAAKF,EAAGhD,OAAOiD,GACfE,EAAS,GAAI1mB,OAAMue,QAASkI,EAAGlmB,EAAGkmB,EAAG1mB,IACrC4mB,EAAan+B,KAAKg9B,OAAOoB,YAAYp+B,MACrCk7B,EAASgD,EAAOxH,SAAU12B,KAAKc,QAAQ0hB,oBAAsB2b,GAC7DE,EAAOR,EAAKtlB,IAAI2iB,GAChBoD,EAAOR,EAAKvlB,IAAI2iB,GAChBqD,EAAKR,EAAGS,MACRC,EAAaP,EAAOxH,SAAS12B,KAAKc,QAAQqhB,oBAAsB,GAAMyb,EAAe59B,KAAKc,QAAQwhB,kBAClGoc,EAAUX,EAAGhD,OAAO,GACpBjD,EAAU93B,KAAKg3B,aAAeh3B,KAAKc,QAAQ2hB,wBACtCziB,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAASpF,QACnDjB,KAAKye,MAAMpY,IAAI,eAAiB/C,EAAM4S,kBAAkBlW,KAAKuB,SAAS8E,IAAI,SAC/E0xB,EAAS/3B,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAASxD,KAAQ7C,KAAKc,QAAQ2f,mBAAqB,IAGtGzgB,MAAKye,MAAMpY,IAAI,qBAAuBrG,KAAK84B,oBAAoBra,MAAMpY,IAAI,qBAAuBrG,KAAK+4B,kBAAkBta,MAAMpY,IAAI,qBACjIs3B,EAAW,GACX39B,KAAKk9B,KAAKrG,WAAa,EAAG,KAE1B8G,EAAW39B,KAAKi0B,MAAQj0B,KAAKc,QAAQ0f,cAAgB,EACrDxgB,KAAKk9B,KAAKrG,UAAY,KAG1B,IAAIF,GAAc32B,KAAKg1B,cAEvBh1B,MAAKiD,MAAM07B,QACN3+B,KAAKye,MAAMgX,IAAI,UAAYz1B,KAAKye,MAAMpY,IAAI,SAASpD,QACnDjD,KAAKye,MAAMgX,IAAI,UACyB,mBAAlCz1B,MAAKye,MAAMpY,IAAI,SAASpD,MAEnCjD,KAAKg1B,eAAiBh1B,KAAKye,MAAMpY,IAAI,oBAAsBrG,KAAK60B,uBAAyB70B,KAAKq0B,eAE1Fr0B,KAAK82B,UAAY92B,KAAKgL,SAAS+rB,cAAgBJ,IAAgB32B,KAAKg1B,iBACpE2B,EAAYld,QAAQ,SAASP,GACzBA,EAAElR,SAENhI,KAAKg1B,eAAevb,QAAQ,SAASP,GACjCA,EAAEwV,UAIV1uB,KAAKm2B,aAAekI,EAAK9lB,IAAI+lB,GAAMvD,OAAO,GAC1C/6B,KAAKk9B,KAAKhJ,YAAc2D,EACxB73B,KAAKk9B,KAAKlF,YAAcF,EACxB93B,KAAKk9B,KAAKrG,UAAYkB,EACtB/3B,KAAKk9B,KAAKtG,QAAU+G,EACpB39B,KAAKk9B,KAAK7kB,SAAS,GAAGC,MAAQulB,EAC9B79B,KAAKk9B,KAAK7kB,SAAS,GAAGC,MAAQtY,KAAKm2B,aACnCn2B,KAAKk9B,KAAK7kB,SAAS,GAAGumB,SAAWF,EAAQhI,UAAS,GAClD12B,KAAKk9B,KAAK7kB,SAAS,GAAGwmB,UAAYH,EAClC1+B,KAAKk9B,KAAK7kB,SAAS,GAAGC,MAAQwlB,EAC9B99B,KAAKiD,MAAMuwB,MAAMoK,EAAe59B,KAAKm9B,aACrCn9B,KAAKm9B,YAAcS,EACnB59B,KAAKiD,MAAMuV,UAAYsf,EACvB93B,KAAKiD,MAAM2zB,QAAU+G,EACrB39B,KAAKiD,MAAMmwB,OAAOmL,EAAKv+B,KAAKq9B,YAAar9B,KAAKiD,MAAM67B,OAAOpnB,QAC3D1X,KAAKiD,MAAMgZ,SAAWjc,KAAKm2B,aAE3Bn2B,KAAKq9B,YAAckB,EACfA,EAAK,KACLA,GAAM,IACNE,EAAaA,EAAW/H,UAAS,IAEjC6H,GAAK,KACLA,GAAM,IACNE,EAAaA,EAAW/H,UAAS,GAErC,IAAItmB,GAAQpQ,KAAKye,MAAMpY,IAAI,UAAYrG,KAAKuB,OAAOC,UAAUxB,KAAKc,QAAQ4hB,uBAAyB,EACnGtS,GAAQ9M,EAAM5B,YAAY0O,EAAOpQ,KAAKc,QAAQ4gB,uBACd,gBAArB1hB,MAAKg3B,YACZh3B,KAAKmV,KAAK5M,KAAKvI,KAAKg3B,YAAY/lB,QAAQ5Q,EAAE+P,GAAO9P,SAAS,2CAE1DN,KAAKmV,KAAKA,KAAK/E,EAEnB,IAAI2uB,GAAW/+B,KAAKm2B,aAAa5d,IAAIkmB,EACrCz+B,MAAKmV,KAAKpE,KACNjC,KAAMiwB,EAASxnB,EACfvI,IAAK+vB,EAAShnB,EACdinB,UAAW,UAAYT,EAAK,OAC5BU,iBAAkB,UAAYV,EAAK,OACnCW,oBAAqB,UAAYX,EAAK,OACtC3H,QAAS+G,IAEb39B,KAAKm/B,WAAaZ,CAElB,IAAItG,GAAMj4B,KAAKm2B,YACfn2B,MAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAEsY,OAAOyG,KAGTj4B,KAAKgL,SAASkqB,UACdl1B,KAAKy9B,aAAazF,YAAcF,EAChC93B,KAAKy9B,aAAaplB,SAAS,GAAGC,MAAQtY,KAAKgL,SAASqtB,gBAAgB,GAAI7gB,OAAMue,MAAM/1B,KAAK84B,oBAAoBra,MAAMpY,IAAI,cACvHrG,KAAKy9B,aAAaplB,SAAS,GAAGC,MAAQtY,KAAKgL,SAASqtB,gBAAgB,GAAI7gB,OAAMue,MAAM/1B,KAAK+4B,kBAAkBta,MAAMpY,IAAI,iBAG7H2B,KAAM,WACFhI,KAAKg0B,QAAS,EACdh0B,KAAKi0B,OAAQ,EAEbj0B,KAAKmV,KAAKnN,OACVhI,KAAKk9B,KAAKyB,SAAU,EACpB3+B,KAAKiD,MAAM07B,SAAU,EACrB3+B,KAAKy9B,aAAakB,SAAU,GAEhCjQ,KAAM,SAASuF,GACXj0B,KAAKi0B,MAAQA,EACTj0B,KAAKi0B,OACLj0B,KAAKmV,KAAKpE,IAAI,UAAW,IACzB/Q,KAAKk9B,KAAKtG,QAAU,GACpB52B,KAAKiD,MAAM2zB,QAAU,GACrB52B,KAAKy9B,aAAa7G,QAAU,KAE5B52B,KAAKg0B,QAAS,EAEdh0B,KAAKmV,KAAKpE,IAAI,UAAW,GACzB/Q,KAAKk9B,KAAKtG,QAAU,EACpB52B,KAAKiD,MAAM2zB,QAAU,EACrB52B,KAAKy9B,aAAa7G,QAAU,GAEhC52B,KAAKmV,KAAKuZ,OACV1uB,KAAKk9B,KAAKyB,SAAU,EACpB3+B,KAAKiD,MAAM07B,SAAU,EACrB3+B,KAAKy9B,aAAakB,SAAU,EAC5B3+B,KAAK6wB,UAETsK,WAAY,WACRn7B,KAAKgL,SAASowB,4BAA4B,SAC1C,IAAIC,GAAUr7B,KAAKgL,SAASswB,kBAAkB,aAAa,KAC3DD,GAAQjJ,sBAAwBpyB,KAChCq7B,EAAQE,QAEZpK,OAAQ,WACJnxB,KAAK82B,UAAW,EAChB92B,KAAKk9B,KAAKhJ,YAAcl0B,KAAK01B,0BACzB11B,KAAKgL,SAAS+rB,cACd/2B,KAAKg1B,eAAevb,QAAQ,SAASP,GACjCA,EAAEwV,SAGL1uB,KAAKc,QAAQoF,aACdlG,KAAKm7B,aAETn7B,KAAKsxB,OAAO,WAEhBD,SAAU,SAASc,GACVA,GAAcA,EAAWC,wBAA0BpyB,OACpDA,KAAK82B,UAAW,EACZ92B,KAAKc,QAAQoF,aACblG,KAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAElR,SAGNhI,KAAKg0B,QACLh0B,KAAKgL,SAASowB,4BAA4B,UAE9Cp7B,KAAKk9B,KAAKhJ,YAAcl0B,KAAKw1B,kBAC7Bx1B,KAAKsxB,OAAO,cAGpBI,UAAW,SAASiL,EAAQC,GACpBA,IACA58B,KAAKgL,SAAS6xB,cACd78B,KAAKmxB,WAGbQ,QAAS,SAASgL,EAAQC,IACjB58B,KAAKuB,OAAO4I,WAAanK,KAAKgL,SAASkrB,aACxCl2B,KAAK84B,oBAAoB2D,aACzBz8B,KAAK+4B,kBAAkB0D,aACvBz8B,KAAK84B,oBAAoB5C,aAAc,EACvCl2B,KAAK+4B,kBAAkB7C,aAAc,IAEhC0G,GACD58B,KAAKm7B,aAETn7B,KAAKye,MAAM5E,QAAQ,YAEvB7Z,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,GAEhC+E,WAAY,SAASC,GACbl7B,KAAKc,QAAQoF,YACRlG,KAAKc,QAAQqJ,YACdnK,KAAK84B,oBAAoBmC,WAAWC,GACpCl7B,KAAK+4B,kBAAkBkC,WAAWC,IAGtCl7B,KAAKgL,SAASiwB,WAAWC,IAGjC1O,UAAW,SAAS8P,GAChB,GAAIC,GAAUD,IAAiB,CAC3Bt8B,MAAKg3B,cAAgBuF,IAGzBv8B,KAAKg3B,YAAcuF,EACnBv8B,KAAK6wB,SACL7wB,KAAKgL,SAASwxB,uBAElB/K,YAAa,WACJzxB,KAAKg3B,cAGVh3B,KAAKg3B,aAAc,EACnBh3B,KAAK6wB,SACL7wB,KAAKgL,SAASwxB,uBAElB/zB,QAAS,WACLzI,KAAKsxB,OAAO,WACZtxB,KAAKk9B,KAAK1f,SACVxd,KAAKiD,MAAMua,SACXxd,KAAKmV,KAAKqI,SACNxd,KAAKgL,SAASkqB,SACdl1B,KAAKy9B,aAAajgB,SAEtBxd,KAAK+0B,YAAYtb,QAAQ,SAASP,GAC9BA,EAAEzQ,WAEN,IAAIL,GAAQpI,IACZA,MAAKg9B,OAAO7iB,MAAQ9Z,EAAE++B,OAAOp/B,KAAKg9B,OAAO7iB,MAAO,SAASiD,GACrD,MAAOhV,KAAUgV,OAG1BxT,QAEIsS,IAMXuU,OAAO,qBAAqB,SAAU,aAAc,WAAY,+BAAgC,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,GACtH,YAEA,IAAIzuB,GAAQwuB,EAASF,WAKjByN,EAAW/7B,EAAM6P,QAAQ4e,EAyF7B,OAvFA1xB,GAAEg/B,EAASz+B,WAAWgT,QAClBF,MAAO,WACH1T,KAAKgL,SAAS+xB,WAAWjJ,WACzB9zB,KAAK6E,KAAO,YACZ7E,KAAKs/B,OAASh8B,EAAMiO,WAAWI,IAE/B,IAAImmB,IAAU93B,KAAKoG,QAAQC,IAAI,SAASA,IAAIrG,KAAKuB,OAAOwJ,eAAiBzH,EAAM4S,kBAAkBlW,KAAKuB,SAAS8E,IAAI,QACnHrG,MAAKk9B,KAAO,GAAI1lB,OAAMib,KACtBzyB,KAAKk9B,KAAKlF,YAAcF,EACxB93B,KAAKk9B,KAAKrG,WAAa,EAAG,GAC1B72B,KAAKk9B,KAAKhJ,YAAcl0B,KAAKc,QAAQkhB,2BACrChiB,KAAKk9B,KAAK3kB,KAAK,EAAE,IAAI,EAAE,IACvBvY,KAAKk9B,KAAK9H,iBAAmBp1B,KAC7BA,KAAKiD,MAAQ,GAAIuU,OAAMib,KACvBzyB,KAAKiD,MAAMuV,UAAYsf,EACvB93B,KAAKiD,MAAMsV,KACD,EAAG,IACHvY,KAAKc,QAAQuhB,kBAAmBriB,KAAKc,QAAQwhB,iBAAmB,IAChE,EAAGtiB,KAAKc,QAAQwhB,mBAE1BtiB,KAAKiD,MAAMmyB,iBAAmBp1B,KAC9BA,KAAKq9B,YAAc,GAEvBxM,OAAQ,WACJ,GAAI0O,GAAMv/B,KAAK84B,oBAAoB3C,aACnCqJ,EAAMx/B,KAAKy/B,QACXlB,EAAKiB,EAAIhJ,SAAS+I,GAAKf,MACvBkB,EAAKH,EAAIhnB,IAAIinB,GAAKzE,OAAO,EACzB/6B,MAAKk9B,KAAK7kB,SAAS,GAAGC,MAAQinB,EAC9Bv/B,KAAKk9B,KAAK7kB,SAAS,GAAGC,MAAQknB,EAC9Bx/B,KAAKiD,MAAMmwB,OAAOmL,EAAKv+B,KAAKq9B,aAC5Br9B,KAAKiD,MAAMgZ,SAAWyjB,EACtB1/B,KAAKq9B,YAAckB,GAEvBtD,WAAY,SAASC,GACjB,IAAKl7B,KAAKgL,SAAS+rB,aAGf,MAFA/2B,MAAKgL,SAASgmB,qBAAqB5oB,WACnCoP,OAAMC,KAAK8jB,MAGfv7B,MAAKy/B,QAAUz/B,KAAKy/B,QAAQlnB,IAAI2iB,EAChC,IAAIyE,GAAanoB,MAAMpR,QAAQw5B,QAAQ5/B,KAAKy/B,QAC5Cz/B,MAAKgL,SAAS60B,WAAWF,GACzB3/B,KAAK6wB,UAETc,QAAS,SAASgL,EAAQC,GACtB,GAAI+C,GAAanoB,MAAMpR,QAAQw5B,QAAQjD,EAAOrkB,OAC1C3K,EAAS3N,KAAK84B,oBAAoBra,MAClCqhB,GAAW,CACf,IAAIH,GAA0D,mBAArCA,GAAWhmB,KAAKyb,iBAAkC,CACvE,GAAI2K,GAAUJ,EAAWhmB,KAAKyb,gBAC9B,IAAiC,SAA7B2K,EAAQl7B,KAAK0L,OAAO,EAAE,GAAe,CACrC,GAAIyvB,GAAaD,EAAQthB,OAASshB,EAAQ3N,sBAAsB3T,KAChE,IAAI9Q,IAAWqyB,EAAY,CACvB,GAAIjW,IACA5O,GAAI7X,EAAM4O,OAAO,QACjB8J,WAAYhc,KAAKuB,OAAOwJ,aACxBoR,KAAMxO,EACNyO,GAAI4jB,EACJV,OAAQt/B,KAAKs/B,OAEbt/B,MAAKgL,SAAS+rB,cACd/2B,KAAKoG,QAAQ+W,QAAQ4M,KAK7Bpc,IAAWoyB,EAAQthB,OAAUshB,EAAQ3N,uBAAyB2N,EAAQ3N,sBAAsB3T,QAAU9Q,KACtGmyB,GAAW,EACX9/B,KAAKgL,SAASkrB,aAAc,GAGhC4J,IACA9/B,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EAC5Bl2B,KAAKgL,SAASgmB,qBAAqBhxB,MACnCwX,MAAMC,KAAK8jB,SAGnB9yB,QAAS,WACLzI,KAAKiD,MAAMua,SACXxd,KAAKk9B,KAAK1f,YAEf5T,QAIIy1B,IAKX5O,OAAO,uBAAuB,SAAU,aAAc,WAAY,+BAAgC,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,GACxH,YAEA,IAAIzuB,GAAQwuB,EAASF,WAIjBqO,EAAc38B,EAAM6P,QAAQ4e,EA4BhC,OA1BA1xB,GAAE4/B,EAAYr/B,WAAWgT,QACrBF,MAAO,WACH1T,KAAKgL,SAASk1B,cAAcpM,WAC5B9zB,KAAK6E,KAAO,SACZ7E,KAAKmgC,aAAe,GAAI3oB,OAAMib,IAC9B,IAAI2N,GAAO//B,EAAEqL,IAAIrL,EAAEggC,MAAM,GAAI,WAAY,OAAQ,EAAE,IACnDrgC,MAAKmgC,aAAa5nB,IAAI/E,MAAMxT,KAAKmgC,aAAcC,GAC/CpgC,KAAKmgC,aAAajM,YAAcl0B,KAAKc,QAAQ8hB,qBAC7C5iB,KAAKmgC,aAAanI,YAAch4B,KAAKc,QAAQ6hB,qBAC7C3iB,KAAKmgC,aAAavJ,QAAU52B,KAAKc,QAAQ+hB,gBACzC7iB,KAAKsgC,SAAW94B,EAAE,SACbU,SAASlI,KAAKgL,SAASs1B,UACvBvvB,KACGkL,SAAU,WACV2a,QAAS52B,KAAKc,QAAQ+hB,kBAEzB7a,QAETS,QAAS,WACLzI,KAAKmgC,aAAa3iB,SAClBxd,KAAKsgC,SAAS9iB,YAEnB5T,QAIIq2B,IAKXxP,OAAO,uBAAuB,SAAU,aAAc,WAAY,sBAAuB,wBAAyB,iBAAkB,SAAUjpB,EAAGnH,EAAGyxB,EAAUyO,EAAY5M,EAAc6M,GACpL,YAEA,IAAIl9B,GAAQwuB,EAASF,WAIjB6O,EAAan9B,EAAM6P,QAAQotB,EAqY/B,OAnYAlgC,GAAEogC,EAAW7/B,WAAWgT,QACpBF,MAAO,WACH6sB,EAAW3/B,UAAU8S,MAAMF,MAAMxT,MACjCA,KAAK0J,SAAW1J,KAAKc,QAAQyI,UAAU,6BAEvCvJ,KAAK0gC,iBAAmB1gC,KAAKc,QAAQ2I,uBAEzC8xB,KAAM,WACF,GAAI5tB,GAAS3N,KAAKoyB,sBAAsB3T,MACxCkiB,EAAchzB,EAAOtH,IAAI,eAAiB/C,EAAM4S,kBAAkBlW,KAAKuB,QACvEq/B,EAAa5gC,KAAKgL,SAAS+rB,aAAe/2B,KAAK0J,SAAW1J,KAAK0gC,iBAAiB/yB,EAAOtH,IAAI,UAAYrG,KAAK0gC,iBAA0B,QACtIG,EAAqB7gC,KAAKc,QAAQ4C,WAAa,4BAC/Co9B,EAASnzB,EAAOtH,IAAI,SAAW,CAC/BrG,MAAKsgC,SACJ/3B,KAAKq4B,GACF78B,MACIK,IAAKuJ,EAAOtH,IAAI,OAChBtE,cAAe4L,EAAOtH,IAAI,cAC1BlF,MAAOwM,EAAOtH,IAAI,SAClBnF,IAAKyM,EAAOtH,IAAI,OAChBxB,KAAM8I,EAAOtH,IAAI,SAAW,UAC5BhF,UAAYiC,EAAM5B,aAAaiM,EAAOtH,IAAI,QAAU,IAAI4K,QAAQ,0BAA0B,IAAIA,QAAQ,MAAM,IAAI,IAChHxN,YAAakK,EAAOtH,IAAI,eACxB7C,MAAOmK,EAAOtH,IAAI,UAAY,GAC9BX,kBAAmBm7B,EACnB5/B,MAAQ0M,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASpF,OAAU0/B,EAAYt6B,IAAI,SAC7E7B,WAAamJ,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAS7B,YAAe,EACvED,YAAcoJ,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAS9B,aAAgBvE,KAAKc,QAAQ0gB;AACtFze,UAAY4K,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAStD,WAAc,EACrEF,KAAM8K,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASxD,KAAO,UAAY,GACpE8C,UAAWgI,EAAOtH,IAAI,eAAgB,EACtCrE,iBAAkB2+B,EAAYt6B,IAAI,SAClCpE,iBAAkB0+B,EAAYt6B,IAAI,SAClCjB,MAAO07B,EAAQ,EAAI,IAAM,IAAMA,EAC/B96B,MAAO2H,EAAOtH,IAAI,UAAY,UAElC9E,OAAQvB,KAAKuB,OACbT,QAASd,KAAKc,QACdY,YAAa4B,EAAM5B,YACnBqE,OAAS1F,EAAEszB,EAAarB,UAAU/T,KAAK,OAAOwiB,OAAOn3B,QACrDhF,MAAQvE,EAAEL,KAAKc,QAAQ2I,uBAAuBs3B,OAAOn3B,WAEzD5J,KAAK6wB,QACL,IAAIzoB,GAAQpI,KACRghC,KAAkBhhC,KAAKgL,SAAS+rB,eAAiB3uB,EAAMtH,QAAQoE,wCAC3Ds7B,EAASS,OAAO,uBAAuBtzB,EAAOtH,IAAI,OAAQ+B,EAAMtH,QAAQgiB,wBAE5Eoe,KAAuBlhC,KAAKgL,SAAS+rB,eAAgB3uB,EAAMtH,QAAQuD,kCAC/Dm8B,EAASS,OAAO,iBAAiBtzB,EAAOtH,IAAI,OAAQ+B,EAAMtH,QAAQgiB,wBAEtEqe,EAAc,WACV/4B,EAAM4C,SAASgmB,qBAAqB5oB,GACpCoP,MAAMC,KAAK8jB,OAuCnB,IApCAnzB,EAAMg5B,YAAc,WAChBh5B,EAAMk4B,SAAShyB,IAAI,SACnBlG,EAAMk4B,SAASv4B,KAAK,2BAA2BuG,IAAI,sBACnDlG,EAAMk4B,SAASv4B,KAAK,uBAAuBuG,IAAI,UAC/ClG,EAAMk4B,SAASv4B,KAAK,gCAAgCuG,IAAI,SACxDlG,EAAMk4B,SAASv4B,KAAK,qBAAqBuG,IAAI,SAC7ClG,EAAMk4B,SAASv4B,KAAK,sBAAsBuG,IAAI,SAC9ClG,EAAMk4B,SAASv4B,KAAK,wBAAwBA,KAAK,MAAMuG,IAAI,eAC3DlG,EAAMk4B,SAASv4B,KAAK,cAAcuG,IAAI,SACtClG,EAAMk4B,SAASv4B,KAAK,iBAAiBuG,IAAI,SAEtClG,EAAMtH,QAAQoE,uCACV87B,IACCA,EAAeK,aAAaC,MAAK,GACjCN,EAAev4B,WAGpBL,EAAMtH,QAAQuD,iCACV68B,IACCA,EAAoBG,aAAaC,MAAK,GACtCJ,EAAoBz4B,YAKhCzI,KAAKsgC,SAASv4B,KAAK,cAAcS,MAAM,SAAUuF,GAC7CA,EAAEG,iBACFizB,MAGJnhC,KAAKsgC,SAASv4B,KAAK,iBAAiBS,MAAM,WACtC,IAAKmF,EAAOtH,IAAI,OACZ,OAAO,IAIXrG,KAAKgL,SAAS+rB,aAAc,CAE5B,GAAIwK,GAAgBlhC,EAAEmhC,SAAS,WAC7BnhC,EAAE4wB,MAAM,WACN,GAAI7oB,EAAM4C,SAAS+rB,aAAc,CAC7B,GAAIhN,KAiCJ,IAhCI3hB,EAAMtH,QAAQ4D,uBACdqlB,EAAM7oB,IAAMkH,EAAMk4B,SAASv4B,KAAK,gBAAgB4E,MAChDvE,EAAMk4B,SAASv4B,KAAK,iBAAiBM,KAAK,OAAO0hB,EAAM7oB,KAAO,MAE9DkH,EAAMtH,QAAQ2E,yBACdskB,EAAMvmB,MAAQ4E,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,MACpDvE,EAAMk4B,SAASv4B,KAAK,uBAAuBM,KAAK,MAAO0hB,EAAMvmB,OAASq9B,IAEtEz4B,EAAMtH,QAAQmE,+BACXmD,EAAMtH,QAAQoE,sCACV87B,GACCA,EAAeS,eACf1X,EAAMtmB,YAAcu9B,EAAeU,UACnCV,EAAeW,cAInB5X,EAAMtmB,YAAc2E,EAAMk4B,SAASv4B,KAAK,wBAAwB4E,OAGpEvE,EAAMtH,QAAQqiB,yBACX/a,EAAMtH,QAAQuD,gCACV68B,GACKA,EAAoBO,eACxB1X,EAAM5oB,MAAQ+/B,EAAoBQ,UAClCR,EAAoBS,cAIxB5X,EAAM5oB,MAAQiH,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,OAGxDvE,EAAMtH,QAAQuE,uBAAwB,CACtC,GAAIxC,GAAOuF,EAAMk4B,SAASv4B,KAAK,iBAAiBsF,GAAG,WACnD0c,GAAM7P,MAAQ7Z,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoBxD,KAAMA,IAE9FuF,EAAMtH,QAAQgF,eACX6H,EAAOtH,IAAI,WAAW+B,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,QAC3Dod,EAAM/jB,MAAQoC,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,OAGxDvE,EAAMtH,QAAQ6D,cACXgJ,EAAOtH,IAAI,UAAU+B,EAAMk4B,SAASv4B,KAAK,iBAAiB4E,QACzDod,EAAMllB,KAAOuD,EAAMk4B,SAASv4B,KAAK,iBAAiB4E,OAG1DgB,EAAOiN,IAAImP,GACX3hB,EAAMyoB,aAENsQ,QAGL,IAEHnhC,MAAKsgC,SAAS/0B,GAAG,QAAS,SAASgC,GACZ,KAAfA,EAAGs0B,SACHV,MAIRnhC,KAAKsgC,SAASv4B,KAAK,2BAA2BwD,GAAG,qBAAsBg2B,GACnEn5B,EAAMtH,QAAQmE,8BACdmD,EAAMtH,QAAQoE,uCACd87B,IAEAA,EAAez1B,GAAG,SAAUg2B,GAC5BP,EAAez1B,GAAG,OAAQg2B,IAG1Bn5B,EAAMtH,QAAQqiB,wBACd/a,EAAMtH,QAAQuD,iCACd68B,IAEAA,EAAoB31B,GAAG,SAAUg2B,GACjCL,EAAoB31B,GAAG,OAAQg2B,IAGhCn5B,EAAMtH,QAAQ8E,oBACb5F,KAAKsgC,SAASv4B,KAAK,uBAAuB+oB,OAAO,WAC7C,GAAI9wB,KAAK8hC,MAAM1/B,OAAQ,CACnB,GAAI2H,GAAI/J,KAAK8hC,MAAM,GACnBze,EAAK,GAAI0e,WACT,IAA2B,UAAvBh4B,EAAElF,KAAK0L,OAAO,EAAE,GAEhB,WADAyxB,OAAM55B,EAAM7G,OAAOC,UAAU,6BAGjC,IAAIuI,EAAE3E,KAA8C,KAAtCgD,EAAMtH,QAAQsiB,sBAExB,WADA4e,OAAM55B,EAAM7G,OAAOC,UAAU,6BAA+B4G,EAAMtH,QAAQsiB,sBAAwBhb,EAAM7G,OAAOC,UAAU,MAG7H6hB,GAAG4e,OAAS,SAASl0B,GACjB3F,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,IAAIoB,EAAEm0B,OAAO1oB,QACnD+nB,KAEJle,EAAG8e,cAAcp4B,MAI7B/J,KAAKsgC,SAASv4B,KAAK,kBAAkB,GAAGq6B,OAExC,IAAIC,GAAUj6B,EAAMk4B,SAASv4B,KAAK,8BAElC/H,MAAKsgC,SAASv4B,KAAK,gCAAgCu6B,MAC3C,SAAS/0B,GACLA,EAAGW,iBACHm0B,EAAQ3T,QAEZ,SAASnhB,GACLA,EAAGW,iBACHm0B,EAAQr6B,SAIpBq6B,EAAQt6B,KAAK,MAAMu6B,MACX,SAAS/0B,GACLA,EAAGW,iBACH9F,EAAMk4B,SAASv4B,KAAK,kBAAkBgJ,IAAI,aAAcvJ,EAAExH,MAAMqI,KAAK,gBAEzE,SAASkF,GACLA,EAAGW,iBACH9F,EAAMk4B,SAASv4B,KAAK,kBAAkBgJ,IAAI,aAAepD,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASpF,QAAW0M,EAAOtH,IAAI,eAAiB/C,EAAM4S,kBAAkB9N,EAAM7G,SAAS8E,IAAI,YAEhMmC,MAAM,SAAS+E,GACbA,EAAGW,iBACC9F,EAAM4C,SAAS+rB,cACfppB,EAAOiN,IAAI,QAASva,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoBpF,MAAOuG,EAAExH,MAAMqI,KAAK,iBAClHg6B,EAAQr6B,OACRwP,MAAMC,KAAK8jB,QAEX4F,KAIR,IAAIoB,GAAY,SAASnwB,GACrB,GAAIhK,EAAM4C,SAAS+rB,aAAc,CAC7B,GAAIyL,GAAWpwB,GAAGzE,EAAOtH,IAAI,SAAW,EACxC+B,GAAMk4B,SAASv4B,KAAK,uBAAuBoN,MAAMqtB,EAAW,EAAI,IAAM,IAAMA,GAC5E70B,EAAOiN,IAAI,OAAQ4nB,GACnBhrB,MAAMC,KAAK8jB,WAEX4F,KAIRnhC,MAAKsgC,SAASv4B,KAAK,sBAAsBS,MAAM,WAE3C,MADA+5B,IAAU,IACH,IAEXviC,KAAKsgC,SAASv4B,KAAK,oBAAoBS,MAAM,WAEzC,MADA+5B,GAAU,IACH,GAGX,IAAIE,GAAiB,SAASrwB,GAC1B,GAAIhK,EAAM4C,SAAS+rB,aAAc,CAC7B,GAAI2L,GAAkB/0B,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAStD,WAAc,EAC3E4/B,EAAgBvwB,EAAIswB,CACrBC,GAAgB,EACfA,EAAgB,EAEXA,EAAgBv6B,EAAMtH,QAAQogB,0BACnCyhB,EAAgBv6B,EAAMtH,QAAQogB,yBAE9ByhB,IAAkBD,IAClBt6B,EAAMk4B,SAASv4B,KAAK,4BAA4BoN,KAAKwtB,GACrDh1B,EAAOiN,IAAI,QAASva,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoBtD,UAAW4/B,KACzGnrB,MAAMC,KAAK8jB,YAIf4F,KAIRnhC,MAAKsgC,SAASv4B,KAAK,2BAA2BS,MAAM,WAEhD,MADAi6B,IAAe,IACR,IAEXziC,KAAKsgC,SAASv4B,KAAK,yBAAyBS,MAAM,WAE9C,MADAi6B,GAAe,IACR,GAGX,IAAIG,GAAiB,SAASxwB,GAC1B,GAAI+F,GAAM/P,EAAMtH,QAAQqgB,oBACpBlJ,EAAM7P,EAAMtH,QAAQsgB,mBACxB,IAAIhZ,EAAM4C,SAAS+rB,aAAc,CAC7B,GAAI8L,GAAkBl1B,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAS7B,YAAe,EAC5Es+B,EAAgB1wB,EAAIywB,CACrBC,GAAgB3qB,EACf2qB,EAAgB3qB,EAEX2qB,EAAgB7qB,IACrB6qB,EAAgB7qB,GAEhB6qB,IAAkBD,IAClBz6B,EAAMk4B,SAASv4B,KAAK,6BAA6BoN,KAAK2tB,EAAcr+B,QAAQ,IAC5EkJ,EAAOiN,IAAI,QAASva,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoB7B,WAAYs+B,KAC1GtrB,MAAMC,KAAK8jB,YAIf4F,MAKJ4B,EAAe36B,EAAMk4B,SAASv4B,KAAK,+BAEvC/H,MAAKsgC,SAASv4B,KAAK,4BAA4Bu6B,MACvC,SAAS/0B,GACLA,EAAGW,iBACH60B,EAAarU,QAEjB,SAASnhB,GACLA,EAAGW,iBACH60B,EAAa/6B,SAIzB+6B,EAAah7B,KAAK,MAAMu6B,MAChB,SAAS/0B,GACLA,EAAGW,iBACH9F,EAAMk4B,SAASv4B,KAAK,2CAA2CgJ,IAAI,aAAcvJ,EAAExH,MAAMqI,KAAK,gBAElG,SAASkF,GACLA,EAAGW,gBACH,IAAI3J,GAAeoJ,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAS9B,aAAgB6D,EAAMtH,QAAQwgB,eAC5FlZ,GAAMk4B,SAASv4B,KAAK,2CAA2CgJ,IAAI,aAAcxM,KAE3FiE,MAAM,SAAS+E,GACbA,EAAGW,iBACC9F,EAAM4C,SAAS+rB,cACfppB,EAAOiN,IAAI,QAASva,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoB9B,YAAaiD,EAAExH,MAAMqI,KAAK,iBACxH06B,EAAa/6B,OACbwP,MAAMC,KAAK8jB,QAEX4F,MAKRnhC,KAAKsgC,SAASv4B,KAAK,4BAA4BS,MAAM,WACjD,GAAIw6B,GAAO56B,EAAMtH,QAAQugB,oBAEzB,OADAuhB,IAAgBI,IACT,IAEXhjC,KAAKsgC,SAASv4B,KAAK,0BAA0BS,MAAM,WAC/C,GAAIw6B,GAAO56B,EAAMtH,QAAQugB,oBAEzB,OADAuhB,GAAeI,IACR,IAGXhjC,KAAKsgC,SAASv4B,KAAK,sBAAsBS,MAAM,WAG3C,MAFAJ,GAAMk4B,SAASv4B,KAAK,kBAAkB4E,IAAI,IAC1C40B,KACO,QAGX,IAAsD,gBAA3CvhC,MAAKoyB,sBAAsB4E,YAA0B,CAC5D,GAAIiM,GAAYjjC,KAAKoyB,sBAAsB4E,YAAY/lB,QAAQ5Q,EAAEsN,EAAOtH,IAAI,UAAU/F,SAAS,yCAC/FN,MAAKsgC,SAASv4B,KAAK,qBAAuB4F,EAAOtH,IAAI,OAAS,KAAO,KAAKkC,KAAK06B,GAC3EjjC,KAAKc,QAAQmD,+BACbjE,KAAKsgC,SAASv4B,KAAK,2BAA2BQ,KAAKvI,KAAKoyB,sBAAsB4E,YAAY/lB,QAAQ5Q,EAAEsN,EAAOtH,IAAI,gBAAgB/F,SAAS,2CAIpJN,KAAKsgC,SAASv4B,KAAK,OAAO4S,KAAK,WAC3BvS,EAAMyoB,YAGdA,OAAQ,WACJ,GAAI7wB,KAAKc,QAAQ8d,aAAa,CAC1B,GAAIpI,GAAUxW,KAAKoyB,sBAAsB+D,YACzC7yB,GAAMgT,YAAYtW,KAAKc,QAAS0V,EAASxW,KAAKmgC,aAAyD,IAA3CngC,KAAKoyB,sBAAsBiE,cAAsBr2B,KAAKsgC,SAAUtgC,KAAKgL,SAASzJ,QAE9IvB,KAAKsgC,SAAS5R,OACdlX,MAAMC,KAAK8jB,QAEf9yB,QAAS,WAC0B,mBAArBzI,MAAKohC,aACXphC,KAAKohC,cAETphC,KAAKmgC,aAAa3iB,SAClBxd,KAAKsgC,SAAS9iB,YAEnB5T,QAII62B,IAKXhQ,OAAO,uBAAuB,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAUyO,GAChH,YAEA,IAAIj9B,GAAQwuB,EAASF,WAKjBsR,EAAa5/B,EAAM6P,QAAQotB,EAoL/B,OAlLAlgC,GAAE6iC,EAAWtiC,WAAWgT,QACpBF,MAAO,WACL6sB,EAAW3/B,UAAU8S,MAAMF,MAAMxT,MACjCA,KAAK0J,SAAW1J,KAAKc,QAAQyI,UAAU,6BACvCvJ,KAAK0gC,iBAAmB1gC,KAAKc,QAAQyI,UAAU,uCAEjDgyB,KAAM,WACF,GAAI5tB,GAAS3N,KAAKoyB,sBAAsB3T,MACxC0kB,EAAcx1B,EAAOtH,IAAI,QACzB+8B,EAAYz1B,EAAOtH,IAAI,MACvBs6B,EAAchzB,EAAOtH,IAAI,eAAiB/C,EAAM4S,kBAAkBlW,KAAKuB,QACvEq/B,EAAa5gC,KAAKgL,SAAS+rB,aAAe/2B,KAAK0J,SAAW1J,KAAK0gC,gBAC/D1gC,MAAKsgC,SACF/3B,KAAKq4B,GACJ5/B,MACIe,cAAe4L,EAAOtH,IAAI,cAC1BlF,MAAOwM,EAAOtH,IAAI,SAClBnF,IAAKyM,EAAOtH,IAAI,OAChBhF,UAAYiC,EAAM5B,aAAaiM,EAAOtH,IAAI,QAAU,IAAI4K,QAAQ,0BAA0B,IAAIA,QAAQ,MAAM,IAAI,IAChHxN,YAAakK,EAAOtH,IAAI,eACxBpF,MAAQ0M,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASpF,OAAU0/B,EAAYt6B,IAAI,SAC7ExD,KAAM8K,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASxD,KAAO,UAAY,GACpEI,MAAQ0K,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASpD,QAAW0K,EAAO8nB,IAAI,UAAkD,mBAA9B9nB,GAAOtH,IAAI,SAASpD,MAAyB,UAAY,GACtJF,UAAY4K,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAStD,WAAc,EACrEpB,WAAYwhC,EAAY98B,IAAI,SAC5BxE,SAAUuhC,EAAU/8B,IAAI,SACxB5E,WAAa0hC,EAAY1N,IAAI,UAAY0N,EAAY98B,IAAI,SAASpF,QAAWkiC,EAAY98B,IAAI,eAAiB/C,EAAM4S,kBAAkBlW,KAAKuB,SAAS8E,IAAI,SACxJzE,SAAWwhC,EAAU3N,IAAI,UAAY2N,EAAU/8B,IAAI,SAASpF,QAAWmiC,EAAU/8B,IAAI,eAAiB/C,EAAM4S,kBAAkBlW,KAAKuB,SAAS8E,IAAI,SAChJrE,iBAAkB2+B,EAAYt6B,IAAI,SAClCpE,iBAAkB0+B,EAAYt6B,IAAI,UAEtC9E,OAAQvB,KAAKuB,OACbG,YAAa4B,EAAM5B,YACnBZ,QAASd,KAAKc,WAElBd,KAAK6wB,QACL,IAAIzoB,GAAQpI,KACZmhC,EAAc,WACV/4B,EAAM4C,SAASgmB,qBAAqB5oB,GACpCA,EAAMk4B,SAASv4B,KAAK,qBAAqBuG,IAAI,SAC7CkJ,MAAMC,KAAK8jB,OASf,IAPAv7B,KAAKsgC,SAASv4B,KAAK,cAAcS,MAAM24B,GACvCnhC,KAAKsgC,SAASv4B,KAAK,iBAAiBS,MAAM,WACtC,IAAKmF,EAAOtH,IAAI,OACZ,OAAO,IAIXrG,KAAKgL,SAAS+rB,aAAc,CAE5B,GAAIwK,GAAgBlhC,EAAEmhC,SAAS,WAC3BnhC,EAAE4wB,MAAM,WACJ,GAAI7oB,EAAM4C,SAAS+rB,aAAc,CAC7B,GAAIhN,IACA5oB,MAAOiH,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,MAKjD,IAHIvE,EAAMtH,QAAQoB,uBACd6nB,EAAM7oB,IAAMkH,EAAMk4B,SAASv4B,KAAK,gBAAgB4E,OAEhDvE,EAAMtH,QAAQuE,uBAAwB,CACtC,GAAIxC,GAAOuF,EAAMk4B,SAASv4B,KAAK,iBAAiBsF,GAAG,YAC/CpK,EAAQmF,EAAMk4B,SAASv4B,KAAK,kBAAkBsF,GAAG,WACrD0c,GAAM7P,MAAQ7Z,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoBxD,KAAMA,EAAMI,MAAOA,IAE/GmF,EAAMk4B,SAASv4B,KAAK,iBAAiBM,KAAK,OAAO0hB,EAAM7oB,KAAO,KAC9DyM,EAAOiN,IAAImP,GACXvS,MAAMC,KAAK8jB,WAEX4F,QAGV,IAEFnhC,MAAKsgC,SAAS/0B,GAAG,QAAS,SAASgC,GACZ,KAAfA,EAAGs0B,SACHV,MAIRnhC,KAAKsgC,SAASv4B,KAAK,SAASwD,GAAG,qBAAsBg2B,GAErDvhC,KAAKsgC,SAASv4B,KAAK,uBAAuB+oB,OAAO,WAC7C,GAAI/iB,GAAIvG,EAAExH,MACVqR,EAAItD,EAAEpB,KACF0E,KACAjJ,EAAMk4B,SAASv4B,KAAK,kBAAkB4E,IAAIoB,EAAEhG,KAAK,aAAaoN,QAC9D/M,EAAMk4B,SAASv4B,KAAK,gBAAgB4E,IAAI0E,GACxCkwB,OAGRvhC,KAAKsgC,SAASv4B,KAAK,sBAAsBS,MAAM,WACvCJ,EAAM4C,SAAS+rB,cACfppB,EAAOiN,KACHuB,KAAMxO,EAAOtH,IAAI,MACjB+V,GAAIzO,EAAOtH,IAAI,UAEnB+B,EAAMmzB,QAEN4F,KAIR,IAAIkB,GAAUj6B,EAAMk4B,SAASv4B,KAAK,8BAElC/H,MAAKsgC,SAASv4B,KAAK,gCAAgCu6B,MAC3C,SAAS/0B,GACLA,EAAGW,iBACHm0B,EAAQ3T,QAEZ,SAASnhB,GACLA,EAAGW,iBACHm0B,EAAQr6B,SAIpBq6B,EAAQt6B,KAAK,MAAMu6B,MACX,SAAS/0B,GACLA,EAAGW,iBACH9F,EAAMk4B,SAASv4B,KAAK,kBAAkBgJ,IAAI,aAAcvJ,EAAExH,MAAMqI,KAAK,gBAEzE,SAASkF,GACLA,EAAGW,iBACH9F,EAAMk4B,SAASv4B,KAAK,kBAAkBgJ,IAAI,aAAepD,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAASpF,QAAU0M,EAAOtH,IAAI,eAAiB/C,EAAM4S,kBAAkB9N,EAAM7G,SAAS8E,IAAI,YAE/LmC,MAAM,SAAS+E,GACbA,EAAGW,iBACC9F,EAAM4C,SAAS+rB,cACfppB,EAAOiN,IAAI,QAASva,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoBpF,MAAOuG,EAAExH,MAAMqI,KAAK,iBAClHg6B,EAAQr6B,OACRwP,MAAMC,KAAK8jB,QAEX4F,KAGR,IAAIsB,GAAiB,SAASrwB,GAC1B,GAAIhK,EAAM4C,SAAS+rB,aAAc,CAC7B,GAAI2L,GAAkB/0B,EAAO8nB,IAAI,UAAY9nB,EAAOtH,IAAI,SAAStD,WAAc,EAC3E4/B,EAAgBvwB,EAAIswB,CACrBC,GAAgB,EACfA,EAAgB,EAEXA,EAAgBv6B,EAAMtH,QAAQogB,0BACnCyhB,EAAgBv6B,EAAMtH,QAAQogB,yBAE9ByhB,IAAkBD,IAClBt6B,EAAMk4B,SAASv4B,KAAK,4BAA4BoN,KAAKwtB,GACrDh1B,EAAOiN,IAAI,QAASva,EAAEuhC,OAAUj0B,EAAO8nB,IAAI,UAAYp1B,EAAE8d,MAAMxQ,EAAOtH,IAAI,eAAoBtD,UAAW4/B,KACzGnrB,MAAMC,KAAK8jB,YAIf4F,KAIRnhC,MAAKsgC,SAASv4B,KAAK,2BAA2BS,MAAM,WAEhD,MADAi6B,IAAe,IACR,IAEXziC,KAAKsgC,SAASv4B,KAAK,yBAAyBS,MAAM,WAE9C,MADAi6B,GAAe,IACR,MAInB5R,OAAQ,WACJ,GAAI7wB,KAAKc,QAAQ8d,aAAa,CAC1B,GAAIpI,GAAUxW,KAAKoyB,sBAAsB+D,YACzC7yB,GAAMgT,YAAYtW,KAAKc,QAAS0V,EAASxW,KAAKmgC,aAAc,EAAGngC,KAAKsgC,SAAUtgC,KAAKgL,SAASzJ,QAEhGvB,KAAKsgC,SAAS5R,OACdlX,MAAMC,KAAK8jB,UAEhB3xB,QAIIs5B,IAKXzS,OAAO,uBAAuB,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAUuR,GAChH,YAEA,IAAI//B,GAAQwuB,EAASF,WAKjB0R,EAAchgC,EAAM6P,QAAQkwB,EAuChC,OArCAhjC,GAAEijC,EAAY1iC,WAAWgT,QACrB0iB,cAAe,WACX,GAAIiN,GAAcvjC,KAAKoyB,sBAAsBiE,aACzCkN,KAAgBvjC,KAAKwjC,kBACjBxjC,KAAKkyB,QACLlyB,KAAKkyB,OAAOzpB,UAEhBzI,KAAKkyB,OAASlyB,KAAKgL,SAASy4B,WACpBzjC,KAAM,EAAIujC,EACVjgC,EAAM+R,mBAAqBkuB,EAC3BvjC,KAAK0jC,WACL1jC,KAAK2jC,SACL,EACA3jC,KAAK4jC,UACL5jC,KAAKuB,OAAOC,UAAUxB,KAAKmV,OAEnCnV,KAAKwjC,gBAAkBD,IAG/BlS,SAAU,WACNgS,EAAWziC,UAAUywB,SAAS7d,MAAMxT,KAAMW,MAAMC,UAAU6S,MAAMhT,KAAKC,UAAW,IAC7EV,KAAKoyB,uBAAyBpyB,KAAKoyB,sBAAsByJ,kBACxDL,aAAax7B,KAAKoyB,sBAAsByJ,iBACxC77B,KAAKoyB,sBAAsBwJ,gBAGnCzK,OAAQ,WACDnxB,KAAKoyB,uBAAyBpyB,KAAKoyB,sBAAsByJ,iBACxDL,aAAax7B,KAAKoyB,sBAAsByJ,iBAE5C77B,KAAKkyB,OAAOf,YAEjBvnB,QAKI05B,IAKX7S,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACpH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjB0C,EAAiBhxB,EAAM6P,QAAQ0wB,EAoBnC,OAlBAxjC,GAAEi0B,EAAe1zB,WAAWgT,QACxBF,MAAO,WACH1T,KAAK6E,KAAO,mBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa1jC,KAAKc,QAAQwG,YAAa,KAAO,IACnDtH,KAAK2jC,SAAW3jC,KAAKc,QAAQwG,YAAa,IAAM,GAChDtH,KAAK4jC,UAAY,OACjB5jC,KAAKmV,KAAO,QAEhBwc,QAAS,WACA3xB,KAAKgL,SAASkrB,aACfl2B,KAAKoyB,sBAAsB+I,gBAGpCvxB,QAII0qB,IAKX7D,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACtH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjB2C,EAAmBjxB,EAAM6P,QAAQ0wB,EAkCrC,OAhCAxjC,GAAEk0B,EAAiB3zB,WAAWgT,QAC1BF,MAAO,WACH1T,KAAK6E,KAAO,qBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa1jC,KAAKc,QAAQwG,YAAa,GAAM,EAClDtH,KAAK2jC,SAAW3jC,KAAKc,QAAQwG,WAAa,GAAK,GAC/CtH,KAAK4jC,UAAY,SACjB5jC,KAAKmV,KAAO,UAEhBwc,QAAS,WAIL,GAHA3xB,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EAC5Bl2B,KAAKgL,SAASowB,4BAA4B,UACtCp7B,KAAKgL,SAAS+rB,aACd,GAAI/2B,KAAKc,QAAQue,qBAAsB,CACnC,GAAIykB,GAAQxgC,EAAM4O,OAAO,SACzBlS,MAAKgL,SAAS+4B,YAAY16B,MACtB8R,GAAI2oB,EACJE,MAAM,GAAI3xB,OAAO4xB,UAAYjkC,KAAKc,QAAQue,uBAE9Crf,KAAKoyB,sBAAsB3T,MAAM7D,IAAI,mBAAoBkpB,OAErDI,SAAQlkC,KAAKuB,OAAOC,UAAU,sCAAwC,IAAMxB,KAAKoyB,sBAAsB3T,MAAMpY,IAAI,SAAW,OAC5HrG,KAAKoG,QAAQmX,WAAWvd,KAAKoyB,sBAAsB3T,UAKpE7U,QAII2qB,IAKX9D,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACpH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjB+C,EAAiBrxB,EAAM6P,QAAQ0wB,EAuBnC,OArBAxjC,GAAEs0B,EAAe/zB,WAAWgT,QACxBF,MAAO,WACH1T,KAAK6E,KAAO,mBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa,GAClB1jC,KAAK2jC,SAAW,GAChB3jC,KAAK4jC,UAAY,OACjB5jC,KAAKmV,KAAO,QAEhBwc,QAAS,WACL3xB,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EAC5Bl2B,KAAKgL,SAASowB,4BAA4B,UACtCp7B,KAAKgL,SAAS+rB,cACd/2B,KAAKgL,SAASyM,KAAK0sB,cAAcnkC,KAAKoyB,sBAAsB3T,UAGrE7U,QAII+qB,IAKXlE,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACpH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjBgD,EAAiBtxB,EAAM6P,QAAQ0wB,EAuBnC,OArBAxjC,GAAEu0B,EAAeh0B,WAAWgT,QACxBF,MAAO,WACH1T,KAAK6E,KAAO,mBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa,GAClB1jC,KAAK2jC,SAAW,IAChB3jC,KAAK4jC,UAAY,OACjB5jC,KAAKmV,KAAO,kBAEhBwc,QAAS,WACL3xB,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EAC5Bl2B,KAAKgL,SAASowB,4BAA4B,UACtCp7B,KAAKgL,SAAS+rB,cACd/2B,KAAKoyB,sBAAsBuJ,eAAc,MAGlD/xB,QAIIgrB,IAKXnE,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACtH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjBkD,EAAmBxxB,EAAM6P,QAAQ0wB,EAsBrC,OApBAxjC,GAAEy0B,EAAiBl0B,WAAWgT,QAC1BF,MAAO,WACH1T,KAAK6E,KAAO,qBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,YAAa,IAClB1jC,KAAK2jC,SAAW,IAChB3jC,KAAK4jC,UAAY,SACjB5jC,KAAKmV,KAAO,mBAEhBwc,QAAS,WACL3xB,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EACxBl2B,KAAKgL,SAAS+rB,cACd/2B,KAAKoyB,sBAAsB3T,MAAM2lB,MAAM,uBAGhDx6B,QAIIkrB,IAKXrE,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACpH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjB4C,EAAiBlxB,EAAM6P,QAAQ0wB,EA2BnC,OAzBAxjC,GAAEm0B,EAAe5zB,WAAWgT,QACxBF,MAAO,WACH1T,KAAK6E,KAAO,mBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa1jC,KAAKc,QAAQwG,WAAa,IAAM,GAClDtH,KAAK2jC,SAAW3jC,KAAKc,QAAQwG,WAAa,IAAM,IAChDtH,KAAK4jC,UAAY,OACjB5jC,KAAKmV,KAAO,wBAEhBuc,UAAW,SAASiL,EAAQC,GACxB,GAAI58B,KAAKgL,SAAS+rB,aAAc,CAC5B,GAAIsN,GAAOrkC,KAAKgL,SAASuD,SAASC,SAClC81B,EAAS,GAAI9sB,OAAMue,OACf4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,KAExBhP,MAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASowB,4BAA4B,UAC1Cp7B,KAAKgL,SAASu5B,YAAYvkC,KAAKoyB,sBAAuBkS,EAAQhhC,EAAMiO,WAAWU,wBAGxFrI,QAII4qB,IAMX/D,OAAO,8BAA8B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACvH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjB6C,EAAoBnxB,EAAM6P,QAAQ0wB,EAsBtC,OApBAxjC,GAAEo0B,EAAkB7zB,WAAWgT,QAC3BF,MAAO,WACH1T,KAAK6E,KAAO,sBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa1jC,KAAKc,QAAQwG,YAAa,IAAM,GAClDtH,KAAK2jC,SAAW3jC,KAAKc,QAAQwG,YAAa,GAAM,EAChDtH,KAAK4jC,UAAY,UACjB5jC,KAAKmV,KAAO,WAEhBwc,QAAS,WACL,GAAI6Q,GAAW,GAAKxiC,KAAKoyB,sBAAsB3T,MAAMpY,IAAI,SAAW,EACpErG,MAAKoyB,sBAAsB3T,MAAM7D,IAAI,OAAQ4nB,GAC7CxiC,KAAKoyB,sBAAsBjB,SAC3BnxB,KAAKmxB,SACL3Z,MAAMC,KAAK8jB,UAEhB3xB,QAII6qB,IAKXhE,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAU+R,GACtH,YAEA,IAAIvgC,GAAQwuB,EAASF,WAKjB8C,EAAmBpxB,EAAM6P,QAAQ0wB,EAsBrC,OApBAxjC,GAAEq0B,EAAiB9zB,WAAWgT,QAC1BF,MAAO,WACH1T,KAAK6E,KAAO,qBACZ7E,KAAKwjC,gBAAkB,EACvBxjC,KAAK0jC,WAAa1jC,KAAKc,QAAQwG,YAAa,KAAO,IACnDtH,KAAK2jC,SAAW3jC,KAAKc,QAAQwG,YAAa,KAAO,IACjDtH,KAAK4jC,UAAY,SACjB5jC,KAAKmV,KAAO,UAEhBwc,QAAS,WACL,GAAI6Q,IAAW,GAAMxiC,KAAKoyB,sBAAsB3T,MAAMpY,IAAI,SAAW,EACrErG,MAAKoyB,sBAAsB3T,MAAM7D,IAAI,OAAQ4nB,GAC7CxiC,KAAKoyB,sBAAsBjB,SAC3BnxB,KAAKmxB,SACL3Z,MAAMC,KAAK8jB,UAEhB3xB,QAII8qB,IAKXjE,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAUuR,GACpH,YAEA,IAAI//B,GAAQwuB,EAASF,WAKjB0L,EAAiBh6B,EAAM6P,QAAQkwB,EAgBnC,OAdAhjC,GAAEi9B,EAAe18B,WAAWgT,QACxBF,MAAO,WACH1T,KAAK6E,KAAO,mBACZ7E,KAAKkyB,OAASlyB,KAAKgL,SAASy4B,WAAWzjC,KAAMsD,EAAMgS,mBAAoBhS,EAAMiS,oBAAoB,KAAM,GAAK,EAAG,OAAQvV,KAAKuB,OAAOC,UAAU,UAEjJmwB,QAAS,WACA3xB,KAAKgL,SAASkrB,aACfl2B,KAAKoyB,sBAAsB+I,gBAGpCvxB,QAII0zB,IAKX7M,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAUuR,GACtH,YAEA,IAAI//B,GAAQwuB,EAASF,WAKjB2L,EAAmBj6B,EAAM6P,QAAQkwB,EA8BrC,OA5BAhjC,GAAEk9B,EAAiB38B,WAAWgT,QAC1BF,MAAO,WACH1T,KAAK6E,KAAO,qBACZ7E,KAAKkyB,OAASlyB,KAAKgL,SAASy4B,WAAWzjC,KAAMsD,EAAMgS,mBAAoBhS,EAAMiS,oBAAoB,GAAK,GAAI,EAAG,SAAUvV,KAAKuB,OAAOC,UAAU,YAEjJmwB,QAAS,WAIL,GAHA3xB,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EAC5Bl2B,KAAKgL,SAASowB,4BAA4B,UACtCp7B,KAAKgL,SAAS+rB,aACd,GAAI/2B,KAAKc,QAAQue,qBAAsB,CACnC,GAAIykB,GAAQxgC,EAAM4O,OAAO,SACzBlS,MAAKgL,SAAS+4B,YAAY16B,MACtB8R,GAAI2oB,EACJE,MAAM,GAAI3xB,OAAO4xB,UAAYjkC,KAAKc,QAAQue,uBAE9Crf,KAAKoyB,sBAAsB3T,MAAM7D,IAAI,mBAAoBkpB,OAErDI,SAAQlkC,KAAKuB,OAAOC,UAAU,sCAAwC,IAAMxB,KAAKoyB,sBAAsB3T,MAAMpY,IAAI,SAAW,OAC5HrG,KAAKoG,QAAQqX,WAAWzd,KAAKoyB,sBAAsB3T,UAKpE7U,QAII2zB,IAKX9M,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUjpB,EAAGnH,EAAGyxB,EAAUuR,GACtH,YAEA,IAAI//B,GAAQwuB,EAASF,WAKjB4L,EAAmBl6B,EAAM6P,QAAQkwB,EAkBrC,OAhBAhjC,GAAEm9B,EAAiB58B,WAAWgT,QAC1BF,MAAO,WACH1T,KAAK6E,KAAO,qBACZ7E,KAAKkyB,OAASlyB,KAAKgL,SAASy4B,WAAWzjC,KAAMsD,EAAMgS,mBAAoBhS,EAAMiS,oBAAoB,IAAM,IAAK,EAAG,SAAUvV,KAAKuB,OAAOC,UAAU,qBAEnJmwB,QAAS,WACL3xB,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,EACxBl2B,KAAKgL,SAAS+rB,cACd/2B,KAAKoyB,sBAAsB3T,MAAM2lB,MAAM,uBAGhDx6B,QAII4zB,IAKX/M,OAAO,sBAAsB,SAAU,aAAc,WAAY,+BAAgC,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,GACvH,YAEA,IAAIzuB,GAAQwuB,EAASF,WAKjB4S,EAAYlhC,EAAM6P,QAAQ4e,EAgB9B,OAdA1xB,GAAEmkC,EAAU5jC,WAAWgT,QACnBqnB,WAAY,SAASC,GACjBl7B,KAAKgL,SAASwD,OAASxO,KAAKgL,SAASwD,OAAOgoB,SAAS0E,EAAOH,OAAO/6B,KAAKgL,SAASkqB,QAAQ1B,OAAOkD,SAAS12B,KAAKgL,SAASwoB,QACvHxzB,KAAKgL,SAAS6lB,UAElBc,QAAS,SAASuJ,GACdl7B,KAAKgL,SAAS8xB,aAAe,KAC7B98B,KAAKgL,SAASkrB,aAAc,KAEjCtsB,QAKI46B,IAKX/T,OAAO,kBAAkB,SAAU,aAAc,YAAa,WAAY,qBAAsB,cAAe,SAAUjpB,EAAGnH,EAAGokC,EAAW3S,EAAU0S,EAAWE,GAC3J,YAEA,IAAIphC,GAAQwuB,EAASF,WAIjB/lB,EAAQ,SAAShE,GACjB7H,KAAKuB,OAASsG,EACd7H,KAAKwH,EAAIA,EAAE,cACXxH,KAAK2kC,mBACL3kC,KAAKwH,EAAEe,KAAKV,EAAQ/G,QAAQyI,UAAU,wBAAwB1B,IAC9D7H,KAAKwQ,iBACLxQ,KAAKuO,SAAWvO,KAAKwH,EAAEO,KAAK,cAC5B/H,KAAKo0B,SAAWp0B,KAAKwH,EAAEO,KAAK,cACvBF,EAAQ/G,QAAQ8d,aAGjB5e,KAAKsgC,SAAWtgC,KAAKwH,EAAEO,KAAK,cAF5B/H,KAAKsgC,SAAW94B,EAAE,IAAMK,EAAQ/G,QAAQ+d,cAI5C7e,KAAK4kC,QAAU5kC,KAAKwH,EAAEO,KAAK,qBAC3ByP,MAAMqtB,MAAM7kC,KAAKuO,SAAS,IAC1BvO,KAAK8kC,YAAc,EACnB9kC,KAAK+kC,YAAa,EAClB/kC,KAAK88B,aAAe,KACpB98B,KAAKglC,gBAAkB,KACvBhlC,KAAK+8B,WAAa,GAAIvlB,OAAMytB,MAC5BjlC,KAAK6zB,WAAa,GAAIrc,OAAMytB,MAC5BjlC,KAAKkgC,cAAgB,GAAI1oB,OAAMytB,MAC/BjlC,KAAK+jC,eACL/jC,KAAKklC,cAAe,EAEhBr9B,EAAQ/G,QAAQ+e,eAChB7f,KAAKk1B,SACGiQ,iBAAkB,GAAI3tB,OAAMytB,MAC5BlI,WAAY,GAAIvlB,OAAMytB,MACtBpR,WAAY,GAAIrc,OAAMytB,MACtB3P,WAAY,GAAI9d,OAAMojB,MACtBx1B,KAAM,GAAIoS,OAAMghB,KAAM3wB,EAAQ/G,QAAQgf,cAAejY,EAAQ/G,QAAQif,iBAG7E/f,KAAKk1B,QAAQiQ,iBAAiBrR,WAC9B9zB,KAAKk1B,QAAQkQ,QAAU5tB,MAAMC,KAAKqnB,OAAOuG,YAAY7O,SAASx2B,KAAKk1B,QAAQ9vB,MAC3EpF,KAAKk1B,QAAQtC,UAAY,GAAIpb,OAAMib,KAAKI,UAAU7yB,KAAKk1B,QAAQkQ,QAAQ5O,UAAU,EAAE,IAAKx2B,KAAKk1B,QAAQ9vB,KAAKmT,KAAK,EAAE,KACjHvY,KAAKk1B,QAAQtC,UAAUpa,UAAY3Q,EAAQ/G,QAAQmf,yBACnDjgB,KAAKk1B,QAAQtC,UAAUoF,YAAcnwB,EAAQ/G,QAAQof,qBACrDlgB,KAAKk1B,QAAQtC,UAAUsB,YAAc,EACrCl0B,KAAKk1B,QAAQ1mB,OAAS,GAAIgJ,OAAMue,MAAM/1B,KAAKk1B,QAAQ9vB,KAAK21B,OAAO,IAC/D/6B,KAAKk1B,QAAQ1B,MAAQ,GAErBxzB,KAAKk1B,QAAQrB,WAAWC,WACxB9zB,KAAKk1B,QAAQoQ,cAAgB,GAAI9tB,OAAMib,KAAKI,UAAU7yB,KAAKk1B,QAAQkQ,QAASplC,KAAKk1B,QAAQ9vB,MACzFpF,KAAKk1B,QAAQI,WAAWC,SAASv1B,KAAKk1B,QAAQoQ,eAC9CtlC,KAAKk1B,QAAQI,WAAWuF,SAAU,EAClC76B,KAAKk1B,QAAQG,UAAY,GAAI7d,OAAMib,KAAKI,UAAU7yB,KAAKk1B,QAAQkQ,QAASplC,KAAKk1B,QAAQ9vB,MACrFpF,KAAKk1B,QAAQI,WAAWC,SAASv1B,KAAKk1B,QAAQG,WAC9Cr1B,KAAKk1B,QAAQG,UAAU7c,UAAY,UACnCxY,KAAKk1B,QAAQG,UAAUuB,QAAU,GACjC52B,KAAKk1B,QAAQG,UAAU2C,YAAc,UACrCh4B,KAAKk1B,QAAQG,UAAUnB,YAAc,EACrCl0B,KAAKk1B,QAAQG,UAAUD,iBAAmB,GAAIoP,GAAUxkC,KAAM,OAGlEA,KAAKw8B,mBAAqBn8B,EAAE,WACxBmX,MAAMC,KAAK8jB,SACZ7Q,SAAS,KAAK9gB,QAEjB5J,KAAKulC,WACLvlC,KAAKwlC,YAAa,CAElB,IAAIp9B,GAAQpI,KACZylC,GAAe,EACfC,EAAiB,EACjBC,GAAW,EACXC,EAAY,EACZC,EAAY,EACZC,EAAW,CAEX9lC,MAAKi5B,eACLj5B,KAAK+lC,eAEJ,OAAQ,SAAU,OAAQ,OAAQ,OAAQ,UAAW,SAAU,UAAWtsB,QAAQ,SAASusB,GACxF,GAAIjzB,GAAM,GAAIC,MACdD,GAAIE,IAAMpL,EAAQ/G,QAAQ4C,WAAa,OAASsiC,EAAU,OAC1D59B,EAAM29B,WAAWC,GAAWjzB,GAGhC,IAAIkzB,GAAqB5lC,EAAEqqB,SAAS,SAASiS,EAAQC,GACjDx0B,EAAM6G,YAAY0tB,EAAQC,IAC3Bt5B,EAAMyS,gBAET/V,MAAKuO,SAAShD,IACVmmB,UAAW,SAASiL,GAChBA,EAAOzuB,iBACP9F,EAAMsH,YAAYitB,GAAQ,IAE9BuJ,UAAW,SAASvJ,GAChBA,EAAOzuB,iBACP+3B,EAAmBtJ,GAAQ,IAE/BhL,QAAS,SAASgL,GACdA,EAAOzuB,iBACP9F,EAAMuH,UAAUgtB,GAAQ,IAE5BwJ,WAAY,SAASxJ,EAAQzB,GACtBrzB,EAAQ/G,QAAQse,iBACfud,EAAOzuB,iBACHu3B,GACAr9B,EAAMg+B,SAASzJ,EAAQzB,KAInCmL,WAAY,SAAS1J,GACjBA,EAAOzuB,gBACP,IAAIo4B,GAAW3J,EAAOvuB,cAAcm4B,QAAQ,EAEpC1+B,GAAQ/G,QAAQme,oBAChB,GAAI5M,MAASyzB,EAAWxiC,EAAM0S,kBAC5B7E,KAAKq1B,IAAIZ,EAAYU,EAASz3B,MAAO,GAAKsC,KAAKq1B,IAAIX,EAAYS,EAASv3B,MAAO,GAAKzL,EAAM2S,qBAEhG6vB,EAAW,EACX19B,EAAMq+B,cAAcH,KAEpBR,EAAW,GAAIzzB,MACfuzB,EAAYU,EAASz3B,MACrBg3B,EAAYS,EAASv3B,MACrB22B,EAAiBt9B,EAAMqP,KAAK+b,MAC5BmS,GAAW,EACXv9B,EAAMsH,YAAY42B,GAAU,KAGpCI,UAAW,SAAS/J,GAGhB,GAFAA,EAAOzuB,iBACP43B,EAAW,EACiC,IAAxCnJ,EAAOvuB,cAAcm4B,QAAQnkC,OAC7BgG,EAAM6G,YAAY0tB,EAAOvuB,cAAcm4B,QAAQ,IAAI,OAChD,CAOH,GANKZ,IACDv9B,EAAMuH,UAAUgtB,EAAOvuB,cAAcm4B,QAAQ,IAAI,GACjDn+B,EAAM00B,aAAe,KACrB10B,EAAM8tB,aAAc,EACpByP,GAAW,GAEoB,cAA/BhJ,EAAOvuB,cAAcolB,MACrB,MAEJ,IAAImT,GAAYhK,EAAOvuB,cAAcolB,MAAQkS,EAC7CkB,EAAcD,EAAYv+B,EAAMqP,KAAK+b,MACrCqT,EAAa,GAAIrvB,OAAMue,OACO3tB,EAAMmG,SAASG,QACftG,EAAMmG,SAASK,WACZ8nB,SAAU,IAAQ,EAAIkQ,IAAgBruB,IAAInQ,EAAMqP,KAAKjJ,OAAOkoB,SAAUkQ,GACvGx+B,GAAMqP,KAAKqvB,SAASH,EAAWE,KAGvCE,SAAU,SAASpK,GACfA,EAAOzuB,iBACP9F,EAAMuH,UAAUgtB,EAAOvuB,cAAcC,eAAe,IAAI,IAE5D7F,MAAO,SAASm0B,GACZA,EAAOzuB,iBACP9F,EAAM4+B,QAAQrK,IAElBsK,SAAU,SAAStK,GACfA,EAAOzuB,iBACHrG,EAAQ/G,QAAQme,oBAChB7W,EAAMq+B,cAAc9J,IAG5B7vB,WAAY,SAAS6vB,GACjBA,EAAOzuB,iBAEP9F,EAAM00B,aAAe,KACrB10B,EAAM8tB,aAAc,GAExBgR,SAAU,SAASvK,GACfA,EAAOzuB,kBAEXi5B,UAAW,SAASxK,GAChBA,EAAOzuB,iBACPu3B,GAAe,GAEnB2B,UAAW,SAASzK,GAChBA,EAAOzuB,iBACPu3B,GAAe,GAEnB4B,KAAM,SAAS1K,GACXA,EAAOzuB,iBACPu3B,GAAe,CACf,IAAIvyB,KACJ7S,GAAEgC,KAAKs6B,EAAOvuB,cAAcwB,aAAahL,MAAO,SAASkZ,GACrD,IACI5K,EAAI4K,GAAK6e,EAAOvuB,cAAcwB,aAAa8xB,QAAQ5jB,GACrD,MAAM/P,MAEZ,IAAIoH,GAAOwnB,EAAOvuB,cAAcwB,aAAa8xB,QAAQ,OACrD,IAAoB,gBAATvsB,GACP,OAAOA,EAAK,IACZ,IAAK,IACL,IAAK,IACD,IACI,GAAIlL,GAAOmgB,KAAKkd,MAAMnyB,EACtB9U,GAAEuT,OAAOV,EAAIjJ,GAEjB,MAAM8D,GACGmF,EAAI,gBACLA,EAAI,cAAgBiC,GAG5B,KACJ,KAAK,IACIjC,EAAI,eACLA,EAAI,aAAeiC,EAEvB,MACJ,SACSjC,EAAI,gBACLA,EAAI,cAAgBiC,GAIhC,GAAIxR,GAAMg5B,EAAOvuB,cAAcwB,aAAa8xB,QAAQ,MAChD/9B,KAAQuP,EAAI,mBACZA,EAAI,iBAAmBvP,GAE3ByE,EAAMmH,SAAS2D,EAAKypB,EAAOvuB,iBAInC,IAAIm5B,GAAY,SAASC,EAAUC,GAC/Br/B,EAAMZ,EAAEO,KAAKy/B,GAAUh/B,MAAM,SAASk/B,GAElC,MADAt/B,GAAMq/B,GAAOC,IACN,IAIZ1nC,MAAKuB,OAAO6E,QAAQC,IAAI,SAASjE,OAAS,GAAKpC,KAAKuB,OAAOT,QAAQuG,WAClErH,KAAKwH,EAAEO,KAAK,oBAAoB2mB,OAEpC1uB,KAAKwH,EAAEO,KAAK,mBAAmB8E,WACvB,WAAazE,EAAMZ,EAAEO,KAAK,gBAAgBW,cAElD1I,KAAKwH,EAAEO,KAAK,aAAa+E,WACjB,WAAa1E,EAAMZ,EAAEO,KAAK,gBAAgBuF,YAG9Co3B,EAAWiD,SACXJ,EAAU,wBAAyB,cAEnCp4B,SAASy4B,iBAAiBlD,EAAWmD,IAAIC,iBAAkB,WAGvDnd,WAAW,WACP,GAAIod,GAAW3/B,EAAMZ,EAAEkH,QACnBs5B,EAAY5/B,EAAMZ,EAAEoH,QAEpBxG,GAAM7G,OAAOT,QAAQmF,eACrB+hC,GAAa5/B,EAAMZ,EAAEO,KAAK,cAAc6G,UAExCxG,EAAM7G,OAAOT,QAAQ8C,WAAc5D,KAAKuB,OAAOiG,EAAEO,KAAK,YAAYkU,WAAWnN,KAAO,IACpFi5B,GAAY/nC,KAAKuB,OAAOiG,EAAEO,KAAK,YAAY2G,SAG/C8I,MAAMC,KAAKwwB,SAAW,GAAIzwB,OAAMghB,MAAMuP,EAAUC,IAChD5/B,EAAMjB,OAAOiB,EAAM8/B,aAAcH,EAAU3/B,EAAM+/B,cAAeH,GAEhE5/B,EAAM8/B,aAAeH,EACrB3/B,EAAM+/B,cAAgBH,EAEjBtD,EAAW0D,eACZ5wB,MAAMC,KAAK4wB,SAAW,SAAS1L,GAC3B,GAAI2L,GAAW3L,EAAOv3B,KAAKmjC,OACvBC,EAAY7L,EAAOv3B,KAAKiS,QACxBoxB,EAAaD,EAAY7L,EAAO+L,MAAM95B,OACtC+5B,EAAYL,EAAW3L,EAAO+L,MAAMh6B,KAExCtG,GAAMjB,OAAOwhC,EAAWL,EAAUG,EAAYD,MAGvD,SAGPxoC,KAAKwH,EAAEO,KAAK,yBAAyBE,SAAS,YAC9CjI,KAAKwH,EAAEO,KAAK,qDAAqDQ,KAAKvI,KAAKuB,OAAOC,UAAU,8CAGhG+lC,EAAU,qBAAsB,cAChCA,EAAU,qBAAsB,cAChCA,EAAU,kBAAmB,QAC7BA,EAAU,kBAAmB,QAC7BA,EAAU,oBAAqB,iBAC/BvnC,KAAKwH,EAAEO,KAAK,0BAETM,KAAK,OAAO,cAAgB/E,EAAM8S,kBAAkBvO,IACpDW,MAAM,WAMH,MALAJ,GAAMw8B,QACLzvB,KAAKtN,EAAQrG,UAAU,uIACvBonC,SACA3M,MAAM,KACN4M,WACM,IAEb7oC,KAAKwH,EAAEO,KAAK,qBAAqB+gC,UAAU,WACvCthC,EAAExH,MAAM+H,KAAK,sBAAsB2mB,SACpC7gB,SAAS,WACRrG,EAAExH,MAAM+H,KAAK,sBAAsBC,SAEvCu/B,EAAU,gBAAiB,YAE3B/vB,MAAMC,KAAKlM,GAAG,SAAU,SAASoxB,GAC7B,GAAI2L,GAAW3L,EAAOv3B,KAAKmjC,OACvBC,EAAY7L,EAAOv3B,KAAKiS,QACxBoxB,EAAaD,EAAY7L,EAAO+L,MAAM95B,OACtC+5B,EAAYL,EAAW3L,EAAO+L,MAAMh6B,KAExCtG,GAAMjB,OAAOwhC,EAAWL,EAAUG,EAAYD,IAGlD,IAAIO,GAAY1oC,EAAEqqB,SAAS,WACvBtiB,EAAMyoB,UACR,GAEF7wB,MAAKgpC,mBAAmB,OAAQhpC,KAAKuB,OAAO6E,QAAQC,IAAI,UACxDrG,KAAKgpC,mBAAmB,OAAQhpC,KAAKuB,OAAO6E,QAAQC,IAAI,UACxDrG,KAAKuB,OAAO6E,QAAQmF,GAAG,eAAgB,WACnCnD,EAAMZ,EAAEO,KAAK,gBAAgB4E,IAAI9E,EAAQzB,QAAQC,IAAI,UAAU4iC,KAAK,QAASphC,EAAQzB,QAAQC,IAAI,YAGrGrG,KAAKwH,EAAEO,KAAK,gBAAgBwD,GAAG,oBAAqB,WAChD1D,EAAQzB,QAAQwU,KAAKzZ,MAASqG,EAAExH,MAAM2M,SAG1C,IAAIu8B,GAAiB7oC,EAAEqqB,SAAS,WAC5BtiB,EAAM6C,eACP,IAmFH,IAjFAi+B,IAGAlpC,KAAKuB,OAAO6E,QAAQmF,GAAG,oBAAqB,WACxC,OAAQnD,EAAM7G,OAAO6E,QAAQC,IAAI,eAC7B,IAAK,GACD+B,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,WAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,UAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmBE,SAAS,QACzC,MACJ,KAAK,GACDG,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,SAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,UAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmBE,SAAS,UACzC,MACJ,KAAK,GACDG,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,SAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,WAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmBE,SAAS,aAKrDjI,KAAKuB,OAAO6E,QAAQmF,GAAG,SAAU,WACzBnD,EAAM7G,OAAOT,QAAQ4e,eACrBvG,SAASgwB,QAAQ9a,QAEjBjmB,EAAMghC,UAEVhhC,EAAM88B,cAAe,EACrB6D,MAIJ/oC,KAAKuB,OAAO6I,OAAOmB,GAAG,SAAU,SAAS89B,GACrCjhC,EAAMkhC,kBAAkBD,KAG5BrpC,KAAKuB,OAAO6E,QAAQmF,GAAG,uBAAwB,WAC3C,GAAInD,EAAM7G,OAAO6E,QAAQC,IAAI,iBACzB,CAAc+B,EAAMZ,EAAEO,KAAK,WAAWE,SAAS,OACnC0iB,WAAW,WACnBviB,EAAMZ,EAAEO,KAAK,WAAWC,KAAK,MAC9B,QAIXhI,KAAKuB,OAAO6E,QAAQmF,GAAG,yBAA0B29B,GAEjDlpC,KAAKuB,OAAO6E,QAAQmF,GAAG,yBAA0B,SAAS2R,GACnD9U,EAAM7G,OAAO6E,QAAQC,IAAI,SAASjE,OAAS,EAC1CgG,EAAMZ,EAAEO,KAAK,oBAAoB2mB,OAGjCtmB,EAAMZ,EAAEO,KAAK,oBAAoBC,SAIzChI,KAAKuB,OAAO6E,QAAQmF,GAAG,YAAa,SAAS2R,GACzC9U,EAAMkzB,kBAAkB,OAAQpe,GAC3B9U,EAAM7G,OAAO6E,QAAQC,IAAI,kBAC1B0iC,MAGR/oC,KAAKuB,OAAO6E,QAAQmF,GAAG,YAAa,SAAS6R,GACzChV,EAAMkzB,kBAAkB,OAAQle,GAC3BhV,EAAM7G,OAAO6E,QAAQC,IAAI,kBAC1B0iC,MAGR/oC,KAAKuB,OAAO6E,QAAQmF,GAAG,eAAgB,SAASoC,EAAQ6f,GACpD,GAAI+b,GAAKnhC,EAAMZ,EAAEO,KAAK,eAClBwhC,GAAGl8B,GAAG,SACFk8B,EAAG58B,QAAU6gB,GACb+b,EAAG58B,IAAI6gB,GAGX+b,EAAGp0B,KAAKqY,KAIZ3lB,EAAQ/G,QAAQie,aAAc,CAC9B,GAAIyqB,GAC4C,gBAAjC3hC,GAAQ/G,QAAQie,aACnBlX,EAAQ/G,QAAQie,aACN,GAEtB9V,QAAO0hB,WACC,WACIviB,EAAMghC,WAEVI,GAUZ,GANI3hC,EAAQ/G,QAAQke,cAChBxX,EAAEyB,QAAQ9B,OAAO,WACbiB,EAAMqhC,cAIV5hC,EAAQ/G,QAAQwF,gBAAkBuB,EAAQ/G,QAAQ0F,oBAAqB,CACvE,GAAIkjC,GAAa1pC,KAAKwH,EAAEO,KAAK,0CAC7B4hC,EAAU3pC,KAAKwH,EAAEO,KAAK,wCAEtB2hC,GAAWpH,MACH,SAAS/0B,GACDnF,EAAM2uB,eACNxpB,EAAGW,iBACHy7B,EAAQjb,SAGhB,SAASnhB,GACLA,EAAGW,iBACHy7B,EAAQ3hC,SAIpB2hC,EAAQ5hC,KAAK,MAAM8E,WACX,SAASU,GACDnF,EAAM2uB,eACNxpB,EAAGW,iBACH9F,EAAMZ,EAAEO,KAAK,yBAAyBgJ,IAAI,aAAcvJ,EAAExH,MAAMqI,KAAK,kBAMzF,GAAIR,EAAQ/G,QAAQoG,kBAAmB,CAEnC,GAAI6I,GAAU,EAEd/P,MAAKwH,EAAEO,KAAK,yBAAyBwD,GAAG,2BAA4B,WAChE,GAAIq+B,GAAQpiC,EAAExH,MACd2M,EAAMi9B,EAAMj9B,KACZ,IAAIA,IAAQoD,EAIZ,GADAA,EAAUpD,EACNA,EAAIvK,OAAS,EACbyF,EAAQzB,QAAQC,IAAI,SAAShE,KAAK,SAAS+P,GACvChK,EAAMywB,yBAAyBzmB,GAAGqf,gBAEtC5pB,EAAQzB,QAAQC,IAAI,SAAShE,KAAK,SAAS0L,GACvC3F,EAAMywB,yBAAyB9qB,GAAG0jB,oBAEnC,CACH,GAAIoY,GAAMvmC,EAAM0M,sBAAsBrD,EACtC9E,GAAQzB,QAAQC,IAAI,SAAShE,KAAK,SAAS+P,GACnCA,EAAE+I,KAAOxO,GAAOk9B,EAAI/2B,KAAKV,EAAE/L,IAAI,WAAawjC,EAAI/2B,KAAKV,EAAE/L,IAAI,gBAC3D+B,EAAMywB,yBAAyBzmB,GAAGoa,UAAUqd,GAE5CzhC,EAAMywB,yBAAyBzmB,GAAGqf,gBAG1C5pB,EAAQzB,QAAQC,IAAI,SAAShE,KAAK,SAAS0L,GACnCA,EAAEoN,KAAOxO,GAAOk9B,EAAI/2B,KAAK/E,EAAE1H,IAAI,WAAawjC,EAAI/2B,KAAK/E,EAAE1H,IAAI,gBAC3D+B,EAAMywB,yBAAyB9qB,GAAGye,UAAUqd,GAE5CzhC,EAAMywB,yBAAyB9qB,GAAG0jB,mBAQtDzxB,KAAK6wB,SAEL5nB,OAAOC,YAAY,WACf,GAAI4gC,IAAO,GAAIz3B,OAAO4xB,SACtB77B,GAAM27B,YAAYtqB,QAAQ,SAASyZ,GAC/B,GAAI4W,GAAQ5W,EAAE8Q,KAAM,CAChB,GAAIuF,GAAK1hC,EAAQzB,QAAQC,IAAI,SAAS0jC,WAAWC,iBAAmB9W,EAAE/X,IAClEouB,IACAnjC,QAAQmX,WAAWgsB,GAEvBA,EAAK1hC,EAAQzB,QAAQC,IAAI,SAAS0jC,WAAWC,iBAAmB9W,EAAE/X,KAC9DouB,GACAnjC,QAAQqX,WAAW8rB,MAI/BnhC,EAAM27B,YAAc37B,EAAM27B,YAAY9lB,OAAO,SAASiV,GAClD,MAAOrrB,GAAQzB,QAAQC,IAAI,SAAS0jC,WAAWC,iBAAmB9W,EAAE/X,MAAQtT,EAAQzB,QAAQC,IAAI,SAAS0jC,WAAWC,iBAAmB9W,EAAE/X,QAE9I,KAECnb,KAAKk1B,SACLjsB,OAAOC,YAAY,WACfd,EAAM6hC,kBACP,KAs0BX,OAj0BA5pC,GAAEwL,EAAMjL,WAAWgT,QACfw1B,QAAS,WACmB,mBAAdppC,MAAKyX,OACXzX,KAAKyX,KAAOzX,KAAKs7B,kBAAkB,OAAQt7B,KAAKuB,OAAO6E,QAAQC,IAAI,SAAS6jC,SAEhFlqC,KAAKyX,KAAKgyB,aAEdhG,WAAY,SAAS0G,EAAOC,EAAMC,EAAOC,EAAaC,EAAWC,EAAUC,EAAUC,GACjF,GAAIn0B,GAAWvW,KAAKuB,OAAOT,QACvB6pC,EAAaL,EAAcn5B,KAAKy5B,GAAK,IACrCC,EAAWN,EAAYp5B,KAAKy5B,GAAK,IACjCzc,EAAOnuB,KAAK+lC,WAAW0E,GACvBK,GAAa35B,KAAK45B,IAAIJ,GACtBK,EAAW75B,KAAK85B,IAAIN,GACpBO,EAAY/5B,KAAK85B,IAAIN,GAAcP,EAAOI,EAAWM,EACrDK,EAAYh6B,KAAK45B,IAAIJ,GAAcP,EAAOI,EAAWQ,EACrDI,EAAaj6B,KAAK85B,IAAIN,GAAcN,EAAQG,EAAWM,EACvDO,EAAal6B,KAAK45B,IAAIJ,GAAcN,EAAQG,EAAWQ,EACvDM,GAAWn6B,KAAK45B,IAAIF,GACpBU,EAASp6B,KAAK85B,IAAIJ,GAClBW,EAAUr6B,KAAK85B,IAAIJ,GAAYT,EAAOI,EAAWc,EACjDG,EAAUt6B,KAAK45B,IAAIF,GAAYT,EAAOI,EAAWe,EACjDG,EAAWv6B,KAAK85B,IAAIJ,GAAYR,EAAQG,EAAWc,EACnDK,EAAWx6B,KAAK45B,IAAIF,GAAYR,EAAQG,EAAWe,EACnDK,GAAYxB,EAAOC,GAAS,EAC5BwB,GAAelB,EAAaE,GAAY,EACxCiB,EAAW36B,KAAK85B,IAAIY,GAAeD,EACnCG,EAAW56B,KAAK45B,IAAIc,GAAeD,EACnCI,EAAa76B,KAAK85B,IAAIY,GAAezB,EACrC6B,EAAc96B,KAAK85B,IAAIY,GAAexB,EACtC6B,EAAa/6B,KAAK45B,IAAIc,GAAezB,EACrC+B,EAAch7B,KAAK45B,IAAIc,GAAexB,EACtC+B,EAASj7B,KAAK85B,IAAIY,IAAgBxB,EAAQ,GAC1CgC,EAASl7B,KAAK45B,IAAIc,IAAgBxB,EAAQ9zB,EAASgK,yBAA2BhK,EAASgK,wBAA0B,CACrHvgB,MAAKkgC,cAAcpM,UACnB,IAAIrd,GAAQ,GAAIe,OAAMib,IACtBhc,GAAM8B,KAAK2yB,EAAWC,IACtB10B,EAAM61B,OAAON,EAAYE,IAAcV,EAASC,IAChDh1B,EAAM6jB,QAAQoR,EAAWC,IACzBl1B,EAAM61B,OAAOL,EAAaE,IAAef,EAAYC,IACrD50B,EAAM+B,UAAYjC,EAAS8J,mBAC3B5J,EAAMmgB,QAAU;AAChBngB,EAAM81B,QAAS,EACf91B,EAAM2e,iBAAmB+U,CACzB,IAAI/5B,GAAQ,GAAIoH,OAAMg1B,UAAUJ,EAAOC,EACvCj8B,GAAMq8B,gBACEC,SAAUn2B,EAASgK,wBACnB/H,UAAWjC,EAAS+J,qBAExB8rB,EAAS,EACTh8B,EAAMu8B,eAAeC,cAAgB,OAC9BR,GAAS,EAChBh8B,EAAMu8B,eAAeC,cAAgB,QAErCx8B,EAAMu8B,eAAeC,cAAgB,SAEzCx8B,EAAMuuB,SAAU,CAChB,IAAIkO,IAAW,EACXC,EAAW,GAAIt1B,OAAMue,OAAM,KAAM,KACjCgX,EAAO,GAAIv1B,OAAMojB,OAAOnkB,EAAOrG,IAE/B8qB,EAAS6R,EAAK9wB,SACd+wB,EAAY,GAAIx1B,OAAMue,OAAO+V,EAAUC,IACvCkB,EAAc,GAAIz1B,OAAMue,MAAM,EAAE,EACpC3lB,GAAM2d,QAAU2c,EAEhBqC,EAAK3P,MAAQ2P,EAAKjO,OAAOpnB,OACzBq1B,EAAKpO,SAAU,EACfoO,EAAK9wB,SAAW6wB,CAChB,IAAIngB,IACI+B,KAAM,WACFme,GAAW,EACXE,EAAK9wB,SAAWgxB,EAAY10B,IAAI2iB,GAChC6R,EAAKpO,SAAU,GAEnBnN,OAAQ,SAAS8S,GACb2I,EAAc3I,EACVuI,IACAE,EAAK9wB,SAAWqoB,EAAO/rB,IAAI2iB,KAGnClzB,KAAM,WACF6kC,GAAW,EACXE,EAAKpO,SAAU,EACfoO,EAAK9wB,SAAW6wB,GAEpB3b,OAAQ,WACJ1a,EAAMmgB,QAAU,GAChBxmB,EAAMuuB,SAAU,GAEpBtN,SAAU,WACN5a,EAAMmgB,QAAU,GAChBxmB,EAAMuuB,SAAU,GAEpBl2B,QAAS,WACLskC,EAAKvvB,WAGb2a,EAAY,WACZ,GAAIsC,GAAU,GAAIjjB,OAAMkjB,OAAOvM,EAC/BsM,GAAQxe,SAAW+wB,EAAUz0B,IAAIw0B,EAAK9wB,UAAUua,SAAS0E,GACzDT,EAAQE,QAAS,EACjBoS,EAAKxX,SAASkF,GAQlB,OANItM,GAAKzf,MACLypB,IAEA3wB,EAAE2mB,GAAM5iB,GAAG,OAAO4sB,GAGfxL,GAEXsQ,aAAc,SAASiQ,GACnB,GAAIC,GAAU9sC,EAAEL,KAAKulC,SAASx9B,KAAK,SAASolC,GACxC,MACUA,GAAQhxB,OAAS+wB,EAAUpU,qBAAuBqU,EAAQ/wB,KAAO8wB,EAAUnU,mBAC3EoU,EAAQhxB,OAAS+wB,EAAUnU,mBAAqBoU,EAAQ/wB,KAAO8wB,EAAUpU,qBAiBvF,OAduB,mBAAZqU,GACPA,EAAQhzB,MAAM9Q,KAAK6jC,IAEnBC,GACQhxB,KAAM+wB,EAAUpU,oBAChB1c,GAAI8wB,EAAUnU,kBACd5e,OAAS+yB,GACT9O,YAAa,SAASgP,GAClB,GAAIC,GAAQD,EAAItU,sBAAwB94B,KAAKmc,KAAQ,GAAI,CACzD,OAAOkxB,IAAShtC,EAAEL,KAAKma,OAAOiiB,QAAQgR,IAAQptC,KAAKma,MAAM/X,OAAS,GAAK,KAGnFpC,KAAKulC,QAAQl8B,KAAK8jC,IAEfA,GAEXpW,WAAY,WACR,MAAQ/2B,MAAKuB,OAAOT,QAAQoF,cAAgBlG,KAAKuB,OAAO4I,WAE5DqG,eAAgB,WACZ,GAAI88B,GAAUttC,KAAKwH,EAAEO,KAAK,mBAC1BwlC,EAAMD,EAAQvlC,KAAK,8BACf/H,MAAKuB,OAAO4I,WACZmjC,EAAQ7hB,YAAY,2BAA2BxjB,SAAS,oBACxDslC,EAAIp4B,KAAKnV,KAAKuB,OAAOC,UAAU,qBAE3BxB,KAAKuB,OAAOT,QAAQge,aACpBwuB,EAAQ7hB,YAAY,mCACpB8hB,EAAIp4B,KAAKnV,KAAKuB,OAAOC,UAAU,mBAE/B8rC,EAAQ7hB,YAAY,6BAA6BxjB,SAAS,kBAC1DslC,EAAIp4B,KAAKnV,KAAKuB,OAAOC,UAAU,uBAGvCxB,KAAKiL,eAETuiC,gBAAiB,WACb,GAAIpI,GAAUplC,KAAKq4B,gBAAgBr4B,KAAK08B,cAAc,GAAIllB,OAAMue,OAAO,EAAE,MACrE0X,EAAcztC,KAAKq4B,gBAAgBr4B,KAAK08B,cAAcllB,MAAMC,KAAKqnB,OAAOuG,aAC5ErlC,MAAKk1B,QAAQG,UAAUoD,UAAU2M,EAASqI,IAE9CxD,eAAgB,WACZ,GAAIhwB,GAAQja,KAAKuB,OAAO6E,QAAQC,IAAI,QACpC,IAAI4T,EAAM7X,OAAS,EAAG,CAClB,GAAIsrC,GAAMzzB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAYkR,IAC/Do2B,EAAM1zB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAY0R,IAC/D61B,EAAQz8B,KAAKgH,IAAI3E,MAAMrC,KAAMu8B,GAC7BG,EAAQ18B,KAAKgH,IAAI3E,MAAMrC,KAAMw8B,GAC7BG,EAAQ38B,KAAK8G,IAAIzE,MAAMrC,KAAMu8B,GAC7BK,EAAQ58B,KAAK8G,IAAIzE,MAAMrC,KAAMw8B,GAC7BK,EAAS78B,KAAKgH,IACQ,GAAlBnY,KAAKyX,KAAK+b,MAAcxzB,KAAKuB,OAAOT,QAAQgf,cAAgBtI,MAAMC,KAAKqnB,OAAOpwB,MAC5D,GAAlB1O,KAAKyX,KAAK+b,MAAcxzB,KAAKuB,OAAOT,QAAQif,eAAiBvI,MAAMC,KAAKqnB,OAAOlwB,QAC7E5O,KAAKuB,OAAOT,QAAQgf,cAAgB,EAAI9f,KAAKuB,OAAOT,QAAQkf,kBAAqB8tB,EAAQF,IACzF5tC,KAAKuB,OAAOT,QAAQif,eAAiB,EAAI/f,KAAKuB,OAAOT,QAAQkf,kBAAqB+tB,EAAQF,GAEpG7tC,MAAKk1B,QAAQ1mB,OAASxO,KAAKk1B,QAAQ9vB,KAAK21B,OAAO,GAAGvE,SAAS,GAAIhf,OAAMue,QAAQ+X,EAAQF,GAAS,GAAIG,EAAQF,GAAS,IAAInX,SAASsX,IAChIhuC,KAAKk1B,QAAQ1B,MAAQwa,EAEJ,IAAjB/zB,EAAM7X,SACNpC,KAAKk1B,QAAQ1B,MAAQ,GACrBxzB,KAAKk1B,QAAQ1mB,OAASxO,KAAKk1B,QAAQ9vB,KAAK21B,OAAO,GAAGvE,SAAS,GAAIhf,OAAMue,OAAO9b,EAAMg0B,GAAG,GAAG5nC,IAAI,YAAYkR,EAAG0C,EAAMg0B,GAAG,GAAG5nC,IAAI,YAAY0R,IAAI2e,SAAS12B,KAAKk1B,QAAQ1B,SAErKxzB,KAAK6wB,UAETuF,cAAe,SAASkO,GACpB,MAAOA,GAAO5N,SAAS12B,KAAKyX,KAAK+b,OAAOjb,IAAIvY,KAAKyX,KAAKjJ,SAE1D6pB,gBAAiB,SAASiM,GACtB,MAAOA,GAAO5N,SAAS12B,KAAKk1B,QAAQ1B,OAAOjb,IAAIvY,KAAKk1B,QAAQ1mB,QAAQ+J,IAAIvY,KAAKk1B,QAAQkQ,UAEzF1I,cAAe,SAAS4H,GACpB,MAAOA,GAAO9N,SAASx2B,KAAKyX,KAAKjJ,QAAQusB,OAAO/6B,KAAKyX,KAAK+b,QAE9D8H,kBAAmB,SAAS4S,EAAOvgC,GAC/B,GAAIwgC,GAAerc,EAASD,cAAcqc,GACtC/D,EAAQ,GAAIgE,GAAanuC,KAAM2N,EAEnC,OADA3N,MAAK2kC,gBAAgBt7B,KAAK8gC,GACnBA,GAEXnB,mBAAoB,SAASkF,EAAOE,GAChC,GAAIhmC,GAAQpI,IACZouC,GAAY30B,QAAQ,SAAS9L,GACzBvF,EAAMkzB,kBAAkB4S,EAAOvgC,MAGvC0gC,aAAchuC,EAAEqJ,SACR,4GAERuB,YAAa,WACT,GAAKjL,KAAKuB,OAAOT,QAAQwF,eAAzB,CAGA,GAAIgoC,MAAcpkC,QAAQlK,KAAKuB,OAAO6E,QAAQiF,uBAAyBkjC,YAAevuC,KAAKuB,OAAO6E,QAAQC,IAAI,cAAgBkoC,YAC9HC,EAAY,GACZC,EAAazuC,KAAKwH,EAAEO,KAAK,aACzB2mC,EAAQD,EAAW1mC,KAAK,wBACxB4mC,EAAWF,EAAW1mC,KAAK,2BAC3B6mC,EAAeH,EAAW1mC,KAAK,yBAC/BK,EAAQpI,IACR0uC,GAAMpgC,IAAI,SAAS6G,KAAKnV,KAAKuB,OAAOC,UAAU,mBAC9CmtC,EAASrgC,IAAI,oBACbggC,EAAS70B,QAAQ,SAASsD,GAClBA,EAAM1W,IAAI,SAAW+B,EAAM7G,OAAOwJ,cAClC2jC,EAAMv5B,KAAK4H,EAAM1W,IAAI,UACrBuoC,EAAa79B,IAAI,aAAcgM,EAAM1W,IAAI,UACrC+B,EAAM2uB,eAEF3uB,EAAM7G,OAAOT,QAAQ8e,oBACrB8uB,EAAMlmC,MAAM,WACR,GAAIohC,GAAQpiC,EAAExH,MACd6uC,EAASrnC,EAAE,WAAWmF,IAAIoQ,EAAM1W,IAAI,UAAUi7B,KAAK,WAC/CvkB,EAAMnC,IAAI,QAASpT,EAAExH,MAAM2M,OAC3BvE,EAAM6C,cACN7C,EAAMyoB,UAEV+Y,GAAMjS,QAAQpvB,KAAKsmC,GACnBA,EAAO1d,WAIX/oB,EAAM7G,OAAOT,QAAQ0F,qBACrBmoC,EAASnmC,MACD,SAAS+E,GACLA,EAAGW,iBACC9F,EAAM2uB,cACNha,EAAMnC,IAAI,QAASpT,EAAExH,MAAMqI,KAAK,eAEpCb,EAAExH,MAAM8uC,SAAS9mC,SAE3B8E,WAAW,WACT8hC,EAAa79B,IAAI,aAAcgM,EAAM1W,IAAI,cAMrDmoC,GAAapmC,EAAMimC,cACfrrB,KAAMjG,EAAM1W,IAAI,SAChB0oC,WAAYhyB,EAAM1W,IAAI,aAIlCooC,EAAW1mC,KAAK,gBAAgBQ,KAAKimC,KAEzCxd,qBAAsB,SAASge,GAC3BA,EAAgBvmC,UAChBzI,KAAK2kC,gBAAkBtkC,EAAE++B,OAAOp/B,KAAK2kC,gBACjC,SAASwF,GACL,MAAOA,KAAU6E,KAI7BnW,yBAA0B,SAASlrB,GAC/B,GAAKA,EAGL,MAAOtN,GAAE0H,KAAK/H,KAAK2kC,gBAAiB,SAASwF,GACzC,MAAOA,GAAM1rB,QAAU9Q,KAG/BytB,4BAA6B,SAAS8S,GAClC,GAAIe,GAAmB5uC,EAAE4d,OAAOje,KAAK2kC,gBAAgB,SAASwF,GAC1D,MAAOA,GAAMtlC,OAASqpC,IAEtB9lC,EAAQpI,IACZK,GAAEgC,KAAK4sC,EAAkB,SAAS9E,GAC9B/hC,EAAM4oB,qBAAqBmZ,MAGnCv8B,eAAgB,SAASD,GACrB,GAAIw8B,GAAQnqC,KAAK64B,yBAAyBlrB,EACtCw8B,IACAA,EAAM3d,aAGd1e,eAAgB,SAASH,GACrBtN,EAAEgC,KAAKrC,KAAK2kC,gBAAiB,SAASwF,GAClCA,EAAM1Y,iBAGdoL,YAAa,SAASlvB,GAClBtN,EAAEgC,KAAKrC,KAAK2kC,gBAAiB,SAASwF,GAClCA,EAAM9Y,cAGdR,OAAQ,WAEC7wB,KAAKklC,eAGV7kC,EAAEgC,KAAKrC,KAAK2kC,gBAAiB,SAASqK,GAClCA,EAAgBne,QAAS6H,iBAAgB,MAEzC14B,KAAKk1B,SAAgC,mBAAdl1B,MAAKyX,MAC5BzX,KAAKwtC,kBAETh2B,MAAMC,KAAK8jB,SAEfp0B,OAAQ,SAASwhC,EAAWL,EAAUG,EAAYD,GAC9C,GAAI0G,EAEAlvC,MAAKk1B,UACLl1B,KAAKk1B,QAAQkQ,QAAU5tB,MAAMC,KAAKqnB,OAAOuG,YAAY7O,SAASx2B,KAAKk1B,QAAQ9vB,MAC3EpF,KAAKk1B,QAAQtC,UAAU6F,UAAUz4B,KAAKk1B,QAAQkQ,QAAQ5O,UAAU,EAAE,IAAKx2B,KAAKk1B,QAAQ9vB,KAAKmT,KAAK,EAAE,KAChGvY,KAAKk1B,QAAQoQ,cAAc7M,UAAUz4B,KAAKk1B,QAAQkQ,QAASplC,KAAKk1B,QAAQ9vB,MAG5E,IAAI+pC,GAAS3G,EAAUC,EACnB2G,EAAS9G,EAASK,CAEduG,GADJ1G,EAAYF,EACC6G,EAEJC,EAEbpvC,KAAKyX,KAAK43B,WAAW/G,EAAWK,EAAWH,EAAYC,EAAYyG,GAEnElvC,KAAK6wB,UAET0T,YAAa,SAAS+K,EAAOhL,EAAQiL,GACjC,GAAIC,GAAWxvC,KAAKs7B,kBAAkB,WAAW,KACjDkU,GAAS/P,QAAU6E,EACnBkL,EAAS1W,oBAAsBwW,EAC/BE,EAASlQ,OAASiQ,EAClBC,EAAS3e,SACT7wB,KAAK88B,aAAe0S,GAExB3P,WAAY,SAASF,GACjB,GAAIA,GAA0D,mBAArCA,GAAWhmB,KAAKyb,iBAAkC,CACvE,GAAIjD,GAAawN,EAAWhmB,KAAKyb,gBAC7Bp1B,MAAKglC,kBAAoBrF,EAAWhmB,KAAKyb,mBACrCp1B,KAAKglC,iBACLhlC,KAAKglC,gBAAgB3T,SAASc,GAElCA,EAAWhB,OAAOnxB,KAAKglC,iBACvBhlC,KAAKglC,gBAAkB7S,OAGvBnyB,MAAKglC,iBACLhlC,KAAKglC,gBAAgB3T,WAEzBrxB,KAAKglC,gBAAkB,MAG/B/1B,YAAa,SAAS0tB,GAClB,GAAI0H,GAAOrkC,KAAKuO,SAASC,SACzB81B,EAAS,GAAI9sB,OAAMue,OACO4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,MAEpBksB,EAASoJ,EAAO9N,SAASx2B,KAAKyvC,WACxDzvC,MAAKyvC,WAAanL,GACbtkC,KAAKk2B,aAAel2B,KAAK+kC,YAAc7J,EAAO94B,OAASkB,EAAM8R,qBAC9DpV,KAAKk2B,aAAc,EAEvB,IAAIyJ,GAAanoB,MAAMpR,QAAQw5B,QAAQ0E,EACnCtkC,MAAKk2B,YACDl2B,KAAK88B,cAAwD,kBAAjC98B,MAAK88B,aAAa7B,WAC9Cj7B,KAAK88B,aAAa7B,WAAWC,GAE7Bl7B,KAAKyX,KAAKwjB,WAAWC,GAGzBl7B,KAAK6/B,WAAWF,GAEpBnoB,MAAMC,KAAK8jB,QAEf7rB,YAAa,SAASitB,EAAQC,GAC1B,GAAIyH,GAAOrkC,KAAKuO,SAASC,SACzB81B,EAAS,GAAI9sB,OAAMue,OACO4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,KAI9C,IAFAhP,KAAKyvC,WAAanL,EAClBtkC,KAAK+kC,YAAa,GACb/kC,KAAK88B,cAA2C,cAA3B98B,KAAK88B,aAAaj4B,KAAsB,CAC9D7E,KAAKo7B,4BAA4B,UACjCp7B,KAAKk2B,aAAc,CACnB,IAAIyJ,GAAanoB,MAAMpR,QAAQw5B,QAAQ0E,EACvC,IAAI3E,GAA0D,mBAArCA,GAAWhmB,KAAKyb,iBACrCp1B,KAAK88B,aAAe6C,EAAWhmB,KAAKyb,iBACpCp1B,KAAK88B,aAAapL,UAAUiL,EAAQC,OAGpC,IADA58B,KAAK88B,aAAe,KAChB98B,KAAK+2B,cAAgB/2B,KAAKwlC,aAAeliC,EAAMkS,mBAAoB,CACnE,GAAIgB,GAAUxW,KAAK08B,cAAc4H,GACjCva,GACI5O,GAAI7X,EAAM4O,OAAO,QACjB8J,WAAYhc,KAAKuB,OAAOwJ,aACxBkR,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAEfunB,OAAQh8B,EAAMiO,WAAWK,aAEzBsL,EAAQld,KAAKuB,OAAO6E,QAAQ6W,QAAQ8M,EACxC/pB,MAAK64B,yBAAyB3b,GAAOie,cAI7Cn7B,KAAKwlC,aACDxlC,KAAK+2B,cAAgB/2B,KAAKwlC,aAAeliC,EAAMmS,sBAAwBzV,KAAK88B,cAA2C,SAA3B98B,KAAK88B,aAAaj4B,MAC9G7E,KAAKo7B,4BAA4B,UACjCp7B,KAAKukC,YAAYvkC,KAAK88B,aAAcwH,EAAQhhC,EAAMiO,WAAWS,iBAC7DhS,KAAKwlC,WAAaliC,EAAMoS,mBACxB1V,KAAK4kC,QAAQiE,QAAQ,WACjBrhC,EAAExH,MAAMuI,KAAKvI,KAAKuB,OAAOC,UAAU,gDAAgDonC,aAGvF5oC,KAAK4kC,QAAQ58B,OACbhI,KAAKwlC,YAAa,IAG1BhuB,MAAMC,KAAK8jB,QAEf5rB,UAAW,SAASgtB,EAAQC,GAExB,GADA58B,KAAK+kC,YAAa,EACd/kC,KAAK88B,aAAc,CACnB,GAAIuH,GAAOrkC,KAAKuO,SAASC,QACzBxO,MAAK88B,aAAanL,SAENrZ,MAAO,GAAId,OAAMue,OACO4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,OAGhD4tB,OAGR58B,MAAK88B,aAAe,KACpB98B,KAAKk2B,aAAc,EACf0G,GACA58B,KAAK68B,cAET78B,KAAKyX,KAAKi4B,WAEdl4B,OAAMC,KAAK8jB,QAEf6K,SAAU,SAASzJ,EAAQgT,GAEvB,GADA3vC,KAAK8kC,aAAe6K,EAChBx+B,KAAK0b,IAAI7sB,KAAK8kC,cAAgB,EAAG,CACjC,GAAIT,GAAOrkC,KAAKuO,SAASC,SACzB0sB,EAAS,GAAI1jB,OAAMue,OACO4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,MACjBwnB,SAASx2B,KAAKyX,KAAKjJ,QAAQkoB,SAAUvlB,KAAKgiB,MAAQ,EAC3EnzB,MAAK8kC,YAAc,EACnB9kC,KAAKyX,KAAKqvB,SAAU9mC,KAAKyX,KAAK+b,MAAQriB,KAAKgiB,MAAOnzB,KAAKyX,KAAKjJ,OAAOgoB,SAAS0E,IAE5El7B,KAAKyX,KAAKqvB,SAAU9mC,KAAKyX,KAAK+b,MAAQriB,KAAKy+B,QAAS5vC,KAAKyX,KAAKjJ,OAAO+J,IAAI2iB,EAAOH,OAAO5pB,KAAKgiB,SAEhGnzB,KAAK8kC,YAAc,IAG3BkC,QAAS,SAASrK,GACd,IAAK38B,KAAK+2B,aAAc,CACpB,GAAIsN,GAAOrkC,KAAKuO,SAASC,SACzB81B,EAAS,GAAI9sB,OAAMue,OACK4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,MAExC2wB,EAAanoB,MAAMpR,QAAQw5B,QAAQ0E,IACnCtkC,KAAK6vC,cACL7vC,KAAKuB,OAAOT,QAAQqe,uBACpBwgB,GAC4C,mBAArCA,GAAWhmB,KAAKyb,kBACvBuK,EAAWhmB,KAAKyb,iBAAiB3W,MAAMpY,IAAI,SAC1CrG,KAAK8vC,uBAEN9vC,KAAK8vC,qBAAuBnlB,WAAW,WACnC1hB,OAAO8mC,KAAKpQ,EAAWhmB,KAAKyb,iBAAiB3W,MAAMpY,IAAI,OAAQ,UAC/DrG,KAAK8vC,qBAAuB,MAC9BE,KAAKhwC,MAAO,QAI1BymC,cAAe,SAAS9J,GACpB,GAAI0H,GAAOrkC,KAAKuO,SAASC,SACzB81B,EAAS,GAAI9sB,OAAMue,OACO4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,MAE1C2wB,EAAanoB,MAAMpR,QAAQw5B,QAAQ0E,EAEvC,KAAKtkC,KAAK+2B,aASN,YARI/2B,KAAKuB,OAAOT,QAAQoe,uBACpBygB,GAC4C,mBAArCA,GAAWhmB,KAAKyb,kBACvBuK,EAAWhmB,KAAKyb,iBAAiB3W,MAAMpY,IAAI,SAC1CrG,KAAK8vC,sBAEN7mC,OAAO8mC,KAAKpQ,EAAWhmB,KAAKyb,iBAAiB3W,MAAMpY,IAAI,OAAQ,UAIvE,IAAIrG,KAAK+2B,gBAAkB4I,GAA0D,mBAArCA,GAAWhmB,KAAKyb,kBAAmC,CAC/F,GAAI5e,GAAUxW,KAAK08B,cAAc4H,GACjCva,GACI5O,GAAI7X,EAAM4O,OAAO,QACjB8J,WAAYhc,KAAKuB,OAAOwJ,aACxBkR,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAEfunB,OAAQh8B,EAAMiO,WAAWM,mBAE7BqL,EAAQld,KAAKuB,OAAO6E,QAAQ6W,QAAQ8M,EACpC/pB,MAAK64B,yBAAyB3b,GAAOie,aAEzC3jB,MAAMC,KAAK8jB,QAEf0U,mBAAoB,SAASlmB,GACzB,GAAImmB,MACA1f,EAAU,EACd,QAAOzG,EAAM,6BACT,IAAK,UACDyG,EAAUhpB,EAAE,SAASe,KAAKwhB,EAAM,4BAChC,IAAIomB,GAAW3f,EAAQzoB,KAAK,SAC5BmoC,GAAQ/uC,MAAQnB,KAAKuB,OAAOC,UAAU,aAAe2uC,EAAS9nC,KAAK,aACnE6nC,EAAQhvC,IAAM,sBAAwBivC,EAAS9nC,KAAK,oBAAsB,WAAa8nC,EAAS9nC,KAAK,iBACrG6nC,EAAQ1sC,MAAQ2sC,EAASpoC,KAAK,WAAWM,KAAK,OAC9C6nC,EAAQzsC,YAAc0sC,EAASpoC,KAAK,wBAAwBoN,MAC5D,MACJ,KAAK,SACDqb,EAAUhpB,EAAE,SAASe,KAAKwhB,EAAM,6BAChCmmB,EAAQ/uC,MAAQqvB,EAAQzoB,KAAK,YAAYoN,OAAO6a,OAChDkgB,EAAQhvC,IAAMsvB,EAAQzoB,KAAK,QAAQM,KAAK,QACxC6nC,EAAQzsC,YAAc+sB,EAAQzoB,KAAK,aAAaoN,OAAO6a,MACvD,MACJ,SACQjG,EAAM,2BACNmmB,EAAQhvC,IAAM6oB,EAAM,0BAMhC,IAHIA,EAAM,eAAiBA,EAAM,+BAC7BmmB,EAAQzsC,aAAesmB,EAAM,eAAiBA,EAAM,6BAA6B9Y,QAAQ,YAAY,KAAK+e,QAE1GjG,EAAM,cAAgBA,EAAM,4BAA6B,CACzDyG,EAAUhpB,EAAE,SAASe,KAAKwhB,EAAM,cAAgBA,EAAM,4BACtD,IAAIqmB,GAAW5f,EAAQzoB,KAAK,QACxBqoC,GAAShuC,SACT8tC,EAAQ1sC,MAAQ4sC,EAAS/nC,KAAK,cAElC,IAAIgoC,GAAY7f,EAAQzoB,KAAK,OACzBsoC,GAAUjuC,SACV8tC,EAAQhX,SAAWmX,EAAUhoC,KAAK,KAEtC,IAAIioC,GAAQ9f,EAAQzoB,KAAK,MACrBuoC,GAAMluC,SACN8tC,EAAQ1sC,MAAQ8sC,EAAM,GAAGr9B,IAE7B,IAAIs9B,GAAM/f,EAAQzoB,KAAK,IACnBwoC,GAAInuC,SACJ8tC,EAAQhvC,IAAMqvC,EAAI,GAAGjoC,MAEzB4nC,EAAQ/uC,MAAQqvB,EAAQzoB,KAAK,WAAWM,KAAK,UAAY6nC,EAAQ/uC,MACjE+uC,EAAQzsC,YAAc+sB,EAAQrb,OAAOlE,QAAQ,YAAY,KAAK+e,OAE9DjG,EAAM,mBACNmmB,EAAQhvC,IAAM6oB,EAAM,kBAEpBA,EAAM,oBAAsBmmB,EAAQ/uC,QACpC+uC,EAAQ/uC,OAAS4oB,EAAM,kBAAkBrZ,MAAM,MAAM,IAAM,IAAIsf,OAC3DkgB,EAAQ/uC,QAAU+uC,EAAQhvC,MAC1BgvC,EAAQ/uC,OAAQ,IAGpB4oB,EAAM,6BAA+BmmB,EAAQ/uC,QAC7C+uC,EAAQ/uC,MAAQ4oB,EAAM,6BAEtBA,EAAM,cAAgBA,EAAM,+BAC5ByG,EAAUhpB,EAAE,SAASe,KAAKwhB,EAAM,cAAgBA,EAAM,6BACtDmmB,EAAQ1sC,MAAQgtB,EAAQzoB,KAAK,gBAAgBM,KAAK,eAAiB6nC,EAAQ1sC,MAC3E0sC,EAAQhvC,IAAMsvB,EAAQzoB,KAAK,cAAcM,KAAK,aAAe6nC,EAAQhvC,IACrEgvC,EAAQ/uC,MAAQqvB,EAAQzoB,KAAK,gBAAgBM,KAAK,eAAiB6nC,EAAQ/uC,MAC3E+uC,EAAQzsC,YAAc+sB,EAAQzoB,KAAK,sBAAsBM,KAAK,qBAAuB6nC,EAAQzsC,YAC7FysC,EAAQhX,SAAW1I,EAAQzoB,KAAK,oBAAoBM,KAAK,mBAAqB6nC,EAAQhX,UAGrFgX,EAAQ/uC,QACT+uC,EAAQ/uC,MAAQnB,KAAKuB,OAAOC,UAAU,oBAG1C,KAAK,GADDgvC,IAAU,QAAS,cAAe,MAAO,SACpC5/B,EAAI,EAAGA,EAAI4/B,EAAOpuC,OAAQwO,IAAK,CACpC,GAAI7G,GAAIymC,EAAO5/B,IACXmZ,EAAM,cAAgBhgB,IAAMggB,EAAMhgB,MAClCmmC,EAAQnmC,GAAKggB,EAAM,cAAgBhgB,IAAMggB,EAAMhgB,IAEhC,SAAfmmC,EAAQnmC,IAAgC,SAAfmmC,EAAQnmC,KACjCmmC,EAAQnmC,GAAK+xB,QAQrB,MAJgD,kBAAtC97B,MAAKuB,OAAOT,QAAQ2vC,gBAC1BP,EAAUlwC,KAAKuB,OAAOT,QAAQ2vC,cAAcP,EAASnmB,IAGlDmmB,GAGX3gC,SAAU,SAASwa,EAAO4S,GACtB,GAAK38B,KAAK+2B,aAAV,CAGA,GAAIhN,EAAM,cAAgBA,EAAM,oBAC5B,IACI,GAAI2mB,GAAWtmB,KAAKkd,MAAMvd,EAAM,cAAgBA,EAAM,oBACtD1pB,GAAEuT,OAAOmW,EAAM2mB,GAEnB,MAAM3iC,IAGV,GAAImiC,GAAuD,mBAArClwC,MAAKuB,OAAOT,QAAQ6vC,aAA8B3wC,KAAKiwC,mBAAmBlmB,GAAO/pB,KAAKuB,OAAOT,QAAQ6vC,aAAa5mB,GAEpIsa,EAAOrkC,KAAKuO,SAASC,SACrB81B,EAAS,GAAI9sB,OAAMue,OACf4G,EAAO9tB,MAAQw1B,EAAKv1B,KACpB6tB,EAAO5tB,MAAQs1B,EAAKr1B,MAExBwH,EAAUxW,KAAK08B,cAAc4H,GAC7BsM,GACIz1B,GAAI7X,EAAM4O,OAAO,QACjB8J,WAAYhc,KAAKuB,OAAOwJ,aACxB7J,IAAKgvC,EAAQhvC,KAAO,GACpBC,MAAO+uC,EAAQ/uC,OAAS,GACxBsC,YAAaysC,EAAQzsC,aAAe,GACpCD,MAAO0sC,EAAQ1sC,OAAS,GACxBvC,MAAOivC,EAAQjvC,OAAS66B,OACxBn2B,UAAWuqC,EAAQhX,UAAY4C,OAC/B7f,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAGfunB,OAAQh8B,EAAMiO,WAAWO,eAE7BoL,EAAQld,KAAKuB,OAAO6E,QAAQ6W,QAAQ2zB,GACxCzG,EAAQnqC,KAAK64B,yBAAyB3b,EAClB,UAAhByf,EAAO93B,MACPslC,EAAMhP,eAGd0V,WAAY,WACR7wC,KAAKkoC,aAAeloC,KAAKwH,EAAEkH,QAC3B1O,KAAKmoC,cAAgBnoC,KAAKwH,EAAEoH,QAE5B,IAAIpC,GAAMxM,KAAKuB,OAAOiG,EAAE,EACxBgQ,OAAMC,KAAKnJ,IAAI,UACfo2B,EAAWoM,OAAOtkC,IAEtBukC,WAAY,WAQR,MAPI/wC,MAAKwlC,aAAeliC,EAAMkS,oBAC1BxV,KAAKwlC,YAAa,EAClBxlC,KAAK4kC,QAAQ58B,SAEbhI,KAAKwlC,WAAaliC,EAAMkS,mBACxBxV,KAAK4kC,QAAQzvB,KAAKnV,KAAKuB,OAAOC,UAAU,iDAAiDonC,WAEtF,GAEXoI,WAAY,WAQR,MAPIhxC,MAAKwlC,aAAeliC,EAAMmS,sBAAwBzV,KAAKwlC,aAAeliC,EAAMoS,oBAC5E1V,KAAKwlC,YAAa,EAClBxlC,KAAK4kC,QAAQ58B,SAEbhI,KAAKwlC,WAAaliC,EAAMmS,qBACxBzV,KAAK4kC,QAAQzvB,KAAKnV,KAAKuB,OAAOC,UAAU,4CAA4ConC,WAEjF,GAEXqI,cAAe,WACb,GAAIC,GAAclxC,KAAKuB,OAAO6E,QAAQuV,SAElCw1B,GADehiC,SAASC,cAAc,KAC1B8hC,EAAY/1B,IACxBi2B,EAAmBD,EAAY,cAG5BD,GAAY/1B,SACZ+1B,GAAY9sC,UACZ8sC,GAAYG,QAEnB,IAAIC,GAEAnV,EADAoV,IAGJlxC,GAAEgC,KAAK6uC,EAAYj3B,MAAO,SAASlM,EAAE6C,EAAEmD,GACrCu9B,EAAQvjC,EAAEoN,IAAMpN,EAAE3J,UACX2J,GAAE3J,UACF2J,GAAEoN,GACTo2B,EAAOD,GAASvjC,EAAE,OAASzK,EAAM0N,aAEnC3Q,EAAEgC,KAAK6uC,EAAY/2B,MAAO,SAASpM,EAAE6C,EAAEmD,SAC9BhG,GAAE3J,UACF2J,GAAEoN,GACTpN,EAAEqO,GAAKm1B,EAAOxjC,EAAEqO,IAChBrO,EAAEoO,KAAOo1B,EAAOxjC,EAAEoO,QAEpB9b,EAAEgC,KAAK6uC,EAAYtzB,MAAO,SAAS7P,EAAE6C,EAAEmD,SAC9BhG,GAAE3J,UACF2J,GAAEoN,GAENpN,EAAEyO,eACD2f,EAAcpuB,EAAEyO,aAChBzO,EAAEyO,gBACFnc,EAAEgC,KAAK85B,EAAa,SAASxtB,EAAE0F,GAC3BtG,EAAEyO,aAAanT,KAAKkoC,EAAO5iC,SAIrCuiC,EAAYvzB,QAEZ,IAAI6zB,GAAiBpnB,KAAKC,UAAU6mB,EAAa,KAAM,GACnDO,EAAO,GAAIC,OAAMF,IAAkB3sC,KAAM,kCAC7C4/B,GAAUgN,EAAKL,IAGjB9H,kBAAmB,SAASD,GAExB,GADArpC,KAAKo7B,4BAA4B,QAC7B5zB,EAAEmqC,cAActI,GAEhB,YADArpC,KAAKyX,KAAOzX,KAAKs7B,kBAAkB,OAAQt7B,KAAKuB,OAAO6E,QAAQC,IAAI,SAAS4nC,GAAGjuC,KAAK4xC,eAAe5xC,KAAKuB,OAAOT,QAAQ2e,sBAQ3H,IALiC,mBAAtB4pB,GAAQwI,UACf7xC,KAAKyX,KAAOzX,KAAKs7B,kBAAkB,OAAQt7B,KAAKuB,OAAO6E,QAAQC,IAAI,SAAS4nC,GAAGjuC,KAAK4xC,eAAevI,EAAQwI,aAE3G7xC,KAAKyX,KAAOzX,KAAKs7B,kBAAkB,OAAQt7B,KAAKuB,OAAO6E,QAAQC,IAAI,SAAS4nC,GAAGjuC,KAAK4xC,eAAe5xC,KAAKuB,OAAOT,QAAQ2e,sBAE/F,mBAAjB4pB,GAAQ5xB,MAAwB4xB,EAAQ5xB,KAAK/G,MAAM,KAAKtO,QAAU,EAAE,CAC3E,GAAI0vC,GAAazI,EAAQ5xB,KAAK/G,MAAM,KAChCqhC,GACI3rC,QAAWpG,KAAKuB,OAAO6E,QACvBoI,QACI+I,EAAK2iB,WAAW4X,EAAW,IAC3B/5B,EAAKmiB,WAAW4X,EAAW,KAE/Bv1B,WAAc2d,WAAW4X,EAAW,IAE5C9xC,MAAKyX,KAAKqvB,SAASiL,EAAOx1B,WAAY,GAAI/E,OAAMue,MAAMgc,EAAOvjC,SAGpC,mBAAjB66B,GAAQ5xB,MAAyC,cAAjB4xB,EAAQ5xB,MAChDzX,KAAKyX,KAAKgyB,YAGoB,mBAAvBJ,GAAQ2I,aACY,SAAvB3I,EAAQ2I,YACRhyC,KAAKyX,KAAK0kB,aAAen8B,KAAKyX,KAAKs6B,OAAOv1B,kBAAoBtS,SAC9DlK,KAAKyX,KAAKw6B,aAEVjyC,KAAKyX,KAAKy6B,WAAU,IAI5BlyC,KAAK8N,iBACuB,mBAAjBu7B,GAAQtlC,MAAwBslC,EAAQtlC,MAC/C/D,KAAK4N,eAAe5N,KAAKuB,OAAO6E,QAAQC,IAAI,SAASA,IAAIgjC,EAAQtlC,OAEzC,mBAAjBslC,GAAQroC,MAAwBqoC,EAAQroC,MAC/ChB,KAAK4N,eAAe5N,KAAKuB,OAAO6E,QAAQC,IAAI,SAASA,IAAIgjC,EAAQroC,QAIzE4wC,eAAgB,SAASt4B,GAErB,GAAI64B,GAASn5B,SAASM,GAClB84B,EAAa,CASjB,OAPIA,GADAD,EAAS,EACInyC,KAAKuB,OAAO6E,QAAQC,IAAI,SAASjE,OAAS+vC,EAE1CA,EAE0C,mBAAhDnyC,MAAKuB,OAAO6E,QAAQC,IAAI,SAAS4nC,GAAGkE,KAC3CC,EAAa,GAEVA,GAEXC,SAAU,WACN,GAKIC,GALAC,EAAiBvyC,KAAKwH,EAAEO,KAAK,iBAC7BgF,EAAO/M,KAAKuB,OAAOiG,EAAEO,KAAK,YAC1BmzB,EAAS,EACT9yB,EAAQpI,KACRwyC,EAAUpqC,EAAMmG,SAASG,OAEzB3B,GAAKkP,WAAWnN,KAAO,GACvBosB,EAAQ,GAAI1jB,OAAMue,QAAQhpB,EAAK2B,QAAQ,EAAG,IAC1C3B,EAAK0lC,SAAS3jC,KAAM,GAAG,KACvB9O,KAAKwH,EAAEirC,SAAS3jC,KAAM,KAAK,IAAI,WAC3B,GAAIL,GAAIrG,EAAMZ,EAAEkH,OAChB8I,OAAMC,KAAKwwB,SAAW,GAAIzwB,OAAMghB,MAAM/pB,EAAGrG,EAAMmG,SAASK,aAGxD0jC,EADCE,EAAWzlC,EAAK2B,QAAW3B,EAAK6B,SACvB4jC,EAEAA,EAAUzlC,EAAK2B,QAE7B6jC,EAAehqC,KAAK,aAEpB2yB,EAAQ,GAAI1jB,OAAMue,OAAOhpB,EAAK2B,QAAQ,EAAG,IACzC3B,EAAK0lC,SAAS3jC,MAAM,KAAM,KAC1B9O,KAAKwH,EAAEirC,SAAS3jC,KAAM,GAAG,IAAI,WACzB,GAAIL,GAAIrG,EAAMZ,EAAEkH,OAChB8I,OAAMC,KAAKwwB,SAAW,GAAIzwB,OAAMghB,MAAM/pB,EAAGrG,EAAMmG,SAASK,aAE5D0jC,EAAUE,EAAQ,IAClBD,EAAehqC,KAAK,YAExBvI,KAAKyX,KAAKwjB,WAAWC,IAEzBxP,KAAM,aACNqkB,KAAM,eACPnmC,QAIIiC,IAIX4kB,OAAO,qBAAqB,SAAU,aAAc,WAAY,+BAAgC,SAAUjpB,EAAGnH,EAAGyxB,EAAUC,GACtH,YAEA,IAAIzuB,GAAQwuB,EAASF,WAMjB8gB,EAAWpvC,EAAM6P,QAAQ4e,EA8N7B,OA5NA1xB,GAAEqyC,EAAS9xC,WAAWgT,QAClBF,MAAO,WACH,GAAItL,GAAQpI,IACZA,MAAKwH,EAAIA,EAAE,cACXxH,KAAK6E,KAAO,OACZ7E,KAAKm8B,eACLn8B,KAAKwzB,MAAQ,EACbxzB,KAAK2yC,aAAe,EACpB3yC,KAAKwO,OAASgJ,MAAMC,KAAKC,OACzB1X,KAAK+xC,UAED/xC,KAAKye,QACLze,KAAK+xC,QACDx1B,WAAcnU,EAAMqW,MAAMpY,IAAI,cAC9BmI,OAAUpG,EAAMqW,MAAMpY,IAAI,UAC1BmW,aAAgBpU,EAAMqW,MAAMpY,IAAI,kBAIxCrG,KAAK4yC,gBAEL,IAAIrL,GAAY,SAASC,EAAUC,GAC/Br/B,EAAMZ,EAAEO,KAAKy/B,GAAUh/B,MAAM,SAASk/B,GAElC,MADAt/B,GAAMq/B,GAAOC,IACN,IAIfH,GAAU,cAAe,WACzBA,EAAU,aAAc,UACxBA,EAAU,cAAe,aACzBA,EAAU,eAAgB,YAE1BvnC,KAAKwH,EAAEO,KAAK,oBAAoBS,MAAO,WACnCJ,EAAM0+B,SAAS1+B,EAAM2pC,OAAOx1B,WAAY,GAAI/E,OAAMue,MAAM3tB,EAAM2pC,OAAOvjC,SACrEpG,EAAM8pC,WAAU,GACZ9pC,EAAMtH,QAAQwG,aACdc,EAAM+zB,aAAe/zB,EAAM2pC,OAAOv1B,kBAAoBtS,SACtD9B,EAAM6pC,aAEV7pC,EAAMsnC,cAGV1vC,KAAKwH,EAAEO,KAAK,uBAAuB8E,WAAY,WAC3CzE,EAAM8pC,WAAU,GAChB9pC,EAAMZ,EAAEO,KAAK,uBAAuB+E,WAAY,WAC5C1E,EAAM6pC,gBAGdjyC,KAAKwH,EAAEO,KAAK,uBAAuBS,MAAO,WACtCJ,EAAM8pC,WAAU,GAChB9pC,EAAMZ,EAAEO,KAAK,uBAAuBuG,IAAK,gBAG1CtO,KAAKuB,OAAO6E,QAAQC,IAAI,SAASjE,OAAS,GAAKpC,KAAKuB,OAAOT,QAAQuG,WAClErH,KAAKwH,EAAEO,KAAK,oBAAoB2mB,QAGxCmC,OAAQ,SAAS/vB,KAGjB8xC,eAAgB,WACZ,GAAIxqC,GAAQpI,IAERoI,GAAMtH,QAAQye,qBACdvf,KAAKypC,YAELrhC,EAAM0+B,SAAS1+B,EAAM2pC,OAAOx1B,WAAY,GAAI/E,OAAMue,MAAM3tB,EAAM2pC,OAAOvjC,SAGrEpG,EAAMtH,QAAQwG,aAAec,EAAMtH,QAAQ0e,uBAC3CpX,EAAM+zB,aAAe/zB,EAAM2pC,OAAOv1B,kBAAoBtS,SACtD9B,EAAM6pC,aAEN7pC,EAAM8pC,WAAU,IAGxBW,SAAU,WACN,GAAIzqC,GAAQpI,KAERwO,GACA+I,EAAKnP,EAAMoG,OAAO+I,EAClBQ,EAAK3P,EAAMoG,OAAOuJ,EAGtB3P,GAAMqW,MAAQrW,EAAM7G,OAAO6E,QAAQiX,SAAWd,WAAWnU,EAAMorB,MAAOhlB,OAAOA,EAAQgO,aAAcpU,EAAM+zB,YAAYjyB,WACrH9B,EAAM2pC,QACEx1B,WAAcnU,EAAMqW,MAAMpY,IAAI,cAC9BmI,OAAUpG,EAAMqW,MAAMpY,IAAI,UAC1BmW,aAAgBpU,EAAMqW,MAAMpY,IAAI,iBAGxCrG,KAAKwH,EAAEO,KAAK,oBAAoB2mB,OAEhCtmB,EAAMsnC,aAEVvL,cAAe,SAASx2B,GACpB3N,KAAK8yC,SAASnlC,GACd3N,KAAKm8B,YAAY9yB,KAAKsE,EAAOwN,IAC7Bnb,KAAK0vC,aAEToD,SAAU,SAASnlC,GAC+C,mBAAnD3N,MAAKgL,SAAS6tB,yBAAyBlrB,IAC9C3N,KAAKgL,SAAS6tB,yBAAyBlrB,GAAQ3F,QAGvDiqC,UAAW,WACP,GAAI7pC,GAAQpI,IACZA,MAAKm8B,YAAY1iB,QAAQ,SAASrV,EAAKkV,GACnC,GAAIvV,GAAOqE,EAAM7G,OAAO6E,QAAQC,IAAI,SAASA,IAAIjC,EACjD,OAAoB,mBAATL,GACAqE,EAAM0qC,SAAS1qC,EAAM7G,OAAO6E,QAAQC,IAAI,SAASA,IAAIjC,QAE5DgE,GAAM+zB,YAAYE,OAAO/iB,EAAO,KAGxC9B,MAAMC,KAAK8jB,QAEf2W,UAAW,SAASje,GAChB,GAAI7rB,GAAQpI,IACZA,MAAKm8B,YAAY1iB,QAAQ,SAASrV,GAC9BgE,EAAM4C,SAAS6tB,yBAAyBzwB,EAAM7G,OAAO6E,QAAQC,IAAI,SAASA,IAAIjC,IAAMsqB,KAAKuF,KAExFA,IACDj0B,KAAKm8B,gBAET3kB,MAAMC,KAAK8jB,QAEfuL,SAAU,SAASH,EAAWoM,GACrBpM,EAAU3mC,KAAK2yC,aAAgBrvC,EAAMuS,YAAe8wB,EAAU3mC,KAAK2yC,aAAgBrvC,EAAMwS,aAC1F9V,KAAKwzB,MAAQmT,EACToM,IACA/yC,KAAKwO,OAASukC,GAElB/yC,KAAKgL,SAAS6lB,SACd7wB,KAAK0vC,cAGbsD,QAAS,WACL,GAAIrM,GAAY3mC,KAAKwzB,MAAQriB,KAAKy+B,QAClCmD,EAAU,GAAIv7B,OAAMue,OACO/1B,KAAKgL,SAASuD,SAASG,QACvB1O,KAAKgL,SAASuD,SAASK,WACpB8nB,SAAU,IAAQ,EAAIvlB,KAAKy+B,UAAYr3B,IAAIvY,KAAKwO,OAAOkoB,SAAUvlB,KAAKy+B,SACpG5vC,MAAK8mC,SAAUH,EAAWoM,IAE9BE,OAAQ,WACJ,GAAItM,GAAY3mC,KAAKwzB,MAAQriB,KAAKgiB,MAClC4f,EAAU,GAAIv7B,OAAMue,OACO/1B,KAAKgL,SAASuD,SAASG,QACvB1O,KAAKgL,SAASuD,SAASK,WACpB8nB,SAAU,IAAQ,EAAIvlB,KAAKgiB,QAAU5a,IAAIvY,KAAKwO,OAAOkoB,SAAUvlB,KAAKgiB,OAClGnzB,MAAK8mC,SAAUH,EAAWoM,IAE9B1D,WAAY,SAAS6D,EAAQC,EAAQjE,GACjC,GAAIvI,GAAY3mC,KAAKwzB,MAAQ0b,EACzB6D,EAAU,GAAIv7B,OAAMue,OACqC,GAAjC/1B,KAAKgL,SAASuD,SAASG,SAAkB,EAAIwgC,IAAalvC,KAAKwO,OAAO+I,EAAI23B,EAASgE,EAAShE,EAAS,IACnE,GAAlClvC,KAAKgL,SAASuD,SAASK,UAAmB,EAAIsgC,IAAalvC,KAAKwO,OAAOuJ,EAAIm3B,EAASiE,EAASjE,EAAS,KAElIlvC,MAAK8mC,SAAUH,EAAWoM,IAE9BtJ,UAAW,SAAS2J,GAChB,GAAIn5B,GAAQja,KAAKuB,OAAO6E,QAAQC,IAAI,QACpC,IAAI4T,EAAM7X,OAAS,EAAG,CAClB,GAAIsrC,GAAMzzB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAYkR,IACnEo2B,EAAM1zB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAY0R,IAC/D61B,EAAQz8B,KAAKgH,IAAI3E,MAAMrC,KAAMu8B,GAC7BG,EAAQ18B,KAAKgH,IAAI3E,MAAMrC,KAAMw8B,GAC7BG,EAAQ38B,KAAK8G,IAAIzE,MAAMrC,KAAMu8B,GAC7BK,EAAQ58B,KAAK8G,IAAIzE,MAAMrC,KAAMw8B,GACzBK,EAAS78B,KAAKgH,KAAMX,MAAMC,KAAKrS,KAAKsJ,MAAQ,EAAI1O,KAAKuB,OAAOT,QAAQwe,oBAAsBwuB,EAAQF,IAASp2B,MAAMC,KAAKrS,KAAKwJ,OAAS,EAAI5O,KAAKuB,OAAOT,QAAQwe,oBAAsByuB,EAAQF,GAC9L7tC,MAAK2yC,aAAe3E,EAEM,mBAAfoF,IAA+BlZ,WAAWkZ,EAAW72B,YAAY,GAAK2d,WAAWkZ,EAAW5kC,OAAO+I,GAAG,GAAK2iB,WAAWkZ,EAAW5kC,OAAOuJ,GAAG,EAClJ/X,KAAK8mC,SAAS5M,WAAWkZ,EAAW72B,YAAa,GAAI/E,OAAMue,MAAMmE,WAAWkZ,EAAW5kC,OAAO+I,GAAI2iB,WAAWkZ,EAAW5kC,OAAOuJ,KAG/H/X,KAAK8mC,SAASkH,EAAQx2B,MAAMC,KAAKC,OAAO8e,SAAS,GAAIhf,OAAMue,QAAQ+X,EAAQF,GAAS,GAAIG,EAAQF,GAAS,IAAInX,SAASsX,KAGzG,IAAjB/zB,EAAM7X,QACNpC,KAAK8mC,SAAS,EAAGtvB,MAAMC,KAAKC,OAAO8e,SAAS,GAAIhf,OAAMue,OAAO9b,EAAMg0B,GAAG,GAAG5nC,IAAI,YAAYkR,EAAG0C,EAAMg0B,GAAG,GAAG5nC,IAAI,YAAY0R,OAGhIkjB,WAAY,SAASC,GACjBl7B,KAAKwO,OAASxO,KAAKwO,OAAO+J,IAAI2iB,GAC9Bl7B,KAAKgL,SAAS6lB,UAElB6e,UAAW,WACP,GAAG1vC,KAAKc,QAAQ4e,gBAAkB1f,KAAKc,QAAQ6e,WAAW,CACtD,GAAInG,MACAD,EAAaJ,SAASgwB,QAAQkK,cAAc3iC,MAAM,IAClD6I,GAAWnX,OAAS,GACpBmX,EAAW,GAAG7I,MAAM,KAAK+I,QAAQ,SAASC,GACtC,GAAIC,GAAOD,EAAKhJ,MAAM,IACtB8I,GAAOG,EAAK,IAAMC,mBAAmBD,EAAK,MAGlDH,EAAO/B,KAAOtG,KAAKmiC,MAAoB,IAAdtzC,KAAKwO,OAAO+I,GAAQ,IAAO,IAAMpG,KAAKmiC,MAAoB,IAAdtzC,KAAKwO,OAAOuJ,GAAQ,IAAO,IAAM5G,KAAKmiC,MAAiB,IAAXtzC,KAAKwzB,OAAY,IAE9HxzB,KAAKuB,OAAO6E,QAAQC,IAAI,SAAS+1B,QAAQp8B,KAAKye,QAAS,GACvDjF,EAAOq4B,UAAY7xC,KAAKuB,OAAO6E,QAAQC,IAAI,SAAS+1B,QAAQp8B,KAAKye,OAC7DjF,EAAOq4B,YAAc7xC,KAAKuB,OAAO6E,QAAQC,IAAI,SAASjE,OAAS,IAC/DoX,EAAOq4B,WAAY,IAGnBr4B,EAAOq4B,iBACAr4B,GAAOq4B,UAGtB7xC,KAAKuB,OAAO6I,OAAOmpC,SAAS,IAAM35B,mBAAmBpS,EAAEgsC,MAAMh6B,KAAWK,SAAS,EAAO5I,SAAS,MAGzGxI,QAAS,SAASk0B,GACd38B,KAAKsxB,OAAO,WACZtxB,KAAKkyC,WAAU,MAEpBtoC,QAEI8oC,IAMmB,kBAAnBe,SAAQC,QACfD,QAAQC,QACJC,OACIC,OAAS,uBACTC,WAAa,uBACbpP,UAAa,6BACb3S,SAAW,gBACXgiB,iBAAiB,iBACjBC,gBAAgB,2BAChBC,WAAa,oCAGjBtoC,KACIuoC,KAAOL,OAAU,kBACjBE,kBAAoBF,OAAU,WAElCM,MACIH,iBACII,QAAS,eAMzBV,SAAS,8BACA,sBACA,oBACA,gBACA,oBACA,sBACA,sBACA,sBACA,sBACA,0BACA,4BACA,0BACA,0BACA,4BACA,0BACA,6BACA,4BACA,0BACA,4BACA,4BACA,qBACA,iBACA,qBACG,SAAS1hB,EAAoBsR,EAAYzP,EAAU1X,EAAMmjB,EAAUkB,EAAYE,EAAYyC,EAAYW,EAAYvP,EAAgBC,EAAkBI,EAAgBC,EAAgBE,EAAkBN,EAAgBC,EAAmBC,EAAkB4I,EAAgBC,EAAkBC,EAAkBgH,EAAW34B,EAAO6mC,GAE1U,YAEA,IAAIrvC,GAAO4F,OAAO5F,IAEU,oBAAlBA,GAAKuI,WACXvI,EAAKuI,YAET,IAAIA,GAAWvI,EAAKuI,QAEpBA,GAAS8kB,oBAAsBqB,EAC/BnmB,EAASomB,YAAcqR,EACvBz3B,EAASgQ,KAAOgY,EAChBhoB,EAASsQ,KAAOA,EAChBtQ,EAASyQ,KAAOq2B,EAChB9mC,EAASyzB,SAAWA,EACpBzzB,EAASq0B,YAAcM,EACvB30B,EAAS60B,WAAaA,EACtB70B,EAASs3B,WAAaA,EACtBt3B,EAAS03B,YAAcO,EACvBj4B,EAAS0oB,eAAiBA,EAC1B1oB,EAAS2oB,iBAAmBA,EAC5B3oB,EAAS+oB,eAAiBA,EAC1B/oB,EAASgpB,eAAiBA,EAC1BhpB,EAASkpB,iBAAmBA,EAC5BlpB,EAAS4oB,eAAiBA,EAC1B5oB,EAAS6oB,kBAAoBA,EAC7B7oB,EAAS8oB,iBAAmBA,EAC5B9oB,EAAS0xB,eAAiBA,EAC1B1xB,EAAS2xB,iBAAmBA,EAC5B3xB,EAAS4xB,iBAAmBA,EAC5B5xB,EAAS44B,UAAYA,EACrB54B,EAASC,MAAQA,EAEjBuoC,gBAGJ3jB,OAAO,gBAAiB,cAGxBA,OAAO,kBAAkB,UAAW,SAAU4jB,GAC1C,YACA,OAAOA,GAAGC,YAAY","file":"renkan.min.js","sourcesContent":["this[\"renkanJST\"] = this[\"renkanJST\"] || {};\n\nthis[\"renkanJST\"][\"templates/colorpicker.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                      • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor_readonly.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                        \\n ×\\n ';\n if (options.show_edge_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (edge.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n__e(edge.title) +\n'\\n ';\n if (edge.uri) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n

                                        \\n';\n if (options.show_edge_tooltip_uri && edge.uri) { ;\n__p += '\\n

                                        \\n ' +\n__e( edge.short_uri ) +\n'\\n

                                        \\n';\n } ;\n__p += '\\n

                                        ' +\n((__t = (edge.description)) == null ? '' : __t) +\n'

                                        \\n';\n if (options.show_edge_tooltip_nodes) { ;\n__p += '\\n

                                        \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                        \\n

                                        \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                        \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_tooltip_creator && edge.has_creator) { ;\n__p += '\\n

                                        \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                        \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                        \\n ×' +\n__e(renkan.translate(\"Edit Edge\")) +\n'\\n

                                        \\n

                                        \\n \\n \\n

                                        \\n';\n if (options.show_edge_editor_uri) { ;\n__p += '\\n

                                        \\n \\n \\n \\n

                                        \\n ';\n if (options.properties.length) { ;\n__p += '\\n

                                        \\n \\n \\n

                                        \\n';\n } } ;\n__p += '\\n';\n if (options.show_edge_editor_style) { ;\n__p += '\\n
                                        \\n ';\n if (options.show_edge_editor_style_color) { ;\n__p += '\\n
                                        \\n ' +\n__e(renkan.translate(\"Edge color:\")) +\n'\\n
                                        \\n ;\">\\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Edge') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                        \\n
                                        \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_dash) { ;\n__p += '\\n
                                        \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                        \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_thickness) { ;\n__p += '\\n
                                        \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e( edge.thickness ) +\n'\\n +\\n
                                        \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_arrow) { ;\n__p += '\\n
                                        \\n ' +\n__e(renkan.translate(\"Arrow:\")) +\n'\\n \\n
                                        \\n ';\n } ;\n__p += '\\n
                                        \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_direction) { ;\n__p += '\\n

                                        \\n ' +\n__e( renkan.translate(\"Change edge direction\") ) +\n'\\n

                                        \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_nodes) { ;\n__p += '\\n

                                        \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                        \\n

                                        \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n %-edge.to_color%>;\">\\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                        \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_creator && edge.has_creator) { ;\n__p += '\\n

                                        \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n ;\">\\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                        \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/annotationtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                      • \\n\\n \\n

                                        ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                        \\n

                                        ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                        \\n

                                        Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                        \\n
                                        \\n
                                      • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/segmenttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                      • \\n\\n \\n

                                        ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                        \\n

                                        ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                        \\n

                                        Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                        \\n
                                        \\n
                                      • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/tagtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                      • \\n\\n \\n

                                        ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                        \\n
                                        \\n
                                      • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/list-bin.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
                                      • \\n';\n } ;\n__p += '\\n

                                        \\n ';\n if (url) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n ';\n if (url) { ;\n__p += '';\n } ;\n__p += '\\n

                                        \\n ';\n if (description) { ;\n__p += '\\n

                                        ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                        \\n ';\n } ;\n__p += '\\n ';\n if (image) { ;\n__p += '\\n
                                        \\n ';\n } ;\n__p += '\\n
                                      • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/main.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_bins) { ;\n__p += '\\n
                                        \\n
                                        \\n

                                        ' +\n__e( translate(\"Select contents:\")) +\n'

                                        \\n
                                        \\n \\n
                                        \\n
                                        \\n
                                          \\n
                                          \\n \\n
                                          \\n
                                          \\n \\n \\n
                                          \\n
                                            \\n
                                            \\n';\n } ;\n__p += ' ';\n if (options.show_editor) { ;\n__p += '\\n
                                            \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                            \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n

                                            \\n ' +\n__e(node.short_uri) +\n'\\n

                                            \\n';\n } ;\n__p += ' ';\n if (options.show_node_tooltip_description) { ;\n__p += '\\n

                                            ' +\n((__t = (node.description)) == null ? '' : __t) +\n'

                                            \\n';\n } ;\n__p += ' ';\n if (node.image && options.show_node_tooltip_image) { ;\n__p += '\\n \\n';\n } ;\n__p += ' ';\n if (node.has_creator && options.show_node_tooltip_creator) { ;\n__p += '\\n

                                            \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                            \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor_video.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                            \\n ×\\n ';\n if (options.show_node_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                            \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n //TODO: change class to id ;\n__p += '\\n

                                            \\n ×' +\n__e(renkan.translate(\"Edit Node\")) +\n'\\n

                                            \\n

                                            \\n \\n ';\n if (options.show_node_editor_title_richtext) { ;\n__p += '\\n

                                            ' +\n((__t = (node.title)) == null ? '' : __t) +\n'
                                            \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                            \\n';\n if (options.show_node_title_style) { ;\n__p += '\\n
                                            \\n
                                            \\n ' +\n__e(renkan.translate(\"Title color:\")) +\n'\\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Title') )) == null ? '' : __t) +\n'\\n
                                            \\n
                                            \\n ' +\n__e(renkan.translate(\"Title size:\")) +\n'\\n -\\n ' +\n__e(node.title_size.toFixed(1)) +\n'\\n +\\n
                                            \\n
                                            \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_uri) { ;\n__p += '\\n

                                            \\n \\n \\n \\n

                                            \\n';\n } ;\n__p += ' ';\n if (options.change_types) { ;\n__p += '\\n

                                            \\n \\n \\n

                                            \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_description) { ;\n__p += '\\n

                                            \\n \\n ';\n if (options.show_node_editor_description_richtext) { ;\n__p += '\\n

                                            ' +\n((__t = (node.description)) == null ? '' : __t) +\n'
                                            \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                            \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_size) { ;\n__p += '\\n

                                            \\n ' +\n__e(renkan.translate(\"Size:\")) +\n'\\n -\\n ' +\n__e(node.size) +\n'\\n +\\n

                                            \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_style) { ;\n__p += '\\n
                                            \\n ';\n if (options.show_node_editor_style_color) { ;\n__p += '\\n
                                            \\n \\n ' +\n__e(renkan.translate(\"Node color:\")) +\n'\\n
                                            \\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Node') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                            \\n
                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_dash) { ;\n__p += '\\n
                                            \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_thickness) { ;\n__p += '\\n
                                            \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e(node.thickness) +\n'\\n +\\n
                                            \\n ';\n } ;\n__p += '\\n
                                            \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_image) { ;\n__p += '\\n
                                            \\n
                                            \\n \\n ';\n if (node.clip_path) { ;\n__p += '\\n \\n \\n \\n ';\n };\n__p += '\\n
                                            \\n
                                            \\n

                                            \\n \\n

                                            \\n \\n \\n
                                            \\n

                                            \\n';\n if (options.allow_image_upload) { ;\n__p += '\\n

                                            \\n \\n \\n

                                            \\n';\n };\n\n } ;\n__p += ' ';\n if (options.show_node_editor_creator && node.has_creator) { ;\n__p += '\\n

                                            \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                            \\n';\n } ;\n__p += ' ';\n if (options.change_shapes) { ;\n__p += '\\n

                                            \\n \\n \\n

                                            \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/scene.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_top_bar) { ;\n__p += '\\n
                                            \\n
                                            \\n ';\n if (!options.editor_mode || !options.title_editable) { ;\n__p += '\\n

                                            \\n ' +\n__e( project.get(\"title\") || translate(\"Untitled project\")) +\n'\\n

                                            \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (options.show_user_list) { ;\n__p += '\\n
                                            \\n
                                            \\n ';\n if (options.show_user_color) { ;\n__p += '\\n
                                            \\n \\n ';\n if (options.user_color_editable) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (options.user_color_editable) { print(colorPicker('Rk-Editor-ColorPicker-User')) } ;\n__p += '\\n
                                            \\n ';\n } ;\n__p += '\\n <unknown user>\\n
                                            \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.home_button_url) {;\n__p += '\\n
                                              \\n \\n
                                              \\n
                                              \\n ' +\n__e( translate(options.home_button_title) ) +\n'\\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_fullscreen_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Full Screen\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.editor_mode) { ;\n__p += '\\n ';\n if (options.show_addnode_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Add Node\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_addedge_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Add Edge\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_save_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_open_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Open Project\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_bookmarklet) { ;\n__p += '\\n
                                              \\n \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Renkan \\'Drag-to-Add\\' bookmarklet\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n } else { ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                              \\n
                                              \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n }; ;\n__p += '\\n ';\n if (options.show_search_field) { ;\n__p += '\\n
                                              \\n \\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n
                                              \\n';\n } ;\n__p += '\\n
                                              \\n
                                              \\n
                                              \\n ';\n if (options.editor_mode && options.save_view) { ;\n__p += '\\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.save_view) { ;\n__p += '\\n
                                              \\n ';\n if (options.hide_nodes) { ;\n__p += '\\n \\t \\n ';\n } ;\n__p += ' \\n ';\n } ;\n__p += '\\n
                                              \\n ';\n } ;\n__p += '\\n \\n\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/search.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                            • ' +\n((__t = ( title )) == null ? '' : __t) +\n'
                                            • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/wikipedia-bin/resulttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                            • \\n\\n \\n

                                              \\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n

                                              \\n

                                              ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                              \\n
                                            • \\n';\n\n}\nreturn __p\n};","/* Declaring the Renkan Namespace Rkns and Default values */\n\n(function(root) {\n\n \"use strict\";\n\n if (typeof root.Rkns !== \"object\") {\n root.Rkns = {};\n }\n\n var Rkns = root.Rkns;\n var $ = Rkns.$ = root.jQuery;\n var _ = Rkns._ = root._;\n\n Rkns.pickerColors = [\"#8f1919\", \"#a80000\", \"#d82626\", \"#ff0000\", \"#e87c7c\", \"#ff6565\", \"#f7d3d3\", \"#fecccc\",\n \"#8f5419\", \"#a85400\", \"#d87f26\", \"#ff7f00\", \"#e8b27c\", \"#ffb265\", \"#f7e5d3\", \"#fee5cc\",\n \"#8f8f19\", \"#a8a800\", \"#d8d826\", \"#feff00\", \"#e8e87c\", \"#feff65\", \"#f7f7d3\", \"#fefecc\",\n \"#198f19\", \"#00a800\", \"#26d826\", \"#00ff00\", \"#7ce87c\", \"#65ff65\", \"#d3f7d3\", \"#ccfecc\",\n \"#198f8f\", \"#00a8a8\", \"#26d8d8\", \"#00feff\", \"#7ce8e8\", \"#65feff\", \"#d3f7f7\", \"#ccfefe\",\n \"#19198f\", \"#0000a8\", \"#2626d8\", \"#0000ff\", \"#7c7ce8\", \"#6565ff\", \"#d3d3f7\", \"#ccccfe\",\n \"#8f198f\", \"#a800a8\", \"#d826d8\", \"#ff00fe\", \"#e87ce8\", \"#ff65fe\", \"#f7d3f7\", \"#feccfe\",\n \"#000000\", \"#242424\", \"#484848\", \"#6d6d6d\", \"#919191\", \"#b6b6b6\", \"#dadada\", \"#ffffff\"\n ];\n\n Rkns.__renkans = [];\n\n var _BaseBin = Rkns._BaseBin = function(_renkan, _opts) {\n if (typeof _renkan !== \"undefined\") {\n this.renkan = _renkan;\n this.renkan.$.find(\".Rk-Bin-Main\").hide();\n this.$ = Rkns.$('
                                            • ')\n .addClass(\"Rk-Bin\")\n .appendTo(_renkan.$.find(\".Rk-Bin-List\"));\n this.title_icon_$ = Rkns.$('')\n .addClass(\"Rk-Bin-Title-Icon\")\n .appendTo(this.$);\n\n var _this = this;\n\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Close bin\")\n })\n .addClass(\"Rk-Bin-Close\")\n .html('×')\n .appendTo(this.$)\n .click(function() {\n _this.destroy();\n if (!_renkan.$.find(\".Rk-Bin-Main:visible\").length) {\n _renkan.$.find(\".Rk-Bin-Main:last\").slideDown();\n }\n _renkan.resizeBins();\n return false;\n });\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Refresh bin\")\n })\n .addClass(\"Rk-Bin-Refresh\")\n .appendTo(this.$)\n .click(function() {\n _this.refresh();\n return false;\n });\n this.count_$ = Rkns.$('
                                              ')\n .addClass(\"Rk-Bin-Count\")\n .appendTo(this.$);\n this.title_$ = Rkns.$('

                                              ')\n .addClass(\"Rk-Bin-Title\")\n .appendTo(this.$);\n this.main_$ = Rkns.$('
                                              ')\n .addClass(\"Rk-Bin-Main\")\n .appendTo(this.$)\n .html('

                                              ' + _renkan.translate(\"Loading, please wait\") + '

                                              ');\n this.title_$.html(_opts.title || '(new bin)');\n this.renkan.resizeBins();\n\n if (_opts.auto_refresh) {\n window.setInterval(function() {\n _this.refresh();\n }, _opts.auto_refresh);\n }\n }\n };\n\n _BaseBin.prototype.destroy = function() {\n this.$.detach();\n this.renkan.resizeBins();\n };\n\n /* Point of entry */\n\n var Renkan = Rkns.Renkan = function(_opts) {\n var _this = this;\n\n Rkns.__renkans.push(this);\n\n this.options = _.defaults(_opts, Rkns.defaults, {\n templates: _.defaults(_opts.templates, renkanJST) || renkanJST,\n node_editor_templates: _.defaults(_opts.node_editor_templates, Rkns.defaults.node_editor_templates)\n });\n this.template = this.options.templates['templates/main.html'];\n\n var types_templates = {};\n _.each(this.options.node_editor_templates, function(value, key) {\n types_templates[key] = _this.options.templates[value];\n delete _this.options.templates[value];\n });\n this.options.node_editor_templates = types_templates;\n\n _.each(this.options.property_files, function(f) {\n Rkns.$.getJSON(f, function(data) {\n _this.options.properties = _this.options.properties.concat(data);\n });\n });\n\n this.read_only = this.options.read_only || !this.options.editor_mode;\n\n this.router = new Rkns.Router();\n\n this.project = new Rkns.Models.Project();\n this.dataloader = new Rkns.DataLoader.Loader(this.project, this.options);\n\n this.setCurrentUser = function(user_id, user_name) {\n this.project.addUser({\n _id: user_id,\n title: user_name\n });\n this.current_user = user_id;\n this.renderer.redrawUsers();\n };\n\n if (typeof this.options.user_id !== \"undefined\") {\n this.current_user = this.options.user_id;\n }\n this.$ = Rkns.$(\"#\" + this.options.container);\n this.$\n .addClass(\"Rk-Main\")\n .html(this.template(this));\n\n this.tabs = [];\n this.search_engines = [];\n\n this.current_user_list = new Rkns.Models.UsersList();\n\n this.current_user_list.on(\"add remove\", function() {\n if (this.renderer) {\n this.renderer.redrawUsers();\n }\n });\n\n this.colorPicker = function(pickerClass) {\n var _tmpl = _this.options.templates['templates/colorpicker.html'];\n return '
                                                ' + Rkns.pickerColors.map(function(c) {\n return _tmpl({\n c: c\n });\n }).join(\"\") + '
                                              ';\n };\n\n if (this.options.show_editor) {\n this.renderer = new Rkns.Renderer.Scene(this);\n }\n\n if (!this.options.search.length) {\n this.$.find(\".Rk-Web-Search-Form\").detach();\n } else {\n var _tmpl = _this.options.templates['templates/search.html'],\n _select = this.$.find(\".Rk-Search-List\"),\n _input = this.$.find(\".Rk-Web-Search-Input\"),\n _form = this.$.find(\".Rk-Web-Search-Form\");\n _.each(this.options.search, function(_search, _key) {\n if (Rkns[_search.type] && Rkns[_search.type].Search) {\n _this.search_engines.push(new Rkns[_search.type].Search(_this, _search));\n }\n });\n _select.html(\n _(this.search_engines).map(function(_search, _key) {\n return _tmpl({\n key: _key,\n title: _search.getSearchTitle(),\n className: _search.getBgClass()\n });\n }).join(\"\")\n );\n _select.find(\"li\").click(function() {\n var _el = Rkns.$(this);\n _this.setSearchEngine(_el.attr(\"data-key\"));\n _form.submit();\n });\n _form.submit(function() {\n if (_input.val()) {\n var _search = _this.search_engine;\n _search.search(_input.val());\n }\n return false;\n });\n this.$.find(\".Rk-Search-Current\").mouseenter(\n function() {\n _select.slideDown();\n }\n );\n this.$.find(\".Rk-Search-Select\").mouseleave(\n function() {\n _select.hide();\n }\n );\n this.setSearchEngine(0);\n }\n _.each(this.options.bins, function(_bin) {\n if (Rkns[_bin.type] && Rkns[_bin.type].Bin) {\n _this.tabs.push(new Rkns[_bin.type].Bin(_this, _bin));\n }\n });\n\n var elementDropped = false;\n\n this.$.find(\".Rk-Bins\")\n .on(\"click\", \".Rk-Bin-Title,.Rk-Bin-Title-Icon\", function() {\n var _mainDiv = Rkns.$(this).siblings(\".Rk-Bin-Main\");\n if (_mainDiv.is(\":hidden\")) {\n _this.$.find(\".Rk-Bin-Main\").slideUp();\n _mainDiv.slideDown();\n }\n });\n\n if (this.options.show_editor) {\n\n this.$.find(\".Rk-Bins\").on(\"mouseover\", \".Rk-Bin-Item\", function(_e) {\n var _t = Rkns.$(this);\n if (_t && $(_t).attr(\"data-uri\")) {\n var _models = _this.project.get(\"nodes\").where({\n uri: $(_t).attr(\"data-uri\")\n });\n _.each(_models, function(_model) {\n _this.renderer.highlightModel(_model);\n });\n }\n }).mouseout(function() {\n _this.renderer.unhighlightAll();\n }).on(\"mousemove\", \".Rk-Bin-Item\", function(e) {\n try {\n this.dragDrop();\n } catch (err) {}\n }).on(\"touchstart\", \".Rk-Bin-Item\", function(e) {\n elementDropped = false;\n }).on(\"touchmove\", \".Rk-Bin-Item\", function(e) {\n e.preventDefault();\n var touch = e.originalEvent.changedTouches[0],\n off = _this.renderer.canvas_$.offset(),\n w = _this.renderer.canvas_$.width(),\n h = _this.renderer.canvas_$.height();\n if (touch.pageX >= off.left && touch.pageX < (off.left + w) && touch.pageY >= off.top && touch.pageY < (off.top + h)) {\n if (elementDropped) {\n _this.renderer.onMouseMove(touch, true);\n } else {\n elementDropped = true;\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n _this.renderer.dropData({\n \"text/html\": div.innerHTML\n }, touch);\n _this.renderer.onMouseDown(touch, true);\n }\n }\n }).on(\"touchend\", \".Rk-Bin-Item\", function(e) {\n if (elementDropped) {\n _this.renderer.onMouseUp(e.originalEvent.changedTouches[0], true);\n }\n elementDropped = false;\n }).on(\"dragstart\", \".Rk-Bin-Item\", function(e) {\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n try {\n e.originalEvent.dataTransfer.setData(\"text/html\", div.innerHTML);\n } catch (err) {\n e.originalEvent.dataTransfer.setData(\"text\", div.innerHTML);\n }\n });\n\n }\n\n Rkns.$(window).resize(function() {\n _this.resizeBins();\n });\n\n var lastsearch = false,\n lastval = '';\n\n this.$.find(\".Rk-Bins-Search-Input\").on(\"change keyup paste input\", function() {\n var val = Rkns.$(this).val();\n if (val === lastval) {\n return;\n }\n var search = Rkns.Utils.regexpFromTextOrArray(val.length > 1 ? val : null);\n if (search.source === lastsearch) {\n return;\n }\n lastsearch = search.source;\n _.each(_this.tabs, function(tab) {\n tab.render(search);\n });\n\n });\n this.$.find(\".Rk-Bins-Search-Form\").submit(function() {\n return false;\n });\n };\n\n Renkan.prototype.translate = function(_text) {\n if (Rkns.i18n[this.options.language] && Rkns.i18n[this.options.language][_text]) {\n return Rkns.i18n[this.options.language][_text];\n }\n if (this.options.language.length > 2 && Rkns.i18n[this.options.language.substr(0, 2)] && Rkns.i18n[this.options.language.substr(0, 2)][_text]) {\n return Rkns.i18n[this.options.language.substr(0, 2)][_text];\n }\n return _text;\n };\n\n Renkan.prototype.onStatusChange = function() {\n this.renderer.onStatusChange();\n };\n\n Renkan.prototype.setSearchEngine = function(_key) {\n this.search_engine = this.search_engines[_key];\n this.$.find(\".Rk-Search-Current\").attr(\"class\", \"Rk-Search-Current \" + this.search_engine.getBgClass());\n var listClasses = this.search_engine.getBgClass().split(\" \");\n var classes = \"\";\n for (var i = 0; i < listClasses.length; i++) {\n classes += \".\" + listClasses[i];\n }\n this.$.find(\".Rk-Web-Search-Input.Rk-Search-Input\").attr(\"placeholder\", this.translate(\"Search in \") + this.$.find(\".Rk-Search-List \" + classes).html());\n };\n\n Renkan.prototype.resizeBins = function() {\n var _d = +this.$.find(\".Rk-Bins-Head\").outerHeight();\n this.$.find(\".Rk-Bin-Title:visible\").each(function() {\n _d += Rkns.$(this).outerHeight();\n });\n this.$.find(\".Rk-Bin-Main\").css({\n height: this.$.find(\".Rk-Bins\").height() - _d\n });\n };\n\n /* Utility functions */\n var getUUID4 = function() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n Rkns.Utils = {\n\n OriginEnum: (function(o) { return (Object.freeze && Object.freeze(o)) || o; }) ({\n NONE: 0,\n NODE_BUTTON: 1,\n NODE_DOUBLE_CLICK: 2,\n NODE_DROP_EXT: 3,\n NODE_DROP_BIN: 4,\n EDGE_BUTTON_BAR: 256,\n EDGE_BUTTON_CIRCLE: 512\n }),\n\n getUUID4: getUUID4,\n getUID: (function() {\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n var _d = new Date(),\n ID_AUTO_INCREMENT = 0,\n ID_BASE = _d.getUTCFullYear() + '-' +\n pad(_d.getUTCMonth() + 1) + '-' +\n pad(_d.getUTCDate()) + '-' +\n getUUID4();\n return function(_base) {\n var _n = (++ID_AUTO_INCREMENT).toString(16),\n _uidbase = (typeof _base === \"undefined\" ? \"\" : _base + \"-\");\n while (_n.length < 4) {\n _n = '0' + _n;\n }\n return _uidbase + ID_BASE + '-' + _n;\n };\n })(),\n getFullURL: function(url) {\n\n if (typeof(url) === 'undefined' || url == null) {\n return \"\";\n }\n if (/https?:\\/\\//.test(url)) {\n return url;\n }\n var img = new Image();\n img.src = url;\n var res = img.src;\n img.src = null;\n return res;\n\n },\n inherit: function(_baseClass, _callbefore) {\n\n var _class = function(_arg) {\n if (typeof _callbefore === \"function\") {\n _callbefore.apply(this, Array.prototype.slice.call(arguments, 0));\n }\n _baseClass.apply(this, Array.prototype.slice.call(arguments, 0));\n if (typeof this._init === \"function\" && !this._initialized) {\n this._init.apply(this, Array.prototype.slice.call(arguments, 0));\n this._initialized = true;\n }\n };\n _.extend(_class.prototype, _baseClass.prototype);\n\n return _class;\n\n },\n regexpFromTextOrArray: (function() {\n var charsub = [\n '[aáàâä]',\n '[cç]',\n '[eéèêë]',\n '[iíìîï]',\n '[oóòôö]',\n '[uùûü]'\n ],\n removeChars = [\n String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \"【\", \"】\", \"、\", \"・\", \"‥\", \"。\", \"「\", \"」\", \"『\", \"』\", \"〜\", \":\", \"!\", \"?\", \" \",\n \",\", \" \", \";\", \"(\", \")\", \".\", \"*\", \"+\", \"\\\\\", \"?\", \"|\", \"{\", \"}\", \"[\", \"]\", \"^\", \"#\", \"/\"\n ],\n remsrc = \"[\\\\\" + removeChars.join(\"\\\\\") + \"]\",\n remrx = new RegExp(remsrc, \"gm\"),\n charsrx = _.map(charsub, function(c) {\n return new RegExp(c);\n });\n\n function replaceText(_text) {\n var txt = _text.toLowerCase().replace(remrx, \"\"),\n src = \"\";\n\n function makeReplaceFunc(l) {\n return function(k, v) {\n l = l.replace(charsrx[k], v);\n };\n }\n for (var j = 0; j < txt.length; j++) {\n if (j) {\n src += remsrc + \"*\";\n }\n var l = txt[j];\n _.each(charsub, makeReplaceFunc(l));\n src += l;\n }\n return src;\n }\n\n function getSource(inp) {\n switch (typeof inp) {\n case \"string\":\n return replaceText(inp);\n case \"object\":\n var src = '';\n _.each(inp, function(v) {\n var res = getSource(v);\n if (res) {\n if (src) {\n src += '|';\n }\n src += res;\n }\n });\n return src;\n }\n return '';\n }\n\n return function(_textOrArray) {\n var source = getSource(_textOrArray);\n if (source) {\n var testrx = new RegExp(source, \"im\"),\n replacerx = new RegExp('(' + source + ')', \"igm\");\n return {\n isempty: false,\n source: source,\n test: function(_t) {\n return testrx.test(_t);\n },\n replace: function(_text, _replace) {\n return _text.replace(replacerx, _replace);\n }\n };\n } else {\n return {\n isempty: true,\n source: '',\n test: function() {\n return true;\n },\n replace: function(_text) {\n return text;\n }\n };\n }\n };\n })(),\n /* The minimum distance (in pixels) the mouse has to move to consider an element was dragged */\n _MIN_DRAG_DISTANCE: 2,\n /* Distance between the inner and outer radius of buttons that appear when hovering on a node */\n _NODE_BUTTON_WIDTH: 40,\n\n _EDGE_BUTTON_INNER: 2,\n _EDGE_BUTTON_OUTER: 40,\n /* Constants used to know if a specific action is to be performed when clicking on the canvas */\n _CLICKMODE_ADDNODE: 1,\n _CLICKMODE_STARTEDGE: 2,\n _CLICKMODE_ENDEDGE: 4,\n /* Node size step: Used to calculate the size change when clicking the +/- buttons */\n _NODE_SIZE_STEP: Math.LN2 / 4,\n _MIN_SCALE: 1 / 20,\n _MAX_SCALE: 20,\n _MOUSEMOVE_RATE: 80,\n _DOUBLETAP_DELAY: 800,\n /* Maximum distance in pixels (squared, to reduce calculations)\n * between two taps when double-tapping on a touch terminal */\n _DOUBLETAP_DISTANCE: 20 * 20,\n /* A placeholder so a default colour is displayed when a node has a null value for its user property */\n _USER_PLACEHOLDER: function(_renkan) {\n return {\n color: _renkan.options.default_user_color,\n title: _renkan.translate(\"(unknown user)\"),\n get: function(attr) {\n return this[attr] || false;\n }\n };\n },\n /* The code for the \"Drag and Add Bookmarklet\", slightly minified and with whitespaces removed, though\n * it doesn't seem that it's still a requirement in newer browsers (i.e. the ones compatibles with canvas drawing)\n */\n _BOOKMARKLET_CODE: function(_renkan) {\n return \"(function(a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r){a=document;b=a.body;c=a.location.href;j='draggable';m='text/x-iri-';d=a.createElement('div');d.innerHTML='\" +\n _renkan.translate(\"Drag items from this website, drop them in Renkan\").replace(/ /g, \"_\") +\n \"

                                              '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\\\/\\\\/[^\\\\/]*twitter\\\\.com\\\\//,s:'.tweet',n:'twitter'},{r:/https?:\\\\/\\\\/[^\\\\/]*google\\\\.[^\\\\/]+\\\\//,s:'.g',n:'google'},{r:/https?:\\\\/\\\\/[^\\\\/]*lemonde\\\\.fr\\\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();\";\n },\n /* Shortens text to the required length then adds ellipsis */\n shortenText: function(_text, _maxlength) {\n return (_text.length > _maxlength ? (_text.substr(0, _maxlength) + '…') : _text);\n },\n /* Drawing an edit box with an arrow and positioning the edit box according to the position of the node/edge being edited\n * Called by Rkns.Renderer.NodeEditor and Rkns.Renderer.EdgeEditor */\n drawEditBox: function(_options, _coords, _path, _xmargin, _selector, _renkan) {\n _selector.css({\n width: (_options.tooltip_width - 2 * _options.tooltip_padding)\n });\n \n var rect = _selector[0].getBoundingClientRect();\n var container_rect = _renkan.$[0].getBoundingClientRect();\n\n if(rect.bottom > (container_rect.bottom - 2 * _options.tooltip_padding - 10)) {\n _selector.css({\n 'overflow-x': 'hidden',\n 'overflow-y': 'scroll',\n 'max-height':(container_rect.bottom - 2 * _options.tooltip_padding - 5 - rect.top) + 'px'\n });\n }\n\n var _height = _selector.outerHeight() + 2 * _options.tooltip_padding + 5,\n _isLeft = (_coords.x < paper.view.center.x ? 1 : -1),\n _left = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length),\n _right = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length + _options.tooltip_width),\n _top = _coords.y - _height / 2;\n if (_top + _height > (paper.view.size.height - _options.tooltip_margin)) {\n _top = Math.max(paper.view.size.height - _options.tooltip_margin, _coords.y + _options.tooltip_arrow_width / 2) - _height;\n }\n if (_top < _options.tooltip_margin) {\n _top = Math.min(_options.tooltip_margin, _coords.y - _options.tooltip_arrow_width / 2);\n }\n var _bottom = _top + _height;\n /* jshint laxbreak:true */\n _path.segments[0].point = _path.segments[7].point = _coords.add([_isLeft * _xmargin, 0]);\n _path.segments[1].point.x = _path.segments[2].point.x = _path.segments[5].point.x = _path.segments[6].point.x = _left;\n _path.segments[3].point.x = _path.segments[4].point.x = _right;\n _path.segments[2].point.y = _path.segments[3].point.y = _top;\n _path.segments[4].point.y = _path.segments[5].point.y = _bottom;\n _path.segments[1].point.y = _coords.y - _options.tooltip_arrow_width / 2;\n _path.segments[6].point.y = _coords.y + _options.tooltip_arrow_width / 2;\n _path.fillColor = new paper.Color(new paper.Gradient([_options.tooltip_top_color, _options.tooltip_bottom_color]), [0, _top], [0, _bottom]);\n\n _selector.css({\n left: (_options.tooltip_padding + Math.min(_left, _right)),\n top: (_options.tooltip_padding + _top)\n });\n \n return _path;\n },\n // from http://stackoverflow.com/a/6444043\n increaseBrightness: function (hex, percent){\n // strip the leading # if it's there\n hex = hex.replace(/^\\s*#|\\s*$/g, '');\n\n // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`\n if(hex.length === 3){\n hex = hex.replace(/(.)/g, '$1$1');\n }\n\n var r = parseInt(hex.substr(0, 2), 16),\n g = parseInt(hex.substr(2, 2), 16),\n b = parseInt(hex.substr(4, 2), 16);\n\n return '#' +\n ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);\n }\n };\n})(window);\n\n/* END main.js */\n","(function(root) {\n \"use strict\";\n \n var Backbone = root.Backbone;\n \n var Router = root.Rkns.Router = Backbone.Router.extend({\n routes: {\n '': 'index'\n },\n \n index: function (parameters) {\n \n var result = {};\n if (parameters !== null){\n parameters.split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n this.trigger('router', result); \n } \n });\n\n})(window);","(function(root) {\n\n \"use strict\";\n\n var DataLoader = root.Rkns.DataLoader = {\n converters: {\n from1to2: function(data) {\n\n var i, len;\n if(typeof data.nodes !== 'undefined') {\n for(i=0, len=data.nodes.length; i 1 ? options.offset[1]\n : options.offset[0];\n }\n else if (options.offset.x != null) {\n offset.x = options.offset.x;\n offset.y = options.offset.y;\n }\n options.offset = offset;\n }\n return options;\n },\n toJSON : function() {\n return {\n _id : this.get('_id'),\n zoom_level : this.get('zoom_level'),\n offset : this.get('offset'),\n title : this.get('title'),\n description : this.get('description'),\n created_by : this.get('created_by') ? this.get('created_by')\n .get('_id') : null,\n hidden_nodes: this.get('hidden_nodes')\n // Don't need project id\n };\n }\n });\n\n // PROJECT\n var Project = Models.Project = RenkanModel.extend({\n schema_version : '2',\n type : 'project',\n blacklist : [ 'saveStatus', 'loadingStatus'],\n relations : [ {\n type : Backbone.HasMany,\n key : 'users',\n relatedModel : User,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'nodes',\n relatedModel : Node,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'edges',\n relatedModel : Edge,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'views',\n relatedModel : View,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n } ],\n addUser : function(_props, _options) {\n _props.project = this;\n var _user = User.findOrCreate(_props);\n this.get('users').push(_user, _options);\n return _user;\n },\n addNode : function(_props, _options) {\n _props.project = this;\n var _node = Node.findOrCreate(_props);\n this.get('nodes').push(_node, _options);\n return _node;\n },\n addEdge : function(_props, _options) {\n _props.project = this;\n var _edge = Edge.findOrCreate(_props);\n this.get('edges').push(_edge, _options);\n return _edge;\n },\n addView : function(_props, _options) {\n _props.project = this;\n // TODO: check if need to replace with create only\n var _view = View.findOrCreate(_props);\n // TODO: Should we remember only one view?\n this.get('views').push(_view, _options);\n return _view;\n },\n removeNode : function(_model) {\n this.get('nodes').remove(_model);\n },\n removeEdge : function(_model) {\n this.get('edges').remove(_model);\n },\n validate : function(options) {\n var _project = this;\n _.each(\n [].concat(options.users, options.nodes, options.edges,options.views),\n function(_item) {\n if (_item) {\n _item.project = _project;\n }\n }\n );\n },\n getSchemaVersion : function(data) {\n var t = data;\n if(typeof(t) === 'undefined') {\n t = this;\n }\n var version = t.schema_version;\n if(!version) {\n return 1;\n }\n else {\n return version;\n }\n },\n // Add event handler to remove edges when a node is removed\n initialize : function() {\n var _this = this;\n this.on('remove:nodes', function(_node) {\n _this.get('edges').remove(\n _this.get('edges').filter(\n function(_edge) {\n return _edge.get('from') === _node ||\n _edge.get('to') === _node;\n }));\n });\n },\n toJSON : function() {\n var json = _.clone(this.attributes);\n for ( var attr in json) {\n if ((json[attr] instanceof Backbone.Model) ||\n (json[attr] instanceof Backbone.Collection) ||\n (json[attr] instanceof RenkanModel)) {\n json[attr] = json[attr].toJSON();\n }\n }\n return _.omit(json, this.blacklist);\n }\n });\n\n var RosterUser = Models.RosterUser = Backbone.Model\n .extend({\n type : 'roster_user',\n idAttribute : '_id',\n\n constructor : function(options) {\n\n if (typeof options !== 'undefined') {\n options._id = options._id ||\n options.id ||\n Models.getUID(this);\n options.title = options.title || '(untitled ' + this.type + ')';\n options.description = options.description || '';\n options.uri = options.uri || '';\n options.project = options.project || null;\n options.site_id = options.site_id || 0;\n\n if (typeof this.prepare === 'function') {\n options = this.prepare(options);\n }\n }\n Backbone.Model.prototype.constructor.call(this, options);\n },\n\n validate : function() {\n if (!this.type) {\n return 'object has no type';\n }\n },\n\n prepare : function(options) {\n options.color = options.color || '#666666';\n return options;\n },\n\n toJSON : function() {\n return {\n _id : this.get('_id'),\n title : this.get('title'),\n uri : this.get('uri'),\n description : this.get('description'),\n color : this.get('color'),\n project : (this.get('project') != null) ? this.get(\n 'project').get('id') : null,\n site_id : this.get('site_id')\n };\n }\n });\n\n var UsersList = Models.UsersList = Backbone.Collection.extend({\n model : RosterUser\n });\n\n})(window);\n","Rkns.defaults = {\n\n language: (navigator.language || navigator.userLanguage || \"en\"),\n /* GUI Language */\n container: \"renkan\",\n /* GUI Container DOM element ID */\n search: [],\n /* List of Search Engines */\n bins: [],\n /* List of Bins */\n static_url: \"\",\n /* URL for static resources */\n popup_editor: true,\n /* show the node editor as a popup inside the renkan view */\n editor_panel: 'editor-panel',\n /* GUI continer DOM element ID of the editor panel */\n show_bins: true,\n /* Show bins in left column */\n properties: [],\n /* Semantic properties for edges */\n show_editor: true,\n /* Show the graph editor... Setting this to \"false\" only shows the bins part ! */\n read_only: false,\n /* Allows editing of renkan without changing the rest of the GUI. Can be switched on/off on the fly to block/enable editing */\n editor_mode: true,\n /* Switch for Publish/Edit GUI. If editor_mode is false, read_only will be true. */\n manual_save: false,\n /* In snapshot mode, clicking on the floppy will save a snapshot. Otherwise, it will show the connection status */\n show_top_bar: true,\n /* Show the top bar, (title, buttons, users) */\n default_user_color: \"#303030\",\n size_bug_fix: false,\n /* Resize the canvas after load (fixes a bug on iPad and FF Mac) */\n force_resize: false,\n allow_double_click: true,\n /* Allows Double Click to create a node on an empty background */\n double_click_open_url: true,\n /* In read_only mode open node uri in new window with a double click */\n simple_click_open_url: false,\n /* In read_only mode open node uri in new window with a simple click (do not disable the double click) */\n zoom_on_scroll: true,\n /* Allows to use the scrollwheel to zoom */\n element_delete_delay: 0,\n /* Delay between clicking on the bin on an element and really deleting it\n Set to 0 for delete confirm */\n autoscale_padding: 50,\n resize: true,\n\n /* zoom options */\n show_zoom: true,\n /* show zoom buttons */\n save_view: true,\n /* show buttons to save view */\n view_force_autoscale: true,\n /* Force autoscale when the Renkan is loaded */\n view_show_hiddennodes: true,\n /* Show all the node when the Renkan is loaded */\n default_index_view: -1,\n\n /* URL parsing */\n url_parameters: true,\n /* accept or not hash parameters in the url */\n update_url: true,\n /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */\n /* Considered as false if url_parameters is false */\n\n\n /* TOP BAR BUTTONS */\n show_search_field: true,\n show_user_list: true,\n /* show the user list */\n user_name_editable: true,\n /* allow the edition of the user name */\n user_color_editable: true,\n /* allow the edition of the user color */\n title_editable: true,\n /* allow the edition of the renkan title */\n show_user_color: true,\n /* show user colors in the list */\n show_save_button: true,\n show_export_button: true,\n show_open_button: false,\n show_addnode_button: true,\n show_addedge_button: true,\n show_bookmarklet: true,\n show_fullscreen_button: true,\n home_button_url: false,\n home_button_title: \"Home\",\n\n /* MINI-MAP OPTIONS */\n\n show_minimap: true,\n /* Show a small map at the bottom right */\n minimap_width: 160,\n minimap_height: 120,\n minimap_padding: 20,\n minimap_background_color: \"#ffffff\",\n minimap_border_color: \"#cccccc\",\n minimap_highlight_color: \"#ffff00\",\n minimap_highlight_weight: 5,\n\n\n /* EDGE/NODE COMMON OPTIONS */\n\n buttons_background: \"#202020\",\n buttons_label_color: \"#c000c0\",\n buttons_label_font_size: 9,\n\n ghost_opacity : 0.3,\n /* opacity when the hidden element is revealed */\n default_dash_array : [4, 5],\n /* dash line genometry */\n\n /* NODE DISPLAY OPTIONS */\n\n show_node_circles: true,\n /* Show circles for nodes */\n clip_node_images: true,\n /* Constraint node images to circles */\n node_images_fill_mode: false,\n /* Set to false for \"letterboxing\" (height/width of node adapted to show full image)\n Set to true for \"crop\" (adapted to fill circle) */\n node_size_base: 25,\n node_stroke_width: 2,\n node_stroke_max_width: 12,\n selected_node_stroke_width: 4,\n selected_node_stroke_max_width: 24,\n node_stroke_witdh_scale: 5,\n node_title_size_min: 0,\n /* minimum relative size for node title (in graph) */\n node_title_size_max: 5,\n /* maximum relative size for node title (in graph) */\n node_title_size_step: 0.1,\n /* step for relative size for node title (in graph) */\n node_fill_color: \"#ffffff\",\n /* default color to fill node background */\n highlighted_node_fill_color: \"#ffff00\",\n /* default color to fill highlighted node background */\n node_title_color: \"#000000\",\n /* default title color */\n node_label_distance: 5,\n /* Vertical distance between node and label */\n node_label_max_length: 60,\n /* Maximum displayed text length */\n label_untitled_nodes: \"(untitled)\",\n /* Label to display on untitled nodes */\n hide_nodes: true,\n /* allow hide/show nodes */\n change_shapes: true,\n /* Change shapes enabled */\n change_types: true,\n /* Change type enabled */\n\n /* NODE EDITOR TEMPLATE*/\n\n node_editor_templates: {\n \"default\": \"templates/nodeeditor_readonly.html\",\n \"video\": \"templates/nodeeditor_video.html\"\n },\n\n /* EDGE DISPLAY OPTIONS */\n\n edge_stroke_width: 2,\n edge_stroke_max_width: 12,\n selected_edge_stroke_width: 4,\n selected_edge_stroke_max_width: 24,\n edge_stroke_witdh_scale: 5,\n\n edge_label_distance: 0,\n edge_label_max_length: 20,\n edge_arrow_length: 18,\n edge_arrow_width: 12,\n edge_arrow_max_width: 32,\n edge_gap_in_bundles: 12,\n highlighted_edge_color: \"#ffff00\",\n label_untitled_edges: \"\",\n\n /* CONTEXTUAL DISPLAY (TOOLTIP OR EDITOR) OPTIONS */\n\n tooltip_width: 275,\n tooltip_padding: 10,\n tooltip_margin: 15,\n tooltip_arrow_length : 20,\n tooltip_arrow_width : 40,\n tooltip_top_color: \"#f0f0f0\",\n tooltip_bottom_color: \"#d0d0d0\",\n tooltip_border_color: \"#808080\",\n tooltip_border_width: 1,\n tooltip_opacity: 0.8,\n\n richtext_editor_config: {\n toolbarGroups: [\n { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n { name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n '/',\n\t { name: 'styles'},\n ],\n removePlugins : 'colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates',\n },\n\n /* NODE EDITOR OPTIONS */\n\n show_node_title_style: true,\n show_node_editor_uri: true,\n show_node_editor_title: true,\n show_node_editor_title_richtext: true,\n show_node_editor_description: true,\n show_node_editor_description_richtext: true,\n show_node_editor_size: true,\n show_node_editor_style: true, // show node title style editor\n show_node_editor_style_color: true,\n show_node_editor_style_dash: true,\n show_node_editor_style_thickness: true,\n show_node_editor_image: true,\n show_node_editor_creator: true,\n allow_image_upload: true,\n uploaded_image_max_kb: 500,\n\n\n /* NODE TOOLTIP OPTIONS */\n\n show_node_tooltip_uri: true,\n show_node_tooltip_description: true,\n show_node_tooltip_color: true,\n show_node_tooltip_image: true,\n show_node_tooltip_creator: true,\n\n /* EDGE EDITOR OPTIONS */\n\n show_edge_editor_uri: true,\n show_edge_editor_style: true,\n show_edge_editor_style_color: true,\n show_edge_editor_style_dash: true,\n show_edge_editor_style_thickness: true,\n show_edge_editor_style_arrow: true,\n show_edge_editor_direction: true,\n show_edge_editor_nodes: true,\n show_edge_editor_creator: true,\n\n /* EDGE TOOLTIP OPTIONS */\n\n show_edge_tooltip_uri: true,\n show_edge_tooltip_color: true,\n show_edge_tooltip_nodes: true,\n show_edge_tooltip_creator: true,\n\n};\n","Rkns.i18n = {\n fr: {\n \"Edit Node\": \"Édition d’un nœud\",\n \"Edit Edge\": \"Édition d’un lien\",\n \"Title:\": \"Titre :\",\n \"URI:\": \"URI :\",\n \"Description:\": \"Description :\",\n \"From:\": \"De :\",\n \"To:\": \"Vers :\",\n \"Image\": \"Image\",\n \"Image URL:\": \"URL d'Image\",\n \"Choose Image File:\": \"Choisir un fichier image\",\n \"Full Screen\": \"Mode plein écran\",\n \"Add Node\": \"Ajouter un nœud\",\n \"Add Edge\": \"Ajouter un lien\",\n \"Save Project\": \"Enregistrer le projet\",\n \"Open Project\": \"Ouvrir un projet\",\n \"Auto-save enabled\": \"Enregistrement automatique activé\",\n \"Connection lost\": \"Connexion perdue\",\n \"Created by:\": \"Créé par :\",\n \"Zoom In\": \"Agrandir l’échelle\",\n \"Zoom Out\": \"Rapetisser l’échelle\",\n \"Edit\": \"Éditer\",\n \"Remove\": \"Supprimer\",\n \"Cancel deletion\": \"Annuler la suppression\",\n \"Link to another node\": \"Créer un lien\",\n \"Enlarge\": \"Agrandir\",\n \"Shrink\": \"Rétrécir\",\n \"Click on the background canvas to add a node\": \"Cliquer sur le fond du graphe pour rajouter un nœud\",\n \"Click on a first node to start the edge\": \"Cliquer sur un premier nœud pour commencer le lien\",\n \"Click on a second node to complete the edge\": \"Cliquer sur un second nœud pour terminer le lien\",\n \"Wikipedia\": \"Wikipédia\",\n \"Wikipedia in \": \"Wikipédia en \",\n \"French\": \"Français\",\n \"English\": \"Anglais\",\n \"Japanese\": \"Japonais\",\n \"Untitled project\": \"Projet sans titre\",\n \"Lignes de Temps\": \"Lignes de Temps\",\n \"Loading, please wait\": \"Chargement en cours, merci de patienter\",\n \"Edge color:\": \"Couleur :\",\n \"Dash:\": \"Point. :\",\n \"Thickness:\": \"Epaisseur :\",\n \"Arrow:\": \"Flèche :\",\n \"Node color:\": \"Couleur :\",\n \"Choose color\": \"Choisir une couleur\",\n \"Change edge direction\": \"Changer le sens du lien\",\n \"Do you really wish to remove node \": \"Voulez-vous réellement supprimer le nœud \",\n \"Do you really wish to remove edge \": \"Voulez-vous réellement supprimer le lien \",\n \"This file is not an image\": \"Ce fichier n'est pas une image\",\n \"Image size must be under \": \"L'image doit peser moins de \",\n \"Size:\": \"Taille :\",\n \"KB\": \"ko\",\n \"Choose from vocabulary:\": \"Choisir dans un vocabulaire :\",\n \"SKOS Documentation properties\": \"SKOS: Propriétés documentaires\",\n \"has note\": \"a pour note\",\n \"has example\": \"a pour exemple\",\n \"has definition\": \"a pour définition\",\n \"SKOS Semantic relations\": \"SKOS: Relations sémantiques\",\n \"has broader\": \"a pour concept plus large\",\n \"has narrower\": \"a pour concept plus étroit\",\n \"has related\": \"a pour concept apparenté\",\n \"Dublin Core Metadata\": \"Métadonnées Dublin Core\",\n \"has contributor\": \"a pour contributeur\",\n \"covers\": \"couvre\",\n \"created by\": \"créé par\",\n \"has date\": \"a pour date\",\n \"published by\": \"édité par\",\n \"has source\": \"a pour source\",\n \"has subject\": \"a pour sujet\",\n \"Dragged resource\": \"Ressource glisée-déposée\",\n \"Search the Web\": \"Rechercher en ligne\",\n \"Search in Bins\": \"Rechercher dans les chutiers\",\n \"Close bin\": \"Fermer le chutier\",\n \"Refresh bin\": \"Rafraîchir le chutier\",\n \"(untitled)\": \"(sans titre)\",\n \"Select contents:\": \"Sélectionner des contenus :\",\n \"Drag items from this website, drop them in Renkan\": \"Glissez des éléments de ce site web vers Renkan\",\n \"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\": \"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan\",\n \"Shapes available\": \"Formes disponibles\",\n \"Circle\": \"Cercle\",\n \"Square\": \"Carré\",\n \"Diamond\": \"Losange\",\n \"Hexagone\": \"Hexagone\",\n \"Ellipse\": \"Ellipse\",\n \"Star\": \"Étoile\",\n \"Cloud\": \"Nuage\",\n \"Triangle\": \"Triangle\",\n \"Polygon\": \"Polygone\",\n \"Zoom Fit\": \"Ajuster le Zoom\",\n \"Download Project\": \"Télécharger le projet\",\n \"Save view\": \"Sauver la vue\",\n \"View saved view\": \"Restaurer la Vue\",\n \"Renkan \\'Drag-to-Add\\' bookmarklet\": \"Renkan \\'Deplacer-Pour-Ajouter\\' Signet\",\n \"(unknown user)\":\"(non authentifié)\",\n \"\":\"\",\n \"Search in graph\":\"Rechercher dans carte\",\n \"Search in \" : \"Chercher dans \",\n \"Show hidden nodes\": \"Montrer les noeuds cachés\",\n \"Show neighbors\": \"Montrer les voisins\",\n \"Hide\": \"Cacher\",\n \"Fullscreen not supported by your browser\": \"Le plein écran n'est pas supporté par votre navigateur\",\n \"Title size:\": \"Taille :\",\n \"Title color:\": \"Couleur :\",\n }\n};\n","/* Saves the Full JSON at each modification */\n\nRkns.jsonIO = function(_renkan, _opts) {\n var _proj = _renkan.project;\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'PUT';\n }\n var _load = function() {\n _proj.set({\n loadingStatus : true\n });\n Rkns.$.getJSON(_opts.url, function(_data) {\n _renkan.dataloader.load(_data);\n \n _proj.set({\n loadingStatus : false\n });\n _proj.set({\n saveStatus : 0\n });\n });\n };\n var _save = function() {\n _proj.set({\n saveStatus : 2\n });\n var _data = _proj.toJSON();\n if (!_renkan.read_only) {\n Rkns.$.ajax({\n type : _opts.http_method,\n url : _opts.url,\n contentType : \"application/json\",\n data : JSON.stringify(_data),\n success : function(data, textStatus, jqXHR) {\n _proj.set({\n saveStatus : 0\n });\n }\n });\n }\n\n };\n var _thrSave = Rkns._.throttle(function() {\n setTimeout(_save, 100);\n }, 1000);\n \n //TODO: Rearrange to avoid the 2 firts PUT due to a change in the project model\n // Take car of setting up the listener correctly to listen the save action on the view\n _proj.on(\"add:nodes add:edges add:users add:views\", function(_model) {\n _model.on(\"change remove\", function(_model) {\n _thrSave();\n });\n _thrSave();\n });\n _proj.on(\"change\", function() {\n if (!(_proj.changedAttributes.length === 1 && _proj\n .hasChanged('saveStatus'))) {\n _thrSave();\n }\n });\n\n _load();\n};\n","/* Saves the Full JSON once */\n\nRkns.jsonIOSaveOnClick = function(_renkan, _opts) {\n var _proj = _renkan.project,\n _saveWarn = false,\n _onLeave = function() {\n return \"Project not saved\";\n };\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'POST';\n }\n var _load = function() {\n var getdata = {},\n rx = /id=([^&#?=]+)/,\n matches = document.location.hash.match(rx);\n if (matches) {\n getdata.id = matches[1];\n }\n Rkns.$.ajax({\n url: _opts.url,\n data: getdata,\n beforeSend: function(){\n \t_proj.set({loadingStatus:true});\n },\n success: function(_data) {\n _renkan.dataloader.load(_data);\n _proj.set({loadingStatus:false});\n _proj.set({saveStatus:0});\n }\n });\n };\n var _save = function() {\n _proj.set(\"saved_at\", new Date());\n var _data = _proj.toJSON();\n Rkns.$.ajax({\n type: _opts.http_method,\n url: _opts.url,\n contentType: \"application/json\",\n data: JSON.stringify(_data),\n beforeSend: function(){\n \t_proj.set({saveStatus:2});\n },\n success: function(data, textStatus, jqXHR) {\n $(window).off(\"beforeunload\", _onLeave);\n _saveWarn = false;\n _proj.set({saveStatus:0});\n //document.location.hash = \"#id=\" + data.id;\n //$(\".Rk-Notifications\").text(\"Saved as \"+document.location.href).fadeIn().delay(2000).fadeOut();\n }\n });\n };\n var _checkLeave = function() {\n \t_proj.set({saveStatus:1});\n\n var title = _proj.get(\"title\");\n if (title && _proj.get(\"nodes\").length) {\n $(\".Rk-Save-Button\").removeClass(\"disabled\");\n } else {\n $(\".Rk-Save-Button\").addClass(\"disabled\");\n }\n if (title) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#333333\");\n }\n if (!_saveWarn) {\n _saveWarn = true;\n $(window).on(\"beforeunload\", _onLeave);\n }\n };\n _load();\n _proj.on(\"add:nodes add:edges add:users change\", function(_model) {\n\t _model.on(\"change remove\", function(_model) {\n\t \tif(!(_model.changedAttributes.length === 1 && _model.hasChanged('saveStatus'))) {\n\t \t\t_checkLeave();\n\t \t}\n\t });\n\t\tif(!(_proj.changedAttributes.length === 1 && _proj.hasChanged('saveStatus'))) {\n\t\t _checkLeave();\n \t}\n });\n _renkan.renderer.save = function() {\n if ($(\".Rk-Save-Button\").hasClass(\"disabled\")) {\n if (!_proj.get(\"title\")) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#ff0000\");\n }\n } else {\n _save();\n }\n };\n};\n","(function(Rkns) {\n\"use strict\";\n\nvar _ = Rkns._;\n\nvar Ldt = Rkns.Ldt = {};\n\nvar Bin = Ldt.Bin = function(_renkan, _opts) {\n if (_opts.ldt_type) {\n var Resclass = Ldt[_opts.ldt_type+\"Bin\"];\n if (Resclass) {\n return new Resclass(_renkan, _opts);\n }\n }\n console.error(\"No such LDT Bin Type\");\n};\n\nvar ProjectBin = Ldt.ProjectBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nProjectBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.tagTemplate = _renkan.options.templates['templates/ldtjson-bin/tagtemplate.html'];\n this.annotationTemplate = _renkan.options.templates['templates/ldtjson-bin/annotationtemplate.html'];\n this.proj_id = _opts.project_id;\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.title_$.html(_opts.title);\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nProjectBin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '
                                            • Tags

                                            • ',\n _projtitle = this.data.meta[\"dc:title\"],\n _this = this,\n count = 0;\n _this.title_$.text('LDT Project: \"' + _projtitle + '\"');\n _.map(_this.data.tags,function(_tag) {\n var _title = _tag.meta[\"dc:title\"];\n if (!search.isempty && !search.test(_title)) {\n return;\n }\n count++;\n _html += _this.tagTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n encodedtitle : encodeURIComponent(_title),\n static_url: _this.renkan.options.static_url\n });\n });\n _html += '
                                            • Annotations

                                            • ';\n _.map(_this.data.annotations,function(_annotation) {\n var _description = _annotation.content.description,\n _title = _annotation.content.title.replace(_description,\"\");\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _annotation.end - _annotation.begin,\n _img = (\n (_annotation.content && _annotation.content.img && _annotation.content.img.src) ?\n _annotation.content.img.src :\n ( _duration ? _this.renkan.options.static_url+\"img/ldt-segment.png\" : _this.renkan.options.static_url+\"img/ldt-point.png\" )\n );\n _html += _this.annotationTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_annotation.begin),\n end: convertTC(_annotation.end),\n duration: convertTC(_duration),\n mediaid: _annotation.media,\n annotationid: _annotation.id,\n image: _img,\n static_url: _this.renkan.options.static_url\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nProjectBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/ldt/cljson/id/' + this.proj_id,\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\nvar Search = Ldt.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nSearch.prototype.getBgClass = function() {\n return \"Rk-Ldt-Icon\";\n};\n\nSearch.prototype.getSearchTitle = function() {\n return this.renkan.translate(\"Lignes de Temps\");\n};\n\nSearch.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new ResultsBin(this.renkan, {\n search: _q\n })\n );\n};\n\nvar ResultsBin = Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nResultsBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.segmentTemplate = _renkan.options.templates['templates/ldtjson-bin/segmenttemplate.html'];\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.max_results = _opts.max_results || 50;\n this.search = _opts.search;\n this.title_$.html('Lignes de Temps: \"' + _opts.search + '\"');\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nResultsBin.prototype.render = function(searchbase) {\n if (!this.data) {\n return;\n }\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '',\n _this = this,\n count = 0;\n _.each(this.data.objects,function(_segment) {\n var _description = _segment.abstract,\n _title = _segment.title;\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _segment.duration,\n _begin = _segment.start_ts,\n _end = + _segment.duration + _begin,\n _img = (\n _duration ?\n _this.renkan.options.static_url + \"img/ldt-segment.png\" :\n _this.renkan.options.static_url + \"img/ldt-point.png\"\n );\n _html += _this.segmentTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_begin),\n end: convertTC(_end),\n duration: convertTC(_duration),\n mediaid: _segment.iri_id,\n //projectid: _segment.project_id,\n //cuttingid: _segment.cutting_id,\n annotationid: _segment.element_id,\n image: _img\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nResultsBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',\n data: {\n format: \"jsonp\",\n q: this.search,\n limit: this.max_results\n },\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\n})(window.Rkns);\n","Rkns.ResourceList = {};\n\nRkns.ResourceList.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.ResourceList.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.resultTemplate = _renkan.options.templates['templates/list-bin.html'];\n this.title_$.html(_opts.title);\n if (_opts.list) {\n this.data = _opts.list;\n }\n this.refresh();\n};\n\nRkns.ResourceList.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data,function(_item) {\n var _element;\n if (typeof _item === \"string\") {\n if (/^(https?:\\/\\/|www)/.test(_item)) {\n _element = { url: _item };\n } else {\n _element = { title: _item.replace(/[:,]?\\s?(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+\\s?/,'').trim() };\n var _match = _item.match(/(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+/);\n if (_match) {\n _element.url = _match[0];\n }\n if (_element.title.length > 80) {\n _element.description = _element.title;\n _element.title = _element.title.replace(/^(.{30,60})\\s.+$/,'$1…');\n }\n }\n } else {\n _element = _item;\n }\n var title = _element.title || (_element.url || \"\").replace(/^https?:\\/\\/(www\\.)?/,'').replace(/^(.{40}).+$/,'$1…'),\n url = _element.url || \"\",\n description = _element.description || \"\",\n image = _element.image || \"\";\n if (url && !/^https?:\\/\\//.test(url)) {\n url = 'http://' + url;\n }\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n image: image,\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.ResourceList.Bin.prototype.refresh = function() {\n if (this.data) {\n this.render();\n }\n};\n","Rkns.Wikipedia = {\n};\n\nRkns.Wikipedia.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nRkns.Wikipedia.Search.prototype.getBgClass = function() {\n return \"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-\" + this.lang;\n};\n\nRkns.Wikipedia.Search.prototype.getSearchTitle = function() {\n var langs = {\n \"fr\": \"French\",\n \"en\": \"English\",\n \"ja\": \"Japanese\"\n };\n if (langs[this.lang]) {\n return this.renkan.translate(\"Wikipedia in \") + this.renkan.translate(langs[this.lang]);\n } else {\n return this.renkan.translate(\"Wikipedia\") + \" [\" + this.lang + \"]\";\n }\n};\n\nRkns.Wikipedia.Search.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new Rkns.Wikipedia.Bin(this.renkan, {\n lang: this.lang,\n search: _q\n })\n );\n};\n\nRkns.Wikipedia.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.Wikipedia.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.search = _opts.search;\n this.resultTemplate = _renkan.options.templates['templates/wikipedia-bin/resulttemplate.html'];\n this.lang = _opts.lang || \"en\";\n this.title_icon_$.addClass('Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-' + this.lang);\n this.title_$.html(this.search).addClass(\"Rk-Wikipedia-Title\");\n this.refresh();\n};\n\nRkns.Wikipedia.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data.query.search, function(_result) {\n var title = _result.title,\n url = \"http://\" + _this.lang + \".wikipedia.org/wiki/\" + encodeURI(title.replace(/ /g,\"_\")),\n description = Rkns.$('
                                              ').html(_result.snippet).text();\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.Wikipedia.Bin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: \"http://\" + _this.lang + \".wikipedia.org/w/api.php?action=query&list=search&srsearch=\" + encodeURIComponent(this.search) + \"&format=json\",\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n","\ndefine('renderer/baserepresentation',['jquery', 'underscore'], function ($, _) {\n 'use strict';\n\n /* Rkns.Renderer._BaseRepresentation Class */\n\n /* In Renkan, a \"Representation\" is a sort of ViewModel (in the MVVM paradigm) and bridges the gap between\n * models (written with Backbone.js) and the view (written with Paper.js)\n * Renkan's representations all inherit from Rkns.Renderer._BaseRepresentation '*/\n\n var _BaseRepresentation = function(_renderer, _model) {\n if (typeof _renderer !== \"undefined\") {\n this.renderer = _renderer;\n this.renkan = _renderer.renkan;\n this.project = _renderer.renkan.project;\n this.options = _renderer.renkan.options;\n this.model = _model;\n if (this.model) {\n var _this = this;\n this._changeBinding = function() {\n _this.redraw({change: true});\n };\n this._removeBinding = function() {\n _renderer.removeRepresentation(_this);\n _.defer(function() {\n _renderer.redraw();\n });\n };\n this._selectBinding = function() {\n _this.select();\n };\n this._unselectBinding = function() {\n _this.unselect();\n };\n this.model.on(\"change\", this._changeBinding );\n this.model.on(\"remove\", this._removeBinding );\n this.model.on(\"select\", this._selectBinding );\n this.model.on(\"unselect\", this._unselectBinding );\n }\n }\n };\n\n /* Rkns.Renderer._BaseRepresentation Methods */\n\n _(_BaseRepresentation.prototype).extend({\n _super: function(_func) {\n return _BaseRepresentation.prototype[_func].apply(this, Array.prototype.slice.call(arguments, 1));\n },\n redraw: function() {},\n moveTo: function() {},\n show: function() { return \"BaseRepresentation.show\"; },\n hide: function() {},\n select: function() {\n if (this.model) {\n this.model.trigger(\"selected\");\n }\n },\n unselect: function() {\n if (this.model) {\n this.model.trigger(\"unselected\");\n }\n },\n highlight: function() {},\n unhighlight: function() {},\n mousedown: function() {},\n mouseup: function() {\n if (this.model) {\n this.model.trigger(\"clicked\");\n }\n },\n destroy: function() {\n if (this.model) {\n this.model.off(\"change\", this._changeBinding );\n this.model.off(\"remove\", this._removeBinding );\n this.model.off(\"select\", this._selectBinding );\n this.model.off(\"unselect\", this._unselectBinding );\n }\n }\n }).value();\n\n /* End of Rkns.Renderer._BaseRepresentation Class */\n\n return _BaseRepresentation;\n\n});\n\ndefine('requtils',[], function ($, _) {\n 'use strict';\n return {\n getUtils: function(){\n return window.Rkns.Utils;\n },\n getRenderer: function(){\n return window.Rkns.Renderer;\n }\n };\n\n});\n\n\ndefine('renderer/basebutton',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer._BaseButton Class */\n\n /* BaseButton is extended by contextual buttons that appear when hovering on nodes and edges */\n\n var _BaseButton = Utils.inherit(BaseRepresentation);\n\n _(_BaseButton.prototype).extend({\n moveTo: function(_pos) {\n this.sector.moveTo(_pos);\n },\n show: function() {\n this.sector.show();\n },\n hide: function() {\n if (this.sector){\n this.sector.hide();\n }\n },\n select: function() {\n this.sector.select();\n },\n unselect: function(_newTarget) {\n this.sector.unselect();\n if (!_newTarget || (_newTarget !== this.source_representation && _newTarget.source_representation !== this.source_representation)) {\n this.source_representation.unselect();\n }\n },\n destroy: function() {\n this.sector.destroy();\n }\n }).value();\n\n return _BaseButton;\n\n});\n\n\ndefine('renderer/shapebuilder',[], function () {\n 'use strict';\n\n var cloud_path = \"M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z\";\n /* ShapeBuilder Begin */\n\n var builders = {\n \"circle\":{\n getShape: function() {\n return new paper.Path.Circle([0, 0], 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Circle(center, radius);\n }\n },\n \"rectangle\":{\n getShape: function() {\n return new paper.Path.Rectangle([-2, -2], [2, 2]);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Rectangle([-radius, -radius], [radius*2, radius*2]);\n }\n },\n \"ellipse\":{\n getShape: function() {\n return new paper.Path.Ellipse(new paper.Rectangle([-2, -1], [2, 1]));\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Ellipse(new paper.Rectangle([-radius, -radius/2], [radius*2, radius]));\n }\n },\n \"polygon\":{\n getShape: function() {\n return new paper.Path.RegularPolygon([0, 0], 6, 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.RegularPolygon(center, 6, radius);\n }\n },\n \"diamond\":{\n getShape: function() {\n var d = new paper.Path.Rectangle([-Math.SQRT2, -Math.SQRT2], [Math.SQRT2, Math.SQRT2]);\n d.rotate(45);\n return d;\n },\n getImageShape: function(center, radius) {\n var d = new paper.Path.Rectangle([-radius*Math.SQRT2/2, -radius*Math.SQRT2/2], [radius*Math.SQRT2, radius*Math.SQRT2]);\n d.rotate(45);\n return d;\n }\n },\n \"star\":{\n getShape: function() {\n return new paper.Path.Star([0, 0], 8, 1, 0.7);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Star(center, 8, radius*1, radius*0.7);\n }\n },\n \"cloud\": {\n getShape: function() {\n var path = new paper.Path(cloud_path);\n return path;\n\n },\n getImageShape: function(center, radius) {\n var path = new paper.Path(cloud_path);\n path.scale(radius);\n path.translate(center);\n return path;\n }\n },\n \"triangle\": {\n getShape: function() {\n return new paper.Path.RegularPolygon([0,0], 3, 1);\n },\n getImageShape: function(center, radius) {\n var shape = new paper.Path.RegularPolygon([0,0], 3, 1);\n shape.scale(radius);\n shape.translate(center);\n return shape;\n }\n },\n \"svg\": function(path){\n return {\n getShape: function() {\n return new paper.Path(path);\n },\n getImageShape: function(center, radius) {\n // No calcul for the moment\n return new paper.Path();\n }\n };\n }\n };\n\n var ShapeBuilder = function (shape){\n if(shape === null || typeof shape === \"undefined\"){\n shape = \"circle\";\n }\n if(shape.substr(0,4)===\"svg:\"){\n return builders.svg(shape.substr(4));\n }\n if(!(shape in builders)){\n shape = \"circle\";\n }\n return builders[shape];\n };\n\n ShapeBuilder.builders = builders;\n\n return ShapeBuilder;\n\n});\n\ndefine('renderer/noderepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.Node Class */\n\n /* The representation for the node : A circle, with an image inside and a text label underneath.\n * The circle and the image are drawn on canvas and managed by Paper.js.\n * The text label is an HTML node, managed by jQuery. */\n\n //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);\n var NodeRepr = Utils.inherit(BaseRepresentation);\n\n _(NodeRepr.prototype).extend({\n _init: function() {\n this.renderer.node_layer.activate();\n this.type = \"Node\";\n this.buildShape();\n this.hidden = false;\n this.ghost= false;\n if (this.options.show_node_circles) {\n this.circle.strokeWidth = this.options.node_stroke_width;\n this.h_ratio = 1;\n } else {\n this.h_ratio = 0;\n }\n this.title = $('
                                              ').appendTo(this.renderer.labels_$);\n\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.NodeEditButton(this.renderer, null),\n new Renderer.NodeRemoveButton(this.renderer, null),\n new Renderer.NodeLinkButton(this.renderer, null),\n new Renderer.NodeEnlargeButton(this.renderer, null),\n new Renderer.NodeShrinkButton(this.renderer, null)\n ];\n if (this.options.hide_nodes){\n this.normal_buttons.push(\n new Renderer.NodeHideButton(this.renderer, null),\n new Renderer.NodeShowButton(this.renderer, null)\n );\n }\n this.pending_delete_buttons = [\n new Renderer.NodeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n this.last_circle_radius = 1;\n\n if (this.renderer.minimap) {\n this.renderer.minimap.node_layer.activate();\n this.minimap_circle = new paper.Path.Circle([0, 0], 1);\n this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;\n this.renderer.minimap.node_group.addChild(this.minimap_circle);\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.node_stroke_width + (thickness-1) * (this.options.node_stroke_max_width - this.options.node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_node_stroke_width + (thickness-1) * (this.options.selected_node_stroke_max_width - this.options.selected_node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n buildShape: function(){\n if( 'shape' in this.model.changed ) {\n delete this.img;\n }\n if(this.circle){\n this.circle.remove();\n delete this.circle;\n }\n // \"circle\" \"rectangle\" \"ellipse\" \"polygon\" \"star\" \"diamond\"\n this.shapeBuilder = new ShapeBuilder(this.model.get(\"shape\"));\n this.circle = this.shapeBuilder.getShape();\n this.circle.__representation = this;\n this.circle.sendToBack();\n this.last_circle_radius = 1;\n },\n redraw: function(options) {\n if( 'shape' in this.model.changed && 'change' in options && options.change ) {\n //if( 'shape' in this.model.changed ) {\n this.buildShape();\n }\n var _model_coords = new paper.Point(this.model.get(\"position\")),\n _baseRadius = this.options.node_size_base * Math.exp((this.model.get(\"size\") || 0) * Utils._NODE_SIZE_STEP);\n if (!this.is_dragging || !this.paper_coords) {\n this.paper_coords = this.renderer.toPaperCoords(_model_coords);\n }\n this.circle_radius = _baseRadius * this.renderer.view.scale;\n if (this.last_circle_radius !== this.circle_radius) {\n this.all_buttons.forEach(function(b) {\n b.setSectorSize();\n });\n this.circle.scale(this.circle_radius / this.last_circle_radius);\n if (this.node_image) {\n this.node_image.scale(this.circle_radius / this.last_circle_radius);\n }\n }\n this.circle.position = this.paper_coords;\n if (this.node_image) {\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n }\n this.last_circle_radius = this.circle_radius;\n\n var old_act_btn = this.active_buttons;\n\n var opacity = 1;\n if (this.model.get(\"delete_scheduled\")) {\n opacity = 0.5;\n this.active_buttons = this.pending_delete_buttons;\n this.circle.dashArray = [2,2];\n } else {\n opacity = 1;\n this.active_buttons = this.normal_buttons;\n this.circle.dashArray = null;\n }\n if (this.selected && this.renderer.isEditable() && !this.ghost) {\n if (old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n }\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n if (this.node_image) {\n this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);\n }\n\n this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;\n\n this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;\n\n\n //strip html from title\n var html = this.model.get(\"title\");\n var div = document.createElement(\"div\");\n div.innerHTML = html;\n var clean_title = div.textContent || div.innerText || \"\";\n\n var _text = clean_title || this.renkan.translate(this.options.label_untitled_nodes) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n\n //_formatedText = _text;\n\n\n if (typeof this.highlighted === \"object\") {\n _text = this.highlighted.replace(_(_text).escape(),'$1');\n }\n\n //TODO: default text node color\n var node_style = (this.model.get(\"style\") || {'title_size': 1, 'title-color': '#00000' });\n var text_size = node_style.title_size || 1;\n var text_color = node_style.title_color || this.options.node_title_color;\n\n var text_style = {\n 'line-height': \"1em\"\n };\n\n if(text_size !== 1) {\n text_style['font-size'] = text_size.toFixed(1)+\"em\";\n }\n //TODO: compare with default value\n if(text_color !== \"#000000\") {\n text_style.color = text_color;\n }\n\n var text_node = $(\"\").css(text_style).html(_text);\n\n this.title.empty().append(text_node);\n\n var _strokeWidth = this._getStrokeWidth();\n this.title.css({\n left: this.paper_coords.x,\n top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance + 0.5*_strokeWidth,\n opacity: opacity\n });\n var _color = (this.model.has(\"style\") && this.model.get(\"style\").color) || (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null;\n this.circle.strokeWidth = _strokeWidth;\n this.circle.strokeColor = _color;\n this.circle.dashArray = _dash;\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n var lastImage = this.img;\n this.img = this.model.get(\"image\");\n if (this.img && this.img !== lastImage) {\n this.showImage();\n if(this.circle) {\n this.circle.sendToBack();\n }\n }\n if (this.node_image && !this.img) {\n this.node_image.remove();\n delete this.node_image;\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.fillColor = _color;\n var minipos = this.renderer.toMinimapCoords(_model_coords),\n miniradius = this.renderer.minimap.scale * _baseRadius,\n minisize = new paper.Size([miniradius, miniradius]);\n this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));\n }\n\n if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.redraw();\n }\n }\n );\n }\n if (this.ghost){\n this.show(true);\n } else {\n if (this.hidden) { this.hide(); }\n }\n },\n showImage: function() {\n var _image = null;\n if (typeof this.renderer.image_cache[this.img] === \"undefined\") {\n _image = new Image();\n this.renderer.image_cache[this.img] = _image;\n _image.src = this.img;\n } else {\n _image = this.renderer.image_cache[this.img];\n }\n var _this = this;\n if (_image.width) {\n\n if (this.node_image) {\n this.node_image.remove();\n }\n this.renderer.node_layer.activate();\n var width = _image.width,\n height = _image.height,\n clipPath = this.model.get(\"clip_path\"),\n hasClipPath = (typeof clipPath !== \"undefined\" && clipPath),\n _clip = null,\n baseRadius = null,\n centerPoint = null;\n\n if (hasClipPath) {\n _clip = new paper.Path();\n var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],\n lastCoords = [0,0],\n minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n var transformCoords = function(tabc, relative) {\n var newCoords = tabc.slice(1).map(function(v, k) {\n var res = parseFloat(v),\n isY = k % 2;\n if (isY) {\n res = ( res - 0.5 ) * height;\n } else {\n res = ( res - 0.5 ) * width;\n }\n if (relative) {\n res += lastCoords[isY];\n }\n if (isY) {\n minY = Math.min(minY, res);\n maxY = Math.max(maxY, res);\n } else {\n minX = Math.min(minX, res);\n maxX = Math.max(maxX, res);\n }\n return res;\n });\n lastCoords = newCoords.slice(-2);\n return newCoords;\n };\n\n instructions.forEach(function(instr) {\n var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [\"\"];\n switch(coords[0]) {\n case \"M\":\n _clip.moveTo(transformCoords(coords));\n break;\n case \"m\":\n _clip.moveTo(transformCoords(coords, true));\n break;\n case \"L\":\n _clip.lineTo(transformCoords(coords));\n break;\n case \"l\":\n _clip.lineTo(transformCoords(coords, true));\n break;\n case \"C\":\n _clip.cubicCurveTo(transformCoords(coords));\n break;\n case \"c\":\n _clip.cubicCurveTo(transformCoords(coords, true));\n break;\n case \"Q\":\n _clip.quadraticCurveTo(transformCoords(coords));\n break;\n case \"q\":\n _clip.quadraticCurveTo(transformCoords(coords, true));\n break;\n }\n });\n\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](maxX - minX, maxY - minY) / 2;\n centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);\n if (!this.options.show_node_circles) {\n this.h_ratio = (maxY - minY) / (2 * baseRadius);\n }\n } else {\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](width, height) / 2;\n centerPoint = new paper.Point(0,0);\n if (!this.options.show_node_circles) {\n this.h_ratio = height / (2 * baseRadius);\n }\n }\n var _raster = new paper.Raster(_image);\n _raster.locked = true; // Disable mouse events on icon\n if (hasClipPath) {\n _raster = new paper.Group(_clip, _raster);\n _raster.opacity = 0.99;\n /* This is a workaround to allow clipping at group level\n * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).\n */\n _raster.clipped = true;\n _clip.__representation = this;\n }\n if (this.options.clip_node_images) {\n var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);\n _raster = new paper.Group(_circleClip, _raster);\n _raster.opacity = 0.99;\n _raster.clipped = true;\n _circleClip.__representation = this;\n }\n this.image_delta = centerPoint.divide(baseRadius);\n this.node_image = _raster;\n this.node_image.__representation = _this;\n this.node_image.scale(this.circle_radius / baseRadius);\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n this.node_image.insertAbove(this.circle);\n } else {\n $(_image).on(\"load\", function() {\n _this.showImage();\n });\n }\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.renkan.read_only) {\n this.is_dragging = true;\n this.paper_coords = this.paper_coords.add(_delta);\n this.redraw();\n }\n } else {\n this.renderer.view.paperShift(_delta);\n }\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"NodeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n clearTimeout(this.hide_timeout);\n this.selected = true;\n this.circle.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable() && !this.hidden) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n var _uri = this.model.get(\"uri\");\n if (_uri) {\n $('.Rk-Bin-Item').each(function() {\n var _el = $(this);\n if (_el.attr(\"data-uri\") === _uri) {\n _el.addClass(\"selected\");\n }\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;\n this.minimap_circle.strokeColor = this.options.minimap_highlight_color;\n }\n //if the node is hidden and the mouse hover it, it appears as a ghost\n if (this.hidden) {\n this.show(true);\n }\n else {\n this.showNeighbors(true);\n }\n this._super(\"select\");\n },\n hideButtons: function() {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n delete(this.buttonTimeout);\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n var _this = this;\n this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);\n this.circle.strokeWidth = this._getStrokeWidth();\n $('.Rk-Bin-Item').removeClass(\"selected\");\n if (this.renderer.minimap) {\n this.minimap_circle.strokeColor = undefined;\n }\n //when the mouse don't hover the node anymore, we hide it\n if (this.hidden) {\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.hide();\n }\n else {\n this.hideNeighbors(true);\n }\n this._super(\"unselect\");\n }\n },\n hide_delay: function(){\n var _this = this;\n this.hide_timeout = setTimeout(function(){\n _this.hide();\n }, 1000);\n },\n hide: function(){\n var _this = this;\n this.ghost = false;\n this.hidden = true;\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = 0;\n }\n this.hideButtons();\n this.circle.opacity = 0;\n this.title.css('opacity', 0);\n this.minimap_circle.opacity = 0;\n\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.hide();\n }\n }\n );\n this.hideNeighbors(false);\n },\n show: function(ghost){\n var _this = this;\n this.ghost = ghost;\n if (this.ghost){\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = this.options.ghost_opacity;\n }\n this.circle.opacity = this.options.ghost_opacity;\n this.title.css('opacity', this.options.ghost_opacity);\n this.minimap_circle.opacity = this.options.ghost_opacity;\n } else {\n this.minimap_circle.opacity = 1;\n this.hidden = false;\n this.redraw();\n }\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.show(_this.ghost);\n }\n }\n );\n },\n hideNeighbors: function(delay){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.ghost) {\n if (delay){ repr.hide_delay(); } else {repr.hide(); }\n }\n }\n );\n },\n showNeighbors: function(ghost){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.hidden) {\n repr.show(ghost);\n if (!ghost){\n var indexNode = _this.renderer.view.hiddenNodes.indexOf(repr.model.id);\n if (indexNode !== -1){\n _this.renderer.view.hiddenNodes.splice(indexNode, 1);\n }\n }\n }\n }\n );\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n saveCoords: function() {\n var _coords = this.renderer.toModelCoords(this.paper_coords),\n _data = {\n position: {\n x: _coords.x,\n y: _coords.y\n }\n };\n if (this.renderer.isEditable()) {\n this.model.set(_data);\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (this.renderer.is_dragging && this.renderer.isEditable()) {\n this.saveCoords();\n } else {\n if (this.hidden) {\n var index = this.renderer.view.hiddenNodes.indexOf(this.model.id);\n if (index !== -1){\n this.renderer.view.hiddenNodes.splice(index, 1);\n }\n this.show(false);\n this.select();\n } else {\n if (!_isTouch && !this.model.get(\"delete_scheduled\")) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.is_dragging = false;\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n this.circle.remove();\n this.title.remove();\n if (this.renderer.minimap) {\n this.minimap_circle.remove();\n }\n if (this.node_image) {\n this.node_image.remove();\n }\n }\n }).value();\n\n return NodeRepr;\n\n});\n\n\ndefine('renderer/edge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Edge Class Begin */\n\n //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);\n var Edge = Utils.inherit(BaseRepresentation);\n\n _(Edge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Edge\";\n this.hidden = false;\n this.ghost = false;\n this.highlighted = false;\n this.from_representation = this.renderer.getRepresentationByModel(this.model.get(\"from\"));\n this.to_representation = this.renderer.getRepresentationByModel(this.model.get(\"to\"));\n this.bundle = this.renderer.addToBundles(this);\n this.line = new paper.Path();\n this.line.add([0,0],[0,0],[0,0]);\n this.line.__representation = this;\n this.line.strokeWidth = this.options.edge_stroke_width;\n this.arrow_scale = 1;\n this.arrow = new paper.Path();\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);\n this.arrow.__representation = this;\n this.text = $('
                                              ').appendTo(this.renderer.labels_$);\n this.arrow_angle = 0;\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.EdgeEditButton(this.renderer, null),\n new Renderer.EdgeRemoveButton(this.renderer, null)\n ];\n this.pending_delete_buttons = [\n new Renderer.EdgeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n\n if (this.renderer.minimap) {\n this.renderer.minimap.edge_layer.activate();\n this.minimap_line = new paper.Path();\n this.minimap_line.add([0,0],[0,0]);\n this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;\n this.minimap_line.strokeWidth = 1;\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getArrowScale: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);\n },\n redraw: function() {\n var from = this.model.get(\"from\"),\n to = this.model.get(\"to\");\n if (!from || !to || (this.hidden && !this.ghost)) {\n return;\n }\n this.from_representation = this.renderer.getRepresentationByModel(from);\n this.to_representation = this.renderer.getRepresentationByModel(to);\n if (typeof this.from_representation === \"undefined\" || typeof this.to_representation === \"undefined\" ||\n (this.from_representation.hidden && !this.from_representation.ghost) ||\n (this.to_representation.hidden && !this.to_representation.ghost)) {\n this.hide();\n return;\n }\n var _strokeWidth = this._getStrokeWidth(),\n _arrow_scale = this._getArrowScale(),\n _p0a = this.from_representation.paper_coords,\n _p1a = this.to_representation.paper_coords,\n _v = _p1a.subtract(_p0a),\n _r = _v.length,\n _u = _v.divide(_r),\n _ortho = new paper.Point([- _u.y, _u.x]),\n _group_pos = this.bundle.getPosition(this),\n _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),\n _p0b = _p0a.add(_delta), /* Adding a 4 px difference */\n _p1b = _p1a.add(_delta), /* to differentiate bundled links */\n _a = _v.angle,\n _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),\n _handle = _v.divide(3),\n _color = (this.highlighted && this.options.highlighted_edge_color) ||\n (this.model.has(\"style\") && this.model.get(\"style\").color) ||\n (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null,\n _opacity;\n\n if (this.model.get(\"delete_scheduled\") || this.from_representation.model.get(\"delete_scheduled\") || this.to_representation.model.get(\"delete_scheduled\")) {\n _opacity = 0.5;\n this.line.dashArray = [2, 2];\n } else {\n _opacity = this.ghost ? this.options.ghost_opacity : 1;\n this.line.dashArray = null;\n }\n\n var old_act_btn = this.active_buttons;\n\n this.arrow.visible =\n (this.model.has(\"style\") && this.model.get(\"style\").arrow) ||\n !this.model.has(\"style\") ||\n typeof this.model.get(\"style\").arrow === 'undefined';\n\n this.active_buttons = this.model.get(\"delete_scheduled\") ? this.pending_delete_buttons : this.normal_buttons;\n\n if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n this.paper_coords = _p0b.add(_p1b).divide(2);\n this.line.strokeWidth = _strokeWidth;\n this.line.strokeColor = _color;\n this.line.dashArray = _dash;\n this.line.opacity = _opacity;\n this.line.segments[0].point = _p0a;\n this.line.segments[1].point = this.paper_coords;\n this.line.segments[1].handleIn = _handle.multiply(-1);\n this.line.segments[1].handleOut = _handle;\n this.line.segments[2].point = _p1a;\n this.arrow.scale(_arrow_scale / this.arrow_scale);\n this.arrow_scale = _arrow_scale;\n this.arrow.fillColor = _color;\n this.arrow.opacity = _opacity;\n this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);\n this.arrow.position = this.paper_coords;\n\n this.arrow_angle = _a;\n if (_a > 90) {\n _a -= 180;\n _textdelta = _textdelta.multiply(-1);\n }\n if (_a < -90) {\n _a += 180;\n _textdelta = _textdelta.multiply(-1);\n }\n var _text = this.model.get(\"title\") || this.renkan.translate(this.options.label_untitled_edges) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n if (typeof this.highlighted === \"object\") {\n this.text.html(this.highlighted.replace(_(_text).escape(),'$1'));\n } else {\n this.text.text(_text);\n }\n var _textpos = this.paper_coords.add(_textdelta);\n this.text.css({\n left: _textpos.x,\n top: _textpos.y,\n transform: \"rotate(\" + _a + \"deg)\",\n \"-moz-transform\": \"rotate(\" + _a + \"deg)\",\n \"-webkit-transform\": \"rotate(\" + _a + \"deg)\",\n opacity: _opacity\n });\n this.text_angle = _a;\n\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n\n if (this.renderer.minimap) {\n this.minimap_line.strokeColor = _color;\n this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get(\"position\")));\n this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get(\"position\")));\n }\n },\n hide: function(){\n this.hidden = true;\n this.ghost = false;\n\n this.text.hide();\n this.line.visible = false;\n this.arrow.visible = false;\n this.minimap_line.visible = false;\n },\n show: function(ghost){\n this.ghost = ghost;\n if (this.ghost) {\n this.text.css('opacity', 0.3);\n this.line.opacity = 0.3;\n this.arrow.opacity = 0.3;\n this.minimap_line.opacity = 0.3;\n } else {\n this.hidden = false;\n\n this.text.css('opacity', 1);\n this.line.opacity = 1;\n this.arrow.opacity = 1;\n this.minimap_line.opacity = 1;\n }\n this.text.show();\n this.line.visible = true;\n this.arrow.visible = true;\n this.minimap_line.visible = true;\n this.redraw();\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"EdgeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n this.selected = true;\n this.line.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable()) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n this._super(\"select\");\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n if (this.options.editor_mode) {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n }\n if (this.hidden){\n this.renderer.removeRepresentationsOfType(\"editor\");\n }\n this.line.strokeWidth = this._getStrokeWidth();\n this._super(\"unselect\");\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (!this.renkan.read_only && this.renderer.is_dragging) {\n this.from_representation.saveCoords();\n this.to_representation.saveCoords();\n this.from_representation.is_dragging = false;\n this.to_representation.is_dragging = false;\n } else {\n if (!_isTouch) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.options.read_only) {\n this.from_representation.paperShift(_delta);\n this.to_representation.paperShift(_delta);\n }\n } else {\n this.renderer.paperShift(_delta);\n }\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n destroy: function() {\n this._super(\"destroy\");\n this.line.remove();\n this.arrow.remove();\n this.text.remove();\n if (this.renderer.minimap) {\n this.minimap_line.remove();\n }\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n var _this = this;\n this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {\n return _this === _edge;\n });\n }\n }).value();\n\n return Edge;\n\n});\n\n\n\ndefine('renderer/tempedge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* TempEdge Class Begin */\n\n //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);\n var TempEdge = Utils.inherit(BaseRepresentation);\n\n _(TempEdge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Temp-edge\";\n this.origin = Utils.OriginEnum.NONE;\n\n var _color = (this.project.get(\"users\").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\");\n this.line = new paper.Path();\n this.line.strokeColor = _color;\n this.line.dashArray = [4, 2];\n this.line.strokeWidth = this.options.selected_edge_stroke_width;\n this.line.add([0,0],[0,0]);\n this.line.__representation = this;\n this.arrow = new paper.Path();\n this.arrow.fillColor = _color;\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.__representation = this;\n this.arrow_angle = 0;\n },\n redraw: function() {\n var _p0 = this.from_representation.paper_coords,\n _p1 = this.end_pos,\n _a = _p1.subtract(_p0).angle,\n _c = _p0.add(_p1).divide(2);\n this.line.segments[0].point = _p0;\n this.line.segments[1].point = _p1;\n this.arrow.rotate(_a - this.arrow_angle);\n this.arrow.position = _c;\n this.arrow_angle = _a;\n },\n paperShift: function(_delta) {\n if (!this.renderer.isEditable()) {\n this.renderer.removeRepresentation(_this);\n paper.view.draw();\n return;\n }\n this.end_pos = this.end_pos.add(_delta);\n var _hitResult = paper.project.hitTest(this.end_pos);\n this.renderer.findTarget(_hitResult);\n this.redraw();\n },\n mouseup: function(_event, _isTouch) {\n var _hitResult = paper.project.hitTest(_event.point),\n _model = this.from_representation.model,\n _endDrag = true;\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _target = _hitResult.item.__representation;\n if (_target.type.substr(0,4) === \"Node\") {\n var _destmodel = _target.model || _target.source_representation.model;\n if (_model !== _destmodel) {\n var _data = {\n id: Utils.getUID('edge'),\n created_by: this.renkan.current_user,\n from: _model,\n to: _destmodel,\n origin: this.origin\n };\n if (this.renderer.isEditable()) {\n this.project.addEdge(_data);\n }\n }\n }\n\n if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {\n _endDrag = false;\n this.renderer.is_dragging = true;\n }\n }\n if (_endDrag) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentation(this);\n paper.view.draw();\n }\n },\n destroy: function() {\n this.arrow.remove();\n this.line.remove();\n }\n }).value();\n\n /* TempEdge Class End */\n\n return TempEdge;\n\n});\n\n\ndefine('renderer/baseeditor',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _BaseEditor Begin */\n //var _BaseEditor = Renderer._BaseEditor = Utils.inherit(Renderer._BaseRepresentation);\n var _BaseEditor = Utils.inherit(BaseRepresentation);\n\n _(_BaseEditor.prototype).extend({\n _init: function() {\n this.renderer.buttons_layer.activate();\n this.type = \"editor\";\n this.editor_block = new paper.Path();\n var _pts = _.map(_.range(8), function() {return [0,0];});\n this.editor_block.add.apply(this.editor_block, _pts);\n this.editor_block.strokeWidth = this.options.tooltip_border_width;\n this.editor_block.strokeColor = this.options.tooltip_border_color;\n this.editor_block.opacity = this.options.tooltip_opacity;\n this.editor_$ = $('
                                              ')\n .appendTo(this.renderer.editor_$)\n .css({\n position: \"absolute\",\n opacity: this.options.tooltip_opacity\n })\n .hide();\n },\n destroy: function() {\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* _BaseEditor End */\n\n return _BaseEditor;\n\n});\n\n\ndefine('renderer/nodeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor', 'renderer/shapebuilder', 'ckeditor-core'], function ($, _, requtils, BaseEditor, ShapeBuilder, CKEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditor Begin */\n //var NodeEditor = Renderer.NodeEditor = Utils.inherit(Renderer._BaseEditor);\n var NodeEditor = Utils.inherit(BaseEditor);\n\n _(NodeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/nodeeditor.html'];\n //fusionner avec this.options.node_editor_templates\n this.readOnlyTemplate = this.options.node_editor_templates;\n },\n draw: function() {\n var _model = this.source_representation.model,\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate[_model.get(\"type\")] || this.readOnlyTemplate[\"default\"]),\n _image_placeholder = this.options.static_url + \"img/image-placeholder.png\",\n _size = (_model.get(\"size\") || 0);\n this.editor_$\n .html(_template({\n node: {\n _id: _model.get(\"_id\"),\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n type: _model.get(\"type\") || \"default\",\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n image: _model.get(\"image\") || \"\",\n image_placeholder: _image_placeholder,\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n title_size: (_model.has(\"style\") && _model.get(\"style\").title_size) || 1,\n title_color: (_model.has(\"style\") && _model.get(\"style\").title_color) || this.options.node_title_color,\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n clip_path: _model.get(\"clip_path\") || false,\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\"),\n size: (_size > 0 ? \"+\" : \"\") + _size,\n shape: _model.get(\"shape\") || \"circle\"\n },\n renkan: this.renkan,\n options: this.options,\n shortenText: Utils.shortenText,\n shapes : _(ShapeBuilder.builders).omit('svg').keys().value(),\n types : _(this.options.node_editor_templates).keys().value(),\n }));\n this.redraw();\n var _this = this,\n editorInstance = (this.renderer.isEditable() && _this.options.show_node_editor_description_richtext) ?\n CKEditor.inline(\"Rk-Edit-Description-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n editorInstanceTitle = (this.renderer.isEditable() && _this.options.show_node_editor_title_richtext) ?\n CKEditor.inline(\"Rk-Edit-Title-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n paper.view.draw();\n };\n\n _this.cleanEditor = function() {\n _this.editor_$.off(\"keyup\");\n _this.editor_$.find(\"input, textarea, select\").off(\"change keyup paste\");\n _this.editor_$.find(\".Rk-Edit-Image-File\").off('change');\n _this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").off('hover');\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n _this.editor_$.find(\".Rk-Edit-Image-Del\").off('click');\n _this.editor_$.find(\".Rk-Edit-ColorPicker\").find(\"li\").off('hover click');\n _this.editor_$.find(\".Rk-CloseX\").off('click');\n _this.editor_$.find(\".Rk-Edit-Goto\").off('click');\n\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance) {\n editorInstance.focusManager.blur(true);\n editorInstance.destroy();\n }\n }\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle) {\n editorInstanceTitle.focusManager.blur(true);\n editorInstanceTitle.destroy();\n }\n }\n };\n\n this.editor_$.find(\".Rk-CloseX\").click(function (e) {\n e.preventDefault();\n closeEditor();\n });\n\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {};\n if (_this.options.show_node_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n }\n if (_this.options.show_node_editor_image) {\n _data.image = _this.editor_$.find(\".Rk-Edit-Image\").val();\n _this.editor_$.find(\".Rk-Edit-ImgPreview\").attr(\"src\", _data.image || _image_placeholder);\n }\n if (_this.options.show_node_editor_description) {\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance &&\n editorInstance.checkDirty()) {\n _data.description = editorInstance.getData();\n editorInstance.resetDirty();\n }\n }\n else {\n _data.description = _this.editor_$.find(\".Rk-Edit-Description\").val();\n }\n }\n if (_this.options.show_node_editor_title) {\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle &&\n editorInstanceTitle.checkDirty()) {\n _data.title = editorInstanceTitle.getData();\n editorInstanceTitle.resetDirty();\n }\n }\n else {\n _data.title = _this.editor_$.find(\".Rk-Edit-Title\").val();\n }\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash});\n }\n if (_this.options.change_shapes) {\n if(_model.get(\"shape\")!==_this.editor_$.find(\".Rk-Edit-Shape\").val()){\n _data.shape = _this.editor_$.find(\".Rk-Edit-Shape\").val();\n }\n }\n if (_this.options.change_types) {\n if(_model.get(\"type\")!==_this.editor_$.find(\".Rk-Edit-Type\").val()){\n _data.type = _this.editor_$.find(\".Rk-Edit-Type\").val();\n }\n }\n _model.set(_data);\n _this.redraw();\n } else {\n closeEditor();\n }\n });\n }, 1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input, textarea, select\").on(\"change keyup paste\", onFieldChange);\n if( _this.options.show_node_editor_description &&\n _this.options.show_node_editor_description_richtext &&\n editorInstance)\n {\n editorInstance.on(\"change\", onFieldChange);\n editorInstance.on(\"blur\", onFieldChange);\n }\n\n if( _this.options.show_node_editor_title &&\n _this.options.show_node_editor_title_richtext &&\n editorInstanceTitle)\n {\n editorInstanceTitle.on(\"change\", onFieldChange);\n editorInstanceTitle.on(\"blur\", onFieldChange);\n }\n\n if(_this.options.allow_image_upload) {\n this.editor_$.find(\".Rk-Edit-Image-File\").change(function() {\n if (this.files.length) {\n var f = this.files[0],\n fr = new FileReader();\n if (f.type.substr(0,5) !== \"image\") {\n alert(_this.renkan.translate(\"This file is not an image\"));\n return;\n }\n if (f.size > (_this.options.uploaded_image_max_kb * 1024)) {\n alert(_this.renkan.translate(\"Image size must be under \") + _this.options.uploaded_image_max_kb + _this.renkan.translate(\"KB\"));\n return;\n }\n fr.onload = function(e) {\n _this.editor_$.find(\".Rk-Edit-Image\").val(e.target.result);\n onFieldChange();\n };\n fr.readAsDataURL(f);\n }\n });\n }\n this.editor_$.find(\".Rk-Edit-Title\")[0].focus();\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Node\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color) || (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n var shiftSize = function(n) {\n if (_this.renderer.isEditable()) {\n var _newsize = n+(_model.get(\"size\") || 0);\n _this.editor_$.find(\"#Rk-Edit-Size-Value\").text((_newsize > 0 ? \"+\" : \"\") + _newsize);\n _model.set(\"size\", _newsize);\n paper.view.draw();\n } else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Size-Down\").click(function() {\n shiftSize(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Size-Up\").click(function() {\n shiftSize(1);\n return false;\n });\n\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n\n var shiftTitleSize = function(n) {\n var min = _this.options.node_title_size_min;\n var max = _this.options.node_title_size_max;\n if (_this.renderer.isEditable()) {\n var _oldTitleSize = ((_model.has('style') && _model.get('style').title_size) || 1),\n _newTitleSize = n + _oldTitleSize;\n if(_newTitleSize < min ) {\n _newTitleSize = min;\n }\n else if (_newTitleSize > max) {\n _newTitleSize = max;\n }\n if (_newTitleSize !== _oldTitleSize) {\n _this.editor_$.find(\"#Rk-Edit-Title-Size-Value\").text(_newTitleSize.toFixed(1));\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_size: _newTitleSize}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n\n var _pickerTitle = _this.editor_$.find(\".Rk-Editor-ColorPicker-Title\");\n\n this.editor_$.find(\".Rk-Editor-p-title-color\").hover(\n function(_e) {\n _e.preventDefault();\n _pickerTitle.show();\n },\n function(_e) {\n _e.preventDefault();\n _pickerTitle.hide();\n }\n );\n\n _pickerTitle.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n var title_color = (_model.has(\"style\") && _model.get(\"style\").title_color) || _this.options.node_fill_color;\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", title_color);\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_color: $(this).attr(\"data-color\")}));\n _pickerTitle.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n\n this.editor_$.find(\"#Rk-Edit-Title-Size-Down\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(-step);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Title-Size-Up\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(step);\n return false;\n });\n\n this.editor_$.find(\".Rk-Edit-Image-Del\").click(function() {\n _this.editor_$.find(\".Rk-Edit-Image\").val('');\n onFieldChange();\n return false;\n });\n } else {\n if (typeof this.source_representation.highlighted === \"object\") {\n var titlehtml = this.source_representation.highlighted.replace(_(_model.get(\"title\")).escape(),'$1');\n this.editor_$.find(\".Rk-Display-Title\" + (_model.get(\"uri\") ? \" a\" : \"\")).html(titlehtml);\n if (this.options.show_node_tooltip_description) {\n this.editor_$.find(\".Rk-Display-Description\").html(this.source_representation.highlighted.replace(_(_model.get(\"description\")).escape(),'$1'));\n }\n }\n }\n this.editor_$.find(\"img\").load(function() {\n _this.redraw();\n });\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, this.source_representation.circle_radius * 0.75, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n },\n destroy: function() {\n if(typeof this.cleanEditor !== 'undefined') {\n this.cleanEditor();\n }\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* NodeEditor End */\n\n return NodeEditor;\n\n});\n\n\ndefine('renderer/edgeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor'], function ($, _, requtils, BaseEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditor Begin */\n\n //var EdgeEditor = Renderer.EdgeEditor = Utils.inherit(Renderer._BaseEditor);\n var EdgeEditor = Utils.inherit(BaseEditor);\n\n _(EdgeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/edgeeditor.html'];\n this.readOnlyTemplate = this.options.templates['templates/edgeeditor_readonly.html'];\n },\n draw: function() {\n var _model = this.source_representation.model,\n _from_model = _model.get(\"from\"),\n _to_model = _model.get(\"to\"),\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate);\n this.editor_$\n .html(_template({\n edge: {\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n arrow: (_model.has(\"style\") && _model.get(\"style\").arrow) || !_model.has(\"style\") || (typeof _model.get(\"style\").arrow === 'undefined') ? \"checked\" : \"\",\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n from_title: _from_model.get(\"title\"),\n to_title: _to_model.get(\"title\"),\n from_color: (_from_model.has(\"style\") && _from_model.get(\"style\").color) || (_from_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n to_color: (_to_model.has(\"style\") && _to_model.get(\"style\").color) || (_to_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\")\n },\n renkan: this.renkan,\n shortenText: Utils.shortenText,\n options: this.options\n }));\n this.redraw();\n var _this = this,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n paper.view.draw();\n };\n this.editor_$.find(\".Rk-CloseX\").click(closeEditor);\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {\n title: _this.editor_$.find(\".Rk-Edit-Title\").val()\n };\n if (_this.options.show_edge_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked'),\n arrow = _this.editor_$.find(\".Rk-Edit-Arrow\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash, arrow: arrow});\n }\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n _model.set(_data);\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n },1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input\").on(\"keyup change paste\", onFieldChange);\n\n this.editor_$.find(\".Rk-Edit-Vocabulary\").change(function() {\n var e = $(this),\n v = e.val();\n if (v) {\n _this.editor_$.find(\".Rk-Edit-Title\").val(e.find(\":selected\").text());\n _this.editor_$.find(\".Rk-Edit-URI\").val(v);\n onFieldChange();\n }\n });\n this.editor_$.find(\".Rk-Edit-Direction\").click(function() {\n if (_this.renderer.isEditable()) {\n _model.set({\n from: _model.get(\"to\"),\n to: _model.get(\"from\")\n });\n _this.draw();\n } else {\n closeEditor();\n }\n });\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Edge\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color)|| (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n }\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, 5, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n }\n }).value();\n\n /* EdgeEditor End */\n\n return EdgeEditor;\n\n});\n\n\ndefine('renderer/nodebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _NodeButton Begin */\n\n //var _NodeButton = Renderer._NodeButton = Utils.inherit(Renderer._BaseButton);\n var _NodeButton = Utils.inherit(BaseButton);\n\n _(_NodeButton.prototype).extend({\n setSectorSize: function() {\n var sectorInner = this.source_representation.circle_radius;\n if (sectorInner !== this.lastSectorInner) {\n if (this.sector) {\n this.sector.destroy();\n }\n this.sector = this.renderer.drawSector(\n this, 1 + sectorInner,\n Utils._NODE_BUTTON_WIDTH + sectorInner,\n this.startAngle,\n this.endAngle,\n 1,\n this.imageName,\n this.renkan.translate(this.text)\n );\n this.lastSectorInner = sectorInner;\n }\n },\n unselect: function() {\n BaseButton.prototype.unselect.apply(this, Array.prototype.slice.call(arguments, 1));\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n this.source_representation.hideButtons();\n }\n },\n select: function() {\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n }\n this.sector.select();\n },\n }).value();\n\n\n /* _NodeButton End */\n\n return _NodeButton;\n\n});\n\n\ndefine('renderer/nodeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditButton Begin */\n\n //var NodeEditButton = Renderer.NodeEditButton = Utils.inherit(Renderer._NodeButton);\n var NodeEditButton = Utils.inherit(NodeButton);\n\n _(NodeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Node-edit-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -125 : -135;\n this.endAngle = this.options.hide_nodes ? -55 : -45;\n this.imageName = \"edit\";\n this.text = \"Edit\";\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* NodeEditButton End */\n\n return NodeEditButton;\n\n});\n\n\ndefine('renderer/noderemovebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeRemoveButton = Utils.inherit(NodeButton);\n\n _(NodeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Node-remove-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -10 : 0;\n this.endAngle = this.options.hide_nodes ? 45 : 90;\n this.imageName = \"remove\";\n this.text = \"Remove\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove node ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeNode(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeRemoveButton;\n\n});\n\n\ndefine('renderer/nodehidebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeHideButton = Utils.inherit(NodeButton);\n\n _(NodeHideButton.prototype).extend({\n _init: function() {\n this.type = \"Node-hide-button\";\n this.lastSectorInner = 0;\n this.startAngle = 45;\n this.endAngle = 90;\n this.imageName = \"hide\";\n this.text = \"Hide\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.renderer.view.addHiddenNode(this.source_representation.model);\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeHideButton;\n\n});\n\n\ndefine('renderer/nodeshowbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeShowButton = Utils.inherit(NodeButton);\n\n _(NodeShowButton.prototype).extend({\n _init: function() {\n this.type = \"Node-show-button\";\n this.lastSectorInner = 0;\n this.startAngle = 90;\n this.endAngle = 135;\n this.imageName = \"show\";\n this.text = \"Show neighbors\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.source_representation.showNeighbors(false);\n }\n }\n }).value();\n\n /* NodeShowButton End */\n\n return NodeShowButton;\n\n});\n\n\ndefine('renderer/noderevertbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRevertButton Begin */\n\n //var NodeRevertButton = Renderer.NodeRevertButton = Utils.inherit(Renderer._NodeButton);\n var NodeRevertButton = Utils.inherit(NodeButton);\n\n _(NodeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Node-revert-button\";\n this.lastSectorInner = 0;\n this.startAngle = -135;\n this.endAngle = 135;\n this.imageName = \"revert\";\n this.text = \"Cancel deletion\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* NodeRevertButton End */\n\n return NodeRevertButton;\n\n});\n\n\ndefine('renderer/nodelinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeLinkButton Begin */\n\n //var NodeLinkButton = Renderer.NodeLinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeLinkButton = Utils.inherit(NodeButton);\n\n _(NodeLinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-link-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? 135 : 90;\n this.endAngle = this.options.hide_nodes ? 190 : 180;\n this.imageName = \"link\";\n this.text = \"Link to another node\";\n },\n mousedown: function(_event, _isTouch) {\n if (this.renderer.isEditable()) {\n var _off = this.renderer.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.renderer.click_target = null;\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.renderer.addTempEdge(this.source_representation, _point, Utils.OriginEnum.EDGE_BUTTON_CIRCLE);\n }\n }\n }).value();\n\n /* NodeLinkButton End */\n\n return NodeLinkButton;\n\n});\n\n\n\ndefine('renderer/nodeenlargebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEnlargeButton Begin */\n\n //var NodeEnlargeButton = Renderer.NodeEnlargeButton = Utils.inherit(Renderer._NodeButton);\n var NodeEnlargeButton = Utils.inherit(NodeButton);\n\n _(NodeEnlargeButton.prototype).extend({\n _init: function() {\n this.type = \"Node-enlarge-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -55 : -45;\n this.endAngle = this.options.hide_nodes ? -10 : 0;\n this.imageName = \"enlarge\";\n this.text = \"Enlarge\";\n },\n mouseup: function() {\n var _newsize = 1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeEnlargeButton End */\n\n return NodeEnlargeButton;\n\n});\n\n\ndefine('renderer/nodeshrinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeShrinkButton Begin */\n\n //var NodeShrinkButton = Renderer.NodeShrinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeShrinkButton = Utils.inherit(NodeButton);\n\n _(NodeShrinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-shrink-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -170 : -180;\n this.endAngle = this.options.hide_nodes ? -125 : -135;\n this.imageName = \"shrink\";\n this.text = \"Shrink\";\n },\n mouseup: function() {\n var _newsize = -1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeShrinkButton End */\n\n return NodeShrinkButton;\n\n});\n\n\ndefine('renderer/edgeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditButton Begin */\n\n //var EdgeEditButton = Renderer.EdgeEditButton = Utils.inherit(Renderer._BaseButton);\n var EdgeEditButton = Utils.inherit(BaseButton);\n\n _(EdgeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-edit-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -270, -90, 1, \"edit\", this.renkan.translate(\"Edit\"));\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* EdgeEditButton End */\n\n return EdgeEditButton;\n\n});\n\n\ndefine('renderer/edgeremovebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRemoveButton Begin */\n\n //var EdgeRemoveButton = Renderer.EdgeRemoveButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRemoveButton = Utils.inherit(BaseButton);\n\n _(EdgeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-remove-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -90, 90, 1, \"remove\", this.renkan.translate(\"Remove\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove edge ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeEdge(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* EdgeRemoveButton End */\n\n return EdgeRemoveButton;\n\n});\n\n\ndefine('renderer/edgerevertbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRevertButton Begin */\n\n //var EdgeRevertButton = Renderer.EdgeRevertButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRevertButton = Utils.inherit(BaseButton);\n\n _(EdgeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-revert-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -135, 135, 1, \"revert\", this.renkan.translate(\"Cancel deletion\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* EdgeRevertButton End */\n\n return EdgeRevertButton;\n\n});\n\n\ndefine('renderer/miniframe',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* MiniFrame Begin */\n\n //var MiniFrame = Renderer.MiniFrame = Utils.inherit(Renderer._BaseRepresentation);\n var MiniFrame = Utils.inherit(BaseRepresentation);\n\n _(MiniFrame.prototype).extend({\n paperShift: function(_delta) {\n this.renderer.offset = this.renderer.offset.subtract(_delta.divide(this.renderer.minimap.scale).multiply(this.renderer.scale));\n this.renderer.redraw();\n },\n mouseup: function(_delta) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n }\n }).value();\n\n\n /* MiniFrame End */\n\n return MiniFrame;\n\n});\n\n\ndefine('renderer/scene',['jquery', 'underscore', 'filesaver', 'requtils', 'renderer/miniframe', 'screenfull'], function ($, _, filesaver, requtils, MiniFrame, Screenfull) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Scene Begin */\n\n var Scene = function(_renkan) {\n this.renkan = _renkan;\n this.$ = $(\".Rk-Render\");\n this.representations = [];\n this.$.html(_renkan.options.templates['templates/scene.html'](_renkan));\n this.onStatusChange();\n this.canvas_$ = this.$.find(\".Rk-Canvas\");\n this.labels_$ = this.$.find(\".Rk-Labels\");\n if (!_renkan.options.popup_editor){\n this.editor_$ = $(\"#\" + _renkan.options.editor_panel);\n }else{\n this.editor_$ = this.$.find(\".Rk-Editor\");\n }\n this.notif_$ = this.$.find(\".Rk-Notifications\");\n paper.setup(this.canvas_$[0]);\n this.totalScroll = 0;\n this.mouse_down = false;\n this.click_target = null;\n this.selected_target = null;\n this.edge_layer = new paper.Layer();\n this.node_layer = new paper.Layer();\n this.buttons_layer = new paper.Layer();\n this.delete_list = [];\n this.redrawActive = false;\n\n if (_renkan.options.show_minimap) {\n this.minimap = {\n background_layer: new paper.Layer(),\n edge_layer: new paper.Layer(),\n node_layer: new paper.Layer(),\n node_group: new paper.Group(),\n size: new paper.Size( _renkan.options.minimap_width, _renkan.options.minimap_height )\n };\n\n this.minimap.background_layer.activate();\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle = new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.rectangle.fillColor = _renkan.options.minimap_background_color;\n this.minimap.rectangle.strokeColor = _renkan.options.minimap_border_color;\n this.minimap.rectangle.strokeWidth = 4;\n this.minimap.offset = new paper.Point(this.minimap.size.divide(2));\n this.minimap.scale = 0.1;\n\n this.minimap.node_layer.activate();\n this.minimap.cliprectangle = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.cliprectangle);\n this.minimap.node_group.clipped = true;\n this.minimap.miniframe = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.miniframe);\n this.minimap.miniframe.fillColor = '#c0c0ff';\n this.minimap.miniframe.opacity = 0.3;\n this.minimap.miniframe.strokeColor = '#000080';\n this.minimap.miniframe.strokeWidth = 2;\n this.minimap.miniframe.__representation = new MiniFrame(this, null);\n }\n\n this.throttledPaperDraw = _(function() {\n paper.view.draw();\n }).throttle(100).value();\n\n this.bundles = [];\n this.click_mode = false;\n\n var _this = this,\n _allowScroll = true,\n _originalScale = 1,\n _zooming = false,\n _lastTapX = 0,\n _lastTapY = 0,\n _lastTap = 0;\n\n this.image_cache = {};\n this.icon_cache = {};\n\n ['edit', 'remove', 'hide', 'show', 'link', 'enlarge', 'shrink', 'revert' ].forEach(function(imgname) {\n var img = new Image();\n img.src = _renkan.options.static_url + 'img/' + imgname + '.png';\n _this.icon_cache[imgname] = img;\n });\n\n var throttledMouseMove = _.throttle(function(_event, _isTouch) {\n _this.onMouseMove(_event, _isTouch);\n }, Utils._MOUSEMOVE_RATE);\n\n this.canvas_$.on({\n mousedown: function(_event) {\n _event.preventDefault();\n _this.onMouseDown(_event, false);\n },\n mousemove: function(_event) {\n _event.preventDefault();\n throttledMouseMove(_event, false);\n },\n mouseup: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event, false);\n },\n mousewheel: function(_event, _delta) {\n if(_renkan.options.zoom_on_scroll) {\n _event.preventDefault();\n if (_allowScroll) {\n _this.onScroll(_event, _delta);\n }\n }\n },\n touchstart: function(_event) {\n _event.preventDefault();\n var _touches = _event.originalEvent.touches[0];\n if (\n _renkan.options.allow_double_click &&\n new Date() - _lastTap < Utils._DOUBLETAP_DELAY &&\n ( Math.pow(_lastTapX - _touches.pageX, 2) + Math.pow(_lastTapY - _touches.pageY, 2) < Utils._DOUBLETAP_DISTANCE )\n ) {\n _lastTap = 0;\n _this.onDoubleClick(_touches);\n } else {\n _lastTap = new Date();\n _lastTapX = _touches.pageX;\n _lastTapY = _touches.pageY;\n _originalScale = _this.view.scale;\n _zooming = false;\n _this.onMouseDown(_touches, true);\n }\n },\n touchmove: function(_event) {\n _event.preventDefault();\n _lastTap = 0;\n if (_event.originalEvent.touches.length === 1) {\n _this.onMouseMove(_event.originalEvent.touches[0], true);\n } else {\n if (!_zooming) {\n _this.onMouseUp(_event.originalEvent.touches[0], true);\n _this.click_target = null;\n _this.is_dragging = false;\n _zooming = true;\n }\n if (_event.originalEvent.scale === \"undefined\") {\n return;\n }\n var _newScale = _event.originalEvent.scale * _originalScale,\n _scaleRatio = _newScale / _this.view.scale,\n _newOffset = new paper.Point([\n _this.canvas_$.width(),\n _this.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - _scaleRatio ) ).add(_this.view.offset.multiply( _scaleRatio ));\n _this.view.setScale(_newScale, _newOffset);\n }\n },\n touchend: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event.originalEvent.changedTouches[0], true);\n },\n click: function(_event) {\n _event.preventDefault();\n _this.onClick(_event);\n },\n dblclick: function(_event) {\n _event.preventDefault();\n if (_renkan.options.allow_double_click) {\n _this.onDoubleClick(_event);\n }\n },\n mouseleave: function(_event) {\n _event.preventDefault();\n //_this.onMouseUp(_event, false);\n _this.click_target = null;\n _this.is_dragging = false;\n },\n dragover: function(_event) {\n _event.preventDefault();\n },\n dragenter: function(_event) {\n _event.preventDefault();\n _allowScroll = false;\n },\n dragleave: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n },\n drop: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n var res = {};\n _.each(_event.originalEvent.dataTransfer.types, function(t) {\n try {\n res[t] = _event.originalEvent.dataTransfer.getData(t);\n } catch(e) {}\n });\n var text = _event.originalEvent.dataTransfer.getData(\"Text\");\n if (typeof text === \"string\") {\n switch(text[0]) {\n case \"{\":\n case \"[\":\n try {\n var data = JSON.parse(text);\n _.extend(res,data);\n }\n catch(e) {\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n break;\n case \"<\":\n if (!res[\"text/html\"]) {\n res[\"text/html\"] = text;\n }\n break;\n default:\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n }\n var url = _event.originalEvent.dataTransfer.getData(\"URL\");\n if (url && !res[\"text/uri-list\"]) {\n res[\"text/uri-list\"] = url;\n }\n _this.dropData(res, _event.originalEvent);\n }\n });\n\n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n\n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n this.$.find(\".Rk-CurrentUser\").mouseenter(\n function() { _this.$.find(\".Rk-UserList\").slideDown(); }\n );\n this.$.find(\".Rk-Users\").mouseleave(\n function() { _this.$.find(\".Rk-UserList\").slideUp(); }\n );\n\n if (Screenfull.enabled){\n bindClick(\".Rk-FullScreen-Button\", \"fullScreen\");\n\n document.addEventListener(Screenfull.raw.fullscreenchange, function () {\n //the listener occur too randomly and sometimes before the fullscreen is fully set up\n //so we add 500 delay\n setTimeout(function(){\n var widthAft = _this.$.width();\n var heightAft = _this.$.height();\n\n if (_this.renkan.options.show_top_bar) {\n heightAft -= _this.$.find(\".Rk-TopBar\").height();\n }\n if (_this.renkan.options.show_bins && (this.renkan.$.find(\".Rk-Bins\").position().left > 0)) {\n widthAft -= this.renkan.$.find(\".Rk-Bins\").width();\n }\n\n paper.view.viewSize = new paper.Size([widthAft, heightAft]);\n _this.resize(_this.currentWidth, widthAft, _this.currentHeight, heightAft);\n\n _this.currentWidth = widthAft;\n _this.currentHeight = heightAft;\n\n if (!Screenfull.isFullscreen) {\n paper.view.onResize = function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n };\n }\n }, 600);\n });\n } else {\n this.$.find(\".Rk-FullScreen-Button\").addClass(\"disabled\");\n this.$.find(\".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents\").html(this.renkan.translate(\"Fullscreen not supported by your browser\"));\n }\n\n bindClick(\".Rk-AddNode-Button\", \"addNodeBtn\");\n bindClick(\".Rk-AddEdge-Button\", \"addEdgeBtn\");\n bindClick(\".Rk-Save-Button\", \"save\");\n bindClick(\".Rk-Open-Button\", \"open\");\n bindClick(\".Rk-Export-Button\", \"exportProject\");\n this.$.find(\".Rk-Bookmarklet-Button\")\n /*jshint scripturl:true */\n .attr(\"href\",\"javascript:\" + Utils._BOOKMARKLET_CODE(_renkan))\n .click(function(){\n _this.notif_$\n .text(_renkan.translate(\"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\"))\n .fadeIn()\n .delay(5000)\n .fadeOut();\n return false;\n });\n this.$.find(\".Rk-TopBar-Button\").mouseover(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").show();\n }).mouseout(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").hide();\n });\n bindClick(\".Rk-Fold-Bins\", \"foldBins\");\n\n paper.view.on(\"resize\", function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n });\n\n var _thRedraw = _.throttle(function() {\n _this.redraw();\n },50);\n\n this.addRepresentations(\"Node\", this.renkan.project.get(\"nodes\"));\n this.addRepresentations(\"Edge\", this.renkan.project.get(\"edges\"));\n this.renkan.project.on(\"change:title\", function() {\n _this.$.find(\".Rk-PadTitle\").val(_renkan.project.get(\"title\")).prop('title', _renkan.project.get(\"title\"));\n });\n\n this.$.find(\".Rk-PadTitle\").on(\"keyup input paste\", function() {\n _renkan.project.set({\"title\": $(this).val()});\n });\n\n var _thRedrawUsers = _.throttle(function() {\n _this.redrawUsers();\n }, 100);\n\n _thRedrawUsers();\n\n // register model events\n this.renkan.project.on(\"change:saveStatus\", function(){\n switch (_this.renkan.project.get(\"saveStatus\")) {\n case 0: //clean\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saved\");\n break;\n case 1: //dirty\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"to-save\");\n break;\n case 2: //saving\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saving\");\n break;\n }\n });\n\n this.renkan.project.on(\"loaded\", function(){\n if (_this.renkan.options.url_parameters){\n Backbone.history.start();\n } else {\n _this.fixSize();\n }\n _this.redrawActive = true;\n _thRedraw();\n });\n\n //register router events\n this.renkan.router.on(\"router\", function(_params){\n _this.setViewParameters(_params);\n });\n\n this.renkan.project.on(\"change:loadingStatus\", function(){\n if (_this.renkan.project.get(\"loadingStatus\")){\n var animate = _this.$.find(\".loader\").addClass(\"run\");\n var timer = setTimeout(function(){\n _this.$.find(\".loader\").hide(250);\n }, 3000);\n }\n });\n\n this.renkan.project.on(\"add:users remove:users\", _thRedrawUsers);\n\n this.renkan.project.on(\"add:views remove:views\", function(_node) {\n if(_this.renkan.project.get('views').length > 1) {\n _this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n else {\n _this.$.find(\".Rk-ZoomSetSaved\").hide();\n }\n });\n\n this.renkan.project.on(\"add:nodes\", function(_node) {\n _this.addRepresentation(\"Node\", _node);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"add:edges\", function(_edge) {\n _this.addRepresentation(\"Edge\", _edge);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"change:title\", function(_model, _title) {\n var el = _this.$.find(\".Rk-PadTitle\");\n if (el.is(\"input\")) {\n if (el.val() !== _title) {\n el.val(_title);\n }\n } else {\n el.text(_title);\n }\n });\n\n if (_renkan.options.size_bug_fix) {\n var _delay = (\n typeof _renkan.options.size_bug_fix === \"number\" ?\n _renkan.options.size_bug_fix\n : 500\n );\n window.setTimeout(\n function() {\n _this.fixSize();\n },\n _delay\n );\n }\n\n if (_renkan.options.force_resize) {\n $(window).resize(function() {\n _this.autoScale();\n });\n }\n\n if (_renkan.options.show_user_list && _renkan.options.user_color_editable) {\n var $cpwrapper = this.$.find(\".Rk-Users .Rk-Edit-ColorPicker-Wrapper\"),\n $cplist = this.$.find(\".Rk-Users .Rk-Editor-ColorPicker-User\");\n\n $cpwrapper.hover(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n $cplist.show();\n }\n },\n function(_e) {\n _e.preventDefault();\n $cplist.hide();\n }\n );\n\n $cplist.find(\"li\").mouseenter(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n _this.$.find(\".Rk-CurrentUser-Color\").css(\"background\", $(this).attr(\"data-color\"));\n }\n }\n );\n }\n\n if (_renkan.options.show_search_field) {\n\n var lastval = '';\n\n this.$.find(\".Rk-GraphSearch-Field\").on(\"keyup change paste input\", function() {\n var $this = $(this),\n val = $this.val();\n if (val === lastval) {\n return;\n }\n lastval = val;\n if (val.length < 2) {\n _renkan.project.get(\"nodes\").each(function(n) {\n _this.getRepresentationByModel(n).unhighlight();\n });\n _renkan.project.get(\"edges\").each(function(e) {\n _this.getRepresentationByModel(e).unhighlight();\n });\n } else {\n var rxs = Utils.regexpFromTextOrArray(val);\n _renkan.project.get(\"nodes\").each(function(n) {\n if (n.id === val || rxs.test(n.get(\"title\")) || rxs.test(n.get(\"description\"))) {\n _this.getRepresentationByModel(n).highlight(rxs);\n } else {\n _this.getRepresentationByModel(n).unhighlight();\n }\n });\n _renkan.project.get(\"edges\").each(function(e) {\n if (e.id === val || rxs.test(e.get(\"title\")) || rxs.test(e.get(\"description\"))) {\n _this.getRepresentationByModel(e).highlight(rxs);\n } else {\n _this.getRepresentationByModel(e).unhighlight();\n }\n });\n\n }\n });\n }\n\n this.redraw();\n\n window.setInterval(function() {\n var _now = new Date().valueOf();\n _this.delete_list.forEach(function(d) {\n if (_now >= d.time) {\n var el = _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeNode(el);\n }\n el = _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeEdge(el);\n }\n }\n });\n _this.delete_list = _this.delete_list.filter(function(d) {\n return _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id}) || _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n });\n }, 500);\n\n if (this.minimap) {\n window.setInterval(function() {\n _this.rescaleMinimap();\n }, 2000);\n }\n\n };\n\n _(Scene.prototype).extend({\n fixSize: function() {\n if(typeof this.view === 'undefined') {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").last());\n }\n this.view.autoScale();\n },\n drawSector: function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgname, _caption) {\n var _options = this.renkan.options,\n _startRads = _startAngle * Math.PI / 180,\n _endRads = _endAngle * Math.PI / 180,\n _img = this.icon_cache[_imgname],\n _startdx = - Math.sin(_startRads),\n _startdy = Math.cos(_startRads),\n _startXIn = Math.cos(_startRads) * _inR + _padding * _startdx,\n _startYIn = Math.sin(_startRads) * _inR + _padding * _startdy,\n _startXOut = Math.cos(_startRads) * _outR + _padding * _startdx,\n _startYOut = Math.sin(_startRads) * _outR + _padding * _startdy,\n _enddx = - Math.sin(_endRads),\n _enddy = Math.cos(_endRads),\n _endXIn = Math.cos(_endRads) * _inR - _padding * _enddx,\n _endYIn = Math.sin(_endRads) * _inR - _padding * _enddy,\n _endXOut = Math.cos(_endRads) * _outR - _padding * _enddx,\n _endYOut = Math.sin(_endRads) * _outR - _padding * _enddy,\n _centerR = (_inR + _outR) / 2,\n _centerRads = (_startRads + _endRads) / 2,\n _centerX = Math.cos(_centerRads) * _centerR,\n _centerY = Math.sin(_centerRads) * _centerR,\n _centerXIn = Math.cos(_centerRads) * _inR,\n _centerXOut = Math.cos(_centerRads) * _outR,\n _centerYIn = Math.sin(_centerRads) * _inR,\n _centerYOut = Math.sin(_centerRads) * _outR,\n _textX = Math.cos(_centerRads) * (_outR + 3),\n _textY = Math.sin(_centerRads) * (_outR + _options.buttons_label_font_size) + _options.buttons_label_font_size / 2;\n this.buttons_layer.activate();\n var _path = new paper.Path();\n _path.add([_startXIn, _startYIn]);\n _path.arcTo([_centerXIn, _centerYIn], [_endXIn, _endYIn]);\n _path.lineTo([_endXOut, _endYOut]);\n _path.arcTo([_centerXOut, _centerYOut], [_startXOut, _startYOut]);\n _path.fillColor = _options.buttons_background;\n _path.opacity = 0.5;\n _path.closed = true;\n _path.__representation = _repr;\n var _text = new paper.PointText(_textX,_textY);\n _text.characterStyle = {\n fontSize: _options.buttons_label_font_size,\n fillColor: _options.buttons_label_color\n };\n if (_textX > 2) {\n _text.paragraphStyle.justification = 'left';\n } else if (_textX < -2) {\n _text.paragraphStyle.justification = 'right';\n } else {\n _text.paragraphStyle.justification = 'center';\n }\n _text.visible = false;\n var _visible = false,\n _restPos = new paper.Point(-200, -200),\n _grp = new paper.Group([_path, _text]),\n //_grp = new paper.Group([_path]),\n _delta = _grp.position,\n _imgdelta = new paper.Point([_centerX, _centerY]),\n _currentPos = new paper.Point(0,0);\n _text.content = _caption;\n // set group pivot to not depend on text visibility that changes the group bounding box.\n _grp.pivot = _grp.bounds.center;\n _grp.visible = false;\n _grp.position = _restPos;\n var _res = {\n show: function() {\n _visible = true;\n _grp.position = _currentPos.add(_delta);\n _grp.visible = true;\n },\n moveTo: function(_point) {\n _currentPos = _point;\n if (_visible) {\n _grp.position = _point.add(_delta);\n }\n },\n hide: function() {\n _visible = false;\n _grp.visible = false;\n _grp.position = _restPos;\n },\n select: function() {\n _path.opacity = 0.8;\n _text.visible = true;\n },\n unselect: function() {\n _path.opacity = 0.5;\n _text.visible = false;\n },\n destroy: function() {\n _grp.remove();\n }\n };\n var showImage = function() {\n var _raster = new paper.Raster(_img);\n _raster.position = _imgdelta.add(_grp.position).subtract(_delta);\n _raster.locked = true; // Disable mouse events on icon\n _grp.addChild(_raster);\n };\n if (_img.width) {\n showImage();\n } else {\n $(_img).on(\"load\",showImage);\n }\n\n return _res;\n },\n addToBundles: function(_edgeRepr) {\n var _bundle = _(this.bundles).find(function(_bundle) {\n return (\n ( _bundle.from === _edgeRepr.from_representation && _bundle.to === _edgeRepr.to_representation ) ||\n ( _bundle.from === _edgeRepr.to_representation && _bundle.to === _edgeRepr.from_representation )\n );\n });\n if (typeof _bundle !== \"undefined\") {\n _bundle.edges.push(_edgeRepr);\n } else {\n _bundle = {\n from: _edgeRepr.from_representation,\n to: _edgeRepr.to_representation,\n edges: [ _edgeRepr ],\n getPosition: function(_er) {\n var _dir = (_er.from_representation === this.from) ? 1 : -1;\n return _dir * ( _(this.edges).indexOf(_er) - (this.edges.length - 1) / 2 );\n }\n };\n this.bundles.push(_bundle);\n }\n return _bundle;\n },\n isEditable: function() {\n return (this.renkan.options.editor_mode && !this.renkan.read_only);\n },\n onStatusChange: function() {\n var savebtn = this.$.find(\".Rk-Save-Button\"),\n tip = savebtn.find(\".Rk-TopBar-Tooltip-Contents\");\n if (this.renkan.read_only) {\n savebtn.removeClass(\"disabled Rk-Save-Online\").addClass(\"Rk-Save-ReadOnly\");\n tip.text(this.renkan.translate(\"Connection lost\"));\n } else {\n if (this.renkan.options.manual_save) {\n savebtn.removeClass(\"Rk-Save-ReadOnly Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Save Project\"));\n } else {\n savebtn.removeClass(\"disabled Rk-Save-ReadOnly\").addClass(\"Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Auto-save enabled\"));\n }\n }\n this.redrawUsers();\n },\n redrawMiniframe: function() {\n var topleft = this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),\n bottomright = this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));\n this.minimap.miniframe.fitBounds(topleft, bottomright);\n },\n rescaleMinimap: function() {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min(\n this.view.scale * 0.8 * this.renkan.options.minimap_width / paper.view.bounds.width,\n this.view.scale * 0.8 * this.renkan.options.minimap_height / paper.view.bounds.height,\n ( this.renkan.options.minimap_width - 2 * this.renkan.options.minimap_padding ) / (_maxx - _minx),\n ( this.renkan.options.minimap_height - 2 * this.renkan.options.minimap_padding ) / (_maxy - _miny)\n );\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale));\n this.minimap.scale = _scale;\n }\n if (nodes.length === 1) {\n this.minimap.scale = 0.1;\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y]).multiply(this.minimap.scale));\n }\n this.redraw();\n },\n toPaperCoords: function(_point) {\n return _point.multiply(this.view.scale).add(this.view.offset);\n },\n toMinimapCoords: function(_point) {\n return _point.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft);\n },\n toModelCoords: function(_point) {\n return _point.subtract(this.view.offset).divide(this.view.scale);\n },\n addRepresentation: function(_type, _model) {\n var RendererType = requtils.getRenderer()[_type];\n var _repr = new RendererType(this, _model);\n this.representations.push(_repr);\n return _repr;\n },\n addRepresentations: function(_type, _collection) {\n var _this = this;\n _collection.forEach(function(_model) {\n _this.addRepresentation(_type, _model);\n });\n },\n userTemplate: _.template(\n '
                                            • ;\"><%=name%>
                                            • '\n ),\n redrawUsers: function() {\n if (!this.renkan.options.show_user_list) {\n return;\n }\n var allUsers = [].concat((this.renkan.project.current_user_list || {}).models || [], (this.renkan.project.get(\"users\") || {}).models || []),\n ulistHtml = '',\n $userpanel = this.$.find(\".Rk-Users\"),\n $name = $userpanel.find(\".Rk-CurrentUser-Name\"),\n $cpitems = $userpanel.find(\".Rk-Edit-ColorPicker li\"),\n $colorsquare = $userpanel.find(\".Rk-CurrentUser-Color\"),\n _this = this;\n $name.off(\"click\").text(this.renkan.translate(\"\"));\n $cpitems.off(\"mouseleave click\");\n allUsers.forEach(function(_user) {\n if (_user.get(\"_id\") === _this.renkan.current_user) {\n $name.text(_user.get(\"title\"));\n $colorsquare.css(\"background\", _user.get(\"color\"));\n if (_this.isEditable()) {\n\n if (_this.renkan.options.user_name_editable) {\n $name.click(function() {\n var $this = $(this),\n $input = $('').val(_user.get(\"title\")).blur(function() {\n _user.set(\"title\", $(this).val());\n _this.redrawUsers();\n _this.redraw();\n });\n $this.empty().html($input);\n $input.select();\n });\n }\n\n if (_this.renkan.options.user_color_editable) {\n $cpitems.click(\n function(_e) {\n _e.preventDefault();\n if (_this.isEditable()) {\n _user.set(\"color\", $(this).attr(\"data-color\"));\n }\n $(this).parent().hide();\n }\n ).mouseleave(function() {\n $colorsquare.css(\"background\", _user.get(\"color\"));\n });\n }\n }\n\n } else {\n ulistHtml += _this.userTemplate({\n name: _user.get(\"title\"),\n background: _user.get(\"color\")\n });\n }\n });\n $userpanel.find(\".Rk-UserList\").html(ulistHtml);\n },\n removeRepresentation: function(_representation) {\n _representation.destroy();\n this.representations = _.reject(this.representations,\n function(_repr) {\n return _repr === _representation;\n }\n );\n },\n getRepresentationByModel: function(_model) {\n if (!_model) {\n return undefined;\n }\n return _.find(this.representations, function(_repr) {\n return _repr.model === _model;\n });\n },\n removeRepresentationsOfType: function(_type) {\n var _representations = _.filter(this.representations,function(_repr) {\n return _repr.type === _type;\n }),\n _this = this;\n _.each(_representations, function(_repr) {\n _this.removeRepresentation(_repr);\n });\n },\n highlightModel: function(_model) {\n var _repr = this.getRepresentationByModel(_model);\n if (_repr) {\n _repr.highlight();\n }\n },\n unhighlightAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unhighlight();\n });\n },\n unselectAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unselect();\n });\n },\n redraw: function() {\n var _this = this;\n if(! this.redrawActive ) {\n return;\n }\n _.each(this.representations, function(_representation) {\n _representation.redraw({ dontRedrawEdges:true });\n });\n if (this.minimap && typeof this.view !== 'undefined') {\n this.redrawMiniframe();\n }\n paper.view.draw();\n },\n resize: function(prevWidth, newWidth, prevHeight, newHeight){\n var _ratio;\n\n if (this.minimap) {\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.cliprectangle.fitBounds(this.minimap.topleft, this.minimap.size);\n }\n\n var ratioH = newHeight/prevHeight,\n ratioW = newWidth/prevWidth;\n if (newHeight < newWidth) {\n _ratio = ratioH;\n } else {\n _ratio = ratioW;\n }\n this.view.resizeZoom(newWidth - prevWidth, newHeight - prevHeight, _ratio);\n\n this.redraw();\n },\n addTempEdge: function(_from, _point, _origin) {\n var _tmpEdge = this.addRepresentation(\"TempEdge\",null);\n _tmpEdge.end_pos = _point;\n _tmpEdge.from_representation = _from;\n _tmpEdge.origin = _origin;\n _tmpEdge.redraw();\n this.click_target = _tmpEdge;\n },\n findTarget: function(_hitResult) {\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _newTarget = _hitResult.item.__representation;\n if (this.selected_target !== _hitResult.item.__representation) {\n if (this.selected_target) {\n this.selected_target.unselect(_newTarget);\n }\n _newTarget.select(this.selected_target);\n this.selected_target = _newTarget;\n }\n } else {\n if (this.selected_target) {\n this.selected_target.unselect();\n }\n this.selected_target = null;\n }\n },\n onMouseMove: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _delta = _point.subtract(this.last_point);\n this.last_point = _point;\n if (!this.is_dragging && this.mouse_down && _delta.length > Utils._MIN_DRAG_DISTANCE) {\n this.is_dragging = true;\n }\n var _hitResult = paper.project.hitTest(_point);\n if (this.is_dragging) {\n if (this.click_target && typeof this.click_target.paperShift === \"function\") {\n this.click_target.paperShift(_delta);\n } else {\n this.view.paperShift(_delta);\n }\n } else {\n this.findTarget(_hitResult);\n }\n paper.view.draw();\n },\n onMouseDown: function(_event, _isTouch) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.last_point = _point;\n this.mouse_down = true;\n if (!this.click_target || this.click_target.type !== \"Temp-edge\") {\n this.removeRepresentationsOfType(\"editor\");\n this.is_dragging = false;\n var _hitResult = paper.project.hitTest(_point);\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n this.click_target = _hitResult.item.__representation;\n this.click_target.mousedown(_event, _isTouch);\n } else {\n this.click_target = null;\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_ADDNODE) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_BUTTON\n };\n var _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n }\n }\n if (this.click_mode) {\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === \"Node\") {\n this.removeRepresentationsOfType(\"editor\");\n this.addTempEdge(this.click_target, _point, Utils.OriginEnum.EDGE_BUTTON_BAR);\n this.click_mode = Utils._CLICKMODE_ENDEDGE;\n this.notif_$.fadeOut(function() {\n $(this).html(this.renkan.translate(\"Click on a second node to complete the edge\")).fadeIn();\n });\n } else {\n this.notif_$.hide();\n this.click_mode = false;\n }\n }\n paper.view.draw();\n },\n onMouseUp: function(_event, _isTouch) {\n this.mouse_down = false;\n if (this.click_target) {\n var _off = this.canvas_$.offset();\n this.click_target.mouseup(\n {\n point: new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ])\n },\n _isTouch\n );\n } else {\n this.click_target = null;\n this.is_dragging = false;\n if (_isTouch) {\n this.unselectAll();\n }\n this.view.updateUrl();\n }\n paper.view.draw();\n },\n onScroll: function(_event, _scrolldelta) {\n this.totalScroll += _scrolldelta;\n if (Math.abs(this.totalScroll) >= 1) {\n var _off = this.canvas_$.offset(),\n _delta = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]).subtract(this.view.offset).multiply( Math.SQRT2 - 1 );\n if (this.totalScroll > 0) {\n this.view.setScale( this.view.scale * Math.SQRT2, this.view.offset.subtract(_delta) );\n } else {\n this.view.setScale( this.view.scale * Math.SQRT1_2, this.view.offset.add(_delta.divide(Math.SQRT2)));\n }\n this.totalScroll = 0;\n }\n },\n onClick: function(_event) {\n if (!this.isEditable()) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n if(!this._open_uri_cb &&\n this.renkan.options.simple_click_open_url && \n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n this._node_click_open_url = setTimeout(function() {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n this._node_click_open_url = null;\n }.bind(this), 200);\n }\n }\n },\n onDoubleClick: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n\n if (!this.isEditable()) {\n if (this.renkan.options.double_click_open_url &&\n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n }\n return;\n }\n if (this.isEditable() && (!_hitResult || typeof _hitResult.item.__representation === \"undefined\")) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_DOUBLE_CLICK\n },\n _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n paper.view.draw();\n },\n defaultDropHandler: function(_data) {\n var newNode = {};\n var snippet = \"\";\n switch(_data[\"text/x-iri-specific-site\"]) {\n case \"twitter\":\n snippet = $('
                                              ').html(_data[\"text/x-iri-selected-html\"]);\n var tweetdiv = snippet.find(\".tweet\");\n newNode.title = this.renkan.translate(\"Tweet by \") + tweetdiv.attr(\"data-name\");\n newNode.uri = \"http://twitter.com/\" + tweetdiv.attr(\"data-screen-name\") + \"/status/\" + tweetdiv.attr(\"data-tweet-id\");\n newNode.image = tweetdiv.find(\".avatar\").attr(\"src\");\n newNode.description = tweetdiv.find(\".js-tweet-text:first\").text();\n break;\n case \"google\":\n snippet = $('
                                              ').html(_data[\"text/x-iri-selected-html\"]);\n newNode.title = snippet.find(\"h3:first\").text().trim();\n newNode.uri = snippet.find(\"h3 a\").attr(\"href\");\n newNode.description = snippet.find(\".st:first\").text().trim();\n break;\n default:\n if (_data[\"text/x-iri-source-uri\"]) {\n newNode.uri = _data[\"text/x-iri-source-uri\"];\n }\n }\n if (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]) {\n newNode.description = (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]).replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                              ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n var _svgimgs = snippet.find(\"image\");\n if (_svgimgs.length) {\n newNode.image = _svgimgs.attr(\"xlink:href\");\n }\n var _svgpaths = snippet.find(\"path\");\n if (_svgpaths.length) {\n newNode.clipPath = _svgpaths.attr(\"d\");\n }\n var _imgs = snippet.find(\"img\");\n if (_imgs.length) {\n newNode.image = _imgs[0].src;\n }\n var _as = snippet.find(\"a\");\n if (_as.length) {\n newNode.uri = _as[0].href;\n }\n newNode.title = snippet.find(\"[title]\").attr(\"title\") || newNode.title;\n newNode.description = snippet.text().replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/uri-list\"]) {\n newNode.uri = _data[\"text/uri-list\"];\n }\n if (_data[\"text/x-moz-url\"] && !newNode.title) {\n newNode.title = (_data[\"text/x-moz-url\"].split(\"\\n\")[1] || \"\").trim();\n if (newNode.title === newNode.uri) {\n newNode.title = false;\n }\n }\n if (_data[\"text/x-iri-source-title\"] && !newNode.title) {\n newNode.title = _data[\"text/x-iri-source-title\"];\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                              ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n newNode.image = snippet.find(\"[data-image]\").attr(\"data-image\") || newNode.image;\n newNode.uri = snippet.find(\"[data-uri]\").attr(\"data-uri\") || newNode.uri;\n newNode.title = snippet.find(\"[data-title]\").attr(\"data-title\") || newNode.title;\n newNode.description = snippet.find(\"[data-description]\").attr(\"data-description\") || newNode.description;\n newNode.clipPath = snippet.find(\"[data-clip-path]\").attr(\"data-clip-path\") || newNode.clipPath;\n }\n\n if (!newNode.title) {\n newNode.title = this.renkan.translate(\"Dragged resource\");\n }\n var fields = [\"title\", \"description\", \"uri\", \"image\"];\n for (var i = 0; i < fields.length; i++) {\n var f = fields[i];\n if (_data[\"text/x-iri-\" + f] || _data[f]) {\n newNode[f] = _data[\"text/x-iri-\" + f] || _data[f];\n }\n if (newNode[f] === \"none\" || newNode[f] === \"null\") {\n newNode[f] = undefined;\n }\n }\n\n if(typeof this.renkan.options.drop_enhancer === \"function\"){\n newNode = this.renkan.options.drop_enhancer(newNode, _data);\n }\n\n return newNode;\n\n },\n dropData: function(_data, _event) {\n if (!this.isEditable()) {\n return;\n }\n if (_data[\"text/json\"] || _data[\"application/json\"]) {\n try {\n var jsondata = JSON.parse(_data[\"text/json\"] || _data[\"application/json\"]);\n _.extend(_data,jsondata);\n }\n catch(e) {}\n }\n\n var newNode = (typeof this.renkan.options.drop_handler === \"undefined\")?this.defaultDropHandler(_data):this.renkan.options.drop_handler(_data);\n\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _coords = this.toModelCoords(_point),\n _nodedata = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n uri: newNode.uri || \"\",\n title: newNode.title || \"\",\n description: newNode.description || \"\",\n image: newNode.image || \"\",\n color: newNode.color || undefined,\n clip_path: newNode.clipPath || undefined,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n //TODO: Determine if it comes from bin or ext\n origin: Utils.OriginEnum.NODE_DROP_EXT\n };\n var _node = this.renkan.project.addNode(_nodedata),\n _repr = this.getRepresentationByModel(_node);\n if (_event.type === \"drop\") {\n _repr.openEditor();\n }\n },\n fullScreen: function() {\n this.currentWidth = this.$.width();\n this.currentHeight = this.$.height();\n\n var _el = this.renkan.$[0];\n paper.view.off(\"resize\");\n Screenfull.toggle(_el);\n },\n addNodeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_ADDNODE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_ADDNODE;\n this.notif_$.text(this.renkan.translate(\"Click on the background canvas to add a node\")).fadeIn();\n }\n return false;\n },\n addEdgeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_STARTEDGE || this.click_mode === Utils._CLICKMODE_ENDEDGE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_STARTEDGE;\n this.notif_$.text(this.renkan.translate(\"Click on a first node to start the edge\")).fadeIn();\n }\n return false;\n },\n exportProject: function() {\n var projectJSON = this.renkan.project.toJSON(),\n downloadLink = document.createElement(\"a\"),\n projectId = projectJSON.id,\n fileNameToSaveAs = projectId + \".json\";\n\n // clean ids\n delete projectJSON.id;\n delete projectJSON._id;\n delete projectJSON.space_id;\n\n var objId,\n idsMap = {},\n hiddenNodes;\n\n _.each(projectJSON.nodes, function(e,i,l) {\n objId = e.id || e._id;\n delete e._id;\n delete e.id;\n idsMap[objId] = e['@id'] = Utils.getUUID4();\n });\n _.each(projectJSON.edges, function(e,i,l) {\n delete e._id;\n delete e.id;\n e.to = idsMap[e.to];\n e.from = idsMap[e.from];\n });\n _.each(projectJSON.views, function(e,i,l) {\n delete e._id;\n delete e.id;\n\n if(e.hidden_nodes) {\n hiddenNodes = e.hidden_nodes;\n e.hidden_nodes = [];\n _.each(hiddenNodes, function(h,j) {\n e.hidden_nodes.push(idsMap[h]);\n });\n }\n });\n projectJSON.users = [];\n\n var projectJSONStr = JSON.stringify(projectJSON, null, 2);\n var blob = new Blob([projectJSONStr], {type: \"application/json;charset=utf-8\"});\n filesaver(blob,fileNameToSaveAs);\n\n },\n setViewParameters: function(_params){\n this.removeRepresentationsOfType(\"View\");\n if ($.isEmptyObject(_params)){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n return;\n }\n if (typeof _params.viewIndex !== 'undefined'){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(_params.viewIndex)));\n } else {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n }\n if (typeof _params.view !== 'undefined' && _params.view.split(\",\").length >= 3){\n var viewParams = _params.view.split(\",\");\n var params = {\n \"project\": this.renkan.project,\n \"offset\": {\n \"x\": parseFloat(viewParams[0]),\n \"y\": parseFloat(viewParams[1])\n },\n \"zoom_level\": parseFloat(viewParams[2])\n };\n this.view.setScale(params.zoom_level, new paper.Point(params.offset));\n }\n //if view parameters = autoscale we apply a zoom fit on the view.\n if ((typeof _params.view !== 'undefined' && _params.view === \"autoscale\")){\n this.view.autoScale();\n }\n //if viewsNodes = false we show all the node by default.\n if (typeof _params.viewsNodes !== 'undefined'){\n if (_params.viewsNodes === \"true\"){\n this.view.hiddenNodes = (this.view.params.hidden_nodes || []).concat();\n this.view.hideNodes();\n } else {\n this.view.showNodes(false);\n }\n }\n //other parameters must go after because most of them depends on a view that must be initialize before\n this.unhighlightAll();\n if (typeof _params.node !== 'undefined' && _params.node){\n this.highlightModel(this.renkan.project.get(\"nodes\").get(_params.node));\n }\n if (typeof _params.edge !== 'undefined' && _params.edge){\n this.highlightModel(this.renkan.project.get(\"edges\").get(_params.edge));\n }\n\n },\n validViewIndex: function(index){\n //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist\n var _index = parseInt(index);\n var validIndex = 0;\n if (_index < 0){\n validIndex = this.renkan.project.get(\"views\").length + _index;\n } else {\n validIndex = _index;\n }\n if (typeof this.renkan.project.get(\"views\").at(_index) === 'undefined'){\n validIndex = 0;\n }\n return validIndex;\n },\n foldBins: function() {\n var foldBinsButton = this.$.find(\".Rk-Fold-Bins\"),\n bins = this.renkan.$.find(\".Rk-Bins\"),\n _delta = 0;\n var _this = this,\n sizeBef = _this.canvas_$.width(),\n sizeAft;\n if (bins.position().left < 0) {\n _delta= new paper.Point([-bins.width()/2, 0]);\n bins.animate({left: 0},250);\n this.$.animate({left: 300},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n if ((sizeBef - bins.width()) < bins.height()){\n sizeAft = sizeBef;\n } else {\n sizeAft = sizeBef - bins.width();\n }\n foldBinsButton.html(\"«\");\n } else {\n _delta= new paper.Point([bins.width()/2, 0]);\n bins.animate({left: -300},250);\n this.$.animate({left: 0},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n sizeAft = sizeBef+300;\n foldBinsButton.html(\"»\");\n }\n this.view.paperShift(_delta);\n },\n save: function() { },\n open: function() { }\n }).value();\n\n /* Scene End */\n\n return Scene;\n\n});\n\ndefine('renderer/viewrepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.View Class */\n\n /* The representation for the view. */\n\n var ViewRepr = Utils.inherit(BaseRepresentation);\n\n _(ViewRepr.prototype).extend({\n _init: function() {\n var _this = this;\n this.$ = $(\".Rk-Render\");\n this.type = \"View\";\n this.hiddenNodes = [];\n this.scale = 1;\n this.initialScale = 1;\n this.offset = paper.view.center;\n this.params = {};\n \n if (this.model){\n this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n }\n \n this.initWithParams();\n \n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n \n bindClick(\".Rk-ZoomOut\", \"zoomOut\");\n bindClick(\".Rk-ZoomIn\", \"zoomIn\");\n bindClick(\".Rk-ZoomFit\", \"autoScale\");\n bindClick(\".Rk-ZoomSave\", \"saveView\");\n \n this.$.find(\".Rk-ZoomSetSaved\").click( function() {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));\n _this.showNodes(false);\n if (_this.options.hide_nodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n }\n _this.updateUrl();\n });\n \n this.$.find(\".Rk-ShowHiddenNodes\").mouseenter( function() {\n _this.showNodes(true);\n _this.$.find(\".Rk-ShowHiddenNodes\").mouseleave( function() {\n _this.hideNodes();\n });\n });\n this.$.find(\".Rk-ShowHiddenNodes\").click( function() {\n _this.showNodes(false);\n _this.$.find(\".Rk-ShowHiddenNodes\").off( \"mouseleave\" ); \n });\n \n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n },\n redraw: function(options) {\n //console.log(\"view : \", this.model.toJSON());\n },\n initWithParams: function(){\n var _this = this;\n \n if (_this.options.view_force_autoscale){\n this.autoScale();\n } else {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); \n }\n \n if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n } else {\n _this.showNodes(false);\n }\n },\n saveView: function(){\n var _this = this;\n \n var offset = {\n \"x\": _this.offset.x,\n \"y\": _this.offset.y\n };\n \n _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );\n _this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n \n this.$.find(\".Rk-ZoomSetSaved\").show();\n \n _this.updateUrl();\n },\n addHiddenNode: function(_model){\n this.hideNode(_model);\n this.hiddenNodes.push(_model.id);\n this.updateUrl();\n },\n hideNode: function(_model){\n if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){\n this.renderer.getRepresentationByModel(_model).hide();\n }\n },\n hideNodes: function(){\n var _this = this;\n this.hiddenNodes.forEach(function(_id, index){\n var node = _this.renkan.project.get(\"nodes\").get(_id);\n if (typeof node !== 'undefined'){\n return _this.hideNode(_this.renkan.project.get(\"nodes\").get(_id));\n }else{\n _this.hiddenNodes.splice(index, 1);\n }\n });\n paper.view.draw();\n },\n showNodes: function(ghost){\n var _this = this;\n this.hiddenNodes.forEach(function(_id){\n _this.renderer.getRepresentationByModel(_this.renkan.project.get(\"nodes\").get(_id)).show(ghost);\n });\n if (!ghost){\n this.hiddenNodes = [];\n }\n paper.view.draw();\n },\n setScale: function(_newScale, _offset) {\n if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {\n this.scale = _newScale;\n if (_offset) {\n this.offset = _offset;\n }\n this.renderer.redraw();\n this.updateUrl();\n }\n },\n zoomOut: function() {\n var _newScale = this.scale * Math.SQRT1_2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));\n this.setScale( _newScale, _offset );\n },\n zoomIn: function() {\n var _newScale = this.scale * Math.SQRT2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));\n this.setScale( _newScale, _offset );\n },\n resizeZoom: function(deltaW, deltaH, _ratio) {\n var _newScale = this.scale * _ratio;\n var _offset = new paper.Point([\n (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),\n (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )\n ]);\n this.setScale( _newScale, _offset );\n },\n autoScale: function(force_view) {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny));\n this.initialScale = _scale;\n // Override calculated scale if asked\n if((typeof force_view !== \"undefined\") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){\n this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));\n }\n else{\n this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));\n }\n }\n if (nodes.length === 1) {\n this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y])));\n }\n },\n paperShift: function(_delta) {\n this.offset = this.offset.add(_delta);\n this.renderer.redraw();\n },\n updateUrl: function(){\n if(this.options.url_parameters && this.options.update_url){\n var result = {};\n var parameters = Backbone.history.getFragment().split('?');\n if (parameters.length > 1){\n parameters[1].split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000;\n\n if (this.renkan.project.get(\"views\").indexOf(this.model) > -1){\n result.viewIndex = this.renkan.project.get(\"views\").indexOf(this.model);\n if (result.viewIndex === this.renkan.project.get(\"views\").length - 1){\n result.viewIndex = -1;\n }\n } else {\n if (result.viewIndex){\n delete result.viewIndex;\n }\n }\n this.renkan.router.navigate(\"?\" + decodeURIComponent($.param(result)), {trigger: false, replace: true});\n }\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.showNodes(false);\n }\n }).value();\n\n return ViewRepr;\n\n});\n\n\n//Load modules and use them\nif( typeof require.config === \"function\" ) {\n require.config({\n paths: {\n 'jquery':'../lib/jquery/jquery',\n 'underscore':'../lib/lodash/lodash',\n 'filesaver' :'../lib/FileSaver/FileSaver',\n 'requtils':'require-utils',\n 'jquery-private':'jquery-private',\n 'ckeditor-core':'../lib/ckeditor/ckeditor',\n 'screenfull':'../lib/screenfull/screenfull-umd'\n },\n // JQuery config. cf: http://requirejs.org/docs/jquery.html#noconflictmap\n map: {\n '*': { 'jquery': 'jquery-private' },\n 'jquery-private': { 'jquery': 'jquery' }\n },\n shim: {\n 'ckeditor-core': {\n exports: 'CKEDITOR',\n }\n }\n });\n}\n\nrequire(['renderer/baserepresentation',\n 'renderer/basebutton',\n 'renderer/noderepr',\n 'renderer/edge',\n 'renderer/tempedge',\n 'renderer/baseeditor',\n 'renderer/nodeeditor',\n 'renderer/edgeeditor',\n 'renderer/nodebutton',\n 'renderer/nodeeditbutton',\n 'renderer/noderemovebutton',\n 'renderer/nodehidebutton',\n 'renderer/nodeshowbutton',\n 'renderer/noderevertbutton',\n 'renderer/nodelinkbutton',\n 'renderer/nodeenlargebutton',\n 'renderer/nodeshrinkbutton',\n 'renderer/edgeeditbutton',\n 'renderer/edgeremovebutton',\n 'renderer/edgerevertbutton',\n 'renderer/miniframe',\n 'renderer/scene',\n 'renderer/viewrepr'\n ], function(BaseRepresentation, BaseButton, NodeRepr, Edge, TempEdge, BaseEditor, NodeEditor, EdgeEditor, NodeButton, NodeEditButton, NodeRemoveButton, NodeHideButton, NodeShowButton, NodeRevertButton, NodeLinkButton, NodeEnlargeButton, NodeShrinkButton, EdgeEditButton, EdgeRemoveButton, EdgeRevertButton, MiniFrame, Scene, ViewRepr){\n\n 'use strict';\n\n var Rkns = window.Rkns;\n\n if(typeof Rkns.Renderer === \"undefined\"){\n Rkns.Renderer = {};\n }\n var Renderer = Rkns.Renderer;\n\n Renderer._BaseRepresentation = BaseRepresentation;\n Renderer._BaseButton = BaseButton;\n Renderer.Node = NodeRepr;\n Renderer.Edge = Edge;\n Renderer.View = ViewRepr;\n Renderer.TempEdge = TempEdge;\n Renderer._BaseEditor = BaseEditor;\n Renderer.NodeEditor = NodeEditor;\n Renderer.EdgeEditor = EdgeEditor;\n Renderer._NodeButton = NodeButton;\n Renderer.NodeEditButton = NodeEditButton;\n Renderer.NodeRemoveButton = NodeRemoveButton;\n Renderer.NodeHideButton = NodeHideButton;\n Renderer.NodeShowButton = NodeShowButton;\n Renderer.NodeRevertButton = NodeRevertButton;\n Renderer.NodeLinkButton = NodeLinkButton;\n Renderer.NodeEnlargeButton = NodeEnlargeButton;\n Renderer.NodeShrinkButton = NodeShrinkButton;\n Renderer.EdgeEditButton = EdgeEditButton;\n Renderer.EdgeRemoveButton = EdgeRemoveButton;\n Renderer.EdgeRevertButton = EdgeRevertButton;\n Renderer.MiniFrame = MiniFrame;\n Renderer.Scene = Scene;\n\n startRenkan();\n});\n\ndefine(\"main-renderer\", function(){});\n\n// Module o use with jquery to handle no conflict. cf: http://requirejs.org/docs/jquery.html#noconflictmap\ndefine('jquery-private',['jquery'], function (jq) {\n 'use strict';\n return jq.noConflict( true );\n});\n\n"]} \ No newline at end of file +{"version":3,"sources":["templates.js","../../js/main.js","../../js/router.js","../../js/dataloader.js","../../js/models.js","../../js/defaults.js","../../js/i18n.js","../../js/full-json.js","../../js/save-once.js","../../js/ldtjson-bin.js","../../js/list-bin.js","../../js/wikipedia-bin.js","paper-renderer.js"],"names":["this","obj","__t","__p","__e","_","escape","print","__j","call","arguments","Array","prototype","join","options","show_edge_tooltip_color","edge","color","uri","title","show_edge_tooltip_uri","short_uri","show_edge_tooltip_nodes","renkan","translate","from_color","shortenText","from_title","to_color","to_title","show_edge_tooltip_creator","has_creator","created_by_color","created_by_title","show_edge_editor_uri","properties","length","each","ontology","label","property","show_edge_editor_style","show_edge_editor_style_color","colorPicker","show_edge_editor_style_dash","dash","show_edge_editor_style_thickness","thickness","show_edge_editor_style_arrow","arrow","show_edge_editor_direction","show_edge_editor_nodes","show_edge_editor_creator","Rkns","Utils","getFullURL","image","description","static_url","url","show_bins","show_editor","show_node_tooltip_color","node","show_node_tooltip_uri","show_node_tooltip_description","show_node_tooltip_image","show_node_tooltip_creator","_id","get_youtube_id","regExp","match","get_vimeo_id","get_dailymotion_id","undefined","get_facebook_id","encodeURIComponent","video_id","show_node_editor_title_richtext","show_node_title_style","title_color","title_size","toFixed","show_node_editor_uri","change_types","types","type","charAt","toUpperCase","substring","show_node_editor_description","show_node_editor_description_richtext","show_node_editor_size","size","show_node_editor_style","show_node_editor_style_color","show_node_editor_style_dash","show_node_editor_style_thickness","show_node_editor_image","image_placeholder","clip_path","allow_image_upload","show_node_editor_creator","change_shapes","shapes","shape","show_top_bar","editor_mode","title_editable","project","get","show_user_list","show_user_color","user_color_editable","home_button_url","home_button_title","show_fullscreen_button","show_addnode_button","show_addedge_button","show_export_button","show_save_button","show_open_button","show_bookmarklet","show_search_field","resize","show_zoom","save_view","hide_nodes","root","$","jQuery","pickerColors","__renkans","_BaseBin","_renkan","_opts","find","hide","addClass","appendTo","title_icon_$","_this","attr","href","html","click","destroy","slideDown","resizeBins","refresh","count_$","title_$","main_$","auto_refresh","window","setInterval","detach","Renkan","push","defaults","templates","renkanJST","node_editor_templates","template","types_templates","value","key","property_files","f","getJSON","data","concat","read_only","router","Router","Models","Project","dataloader","DataLoader","Loader","setCurrentUser","user_id","user_name","addUser","current_user","renderer","redrawUsers","container","tabs","search_engines","current_user_list","UsersList","on","pickerClass","_tmpl","map","c","Renderer","Scene","search","_select","_input","_form","_search","_key","Search","getSearchTitle","className","getBgClass","_el","setSearchEngine","submit","val","search_engine","mouseenter","mouseleave","bins","_bin","Bin","elementDropped","_mainDiv","siblings","is","slideUp","_e","_t","_models","where","_model","highlightModel","mouseout","unhighlightAll","e","dragDrop","err","preventDefault","touch","originalEvent","changedTouches","off","canvas_$","offset","w","width","h","height","pageX","left","pageY","top","onMouseMove","div","document","createElement","appendChild","cloneNode","dropData","text/html","innerHTML","onMouseDown","onMouseUp","dataTransfer","setData","lastsearch","lastval","regexpFromTextOrArray","source","tab","render","_text","i18n","language","substr","onStatusChange","listClasses","split","classes","i","_d","outerHeight","css","getUUID4","replace","r","Math","random","v","toString","OriginEnum","o","Object","freeze","NONE","NODE_BUTTON","NODE_DOUBLE_CLICK","NODE_DROP_EXT","NODE_DROP_BIN","EDGE_BUTTON_BAR","EDGE_BUTTON_CIRCLE","getUID","pad","n","Date","ID_AUTO_INCREMENT","ID_BASE","getUTCFullYear","getUTCMonth","getUTCDate","_base","_n","_uidbase","test","img","Image","src","res","inherit","_baseClass","_callbefore","_class","_arg","apply","slice","_init","_initialized","extend","replaceText","makeReplaceFunc","l","k","charsrx","txt","toLowerCase","remrx","j","remsrc","charsub","getSource","inp","removeChars","String","fromCharCode","RegExp","_textOrArray","testrx","replacerx","isempty","_replace","text","_MIN_DRAG_DISTANCE","_NODE_BUTTON_WIDTH","_EDGE_BUTTON_INNER","_EDGE_BUTTON_OUTER","_CLICKMODE_ADDNODE","_CLICKMODE_STARTEDGE","_CLICKMODE_ENDEDGE","_NODE_SIZE_STEP","LN2","_MIN_SCALE","_MAX_SCALE","_MOUSEMOVE_RATE","_DOUBLETAP_DELAY","_DOUBLETAP_DISTANCE","_USER_PLACEHOLDER","default_user_color","_BOOKMARKLET_CODE","_maxlength","drawEditBox","_options","_coords","_path","_xmargin","_selector","tooltip_width","tooltip_padding","rect","getBoundingClientRect","container_rect","bottom","overflow-x","overflow-y","max-height","_height","_isLeft","x","paper","view","center","_left","tooltip_arrow_length","_right","_top","y","tooltip_margin","max","tooltip_arrow_width","min","_bottom","segments","point","add","fillColor","Color","Gradient","tooltip_top_color","tooltip_bottom_color","increaseBrightness","hex","percent","parseInt","g","b","Backbone","routes","","index","parameters","result","forEach","part","item","decodeURIComponent","trigger","converters","from1to2","len","nodes","style","edges","schema_version","dataConverters","convert","schemaVersionFrom","getSchemaVersion","schemaVersionTo","converterName","load","set","validate","guid","RenkanModel","RelationalModel","idAttribute","constructor","id","prepare","addReference","_propName","_list","_default","_element","User","toJSON","Node","relations","HasOne","relatedModel","created_by","position","Edge","from","to","View","isArray","zoom_level","hidden_nodes","RosterUser","blacklist","HasMany","reverseRelation","includeInJSON","_props","_user","findOrCreate","addNode","_node","addEdge","_edge","addView","_view","removeNode","remove","removeEdge","_project","users","views","_item","t","version","initialize","filter","json","clone","attributes","Model","Collection","omit","site_id","model","navigator","userLanguage","popup_editor","editor_panel","manual_save","size_bug_fix","force_resize","allow_double_click","double_click_open_url","simple_click_open_url","zoom_on_scroll","element_delete_delay","autoscale_padding","view_force_autoscale","view_show_hiddennodes","default_index_view","url_parameters","update_url","user_name_editable","show_minimap","minimap_width","minimap_height","minimap_padding","minimap_background_color","minimap_border_color","minimap_highlight_color","minimap_highlight_weight","buttons_background","buttons_label_color","buttons_label_font_size","ghost_opacity","default_dash_array","show_node_circles","clip_node_images","node_images_fill_mode","node_size_base","node_stroke_width","node_stroke_max_width","selected_node_stroke_width","selected_node_stroke_max_width","node_stroke_witdh_scale","node_title_size_min","node_title_size_max","node_title_size_step","node_fill_color","highlighted_node_fill_color","node_title_color","node_label_distance","node_label_max_length","label_untitled_nodes","default","video","edge_stroke_width","edge_stroke_max_width","selected_edge_stroke_width","selected_edge_stroke_max_width","edge_stroke_witdh_scale","edge_label_distance","edge_label_max_length","edge_arrow_length","edge_arrow_width","edge_arrow_max_width","edge_gap_in_bundles","highlighted_edge_color","label_untitled_edges","tooltip_border_color","tooltip_border_width","tooltip_opacity","richtext_editor_config","toolbarGroups","name","groups","removePlugins","show_node_editor_title","uploaded_image_max_kb","fr","Edit Node","Edit Edge","Title:","URI:","Description:","From:","To:","Image URL:","Choose Image File:","Full Screen","Add Node","Add Edge","Save Project","Open Project","Auto-save enabled","Connection lost","Created by:","Zoom In","Zoom Out","Edit","Remove","Cancel deletion","Link to another node","Enlarge","Shrink","Click on the background canvas to add a node","Click on a first node to start the edge","Click on a second node to complete the edge","Wikipedia","Wikipedia in ","French","English","Japanese","Untitled project","Lignes de Temps","Loading, please wait","Edge color:","Dash:","Thickness:","Arrow:","Node color:","Choose color","Change edge direction","Do you really wish to remove node ","Do you really wish to remove edge ","This file is not an image","Image size must be under ","Size:","KB","Choose from vocabulary:","SKOS Documentation properties","has note","has example","has definition","SKOS Semantic relations","has broader","has narrower","has related","Dublin Core Metadata","has contributor","covers","created by","has date","published by","has source","has subject","Dragged resource","Search the Web","Search in Bins","Close bin","Refresh bin","(untitled)","Select contents:","Drag items from this website, drop them in Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.","Shapes available","Circle","Square","Diamond","Hexagone","Ellipse","Star","Cloud","Triangle","Polygon","Zoom Fit","Download Project","Save view","View saved view","Renkan 'Drag-to-Add' bookmarklet","(unknown user)","","Search in graph","Search in ","Show hidden nodes","Show neighbors","Hide","Fullscreen not supported by your browser","Title size:","Title color:","Video link","jsonIO","_proj","http_method","_load","loadingStatus","_data","saveStatus","_save","ajax","contentType","JSON","stringify","success","textStatus","jqXHR","_thrSave","throttle","setTimeout","changedAttributes","hasChanged","jsonIOSaveOnClick","_saveWarn","_onLeave","getdata","rx","matches","location","hash","beforeSend","_checkLeave","removeClass","save","hasClass","Ldt","ProjectBin","ldt_type","Resclass","console","error","tagTemplate","annotationTemplate","proj_id","project_id","ldt_platform","searchbase","highlight","convertTC","_ms","_res","_totalSeconds","abs","floor","_hours","_minutes","_seconds","_html","_projtitle","meta","count","tags","_tag","_title","htitle","encodedtitle","annotations","_annotation","_description","content","_duration","end","begin","_img","hdescription","start","duration","mediaid","media","annotationid","show","dataType","lang","_q","ResultsBin","segmentTemplate","max_results","highlightrx","objects","_segment","abstract","_begin","start_ts","_end","iri_id","element_id","format","q","limit","ResourceList","resultTemplate","list","trim","_match","langs","en","ja","query","_result","encodeURI","snippet","define","_BaseRepresentation","_renderer","_changeBinding","redraw","change","_removeBinding","removeRepresentation","defer","_selectBinding","select","_unselectBinding","unselect","_super","_func","moveTo","unhighlight","mousedown","mouseup","getUtils","getRenderer","requtils","BaseRepresentation","_BaseButton","_pos","sector","_newTarget","source_representation","cloud_path","builders","circle","getShape","Path","getImageShape","radius","rectangle","Rectangle","ellipse","polygon","RegularPolygon","diamond","d","SQRT2","rotate","star","cloud","path","scale","triangle","svg","ShapeBuilder","NodeRepr","node_layer","activate","buildShape","hidden","ghost","strokeWidth","h_ratio","labels_$","normal_buttons","NodeEditButton","NodeRemoveButton","NodeLinkButton","NodeEnlargeButton","NodeShrinkButton","NodeHideButton","NodeShowButton","pending_delete_buttons","NodeRevertButton","all_buttons","active_buttons","last_circle_radius","minimap","minimap_circle","__representation","miniframe","node_group","addChild","_getStrokeWidth","has","_getSelectedStrokeWidth","changed","shapeBuilder","sendToBack","_model_coords","Point","_baseRadius","exp","is_dragging","paper_coords","toPaperCoords","circle_radius","setSectorSize","node_image","subtract","image_delta","multiply","old_act_btn","opacity","dashArray","selected","isEditable","highlighted","clean_title","textContent","innerText","node_style","title-color","text_size","text_color","text_style","line-height","text_node","empty","append","_strokeWidth","_color","_dash","strokeColor","_pc","lastImage","showImage","minipos","toMinimapCoords","miniradius","minisize","Size","fitBounds","dontRedrawEdges","ed","repr","getRepresentationByModel","from_representation","to_representation","_image","image_cache","clipPath","hasClipPath","_clip","baseRadius","centerPoint","instructions","lastCoords","minX","Infinity","minY","maxX","maxY","transformCoords","tabc","relative","newCoords","parseFloat","isY","instr","coords","lineTo","cubicCurveTo","quadraticCurveTo","_raster","Raster","locked","Group","clipped","_circleClip","divide","insertAbove","paperShift","_delta","openEditor","removeRepresentationsOfType","_editor","addRepresentation","draw","clearTimeout","hide_timeout","_uri","showNeighbors","hideButtons","buttons_timeout","hideNeighbors","hide_delay","delay","indexNode","hiddenNodes","indexOf","splice","textToReplace","hlvalue","throttledPaperDraw","saveCoords","toModelCoords","_event","_isTouch","unselectAll","click_target","edge_layer","bundle","addToBundles","line","arrow_scale","pivot","arrow_angle","EdgeEditButton","EdgeRemoveButton","EdgeRevertButton","minimap_line","_getArrowScale","_opacity","_arrow_scale","_p0a","_p1a","_v","_r","_u","_ortho","_group_pos","getPosition","_p0b","_p1b","_a","angle","_textdelta","_handle","visible","handleIn","handleOut","bounds","_textpos","transform","-moz-transform","-webkit-transform","text_angle","reject","TempEdge","origin","_p0","_p1","end_pos","_c","_hitResult","hitTest","findTarget","_endDrag","_target","_destmodel","_BaseEditor","buttons_layer","editor_block","_pts","range","editor_$","BaseEditor","CKEditor","NodeEditor","readOnlyTemplate","_created_by","_template","_image_placeholder","_size","keys","editorInstance","inline","editorInstanceTitle","closeEditor","cleanEditor","focusManager","blur","onFieldChange","debounce","checkDirty","getData","resetDirty","assign","keyCode","files","FileReader","alert","onload","target","readAsDataURL","focus","_picker","hover","shiftSize","_newsize","shiftThickness","_oldThickness","_newThickness","shiftTitleSize","_oldTitleSize","_newTitleSize","_pickerTitle","step","titlehtml","EdgeEditor","_from_model","_to_model","BaseButton","_NodeButton","sectorInner","lastSectorInner","drawSector","startAngle","endAngle","imageName","NodeButton","delid","delete_list","time","valueOf","confirm","addHiddenNode","unset","_off","_point","addTempEdge","MiniFrame","filesaver","Screenfull","representations","notif_$","setup","totalScroll","mouse_down","selected_target","Layer","redrawActive","background_layer","topleft","bottomRight","cliprectangle","bundles","click_mode","_allowScroll","_originalScale","_zooming","_lastTapX","_lastTapY","_lastTap","icon_cache","imgname","throttledMouseMove","mousemove","mousewheel","onScroll","touchstart","_touches","touches","pow","onDoubleClick","touchmove","_newScale","_scaleRatio","_newOffset","setScale","touchend","onClick","dblclick","dragover","dragenter","dragleave","drop","parse","bindClick","selector","fname","evt","enabled","addEventListener","raw","fullscreenchange","widthAft","heightAft","viewSize","currentWidth","currentHeight","isFullscreen","onResize","newWidth","_width","newHeight","prevHeight","delta","prevWidth","fadeIn","fadeOut","mouseover","_thRedraw","addRepresentations","prop","_thRedrawUsers","history","fixSize","_params","setViewParameters","el","_delay","autoScale","$cpwrapper","$cplist","$this","rxs","_now","findWhere","delete_scheduled","rescaleMinimap","last","_repr","_inR","_outR","_startAngle","_endAngle","_padding","_imgname","_caption","_startRads","PI","_endRads","_startdx","sin","_startdy","cos","_startXIn","_startYIn","_startXOut","_startYOut","_enddx","_enddy","_endXIn","_endYIn","_endXOut","_endYOut","_centerR","_centerRads","_centerX","_centerY","_centerXIn","_centerXOut","_centerYIn","_centerYOut","_textX","_textY","arcTo","closed","PointText","characterStyle","fontSize","paragraphStyle","justification","_visible","_restPos","_grp","_imgdelta","_currentPos","_edgeRepr","_bundle","_er","_dir","savebtn","tip","redrawMiniframe","bottomright","_xx","_yy","_minx","_miny","_maxx","_maxy","_scale","at","_type","RendererType","_collection","userTemplate","allUsers","models","ulistHtml","$userpanel","$name","$cpitems","$colorsquare","$input","parent","background","_representation","_representations","_ratio","ratioH","ratioW","resizeZoom","_from","_origin","_tmpEdge","last_point","updateUrl","_scrolldelta","SQRT1_2","_open_uri_cb","_node_click_open_url","open","bind","defaultDropHandler","newNode","tweetdiv","_svgimgs","_svgpaths","_imgs","_as","fields","drop_enhancer","jsondata","drop_handler","_nodedata","fullScreen","toggle","addNodeBtn","addEdgeBtn","exportProject","projectJSON","projectId","fileNameToSaveAs","space_id","objId","idsMap","projectJSONStr","blob","Blob","isEmptyObject","validViewIndex","viewIndex","viewParams","params","viewsNodes","hideNodes","showNodes","_index","validIndex","foldBins","sizeAft","foldBinsButton","sizeBef","animate","ViewRepr","initialScale","initWithParams","saveView","hideNode","_offset","zoomOut","zoomIn","deltaW","deltaH","force_view","getFragment","round","navigate","param","require","config","paths","jquery","underscore","jquery-private","ckeditor-core","screenfull","*","shim","exports","startRenkan","jq","noConflict"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAA,KAAgB,UAAIA,KAAgB,cAEpCA,KAAgB,UAAE,8BAAgC,SAASC,KAC3DA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,oBACS,OAAdD,IAAM,GAAe,GAAKA,KAC5B,yBACgB,OAAdA,IAAM,GAAe,GAAKA,KAC5B,SAGA,OAAOC,MAGPH,KAAgB,UAAE,sCAAwC,SAASC,KAGnE,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,yDACFW,QAAQC,0BACbZ,KAAO,2DACPC,IAAKY,KAAKC,OACV,oBAEAd,KAAO,kDACFa,KAAKE,MACVf,KAAO,0BACPC,IAAIY,KAAKE,KACT,gCAEAf,KAAO,aACPC,IAAIY,KAAKG,OACT,aACKH,KAAKE,MACVf,KAAO,UAEPA,KAAO,yBACFW,QAAQM,uBAAyBJ,KAAKE,MAC3Cf,KAAO,sDACPC,IAAIY,KAAKE,KACT,qBACAd,IAAKY,KAAKK,WACV,oBAEAlB,KAAO,SACwB,OAA7BD,IAAOc,KAAgB,aAAa,GAAKd,KAC3C,SACKY,QAAQQ,0BACbnB,KAAO,oDACPC,IAAImB,OAAOC,UAAU,UACrB,kEACApB,IAAKY,KAAKS,YACV,uBACArB,IAAKsB,YAAYV,KAAKW,WAAY,KAClC,8DACAvB,IAAImB,OAAOC,UAAU,QACrB,kEACApB,IAAKY,KAAKY,UACV,uBACAxB,IAAKsB,YAAYV,KAAKa,SAAU,KAChC,gBAEA1B,KAAO,KACFW,QAAQgB,2BAA6Bd,KAAKe,cAC/C5B,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,kEACApB,IAAKY,KAAKgB,kBACV,uBACA5B,IAAKsB,YAAYV,KAAKiB,iBAAkB,KACxC,gBAEA9B,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,6BAA+B,SAASC,KAG1D,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,mDACPC,IAAImB,OAAOC,UAAU,cACrB,mCACApB,IAAImB,OAAOC,UAAU,WACrB,iEACApB,IAAIY,KAAKG,OACT,eACKL,QAAQoB,uBACb/B,KAAO,6BACPC,IAAImB,OAAOC,UAAU,SACrB,mEACApB,IAAIY,KAAKE,KACT,+CACAd,IAAIY,KAAKE,KACT,yCACKJ,QAAQqB,WAAWC,SACxBjC,KAAO,qCACPC,IAAImB,OAAOC,UAAU,4BACrB,8EACCnB,EAAEgC,KAAKvB,QAAQqB,WAAY,SAASG,GACrCnC,KAAO,qGACPC,IAAKmB,OAAOC,UAAUc,EAASC,QAC/B,wDACClC,EAAEgC,KAAKC,EAASH,WAAY,SAASK,GAAY,GAAItB,GAAMoB,EAAS,YAAcE,EAAStB,GAC5Ff,MAAO,gFACPC,IAAKc,GACL,kCACKA,IAAQF,KAAKE,MAClBf,KAAO,aAEPA,KAAO,kCACPC,IAAKmB,OAAOC,UAAUgB,EAASD,QAC/B,8DAEApC,KAAO,uBAEPA,KAAO,4CAEPA,KAAO,KACFW,QAAQ2B,yBACbtC,KAAO,0CACFW,QAAQ4B,+BACbvC,KAAO,+EACPC,IAAImB,OAAOC,UAAU,gBACrB,2OACiE,OAA/DtB,IAAQqB,OAAOoB,YAAY,+BAA2C,GAAKzC,KAC7E,wDACAE,IAAKmB,OAAOC,UAAU,iBACtB,iDAEArB,KAAO,WACFW,QAAQ8B,8BACbzC,KAAO,8EACPC,IAAImB,OAAOC,UAAU,UACrB,oFACApB,IAAKY,KAAK6B,MACV,6BAEA1C,KAAO,WACFW,QAAQgC,mCACb3C,KAAO,qFACPC,IAAImB,OAAOC,UAAU,eACrB,qKACApB,IAAKY,KAAK+B,WACV,iHAEA5C,KAAO,WACFW,QAAQkC,+BACb7C,KAAO,+EACPC,IAAImB,OAAOC,UAAU,WACrB,sFACApB,IAAKY,KAAKiC,OACV,6BAEA9C,KAAO,kBAEPA,KAAO,KACFW,QAAQoC,6BACb/C,KAAO,sDACPC,IAAKmB,OAAOC,UAAU,0BACtB,uBAEArB,KAAO,KACFW,QAAQqC,yBACbhD,KAAO,oDACPC,IAAImB,OAAOC,UAAU,UACrB,kEACApB,IAAIY,KAAKS,YACT,uBACArB,IAAKsB,YAAYV,KAAKW,WAAY,KAClC,8DACAvB,IAAImB,OAAOC,UAAU,QACrB,wGACApB,IAAKsB,YAAYV,KAAKa,SAAU,KAChC,gBAEA1B,KAAO,KACFW,QAAQsC,0BAA4BpC,KAAKe,cAC9C5B,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,mHACApB,IAAKsB,YAAYV,KAAKiB,iBAAkB,KACxC,gBAEA9B,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,iDAAmD,SAASC,KAC9EA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,6DACPC,IAAKiD,KAAKC,MAAMC,WAAWC,QAC3B,qBAC2B,OAAzBtD,IAAM,cAA0B,GAAKA,KACvC,iCACsB,OAApBA,IAAM,SAAqB,GAAKA,KAClC,SAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,sBACAE,IAAIe,OACJ,uBACAf,IAAIqD,aACJ,uDACoB,OAAlBvD,IAAM,OAAmB,GAAKA,KAChC,kBACqB,OAAnBA,IAAM,QAAoB,GAAKA,KACjC,kBAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,wBACoB,OAAlBA,IAAM,OAAmB,GAAKA,KAChC,WACkB,OAAhBA,IAAM,KAAiB,GAAKA,KAC9B,gBACuB,OAArBA,IAAM,UAAsB,GAAKA,KACnC,iDAGA,OAAOC,MAGPH,KAAgB,UAAE,8CAAgD,SAASC,KAC3EA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,6DACPC,IAAKiD,KAAKC,MAAMC,WAAWC,QAC3B,qBAC2B,OAAzBtD,IAAM,cAA0B,GAAKA,KACvC,iCACsB,OAApBA,IAAM,SAAqB,GAAKA,KAClC,SAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,sBACAE,IAAIe,OACJ,uBACAf,IAAIqD,aACJ,uDACoB,OAAlBvD,IAAM,OAAmB,GAAKA,KAChC,kBACqB,OAAnBA,IAAM,QAAoB,GAAKA,KACjC,kBAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,wBACoB,OAAlBA,IAAM,OAAmB,GAAKA,KAChC,WACkB,OAAhBA,IAAM,KAAiB,GAAKA,KAC9B,gBACuB,OAArBA,IAAM,UAAsB,GAAKA,KACnC,iDAGA,OAAOC,MAGPH,KAAgB,UAAE,0CAA4C,SAASC,KACvEA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,6DACPC,IAAKiD,KAAKC,MAAMC,WAAWG,WAAW,oBACtC,qBAC2B,OAAzBxD,IAAM,cAA0B,GAAKA,KACvC,yCAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,gCACAE,IAAIe,OACJ,6BACAf,IAAIe,OACJ,iDACAf,IAAIsD,YACJ,iCACqB,OAAnBxD,IAAM,QAAoB,GAAKA,KACjC,kDAGA,OAAOC,MAGPH,KAAgB,UAAE,2BAA6B,SAASC,KAGxD,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,gFACPC,IAAIuD,KACJ,iBACAvD,IAAIe,OACJ,4BACAf,IAAIqD,aACJ,UAEAtD,KADKqD,MACE,yBACPpD,IAAKiD,KAAKC,MAAMC,WAAWC,QAC3B,UAEO,gCAEPrD,KAAO,MACFqD,QACLrD,KAAO,iDACPC,IAAIoD,OACJ,UAEArD,KAAO,6CACFwD,MACLxD,KAAO,sBACPC,IAAIuD,KACJ,4BAEAxD,KAAO,UACc,OAAnBD,IAAM,QAAoB,GAAKA,KACjC,SACKyD,MACLxD,KAAO,QAEPA,KAAO,oBACFsD,cACLtD,KAAO,qDACoB,OAAzBD,IAAM,cAA0B,GAAKA,KACvC,cAEAC,KAAO,SACFqD,QACLrD,KAAO,oDAEPA,KAAO,WAGP,OAAOA,MAGPH,KAAgB,UAAE,uBAAyB,SAASC,KAGpD,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAEDa,QAAQ8C,YACbzD,KAAO,0GACPC,IAAKoB,UAAU,qBACf,2LACApB,IAAKoB,UAAU,mBACf,0TACApB,IAAKoB,UAAU,mBACf,iNACApB,IAAKoB,UAAU,mBACf,2JACApB,IAAKoB,UAAU,mBACf,kGAEArB,KAAO,IACFW,QAAQ+C,cACb1D,KAAO,yCAEPA,KADKW,QAAQ8C,UACN,QAEA,OAEPzD,KAAO,cAEPA,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,sCAAwC,SAASC,KAGnE,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IACNE,KAAO,yDACFW,QAAQgD,0BACb3D,KAAO,2DACPC,IAAI2D,KAAK9C,OACT,oBAEAd,KAAO,kDACF4D,KAAK7C,MACVf,KAAO,0BACPC,IAAI2D,KAAK7C,KACT,gCAEAf,KAAO,cACkB,OAAvBD,IAAO6D,KAAU,OAAa,GAAK7D,KACrC,aACK6D,KAAK7C,MACVf,KAAO,QAEPA,KAAO,yBACF4D,KAAK7C,KAAOJ,QAAQkD,wBACzB7D,KAAO,sDACPC,IAAI2D,KAAK7C,KACT,qBACAd,IAAI2D,KAAK1C,WACT,oBAEAlB,KAAO,IACFW,QAAQmD,gCACb9D,KAAO,4CACwB,OAA7BD,IAAO6D,KAAgB,aAAa,GAAK7D,KAC3C,UAEAC,KAAO,IACF4D,KAAKP,OAAS1C,QAAQoD,0BAC3B/D,KAAO,iDACPC,IAAI2D,KAAKP,OACT,UAEArD,KAAO,IACF4D,KAAKhC,aAAejB,QAAQqD,4BACjChE,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,kEACApB,IAAI2D,KAAK/B,kBACT,uBACA5B,IAAKsB,YAAYqC,KAAK9B,iBAAkB,KACxC,gBAEA9B,KAAO,yBACPC,IAAI2D,KAAKK,KACT,KACAhE,IAAImB,OAAOC,UAAU,qBACrB,QAGA,OAAOrB,MAGPH,KAAgB,UAAE,mCAAqC,SAASC,KAGhE,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAI9C,QAAS2D,gBAAeV,GACpB,GAAIW,GAAS,mEACTC,EAAQZ,EAAIY,MAAMD,EACtB,UAAIC,GAA4B,IAAnBA,EAAM,GAAGnC,SACXmC,EAAM,GAMrB,QAASC,cAAab,GAClB,GAAIW,GAAS,4CAETC,EAAQZ,EAAIY,MAAMD,EAEtB,SAAIC,GACOA,EAAM,GAMrB,QAASE,oBAAmBd,GACxB,GAAIW,GAAS,6GAETC,EAAQZ,EAAIY,MAAMD,EAEtB,SAAIC,IACgBG,SAAbH,EAAM,GACEA,EAAM,GAEVA,EAAM,IAKrB,QAASI,iBAAgBhB,GACrB,GAAIW,GAAS,6EAETC,EAAQZ,EAAIY,MAAMD,EAEtB,SAAIC,GACOK,mBAAmBjB,GAhDlC1D,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAAK,CAsEV,GAnBDE,KAAO,2DACFW,QAAQgD,0BACb3D,KAAO,2DACPC,IAAI2D,KAAK9C,OACT,oBAEAd,KAAO,kDACF4D,KAAK7C,MACVf,KAAO,0BACPC,IAAI2D,KAAK7C,KACT,gCAEAf,KAAO,cACkB,OAAvBD,IAAO6D,KAAU,OAAa,GAAK7D,KACrC,aACK6D,KAAK7C,MACVf,KAAO,QAEPA,KAAO,yBACF4D,KAAK7C,KAAOJ,QAAQkD,sBAAuB,CAC5C,GAAIa,WAAW,CAEnB1E,OADO0E,SAAWR,eAAeN,KAAK7C,MAC/B,kFACgB,OAArBhB,IAAM,UAAsB,GAAKA,KACnC,oDACAE,IAAI2D,KAAK7C,KACT,qBACAd,IAAImB,OAAOC,UAAU,SACrB,kBAEYqD,SAAWL,aAAaT,KAAK7C,MAClC,0DACgB,OAArBhB,IAAM,UAAsB,GAAKA,KACnC,sIACAE,IAAI2D,KAAK7C,KACT,qBACAd,IAAImB,OAAOC,UAAU,SACrB,kBAEYqD,SAAWJ,mBAAmBV,KAAK7C,MACxC,4GACgB,OAArBhB,IAAM,UAAsB,GAAKA,KACnC,kEACAE,IAAI2D,KAAK7C,KACT,qBACAd,IAAImB,OAAOC,UAAU,SACrB,kBAEYqD,SAAWF,gBAAgBZ,KAAK7C,MACrC,2EACgB,OAArBhB,IAAM,UAAsB,GAAKA,KACnC,2NACAE,IAAI2D,KAAK7C,KACT,qBACAd,IAAImB,OAAOC,UAAU,eACrB,iBAGO,kFACPpB,IAAI2D,KAAK7C,KACT,8CAIAf,KAAO,2BACPC,IAAI2D,KAAKK,KACT,KACAhE,IAAImB,OAAOC,UAAU,qBACrB,SAGA,MAAOrB,MAGPH,KAAgB,UAAE,6BAA+B,SAASC,KAG1D,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAGNE,KAAO,qDACPC,IAAImB,OAAOC,UAAU,cACrB,mCACApB,IAAImB,OAAOC,UAAU,WACrB,iBAEArB,KADKW,QAAQgE,gCACN,iFACP1E,IAAI2D,KAAKK,KACT,OACyB,OAAvBlE,IAAO6D,KAAU,OAAa,GAAK7D,KACrC,eAEO,6DACPE,IAAI2D,KAAK5C,OACT,aAEAhB,KAAO,WACFW,QAAQiE,wBACb5E,KAAO,qJACPC,IAAImB,OAAOC,UAAU,iBACrB,uEACApB,IAAI2D,KAAKiB,aACT,kGACkE,OAAhE9E,IAAQqB,OAAOoB,YAAY,gCAA4C,GAAKzC,KAC9E,6GACAE,IAAImB,OAAOC,UAAU,gBACrB,2KACApB,IAAI2D,KAAKkB,WAAWC,QAAQ,IAC5B,4HAEA/E,KAAO,IACFW,QAAQqE,uBACbhF,KAAO,6BACPC,IAAImB,OAAOC,UAAU,SACrB,mEACApB,IAAI2D,KAAK7C,KACT,+CACAd,IAAI2D,KAAK7C,KACT,sCAEAf,KAAO,IACFW,QAAQsE,eACbjF,KAAO,6BACPC,IAAImB,OAAOC,UAAU,oBACrB,+DACCnB,EAAEgC,KAAKgD,MAAO,SAASC,GACxBnF,KAAO,oEACPC,IAAKkF,GACL,IACKvB,KAAKuB,OAASA,IACnBnF,KAAO,aAEPA,KAAO,sBACPC,IAAKmB,OAAOC,UAAU8D,EAAKC,OAAO,GAAGC,cAAgBF,EAAKG,UAAU,KACpE,wCAEAtF,KAAO,mCAEPA,KAAO,IACFW,QAAQ4E,+BACbvF,KAAO,6BACPC,IAAImB,OAAOC,UAAU,iBACrB,qBAEArB,KADKW,QAAQ6E,sCACN,iGACPvF,IAAI2D,KAAKK,KACT,MAC+B,OAA7BlE,IAAO6D,KAAgB,aAAa,GAAK7D,KAC3C,mBAEO,wDACwB,OAA7BA,IAAO6D,KAAgB,aAAa,GAAK7D,KAC3C,wBAEAC,KAAO,gBAEPA,KAAO,IACFW,QAAQ8E,wBACbzF,KAAO,oDACPC,IAAImB,OAAOC,UAAU,UACrB,uJACApB,IAAI2D,KAAK8B,MACT,gGAEA1F,KAAO,IACFW,QAAQgF,yBACb3F,KAAO,0CACFW,QAAQiF,+BACb5F,KAAO,yFACPC,IAAImB,OAAOC,UAAU,gBACrB,0HACApB,IAAI2D,KAAK9C,OACT,kGACiE,OAA/Df,IAAQqB,OAAOoB,YAAY,+BAA2C,GAAKzC,KAC7E,wDACAE,IAAKmB,OAAOC,UAAU,iBACtB,iDAEArB,KAAO,WACFW,QAAQkF,8BACb7F,KAAO,8EACPC,IAAImB,OAAOC,UAAU,UACrB,oFACApB,IAAK2D,KAAKlB,MACV,6BAEA1C,KAAO,WACFW,QAAQmF,mCACb9F,KAAO,qFACPC,IAAImB,OAAOC,UAAU,eACrB,qKACApB,IAAI2D,KAAKhB,WACT,iHAEA5C,KAAO,kBAEPA,KAAO,IACFW,QAAQoF,yBACb/F,KAAO,wGACPC,IAAI2D,KAAKP,OAASO,KAAKoC,mBACvB,qBACKpC,KAAKqC,YACVjG,KAAO,yNACPC,IAAK2D,KAAKqC,WACV,8CAEAjG,KAAO,yDACPC,IAAImB,OAAOC,UAAU,eACrB,iJACApB,IAAI2D,KAAKP,OACT,mCACK1C,QAAQuF,qBACblG,KAAO,6BACPC,IAAImB,OAAOC,UAAU,uBACrB,oGAIArB,KAAO,IACFW,QAAQwF,0BAA4BvC,KAAKhC,cAC9C5B,KAAO,oDACPC,IAAImB,OAAOC,UAAU,gBACrB,kEACApB,IAAI2D,KAAK/B,kBACT,uBACA5B,IAAKsB,YAAYqC,KAAK9B,iBAAkB,KACxC,gBAEA9B,KAAO,IACFW,QAAQyF,gBACbpG,KAAO,6BACPC,IAAImB,OAAOC,UAAU,qBACrB,gEACCnB,EAAEgC,KAAKmE,OAAQ,SAASC,GACzBtG,KAAO,oEACPC,IAAKqG,GACL,IACK1C,KAAK0C,QAAUA,IACpBtG,KAAO,aAEPA,KAAO,sBACPC,IAAKmB,OAAOC,UAAUiF,EAAMlB,OAAO,GAAGC,cAAgBiB,EAAMhB,UAAU,KACtE,wCAEAtF,KAAO,mCAEPA,KAAO,IAGP,OAAOA,MAGPH,KAAgB,UAAE,wBAA0B,SAASC,KAGrD,QAASM,SAAUJ,KAAOK,IAAIC,KAAKC,UAAW,IAF9CT,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,OAAQE,IAAMG,MAAMC,UAAUC,IAEzD,MAAMZ,IAEDa,QAAQ4F,eACbvG,KAAO,8EAMPA,KALMW,QAAQ6F,aAAgB7F,QAAQ8F,eAK/B,+DACPxG,IAAKyG,QAAQC,IAAI,UAAY,IAC7B,kBACA1G,IAAIoB,UAAU,qBACd,iBARO,2DACPpB,IAAKyG,QAAQC,IAAI,UAAYtF,UAAU,qBACvC,gCAQArB,KAAO,aACFW,QAAQiG,iBACb5G,KAAO,2GACFW,QAAQkG,kBACb7G,KAAO,qKACFW,QAAQmG,sBACb9G,KAAO,0GAEPA,KAAO,sEACFW,QAAQmG,qBAAuB1G,MAAMoC,YAAY,+BACtDxC,KAAO,0DAEPA,KAAO,4LAEPA,KAAO,aACFW,QAAQoG,kBACb/G,KAAO,uHACPC,IAAKU,QAAQoG,iBACb,8IACA9G,IAAKoB,UAAUV,QAAQqG,oBACvB,oFAEAhH,KAAO,aACFW,QAAQsG,yBACbjH,KAAO,kQACPC,IAAIoB,UAAU,gBACd,sFAEArB,KAAO,aACFW,QAAQ6F,aACbxG,KAAO,iBACFW,QAAQuG,sBACblH,KAAO,mRACPC,IAAIoB,UAAU,aACd,sGAEArB,KAAO,iBACFW,QAAQwG,sBACbnH,KAAO,mRACPC,IAAIoB,UAAU,aACd,sGAEArB,KAAO,iBACFW,QAAQyG,qBACbpH,KAAO,kRACPC,IAAIoB,UAAU,qBACd,sGAEArB,KAAO,iBACFW,QAAQ0G,mBACbrH,KAAO,2TAEPA,KAAO,iBACFW,QAAQ2G,mBACbtH,KAAO,gRACPC,IAAIoB,UAAU,iBACd,sGAEArB,KAAO,iBACFW,QAAQ4G,mBACbvH,KAAO,8RACPC,IAAIoB,UAAU,qCACd,6JAEArB,KAAO,eAEPA,KAAO,iBACFW,QAAQyG,qBACbpH,KAAO,kRACPC,IAAIoB,UAAU,qBACd,+JAEArB,KAAO,cAEPA,KAAO,aACFW,QAAQ6G,oBACbxH,KAAO,+IACPC,IAAKoB,UAAU,oBACf,4FAEArB,KAAO,kBAEPA,KAAO,iCACDW,QAAQ4F,eACdvG,KAAO,0BAEPA,KAAO,wEACFW,QAAQ8G,SACbzH,KAAO,eAEPA,KAAO,+FACFW,QAAQ8C,YACbzD,KAAO,mEAEPA,KAAO,aACFW,QAAQ+G,YACb1H,KAAO,6FACPC,IAAIoB,UAAU,YACd,4DACApB,IAAIoB,UAAU,aACd,4DACApB,IAAIoB,UAAU,aACd,6BACKV,QAAQ6F,aAAe7F,QAAQgH,YACpC3H,KAAO,yDACPC,IAAIoB,UAAU,cACd,8BAEArB,KAAO,qBACFW,QAAQgH,YACb3H,KAAO,6DACPC,IAAIoB,UAAU,oBACd,iCACKV,QAAQiH,aACb5H,KAAO,iEACPC,IAAIoB,UAAU,sBACd,kCAEArB,KAAO,6BAEPA,KAAO,kCAEPA,KAAO,wBAGP,OAAOA,MAGPH,KAAgB,UAAE,yBAA2B,SAASC,KACtDA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,eACmB,OAAxBD,IAAM,WAAyB,GAAKA,KACtC,gBACoB,OAAlBA,IAAM,KAAmB,GAAKA,KAChC,MACsB,OAApBA,IAAM,OAAqB,GAAKA,KAClC,OAGA,OAAOC,MAGPH,KAAgB,UAAE,+CAAiD,SAASC,KAC5EA,MAAQA,OACR,IAAIC,KAAKC,IAAM,GAAIC,IAAMC,EAAEC,MAC3B,MAAML,IACNE,KAAO,+EACPC,IAAIuD,KACJ,4BACAvD,IAAIe,OACJ,4BACAf,IAAIqD,aACJ,sBACArD,IAAKiD,KAAKC,MAAMC,WAAYG,WAAa,sBACzC,iDACAtD,IAAIsD,YACJ,8EACAtD,IAAIuD,KACJ,sBACqB,OAAnBzD,IAAM,QAAoB,GAAKA,KACjC,yDAC2B,OAAzBA,IAAM,cAA0B,GAAKA,KACvC,eAGA,OAAOC,MCn6BP,SAAU6H,GAEN,YAEyB,iBAAdA,GAAK3E,OACZ2E,EAAK3E,QAGT,IAAIA,GAAO2E,EAAK3E,KACZ4E,EAAI5E,EAAK4E,EAAID,EAAKE,OAClB7H,EAAIgD,EAAKhD,EAAI2H,EAAK3H,CAEtBgD,GAAK8E,cAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC9F,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAC7E,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAGjF9E,EAAK+E,YAEL,IAAIC,GAAWhF,EAAKgF,SAAW,SAASC,EAASC,GAC7C,GAAuB,mBAAZD,GAAyB,CAChCtI,KAAKuB,OAAS+G,EACdtI,KAAKuB,OAAO0G,EAAEO,KAAK,gBAAgBC,OACnCzI,KAAKiI,EAAI5E,EAAK4E,EAAE,QACXS,SAAS,UACTC,SAASL,EAAQL,EAAEO,KAAK,iBAC7BxI,KAAK4I,aAAevF,EAAK4E,EAAE,UACtBS,SAAS,qBACTC,SAAS3I,KAAKiI,EAEnB,IAAIY,GAAQ7I,IAEZqD,GAAK4E,EAAE,OACFa,MACGC,KAAM;AACN5H,MAAOmH,EAAQ9G,UAAU,eAE5BkH,SAAS,gBACTM,KAAK,WACLL,SAAS3I,KAAKiI,GACdgB,MAAM,WAMH,MALAJ,GAAMK,UACDZ,EAAQL,EAAEO,KAAK,wBAAwBpG,QACxCkG,EAAQL,EAAEO,KAAK,qBAAqBW,YAExCb,EAAQc,cACD,IAEf/F,EAAK4E,EAAE,OACFa,MACGC,KAAM,IACN5H,MAAOmH,EAAQ9G,UAAU,iBAE5BkH,SAAS,kBACTC,SAAS3I,KAAKiI,GACdgB,MAAM,WAEH,MADAJ,GAAMQ,WACC,IAEfrJ,KAAKsJ,QAAUjG,EAAK4E,EAAE,SACjBS,SAAS,gBACTC,SAAS3I,KAAKiI,GACnBjI,KAAKuJ,QAAUlG,EAAK4E,EAAE,QACjBS,SAAS,gBACTC,SAAS3I,KAAKiI,GACnBjI,KAAKwJ,OAASnG,EAAK4E,EAAE,SAChBS,SAAS,eACTC,SAAS3I,KAAKiI,GACde,KAAK,8BAAgCV,EAAQ9G,UAAU,wBAA0B,SACtFxB,KAAKuJ,QAAQP,KAAKT,EAAMpH,OAAS,aACjCnB,KAAKuB,OAAO6H,aAERb,EAAMkB,cACNC,OAAOC,YAAY,WACfd,EAAMQ,WACPd,EAAMkB,eAKrBpB,GAASzH,UAAUsI,QAAU,WACzBlJ,KAAKiI,EAAE2B,SACP5J,KAAKuB,OAAO6H,aAKhB,IAAIS,GAASxG,EAAKwG,OAAS,SAAStB,GAChC,GAAIM,GAAQ7I,IAEZqD,GAAK+E,UAAU0B,KAAK9J,MAEpBA,KAAKc,QAAUT,EAAE0J,SAASxB,EAAOlF,EAAK0G,UAClCC,UAAW3J,EAAE0J,SAASxB,EAAMyB,UAAWC,YAAcA,UACrDC,sBAAuB7J,EAAE0J,SAASxB,EAAM2B,sBAAuB7G,EAAK0G,SAASG,yBAEjFlK,KAAKmK,SAAWnK,KAAKc,QAAQkJ,UAAU,sBAEvC,IAAII,KA6DJ,IA5DA/J,EAAEgC,KAAKrC,KAAKc,QAAQoJ,sBAAuB,SAASG,EAAOC,GACvDF,EAAgBE,GAAOzB,EAAM/H,QAAQkJ,UAAUK,SACxCxB,GAAM/H,QAAQkJ,UAAUK,KAEnCrK,KAAKc,QAAQoJ,sBAAwBE,EAErC/J,EAAEgC,KAAKrC,KAAKc,QAAQyJ,eAAgB,SAASC,GACzCnH,EAAK4E,EAAEwC,QAAQD,EAAG,SAASE,GACvB7B,EAAM/H,QAAQqB,WAAa0G,EAAM/H,QAAQqB,WAAWwI,OAAOD,OAInE1K,KAAK4K,UAAY5K,KAAKc,QAAQ8J,YAAc5K,KAAKc,QAAQ6F,YAEzD3G,KAAK6K,OAAS,GAAIxH,GAAKyH,OAEvB9K,KAAK6G,QAAU,GAAIxD,GAAK0H,OAAOC,QAC/BhL,KAAKiL,WAAa,GAAI5H,GAAK6H,WAAWC,OAAOnL,KAAK6G,QAAS7G,KAAKc,SAEhEd,KAAKoL,eAAiB,SAASC,EAASC,GACpCtL,KAAK6G,QAAQ0E,SACTnH,IAAKiH,EACLlK,MAAOmK,IAEXtL,KAAKwL,aAAeH,EACpBrL,KAAKyL,SAASC,eAGkB,mBAAzB1L,MAAKc,QAAQuK,UACpBrL,KAAKwL,aAAexL,KAAKc,QAAQuK,SAErCrL,KAAKiI,EAAI5E,EAAK4E,EAAE,IAAMjI,KAAKc,QAAQ6K,WACnC3L,KAAKiI,EACAS,SAAS,WACTM,KAAKhJ,KAAKmK,SAASnK,OAExBA,KAAK4L,QACL5L,KAAK6L,kBAEL7L,KAAK8L,kBAAoB,GAAIzI,GAAK0H,OAAOgB,UAEzC/L,KAAK8L,kBAAkBE,GAAG,aAAc,WAChChM,KAAKyL,UACLzL,KAAKyL,SAASC,gBAItB1L,KAAK2C,YAAc,SAASsJ,GACxB,GAAIC,GAAQrD,EAAM/H,QAAQkJ,UAAU,6BACpC,OAAO,kCAAkCiC,EAAY,KAAO5I,EAAK8E,aAAagE,IAAI,SAASC,GACvF,MAAOF,IACHE,EAAGA,MAERvL,KAAK,IAAM,SAGdb,KAAKc,QAAQ+C,cACb7D,KAAKyL,SAAW,GAAIpI,GAAKgJ,SAASC,MAAMtM,OAGvCA,KAAKc,QAAQyL,OAAOnK,OAElB,CACH,GAAI8J,GAAQrD,EAAM/H,QAAQkJ,UAAU,yBAChCwC,EAAUxM,KAAKiI,EAAEO,KAAK,mBACtBiE,EAASzM,KAAKiI,EAAEO,KAAK,wBACrBkE,EAAQ1M,KAAKiI,EAAEO,KAAK,sBACxBnI,GAAEgC,KAAKrC,KAAKc,QAAQyL,OAAQ,SAASI,EAASC,GACtCvJ,EAAKsJ,EAAQrH,OAASjC,EAAKsJ,EAAQrH,MAAMuH,QACzChE,EAAMgD,eAAe/B,KAAK,GAAIzG,GAAKsJ,EAAQrH,MAAMuH,OAAOhE,EAAO8D,MAGvEH,EAAQxD,KACJ3I,EAAEL,KAAK6L,gBAAgBM,IAAI,SAASQ,EAASC,GACzC,MAAOV,IACH5B,IAAKsC,EACLzL,MAAOwL,EAAQG,iBACfC,UAAWJ,EAAQK,iBAExBnM,KAAK,KAEZ2L,EAAQhE,KAAK,MAAMS,MAAM,WACrB,GAAIgE,GAAM5J,EAAK4E,EAAEjI,KACjB6I,GAAMqE,gBAAgBD,EAAInE,KAAK,aAC/B4D,EAAMS,WAEVT,EAAMS,OAAO,WACT,GAAIV,EAAOW,MAAO,CACd,GAAIT,GAAU9D,EAAMwE,aACpBV,GAAQJ,OAAOE,EAAOW,OAE1B,OAAO,IAEXpN,KAAKiI,EAAEO,KAAK,sBAAsB8E,WAC9B,WACId,EAAQrD,cAGhBnJ,KAAKiI,EAAEO,KAAK,qBAAqB+E,WAC7B,WACIf,EAAQ/D,SAGhBzI,KAAKkN,gBAAgB,OA1CrBlN,MAAKiI,EAAEO,KAAK,uBAAuBoB,QA4CvCvJ,GAAEgC,KAAKrC,KAAKc,QAAQ0M,KAAM,SAASC,GAC3BpK,EAAKoK,EAAKnI,OAASjC,EAAKoK,EAAKnI,MAAMoI,KACnC7E,EAAM+C,KAAK9B,KAAK,GAAIzG,GAAKoK,EAAKnI,MAAMoI,IAAI7E,EAAO4E,KAIvD,IAAIE,IAAiB,CAErB3N,MAAKiI,EAAEO,KAAK,YACPwD,GAAG,QAAS,mCAAoC,WAC7C,GAAI4B,GAAWvK,EAAK4E,EAAEjI,MAAM6N,SAAS,eACjCD,GAASE,GAAG,aACZjF,EAAMZ,EAAEO,KAAK,gBAAgBuF,UAC7BH,EAASzE,eAIjBnJ,KAAKc,QAAQ+C,aAEb7D,KAAKiI,EAAEO,KAAK,YAAYwD,GAAG,YAAa,eAAgB,SAASgC,GAC7D,GAAIC,GAAK5K,EAAK4E,EAAEjI,KAChB,IAAIiO,GAAMhG,EAAEgG,GAAInF,KAAK,YAAa,CAC9B,GAAIoF,GAAUrF,EAAMhC,QAAQC,IAAI,SAASqH,OACrCjN,IAAK+G,EAAEgG,GAAInF,KAAK,aAEpBzI,GAAEgC,KAAK6L,EAAS,SAASE,GACrBvF,EAAM4C,SAAS4C,eAAeD,QAGvCE,SAAS,WACRzF,EAAM4C,SAAS8C,mBAChBvC,GAAG,YAAa,eAAgB,SAASwC,GACxC,IACIxO,KAAKyO,WACP,MAAOC,OACV1C,GAAG,aAAc,eAAgB,SAASwC,GACzCb,GAAiB,IAClB3B,GAAG,YAAa,eAAgB,SAASwC,GACxCA,EAAEG,gBACF,IAAIC,GAAQJ,EAAEK,cAAcC,eAAe,GACvCC,EAAMlG,EAAM4C,SAASuD,SAASC,SAC9BC,EAAIrG,EAAM4C,SAASuD,SAASG,QAC5BC,EAAIvG,EAAM4C,SAASuD,SAASK,QAChC,IAAIT,EAAMU,OAASP,EAAIQ,MAAQX,EAAMU,MAASP,EAAIQ,KAAOL,GAAMN,EAAMY,OAAST,EAAIU,KAAOb,EAAMY,MAAST,EAAIU,IAAML,EAC9G,GAAIzB,EACA9E,EAAM4C,SAASiE,YAAYd,GAAO,OAC/B,CACHjB,GAAiB,CACjB,IAAIgC,GAAMC,SAASC,cAAc,MACjCF,GAAIG,YAAY9P,KAAK+P,WAAU,IAC/BlH,EAAM4C,SAASuE,UACXC,YAAaN,EAAIO,WAClBtB,GACH/F,EAAM4C,SAAS0E,YAAYvB,GAAO,MAG3C5C,GAAG,WAAY,eAAgB,SAASwC,GACnCb,GACA9E,EAAM4C,SAAS2E,UAAU5B,EAAEK,cAAcC,eAAe,IAAI,GAEhEnB,GAAiB,IAClB3B,GAAG,YAAa,eAAgB,SAASwC,GACxC,GAAImB,GAAMC,SAASC,cAAc,MACjCF,GAAIG,YAAY9P,KAAK+P,WAAU,GAC/B,KACIvB,EAAEK,cAAcwB,aAAaC,QAAQ,YAAaX,EAAIO,WACxD,MAAOxB,GACLF,EAAEK,cAAcwB,aAAaC,QAAQ,OAAQX,EAAIO,cAM7D7M,EAAK4E,EAAEyB,QAAQ9B,OAAO,WAClBiB,EAAMO,cAGV,IAAImH,IAAa,EACbC,EAAU,EAEdxQ,MAAKiI,EAAEO,KAAK,yBAAyBwD,GAAG,2BAA4B,WAChE,GAAIoB,GAAM/J,EAAK4E,EAAEjI,MAAMoN,KACvB,IAAIA,IAAQoD,EAAZ,CAGA,GAAIjE,GAASlJ,EAAKC,MAAMmN,sBAAsBrD,EAAIhL,OAAS,EAAIgL,EAAM,KACjEb,GAAOmE,SAAWH,IAGtBA,EAAahE,EAAOmE,OACpBrQ,EAAEgC,KAAKwG,EAAM+C,KAAM,SAAS+E,GACxBA,EAAIC,OAAOrE,SAInBvM,KAAKiI,EAAEO,KAAK,wBAAwB2E,OAAO,WACvC,OAAO,IAIftD,GAAOjJ,UAAUY,UAAY,SAASqP,GAClC,MAAIxN,GAAKyN,KAAK9Q,KAAKc,QAAQiQ,WAAa1N,EAAKyN,KAAK9Q,KAAKc,QAAQiQ,UAAUF,GAC9DxN,EAAKyN,KAAK9Q,KAAKc,QAAQiQ,UAAUF,GAExC7Q,KAAKc,QAAQiQ,SAAS3O,OAAS,GAAKiB,EAAKyN,KAAK9Q,KAAKc,QAAQiQ,SAASC,OAAO,EAAG,KAAO3N,EAAKyN,KAAK9Q,KAAKc,QAAQiQ,SAASC,OAAO,EAAG,IAAIH,GAC5HxN,EAAKyN,KAAK9Q,KAAKc,QAAQiQ,SAASC,OAAO,EAAG,IAAIH,GAElDA,GAGXhH,EAAOjJ,UAAUqQ,eAAiB,WAC9BjR,KAAKyL,SAASwF,kBAGlBpH,EAAOjJ,UAAUsM,gBAAkB,SAASN,GACxC5M,KAAKqN,cAAgBrN,KAAK6L,eAAee,GACzC5M,KAAKiI,EAAEO,KAAK,sBAAsBM,KAAK,QAAS,qBAAuB9I,KAAKqN,cAAcL,aAG1F,KAAK,GAFDkE,GAAclR,KAAKqN,cAAcL,aAAamE,MAAM,KACpDC,EAAU,GACLC,EAAI,EAAGA,EAAIH,EAAY9O,OAAQiP,IACpCD,GAAW,IAAMF,EAAYG,EAEjCrR,MAAKiI,EAAEO,KAAK,wCAAwCM,KAAK,cAAe9I,KAAKwB,UAAU,cAAgBxB,KAAKiI,EAAEO,KAAK,mBAAqB4I,GAASpI,SAGrJa,EAAOjJ,UAAUwI,WAAa,WAC1B,GAAIkI,IAAMtR,KAAKiI,EAAEO,KAAK,iBAAiB+I,aACvCvR,MAAKiI,EAAEO,KAAK,yBAAyBnG,KAAK,WACtCiP,GAAMjO,EAAK4E,EAAEjI,MAAMuR,gBAEvBvR,KAAKiI,EAAEO,KAAK,gBAAgBgJ,KACxBnC,OAAQrP,KAAKiI,EAAEO,KAAK,YAAY6G,SAAWiC,IAKnD,IAAIG,GAAW,WACX,MAAO,uCAAuCC,QAAQ,QAAS,SAAStF,GACpE,GAAIuF,GAAoB,GAAhBC,KAAKC,SAAgB,EACzBC,EAAU,MAAN1F,EAAYuF,EAAS,EAAJA,EAAU,CACnC,OAAOG,GAAEC,SAAS,MAI1B1O,GAAKC,OAED0O,WAAY,SAAUC,GAAK,MAAQC,QAAOC,QAAUD,OAAOC,OAAOF,IAAOA,IACrEG,KAAM,EACNC,YAAa,EACbC,kBAAmB,EACnBC,cAAe,EACfC,cAAe,EACfC,gBAAiB,IACjBC,mBAAoB,MAGxBjB,SAAUA,EACVkB,OAAQ,WACJ,QAASC,GAAIC,GACT,MAAOA,GAAI,GAAK,IAAMA,EAAIA,EAE9B,GAAIvB,GAAK,GAAIwB,MACTC,EAAoB,EACpBC,EAAU1B,EAAG2B,iBAAmB,IAChCL,EAAItB,EAAG4B,cAAgB,GAAK,IAC5BN,EAAItB,EAAG6B,cAAgB,IACvB1B,GACJ,OAAO,UAAS2B,GAGZ,IAFA,GAAIC,MAAQN,GAAmBhB,SAAS,IACpCuB,EAA6B,mBAAVF,GAAwB,GAAKA,EAAQ,IACrDC,EAAGjR,OAAS,GACfiR,EAAK,IAAMA,CAEf,OAAOC,GAAWN,EAAU,IAAMK,MAG1C9P,WAAY,SAASI,GAEjB,GAAoB,mBAAV,IAAgC,MAAPA,EAC/B,MAAO,EAEX,IAAI,cAAc4P,KAAK5P,GACnB,MAAOA,EAEX,IAAI6P,GAAM,GAAIC,MACdD,GAAIE,IAAM/P,CACV,IAAIgQ,GAAMH,EAAIE,GAEd,OADAF,GAAIE,IAAM,KACHC,GAGXC,QAAS,SAASC,EAAYC,GAE1B,GAAIC,GAAS,SAASC,GACS,kBAAhBF,IACPA,EAAYG,MAAMjU,KAAMW,MAAMC,UAAUsT,MAAMzT,KAAKC,UAAW,IAElEmT,EAAWI,MAAMjU,KAAMW,MAAMC,UAAUsT,MAAMzT,KAAKC,UAAW,IACnC,kBAAfV,MAAKmU,OAAyBnU,KAAKoU,eAC1CpU,KAAKmU,MAAMF,MAAMjU,KAAMW,MAAMC,UAAUsT,MAAMzT,KAAKC,UAAW,IAC7DV,KAAKoU,cAAe,GAK5B,OAFA/T,GAAEgU,OAAON,EAAOnT,UAAWiT,EAAWjT,WAE/BmT,GAGXtD,sBAAuB,WAoBnB,QAAS6D,GAAYzD,GAIjB,QAAS0D,GAAgBC,GACrB,MAAO,UAASC,EAAG3C,GACf0C,EAAIA,EAAE9C,QAAQgD,EAAQD,GAAI3C,IAGlC,IAAK,GARD6C,GAAM9D,EAAM+D,cAAclD,QAAQmD,EAAO,IACzCnB,EAAM,GAODoB,EAAI,EAAGA,EAAIH,EAAIvS,OAAQ0S,IAAK,CAC7BA,IACApB,GAAOqB,EAAS,IAEpB,IAAIP,GAAIG,EAAIG,EACZzU,GAAEgC,KAAK2S,EAAST,EAAgBC,IAChCd,GAAOc,EAEX,MAAOd,GAGX,QAASuB,GAAUC,GACf,aAAeA,IACX,IAAK,SACD,MAAOZ,GAAYY,EACvB,KAAK,SACD,GAAIxB,GAAM,EAUV,OATArT,GAAEgC,KAAK6S,EAAK,SAASpD,GACjB,GAAI6B,GAAMsB,EAAUnD,EAChB6B,KACID,IACAA,GAAO,KAEXA,GAAOC,KAGRD,EAEf,MAAO,GAxDX,GAAIsB,IACI,UACA,OACA,UACA,UACA,UACA,UAEJG,GACIC,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAAMD,OAAOC,aAAa,KAC5H,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAE1FN,EAAS,MAAQI,EAAYtU,KAAK,MAAQ,IAC1CgU,EAAQ,GAAIS,QAAOP,EAAQ,MAC3BL,EAAUrU,EAAE8L,IAAI6I,EAAS,SAAS5I,GAC9B,MAAO,IAAIkJ,QAAOlJ,IA2C1B,OAAO,UAASmJ,GACZ,GAAI7E,GAASuE,EAAUM,EACvB,IAAI7E,EAAQ,CACR,GAAI8E,GAAS,GAAIF,QAAO5E,EAAQ,MAC5B+E,EAAY,GAAIH,QAAO,IAAM5E,EAAS,IAAK,MAC/C,QACIgF,SAAS,EACThF,OAAQA,EACR6C,KAAM,SAAStF,GACX,MAAOuH,GAAOjC,KAAKtF,IAEvByD,QAAS,SAASb,EAAO8E,GACrB,MAAO9E,GAAMa,QAAQ+D,EAAWE,KAIxC,OACID,SAAS,EACThF,OAAQ,GACR6C,KAAM,WACF,OAAO,GAEX7B,QAAS,SAASb,GACd,MAAO+E,YAO3BC,mBAAoB,EAEpBC,mBAAoB,GAEpBC,mBAAoB,EACpBC,mBAAoB,GAEpBC,mBAAoB,EACpBC,qBAAsB,EACtBC,mBAAoB,EAEpBC,gBAAiBxE,KAAKyE,IAAM,EAC5BC,WAAY,IACZC,WAAY,GACZC,gBAAiB,GACjBC,iBAAkB,IAGlBC,oBAAqB,IAErBC,kBAAmB,SAASrO,GACxB,OACIrH,MAAOqH,EAAQxH,QAAQ8V,mBACvBzV,MAAOmH,EAAQ9G,UAAU,kBACzBsF,IAAK,SAASgC,GACV,MAAO9I,MAAK8I,KAAS,KAOjC+N,kBAAmB,SAASvO,GACxB,MAAO,sRACHA,EAAQ9G,UAAU,qDAAqDkQ,QAAQ,KAAM,KACrF,ymCAGRhQ,YAAa,SAASmP,EAAOiG,GACzB,MAAQjG,GAAMzO,OAAS0U,EAAcjG,EAAMG,OAAO,EAAG8F,GAAc,IAAOjG,GAI9EkG,YAAa,SAASC,EAAUC,EAASC,EAAOC,EAAUC,EAAW9O,GACjE8O,EAAU5F,KACNrC,MAAQ6H,EAASK,cAAgB,EAAIL,EAASM,iBAGlD,IAAIC,GAAOH,EAAU,GAAGI,wBACpBC,EAAiBnP,EAAQL,EAAE,GAAGuP,uBAE/BD,GAAKG,OAAUD,EAAeC,OAAS,EAAIV,EAASM,gBAAkB,IACrEF,EAAU5F,KACNmG,aAAc,SACdC,aAAc,SACdC,aAAcJ,EAAeC,OAAS,EAAIV,EAASM,gBAAkB,EAAIC,EAAK9H,IAAO,MAI7F,IAAIqI,GAAUV,EAAU7F,cAAgB,EAAIyF,EAASM,gBAAkB,EACnES,EAAWd,EAAQe,EAAIC,MAAMC,KAAKC,OAAOH,EAAI,GAAI,EACjDI,EAAQnB,EAAQe,EAAID,GAAWZ,EAAWH,EAASqB,sBACnDC,EAASrB,EAAQe,EAAID,GAAWZ,EAAWH,EAASqB,qBAAuBrB,EAASK,eACpFkB,EAAOtB,EAAQuB,EAAIV,EAAU,CAC7BS,GAAOT,EAAWG,MAAMC,KAAKrS,KAAKwJ,OAAS2H,EAASyB,iBACpDF,EAAO3G,KAAK8G,IAAIT,MAAMC,KAAKrS,KAAKwJ,OAAS2H,EAASyB,eAAgBxB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,GAAKb,GAElHS,EAAOvB,EAASyB,iBAChBF,EAAO3G,KAAKgH,IAAI5B,EAASyB,eAAgBxB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,GAExF,IAAIE,GAAUN,EAAOT,CAgBrB,OAdAZ,GAAM4B,SAAS,GAAGC,MAAQ7B,EAAM4B,SAAS,GAAGC,MAAQ9B,EAAQ+B,KAAKjB,EAAUZ,EAAU,IACrFD,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAII,EAChHlB,EAAM4B,SAAS,GAAGC,MAAMf,EAAId,EAAM4B,SAAS,GAAGC,MAAMf,EAAIM,EACxDpB,EAAM4B,SAAS,GAAGC,MAAMP,EAAItB,EAAM4B,SAAS,GAAGC,MAAMP,EAAID,EACxDrB,EAAM4B,SAAS,GAAGC,MAAMP,EAAItB,EAAM4B,SAAS,GAAGC,MAAMP,EAAIK,EACxD3B,EAAM4B,SAAS,GAAGC,MAAMP,EAAIvB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,EACvEzB,EAAM4B,SAAS,GAAGC,MAAMP,EAAIvB,EAAQuB,EAAIxB,EAAS2B,oBAAsB,EACvEzB,EAAM+B,UAAY,GAAIhB,OAAMiB,MAAM,GAAIjB,OAAMkB,UAAUnC,EAASoC,kBAAmBpC,EAASqC,wBAAyB,EAAGd,IAAQ,EAAGM,IAElIzB,EAAU5F,KACNjC,KAAOyH,EAASM,gBAAkB1F,KAAKgH,IAAIR,EAAOE,GAClD7I,IAAMuH,EAASM,gBAAkBiB,IAG9BrB,GAGXoC,mBAAoB,SAAUC,EAAKC,GAE/BD,EAAMA,EAAI7H,QAAQ,cAAe,IAGf,IAAf6H,EAAInX,SACHmX,EAAMA,EAAI7H,QAAQ,OAAQ,QAG9B,IAAIC,GAAI8H,SAASF,EAAIvI,OAAO,EAAG,GAAI,IAC/B0I,EAAID,SAASF,EAAIvI,OAAO,EAAG,GAAI,IAC/B2I,EAAIF,SAASF,EAAIvI,OAAO,EAAG,GAAI,GAEnC,OAAO,KACF,EAAE,IAASW,GAAK,IAAMA,GAAK6H,EAAU,KAAKzH,SAAS,IAAKf,OAAO,IAC/D,EAAE,IAAS0I,GAAK,IAAMA,GAAKF,EAAU,KAAKzH,SAAS,IAAKf,OAAO,IAC/D,EAAE,IAAS2I,GAAK,IAAMA,GAAKH,EAAU,KAAKzH,SAAS,IAAKf,OAAO,MAG7EtH,QCzmBH,SAAU1B,GACN,YAEA,IAAI4R,GAAW5R,EAAK4R,QAEP5R,GAAK3E,KAAKyH,OAAS8O,EAAS9O,OAAOuJ,QAC5CwF,QACIC,GAAI,SAGRC,MAAO,SAAUC,GAEb,GAAIC,KACe,QAAfD,GACAA,EAAW7I,MAAM,KAAK+I,QAAQ,SAASC,GACnC,GAAIC,GAAOD,EAAKhJ,MAAM,IACtB8I,GAAOG,EAAK,IAAMC,mBAAmBD,EAAK,MAGlDpa,KAAKsa,QAAQ,SAAUL,OAIhCvQ,QCvBH,SAAU1B,GAEN,YAEA,IAAIkD,GAAalD,EAAK3E,KAAK6H,YACvBqP,YACIC,SAAU,SAAS9P,GAEf,GAAI2G,GAAGoJ,CACP,IAAyB,mBAAf/P,GAAKgQ,MACX,IAAIrJ,EAAE,EAAGoJ,EAAI/P,EAAKgQ,MAAMtY,OAAQiP,EAAEoJ,EAAKpJ,IAAK,CACxC,GAAItN,GAAO2G,EAAKgQ,MAAMrJ,EACnBtN,GAAK9C,MACJ8C,EAAK4W,OACD1Z,MAAO8C,EAAK9C,OAIhB8C,EAAK4W,SAIjB,GAAyB,mBAAfjQ,GAAKkQ,MACX,IAAIvJ,EAAE,EAAGoJ,EAAI/P,EAAKkQ,MAAMxY,OAAQiP,EAAEoJ,EAAKpJ,IAAK,CACxC,GAAIrQ,GAAO0J,EAAKkQ,MAAMvJ,EACnBrQ,GAAKC,MACJD,EAAK2Z,OACD1Z,MAAOD,EAAKC,OAIhBD,EAAK2Z,SAOjB,MAFAjQ,GAAKmQ,eAAiB,IAEfnQ,IAMnBQ,GAAWC,OAAS,SAAStE,EAAS/F,GAClCd,KAAK6G,QAAUA,EACf7G,KAAK8a,eAAiBza,EAAE0J,SAASjJ,EAAQyZ,eAAkBrP,EAAWqP,aAI1ErP,EAAWC,OAAOvK,UAAUma,QAAU,SAASrQ,GAC3C,GAAIsQ,GAAoBhb,KAAK6G,QAAQoU,iBAAiBvQ,GAClDwQ,EAAkBlb,KAAK6G,QAAQoU,kBAEnC,IAAID,IAAsBE,EAAiB,CACvC,GAAIC,GAAgB,OAASH,EAAoB,KAAOE,CACN,mBAAvClb,MAAK8a,eAAeK,KAC3BzQ,EAAO1K,KAAK8a,eAAeK,GAAezQ,IAGlD,MAAOA,IAGXQ,EAAWC,OAAOvK,UAAUwa,KAAO,SAAS1Q,GACxC1K,KAAK6G,QAAQwU,IAAIrb,KAAK+a,QAAQrQ,IAC1B4Q,UAAU,IAEdtb,KAAK6G,QAAQyT,QAAQ,UAAU,KAGpC5Q,QCtEH,SAAU1B,GACN,YAEA,IAAI4R,GAAW5R,EAAK4R,SAEhB7O,EAAS/C,EAAK3E,KAAK0H,SAEvBA,GAAO4H,OAAS,SAAS1S,GACrB,GAAIsb,GAAO,uCACN7J,QAAQ,QACA,SAAStF,GACL,GAAIuF,GAAoB,GAAhBC,KAAKC,SAAgB,EAAGC,EAAU,MAAN1F,EAAYuF,EACrC,EAAJA,EAAU,CACjB,OAAOG,GAAEC,SAAS,KAEnC,OAAmB,mBAAR9R,GACAA,EAAIqF,KAAO,IAAMiW,EAGjBA,EAIf,IAAIC,GAAc5B,EAAS6B,gBAAgBpH,QACvCqH,YAAc,MACdC,YAAc,SAAS7a,GAEI,mBAAZA,KACPA,EAAQsD,IAAMtD,EAAQsD,KAAOtD,EAAQ8a,IAAM7Q,EAAO4H,OAAO3S,MACzDc,EAAQK,MAAQL,EAAQK,OAAS,GACjCL,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GAC7C3C,EAAQI,IAAMJ,EAAQI,KAAO,GAED,kBAAjBlB,MAAK6b,UACZ/a,EAAUd,KAAK6b,QAAQ/a,KAG/B8Y,EAAS6B,gBAAgB7a,UAAU+a,YAAYlb,KAAKT,KAAMc,IAE9Dwa,SAAW,WACP,IAAKtb,KAAKsF,KACN,MAAO,sBAGfwW,aAAe,SAAS9E,EAAU+E,EAAWC,EAAO5X,EAAK6X,GACrD,GAAIC,GAAWF,EAAMlV,IAAI1C,EACD,oBAAb8X,IACa,mBAAbD,GACPjF,EAAS+E,GAAaE,EAGtBjF,EAAS+E,GAAaG,KAM9BC,EAAOpR,EAAOoR,KAAOX,EAAYnH,QACjC/O,KAAO,OACPuW,QAAU,SAAS/a,GAEf,MADAA,GAAQG,MAAQH,EAAQG,OAAS,UAC1BH,GAEXsb,OAAS,WACL,OACIhY,IAAMpE,KAAK8G,IAAI,OACf3F,MAAQnB,KAAK8G,IAAI,SACjB5F,IAAMlB,KAAK8G,IAAI,OACfrD,YAAczD,KAAK8G,IAAI,eACvB7F,MAAQjB,KAAK8G,IAAI,aAMzBuV,EAAOtR,EAAOsR,KAAOb,EAAYnH,QACjC/O,KAAO,OACPgX,YACIhX,KAAOsU,EAAS2C,OAChBjS,IAAM,aACNkS,aAAeL,IAEnBN,QAAU,SAAS/a,GACf,GAAI+F,GAAU/F,EAAQ+F,OAItB,OAHA7G,MAAK8b,aAAahb,EAAS,aAAc+F,EAAQC,IAAI,SACnChG,EAAQ2b,WAAY5V,EAAQ2E,cAC9C1K,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GACtC3C,GAEXsb,OAAS,WACL,OACIhY,IAAMpE,KAAK8G,IAAI,OACf3F,MAAQnB,KAAK8G,IAAI,SACjB5F,IAAMlB,KAAK8G,IAAI,OACfrD,YAAczD,KAAK8G,IAAI,eACvB4V,SAAW1c,KAAK8G,IAAI,YACpBtD,MAAQxD,KAAK8G,IAAI,SACjB6T,MAAQ3a,KAAK8G,IAAI,SACjB2V,WAAazc,KAAK8G,IAAI,cAAgB9G,KAAK8G,IAAI,cAC1CA,IAAI,OAAS,KAClBjB,KAAO7F,KAAK8G,IAAI,QAChBV,UAAYpG,KAAK8G,IAAI,aACrBL,MAAQzG,KAAK8G,IAAI,SACjBxB,KAAOtF,KAAK8G,IAAI,YAMxB6V,EAAO5R,EAAO4R,KAAOnB,EAAYnH,QACjC/O,KAAO,OACPgX,YACIhX,KAAOsU,EAAS2C,OAChBjS,IAAM,aACNkS,aAAeL,IAEf7W,KAAOsU,EAAS2C,OAChBjS,IAAM,OACNkS,aAAeH,IAEf/W,KAAOsU,EAAS2C,OAChBjS,IAAM,KACNkS,aAAeH,IAEnBR,QAAU,SAAS/a,GACf,GAAI+F,GAAU/F,EAAQ+F,OAMtB,OALA7G,MAAK8b,aAAahb,EAAS,aAAc+F,EAAQC,IAAI,SACnChG,EAAQ2b,WAAY5V,EAAQ2E,cAC9CxL,KAAK8b,aAAahb,EAAS,OAAQ+F,EAAQC,IAAI,SAC7BhG,EAAQ8b,MAC1B5c,KAAK8b,aAAahb,EAAS,KAAM+F,EAAQC,IAAI,SAAUhG,EAAQ+b,IACxD/b,GAEXsb,OAAS,WACL,OACIhY,IAAMpE,KAAK8G,IAAI,OACf3F,MAAQnB,KAAK8G,IAAI,SACjB5F,IAAMlB,KAAK8G,IAAI,OACfrD,YAAczD,KAAK8G,IAAI,eACvB8V,KAAO5c,KAAK8G,IAAI,QAAU9G,KAAK8G,IAAI,QAAQA,IAAI,OAAS,KACxD+V,GAAK7c,KAAK8G,IAAI,MAAQ9G,KAAK8G,IAAI,MAAMA,IAAI,OAAS,KAClD6T,MAAQ3a,KAAK8G,IAAI,SACjB2V,WAAazc,KAAK8G,IAAI,cAAgB9G,KAAK8G,IAAI,cAC1CA,IAAI,OAAS,SAM1BgW,EAAO/R,EAAO+R,KAAOtB,EAAYnH,QACjC/O,KAAO,OACPgX,YACIhX,KAAOsU,EAAS2C,OAChBjS,IAAM,aACNkS,aAAeL,IAEnBN,QAAU,SAAS/a,GACf,GAAI+F,GAAU/F,EAAQ+F,OAItB,IAHA7G,KAAK8b,aAAahb,EAAS,aAAc+F,EAAQC,IAAI,SACnChG,EAAQ2b,WAAY5V,EAAQ2E,cAC9C1K,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GACf,mBAAnB3C,GAAQmO,OAAwB,CACvC,GAAIA,KACAtO,OAAMoc,QAAQjc,EAAQmO,SACtBA,EAAO+I,EAAIlX,EAAQmO,OAAO,GAC1BA,EAAOuJ,EAAI1X,EAAQmO,OAAO7M,OAAS,EAAItB,EAAQmO,OAAO,GAChDnO,EAAQmO,OAAO,IAEI,MAApBnO,EAAQmO,OAAO+I,IACpB/I,EAAO+I,EAAIlX,EAAQmO,OAAO+I,EAC1B/I,EAAOuJ,EAAI1X,EAAQmO,OAAOuJ,GAE9B1X,EAAQmO,OAASA,EAErB,MAAOnO,IAEXsb,OAAS,WACL,OACIhY,IAAMpE,KAAK8G,IAAI,OACfkW,WAAahd,KAAK8G,IAAI,cACtBmI,OAASjP,KAAK8G,IAAI,UAClB3F,MAAQnB,KAAK8G,IAAI,SACjBrD,YAAczD,KAAK8G,IAAI,eACvB2V,WAAazc,KAAK8G,IAAI,cAAgB9G,KAAK8G,IAAI,cAC1CA,IAAI,OAAS,KAClBmW,aAAcjd,KAAK8G,IAAI,oBA6H/BoW,GAtHUnS,EAAOC,QAAUwQ,EAAYnH,QACvCwG,eAAiB,IACjBvV,KAAO,UACP6X,WAAc,aAAc,iBAC5Bb,YACIhX,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeL,EACfkB,iBACI/S,IAAM,UACNgT,cAAgB,SAGpBhY,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeH,EACfgB,iBACI/S,IAAM,UACNgT,cAAgB,SAGpBhY,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeG,EACfU,iBACI/S,IAAM,UACNgT,cAAgB,SAGpBhY,KAAOsU,EAASwD,QAChB9S,IAAM,QACNkS,aAAeM,EACfO,iBACI/S,IAAM,UACNgT,cAAgB,SAGxB/R,QAAU,SAASgS,EAAQvG,GACvBuG,EAAO1W,QAAU7G,IACjB,IAAIwd,GAAQrB,EAAKsB,aAAaF,EAE9B,OADAvd,MAAK8G,IAAI,SAASgD,KAAK0T,EAAOxG,GACvBwG,GAEXE,QAAU,SAASH,EAAQvG,GACvBuG,EAAO1W,QAAU7G,IACjB,IAAI2d,GAAQtB,EAAKoB,aAAaF,EAE9B,OADAvd,MAAK8G,IAAI,SAASgD,KAAK6T,EAAO3G,GACvB2G,GAEXC,QAAU,SAASL,EAAQvG,GACvBuG,EAAO1W,QAAU7G,IACjB,IAAI6d,GAAQlB,EAAKc,aAAaF,EAE9B,OADAvd,MAAK8G,IAAI,SAASgD,KAAK+T,EAAO7G,GACvB6G,GAEXC,QAAU,SAASP,EAAQvG,GACvBuG,EAAO1W,QAAU7G,IAEjB,IAAI+d,GAAQjB,EAAKW,aAAaF,EAG9B,OADAvd,MAAK8G,IAAI,SAASgD,KAAKiU,EAAO/G,GACvB+G,GAEXC,WAAa,SAAS5P,GAClBpO,KAAK8G,IAAI,SAASmX,OAAO7P,IAE7B8P,WAAa,SAAS9P,GAClBpO,KAAK8G,IAAI,SAASmX,OAAO7P,IAE7BkN,SAAW,SAASxa,GAChB,GAAIqd,GAAWne,IACfK,GAAEgC,QACKsI,OAAO7J,EAAQsd,MAAOtd,EAAQ4Z,MAAO5Z,EAAQ8Z,MAAM9Z,EAAQud,OAC9D,SAASC,GACDA,IACAA,EAAMzX,QAAUsX,MAKhClD,iBAAmB,SAASvQ,GACxB,GAAI6T,GAAI7T,CACS,oBAAR,KACL6T,EAAIve,KAER,IAAIwe,GAAUD,EAAE1D,cAChB,OAAI2D,GAIOA,EAHA,GAOfC,WAAa,WACT,GAAI5V,GAAQ7I,IACZA,MAAKgM,GAAG,eAAgB,SAAS2R,GAC7B9U,EAAM/B,IAAI,SAASmX,OACfpV,EAAM/B,IAAI,SAAS4X,OACf,SAASb,GACL,MAAOA,GAAM/W,IAAI,UAAY6W,GACzBE,EAAM/W,IAAI,QAAU6W,QAI5CvB,OAAS,WACL,GAAIuC,GAAOte,EAAEue,MAAM5e,KAAK6e,WACxB,KAAM,GAAI/V,KAAQ6V,IACTA,EAAK7V,YAAiB8Q,GAASkF,OAC/BH,EAAK7V,YAAiB8Q,GAASmF,YAC/BJ,EAAK7V,YAAiB0S,MACvBmD,EAAK7V,GAAQ6V,EAAK7V,GAAMsT,SAGhC,OAAO/b,GAAE2e,KAAKL,EAAM3e,KAAKmd,cAIhBpS,EAAOmS,WAAatD,EAASkF,MACzCzK,QACG/O,KAAO,cACPoW,YAAc,MAEdC,YAAc,SAAS7a,GAEI,mBAAZA,KACPA,EAAQsD,IAAMtD,EAAQsD,KAClBtD,EAAQ8a,IACR7Q,EAAO4H,OAAO3S,MAClBc,EAAQK,MAAQL,EAAQK,OAAS,aAAenB,KAAKsF,KAAO,IAC5DxE,EAAQ2C,YAAc3C,EAAQ2C,aAAe,GAC7C3C,EAAQI,IAAMJ,EAAQI,KAAO,GAC7BJ,EAAQ+F,QAAU/F,EAAQ+F,SAAW,KACrC/F,EAAQme,QAAUne,EAAQme,SAAW,EAET,kBAAjBjf,MAAK6b,UACZ/a,EAAUd,KAAK6b,QAAQ/a,KAG/B8Y,EAASkF,MAAMle,UAAU+a,YAAYlb,KAAKT,KAAMc,IAGpDwa,SAAW,WACP,IAAKtb,KAAKsF,KACN,MAAO,sBAIfuW,QAAU,SAAS/a,GAEf,MADAA,GAAQG,MAAQH,EAAQG,OAAS,UAC1BH,GAGXsb,OAAS,WACL,OACIhY,IAAMpE,KAAK8G,IAAI,OACf3F,MAAQnB,KAAK8G,IAAI,SACjB5F,IAAMlB,KAAK8G,IAAI,OACfrD,YAAczD,KAAK8G,IAAI,eACvB7F,MAAQjB,KAAK8G,IAAI,SACjBD,QAAkC,MAAvB7G,KAAK8G,IAAI,WAAsB9G,KAAK8G,IAC3C,WAAWA,IAAI,MAAQ,KAC3BmY,QAAUjf,KAAK8G,IAAI,eAKnBiE,GAAOgB,UAAY6N,EAASmF,WAAW1K,QACnD6K,MAAQhC,KAGbxT,QC3WHrG,KAAK0G,UAEDgH,SAAWoO,UAAUpO,UAAYoO,UAAUC,cAAgB,KAE3DzT,UAAW,SAEXY,UAEAiB,QAEA9J,WAAY,GAEZ2b,cAAc,EAEdC,aAAc,eAEd1b,WAAW,EAEXzB,cAEA0B,aAAa,EAEb+G,WAAW,EAEXjE,aAAa,EAEb4Y,aAAa,EAEb7Y,cAAc,EAEdkQ,mBAAoB,UACpB4I,cAAc,EAEdC,cAAc,EACdC,oBAAoB,EAEpBC,uBAAuB,EAEvBC,uBAAuB,EAEvBC,gBAAgB,EAEhBC,qBAAsB,EAGtBC,kBAAmB,GACnBnY,QAAQ,EAGRC,WAAW,EAEXC,WAAW,EAEXkY,sBAAsB,EAEtBC,uBAAuB,EAEvBC,oBAAoB,EAGpBC,gBAAgB,EAEhBC,YAAY,EAMZzY,mBAAmB,EACnBZ,gBAAgB,EAEhBsZ,oBAAoB,EAEpBpZ,qBAAqB,EAErBL,gBAAgB,EAEhBI,iBAAiB,EAEjBQ,kBAAkB,EAClBD,oBAAoB,EACpBE,kBAAkB,EAClBJ,qBAAqB,EACrBC,qBAAqB,EACrBI,kBAAkB,EAClBN,wBAAwB,EACxBF,iBAAiB,EACjBC,kBAAmB,OAInBmZ,cAAc,EAEdC,cAAe,IACfC,eAAgB,IAChBC,gBAAiB,GACjBC,yBAA0B,UAC1BC,qBAAsB,UACtBC,wBAAyB,UACzBC,yBAA0B,EAK1BC,mBAAoB,UACpBC,oBAAqB,UACrBC,wBAAyB,EAEzBC,cAAgB,GAEhBC,oBAAsB,EAAG,GAKzBC,mBAAmB,EAEnBC,kBAAkB,EAElBC,uBAAuB,EAGvBC,eAAgB,GAChBC,kBAAmB,EACnBC,sBAAuB,GACvBC,2BAA4B,EAC5BC,+BAAgC,GAChCC,wBAAyB,EACzBC,oBAAqB,EAErBC,oBAAqB,EAErBC,qBAAsB,GAEtBC,gBAAiB,UAEjBC,4BAA6B,UAE7BC,iBAAkB,UAElBC,oBAAqB,EAErBC,sBAAuB,GAEvBC,qBAAsB,aAEtBra,YAAY,EAEZxB,eAAe,EAEfnB,cAAc,EAKd8E,uBACImY,QAAW,qCACXC,MAAS,mCAKbC,kBAAmB,EACnBC,sBAAuB,GACvBC,2BAA4B,EAC5BC,+BAAgC,GAChCC,wBAAyB,EAEzBC,oBAAqB,EACrBC,sBAAuB,GACvBC,kBAAmB,GACnBC,iBAAkB,GAClBC,qBAAsB,GACtBC,oBAAqB,GACrBC,uBAAwB,UACxBC,qBAAsB,GAItB9L,cAAe,IACfC,gBAAiB,GACjBmB,eAAgB,GAChBJ,qBAAuB,GACvBM,oBAAsB,GACtBS,kBAAmB,UACnBC,qBAAsB,UACtB+J,qBAAsB,UACtBC,qBAAsB,EACtBC,gBAAiB,GAEjBC,wBACIC,gBACMC,KAAM,cAAeC,QAAU,cAAe,aAC9CD,KAAM,YAAeC,QAAU,YAAa,SAC9C,KACDD,KAAM,WAETE,cAAgB,mGAKpB5e,uBAAuB,EACvBI,sBAAsB,EACtBye,wBAAwB,EACxB9e,iCAAiC,EACjCY,8BAA8B,EAC9BC,uCAAuC,EACvCC,uBAAuB,EACvBE,wBAAwB,EACxBC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,kCAAkC,EAClCC,wBAAwB,EACxBI,0BAA0B,EAC1BD,oBAAoB,EACpBwd,sBAAuB,IAKvB7f,uBAAuB,EACvBC,+BAA+B,EAC/BH,yBAAyB,EACzBI,yBAAyB,EACzBC,2BAA2B,EAI3BjC,sBAAsB,EACtBO,wBAAwB,EACxBC,8BAA8B,EAC9BE,6BAA6B,EAC7BE,kCAAkC,EAClCE,8BAA8B,EAC9BE,4BAA4B,EAC5BC,wBAAwB,EACxBC,0BAA0B,EAI1BhC,uBAAuB,EACvBL,yBAAyB,EACzBO,yBAAyB,EACzBQ,2BAA2B,GCpP/BuB,KAAKyN,MACDgT,IACIC,YAAa,oBACbC,YAAa,oBACbC,SAAU,UACVC,OAAQ,QACRC,eAAgB,gBAChBC,QAAS,OACTC,MAAO,SACP5Q,MAAS,QACT6Q,aAAc,cACdC,qBAAsB,2BACtBC,cAAe,mBACfC,WAAY,kBACZC,WAAY,kBACZC,eAAgB,wBAChBC,eAAgB,mBAChBC,oBAAqB,oCACrBC,kBAAmB,mBACnBC,cAAe,aACfC,UAAW,qBACXC,WAAY,uBACZC,KAAQ,SACRC,OAAU,YACVC,kBAAmB,yBACnBC,uBAAwB,gBACxBC,QAAW,WACXC,OAAU,WACVC,+CAAgD,sDAChDC,0CAA2C,qDAC3CC,8CAA+C,mDAC/CC,UAAa,YACbC,gBAAiB,gBACjBC,OAAU,WACVC,QAAW,UACXC,SAAY,WACZC,mBAAoB,oBACpBC,kBAAmB,kBACnBC,uBAAwB,0CACxBC,cAAe,YACfC,QAAS,WACTC,aAAc,cACdC,SAAU,WACVC,cAAe,YACfC,eAAgB,sBAChBC,wBAAyB,0BACzBC,qCAAsC,4CACtCC,qCAAsC,4CACtCC,4BAA6B,iCAC7BC,4BAA6B,+BAC7BC,QAAS,WACTC,GAAM,KACNC,0BAA2B,gCAC3BC,gCAAiC,iCACjCC,WAAY,cACZC,cAAe,iBACfC,iBAAkB,oBAClBC,0BAA2B,8BAC3BC,cAAe,4BACfC,eAAgB,6BAChBC,cAAe,2BACfC,uBAAwB,0BACxBC,kBAAmB,sBACnBC,OAAU,SACVC,aAAc,WACdC,WAAY,cACZC,eAAgB,YAChBC,aAAc,gBACdC,cAAe,eACfC,mBAAoB,2BACpBC,iBAAkB,sBAClBC,iBAAkB,+BAClBC,YAAa,oBACbC,cAAe,wBACfC,aAAc,eACdC,mBAAoB,8BACpBC,oDAAqD,kDACrDC,qIAAsI,2KACtIC,mBAAoB,qBACpBC,OAAU,SACVC,OAAU,QACVC,QAAW,UACXC,SAAY,WACZC,QAAW,UACXC,KAAQ,SACRC,MAAS,QACTC,SAAY,WACZC,QAAW,WACXC,WAAY,kBACZC,mBAAoB,wBACpBC,YAAa,gBACbC,kBAAmB,mBACnBC,mCAAsC,wCACtCC,iBAAiB,oBACjBC,iBAAiB,oBACjBC,kBAAkB,wBAClBC,aAAe,iBACfC,oBAAqB,4BACrBC,iBAAkB,sBAClBC,KAAQ,SACRC,2CAA4C,yDAC5CC,cAAe,WACfC,eAAgB,YAChBC,aAAc,eCrGtB9mB,KAAK+mB,OAAS,SAAS9hB,EAASC,GAC5B,GAAI8hB,GAAQ/hB,EAAQzB,OACa,oBAAtB0B,GAAM+hB,cACb/hB,EAAM+hB,YAAc,MAExB,IAAIC,GAAQ,WACRF,EAAMhP,KACFmP,eAAgB,IAEpBnnB,KAAK4E,EAAEwC,QAAQlC,EAAM5E,IAAK,SAAS8mB,GAC/BniB,EAAQ2C,WAAWmQ,KAAKqP,GAExBJ,EAAMhP,KACFmP,eAAgB,IAEpBH,EAAMhP,KACFqP,WAAa,OAIrBC,EAAQ,WACRN,EAAMhP,KACFqP,WAAa,GAEjB,IAAID,GAAQJ,EAAMjO,QACb9T,GAAQsC,WACTvH,KAAK4E,EAAE2iB,MACHtlB,KAAOiD,EAAM+hB,YACb3mB,IAAM4E,EAAM5E,IACZknB,YAAc,mBACdngB,KAAOogB,KAAKC,UAAUN,GACtBO,QAAU,SAAStgB,EAAMugB,EAAYC,GACjCb,EAAMhP,KACFqP,WAAa,QAO7BS,EAAW9nB,KAAKhD,EAAE+qB,SAAS,WAC3BC,WAAWV,EAAO,MACnB,IAIHN,GAAMre,GAAG,0CAA2C,SAASoC,GACzDA,EAAOpC,GAAG,gBAAiB,SAASoC,GAChC+c,MAEJA,MAEJd,EAAMre,GAAG,SAAU,WAC0B,IAAnCqe,EAAMiB,kBAAkBlpB,QAAgBioB,EACrCkB,WAAW,eAChBJ,MAIRZ,KC3DJlnB,KAAKmoB,kBAAoB,SAASljB,EAASC,GACvC,GAAI8hB,GAAQ/hB,EAAQzB,QAChB4kB,GAAY,EACZC,EAAW,WACP,MAAO,oBAEkB,oBAAtBnjB,GAAM+hB,cACb/hB,EAAM+hB,YAAc,OAExB,IAAIC,GAAQ,WACR,GAAIoB,MACAC,EAAK,gBACLC,EAAUjc,SAASkc,SAASC,KAAKxnB,MAAMqnB,EACvCC,KACAF,EAAQ/P,GAAKiQ,EAAQ,IAEzBxoB,KAAK4E,EAAE2iB,MACHjnB,IAAK4E,EAAM5E,IACX+G,KAAMihB,EACNK,WAAY,WACX3B,EAAMhP,KAAKmP,eAAc,KAE1BQ,QAAS,SAASP,GACdniB,EAAQ2C,WAAWmQ,KAAKqP,GACxBJ,EAAMhP,KAAKmP,eAAc,IACzBH,EAAMhP,KAAKqP,WAAW,QAI9BC,EAAQ,WACRN,EAAMhP,IAAI,WAAY,GAAIvI,MAC1B,IAAI2X,GAAQJ,EAAMjO,QAClB/Y,MAAK4E,EAAE2iB,MACHtlB,KAAMiD,EAAM+hB,YACZ3mB,IAAK4E,EAAM5E,IACXknB,YAAa,mBACbngB,KAAMogB,KAAKC,UAAUN,GACrBuB,WAAY,WACX3B,EAAMhP,KAAKqP,WAAW,KAEvBM,QAAS,SAAStgB,EAAMugB,EAAYC,GAChCjjB,EAAEyB,QAAQqF,IAAI,eAAgB2c,GAC9BD,GAAY,EACZpB,EAAMhP,KAAKqP,WAAW,QAM9BuB,EAAc,WACjB5B,EAAMhP,KAAKqP,WAAW,GAEnB,IAAIvpB,GAAQkpB,EAAMvjB,IAAI,QAClB3F,IAASkpB,EAAMvjB,IAAI,SAAS1E,OAC5B6F,EAAE,mBAAmBikB,YAAY,YAEjCjkB,EAAE,mBAAmBS,SAAS,YAE9BvH,GACA8G,EAAE,gBAAgBuJ,IAAI,eAAe,WAEpCia,IACDA,GAAY,EACZxjB,EAAEyB,QAAQsC,GAAG,eAAgB0f,IAGrCnB,KACAF,EAAMre,GAAG,uCAAwC,SAASoC,GACzDA,EAAOpC,GAAG,gBAAiB,SAASoC,GACM,IAApCA,EAAOkd,kBAAkBlpB,QAAgBgM,EAAOmd,WAAW,eAC/DU,MAGmC,IAAnC5B,EAAMiB,kBAAkBlpB,QAAgBioB,EAAMkB,WAAW,eAC1DU,MAGF3jB,EAAQmD,SAAS0gB,KAAO,WAChBlkB,EAAE,mBAAmBmkB,SAAS,YACzB/B,EAAMvjB,IAAI,UACXmB,EAAE,gBAAgBuJ,IAAI,eAAe,WAGzCmZ,MCrFZ,SAAUtnB,GACV,YAEA,IAAIhD,GAAIgD,EAAKhD,EAETgsB,EAAMhpB,EAAKgpB,OAYXC,GAVMD,EAAI3e,IAAM,SAASpF,EAASC,GAClC,GAAIA,EAAMgkB,SAAU,CAChB,GAAIC,GAAWH,EAAI9jB,EAAMgkB,SAAS,MAClC,IAAIC,EACA,MAAO,IAAIA,GAASlkB,EAASC,GAGrCkkB,QAAQC,MAAM,yBAGDL,EAAIC,WAAajpB,EAAKC,MAAMsQ,QAAQvQ,EAAKgF,UAG1DikB,GAAW1rB,UAAUuT,MAAQ,SAAS7L,EAASC,GAC3CvI,KAAKuB,OAAS+G,EACdtI,KAAK2sB,YAAcrkB,EAAQxH,QAAQkJ,UAAU,0CAC7ChK,KAAK4sB,mBAAqBtkB,EAAQxH,QAAQkJ,UAAU,iDACpDhK,KAAK6sB,QAAUtkB,EAAMukB,WACrB9sB,KAAK+sB,aAAexkB,EAAMwkB,cAAgB,oCAC1C/sB,KAAKuJ,QAAQP,KAAKT,EAAMpH,OACxBnB,KAAK4I,aAAaF,SAAS,qBAC3B1I,KAAKqJ,WAGTijB,EAAW1rB,UAAUgQ,OAAS,SAASoc,GAEnC,QAASC,GAAUpc,GACf,GAAI7C,GAAK3N,EAAEwQ,GAAOvQ,QAClB,OAAOiM,GAAOmJ,QAAU1H,EAAKzB,EAAOmF,QAAQ1D,EAAI,uCAEpD,QAASkf,GAAUC,GACf,QAASva,GAAIS,GAET,IADA,GAAI+Z,GAAO/Z,EAAGtB,WACPqb,EAAKhrB,OAAS,GACjBgrB,EAAO,IAAMA,CAEjB,OAAOA,GAEX,GAAIC,GAAgBzb,KAAK0b,IAAI1b,KAAK2b,MAAMJ,EAAI,MACxCK,EAAS5b,KAAK2b,MAAMF,EAAgB,MACpCI,EAAY7b,KAAK2b,MAAMF,EAAgB,IAAM,GAC7CK,EAAWL,EAAgB,GAC3BD,EAAO,EAKX,OAJII,KACAJ,GAAQxa,EAAI4a,GAAU,KAE1BJ,GAAQxa,EAAI6a,GAAY,IAAM7a,EAAI8a,GArBtC,GAAInhB,GAASygB,GAAc3pB,EAAKC,MAAMmN,wBAyBlCkd,EAAQ,yBACRC,EAAa5tB,KAAK0K,KAAKmjB,KAAK,YAC5BhlB,EAAQ7I,KACR8tB,EAAQ,CACZjlB,GAAMU,QAAQqM,KAAK,iBAAmBgY,EAAa,KACnDvtB,EAAE8L,IAAItD,EAAM6B,KAAKqjB,KAAK,SAASC,GAC3B,GAAIC,GAASD,EAAKH,KAAK,aAClBthB,EAAOmJ,SAAYnJ,EAAOgH,KAAK0a,MAGpCH,IACAH,GAAS9kB,EAAM8jB,aACXI,aAAclkB,EAAMkkB,aACpB5rB,MAAO8sB,EACPC,OAAQjB,EAAUgB,GAClBE,aAAevpB,mBAAmBqpB,GAClCvqB,WAAYmF,EAAMtH,OAAOT,QAAQ4C,gBAGzCiqB,GAAS,gCACTttB,EAAE8L,IAAItD,EAAM6B,KAAK0jB,YAAY,SAASC,GAClC,GAAIC,GAAeD,EAAYE,QAAQ9qB,YACnCwqB,EAASI,EAAYE,QAAQptB,MAAMuQ,QAAQ4c,EAAa,GAC5D,IAAK/hB,EAAOmJ,SAAYnJ,EAAOgH,KAAK0a,IAAY1hB,EAAOgH,KAAK+a,GAA5D,CAGAR,GACA,IAAIU,GAAYH,EAAYI,IAAMJ,EAAYK,MAC1CC,EACKN,EAAYE,SAAWF,EAAYE,QAAQ/a,KAAO6a,EAAYE,QAAQ/a,IAAIE,IACzE2a,EAAYE,QAAQ/a,IAAIE,IACtB8a,EAAY3lB,EAAMtH,OAAOT,QAAQ4C,WAAW,sBAAwBmF,EAAMtH,OAAOT,QAAQ4C,WAAW,mBAEhHiqB,IAAS9kB,EAAM+jB,oBACXG,aAAclkB,EAAMkkB,aACpB5rB,MAAO8sB,EACPC,OAAQjB,EAAUgB,GAClBxqB,YAAa6qB,EACbM,aAAc3B,EAAUqB,GACxBO,MAAO3B,EAAUmB,EAAYK,OAC7BD,IAAKvB,EAAUmB,EAAYI,KAC3BK,SAAU5B,EAAUsB,GACpBO,QAASV,EAAYW,MACrBC,aAAcZ,EAAYzS,GAC1BpY,MAAOmrB,EACPjrB,WAAYmF,EAAMtH,OAAOT,QAAQ4C,gBAIzC1D,KAAKwJ,OAAOR,KAAK2kB,IACZphB,EAAOmJ,SAAWoY,EACnB9tB,KAAKsJ,QAAQsM,KAAKkY,GAAOoB,OAEzBlvB,KAAKsJ,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpB9tB,KAAKiI,EAAEinB,OAFPlvB,KAAKiI,EAAEQ,OAIXzI,KAAKuB,OAAO6H,cAGhBkjB,EAAW1rB,UAAUyI,QAAU,WAC3B,GAAIR,GAAQ7I,IACZqD,GAAK4E,EAAE2iB,MACHjnB,IAAK3D,KAAK+sB,aAAe,6BAA+B/sB,KAAK6sB,QAC7DsC,SAAU,QACVnE,QAAS,SAASP,GACd5hB,EAAM6B,KAAO+f,EACb5hB,EAAM+H,YAKlB,IAAI/D,GAASwf,EAAIxf,OAAS,SAASvE,EAASC,GACxCvI,KAAKuB,OAAS+G,EACdtI,KAAKovB,KAAO7mB,EAAM6mB,MAAQ,KAG9BviB,GAAOjM,UAAUoM,WAAa,WAC1B,MAAO,eAGXH,EAAOjM,UAAUkM,eAAiB,WAC9B,MAAO9M,MAAKuB,OAAOC,UAAU,oBAGjCqL,EAAOjM,UAAU2L,OAAS,SAAS8iB,GAC/BrvB,KAAKuB,OAAOqK,KAAK9B,KACb,GAAIwlB,GAAWtvB,KAAKuB,QAChBgL,OAAQ8iB,KAKpB,IAAIC,GAAajD,EAAIiD,WAAajsB,EAAKC,MAAMsQ,QAAQvQ,EAAKgF,SAG1DinB,GAAW1uB,UAAUuT,MAAQ,SAAS7L,EAASC,GAC3CvI,KAAKuB,OAAS+G,EACdtI,KAAKuvB,gBAAkBjnB,EAAQxH,QAAQkJ,UAAU,8CACjDhK,KAAK+sB,aAAexkB,EAAMwkB,cAAgB,oCAC1C/sB,KAAKwvB,YAAcjnB,EAAMinB,aAAe,GACxCxvB,KAAKuM,OAAShE,EAAMgE,OACpBvM,KAAKuJ,QAAQP,KAAK,qBAAuBT,EAAMgE,OAAS,KACxDvM,KAAK4I,aAAaF,SAAS,qBAC3B1I,KAAKqJ,WAGTimB,EAAW1uB,UAAUgQ,OAAS,SAASoc,GAMnC,QAASC,GAAUpc,GACf,MAAO4e,GAAY/d,QAAQrR,EAAEwQ,GAAOvQ,SAAU,uCAElD,QAAS4sB,GAAUC,GACf,QAASva,GAAIS,GAET,IADA,GAAI+Z,GAAO/Z,EAAGtB,WACPqb,EAAKhrB,OAAS,GACjBgrB,EAAO,IAAMA,CAEjB,OAAOA,GAEX,GAAIC,GAAgBzb,KAAK0b,IAAI1b,KAAK2b,MAAMJ,EAAI,MACxCK,EAAS5b,KAAK2b,MAAMF,EAAgB,MACpCI,EAAY7b,KAAK2b,MAAMF,EAAgB,IAAM,GAC7CK,EAAWL,EAAgB,GAC3BD,EAAO,EAKX,OAJII,KACAJ,GAAQxa,EAAI4a,GAAU,KAE1BJ,GAAQxa,EAAI6a,GAAY,IAAM7a,EAAI8a,GAxBtC,GAAK1tB,KAAK0K,KAAV,CAGA,GAAI6B,GAASygB,GAAc3pB,EAAKC,MAAMmN,wBAClCgf,EAAeljB,EAAOmJ,QAAUrS,EAAKC,MAAMmN,sBAAsBzQ,KAAKuM,QAAUA,EAwBhFohB,EAAQ,GACR9kB,EAAQ7I,KACR8tB,EAAQ,CACZztB,GAAEgC,KAAKrC,KAAK0K,KAAKglB,QAAQ,SAASC,GAC9B,GAAIrB,GAAeqB,EAASC,SACxB3B,EAAS0B,EAASxuB,KACtB,IAAKoL,EAAOmJ,SAAYnJ,EAAOgH,KAAK0a,IAAY1hB,EAAOgH,KAAK+a,GAA5D,CAGAR,GACA,IAAIU,GAAYmB,EAASb,SACrBe,EAASF,EAASG,SAClBC,GAASJ,EAASb,SAAWe,EAC7BlB,EACIH,EACE3lB,EAAMtH,OAAOT,QAAQ4C,WAAa,sBAClCmF,EAAMtH,OAAOT,QAAQ4C,WAAa,mBAE5CiqB,IAAS9kB,EAAM0mB,iBACXxC,aAAclkB,EAAMkkB,aACpB5rB,MAAO8sB,EACPC,OAAQjB,EAAUgB,GAClBxqB,YAAa6qB;AACbM,aAAc3B,EAAUqB,GACxBO,MAAO3B,EAAU2C,GACjBpB,IAAKvB,EAAU6C,GACfjB,SAAU5B,EAAUsB,GACpBO,QAASY,EAASK,OAGlBf,aAAcU,EAASM,WACvBzsB,MAAOmrB,OAIf3uB,KAAKwJ,OAAOR,KAAK2kB,IACZphB,EAAOmJ,SAAWoY,EACnB9tB,KAAKsJ,QAAQsM,KAAKkY,GAAOoB,OAEzBlvB,KAAKsJ,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpB9tB,KAAKiI,EAAEinB,OAFPlvB,KAAKiI,EAAEQ,OAIXzI,KAAKuB,OAAO6H,eAGhBkmB,EAAW1uB,UAAUyI,QAAU,WAC3B,GAAIR,GAAQ7I,IACZqD,GAAK4E,EAAE2iB,MACHjnB,IAAK3D,KAAK+sB,aAAe,2CACzBriB,MACIwlB,OAAQ,QACRC,EAAGnwB,KAAKuM,OACR6jB,MAAOpwB,KAAKwvB,aAEhBL,SAAU,QACVnE,QAAS,SAASP,GACd5hB,EAAM6B,KAAO+f,EACb5hB,EAAM+H,cAKflH,OAAOrG,MCtQVA,KAAKgtB,gBAELhtB,KAAKgtB,aAAa3iB,IAAMrK,KAAKC,MAAMsQ,QAAQvQ,KAAKgF,UAEhDhF,KAAKgtB,aAAa3iB,IAAI9M,UAAUuT,MAAQ,SAAS7L,EAASC,GACtDvI,KAAKuB,OAAS+G,EACdtI,KAAKswB,eAAiBhoB,EAAQxH,QAAQkJ,UAAU,2BAChDhK,KAAKuJ,QAAQP,KAAKT,EAAMpH,OACpBoH,EAAMgoB,OACNvwB,KAAK0K,KAAOnC,EAAMgoB,MAEtBvwB,KAAKqJ,WAGThG,KAAKgtB,aAAa3iB,IAAI9M,UAAUgQ,OAAS,SAASoc,GAE9C,QAASC,GAAUpc,GACf,GAAI7C,GAAK3N,EAAEwQ,GAAOvQ,QAClB,OAAOiM,GAAOmJ,QAAU1H,EAAKzB,EAAOmF,QAAQ1D,EAAI,uCAHpD,GAAIzB,GAASygB,GAAc3pB,KAAKC,MAAMmN,wBAKlCkd,EAAQ,GACR9kB,EAAQ7I,KACR8tB,EAAQ,CACZzqB,MAAKhD,EAAEgC,KAAKrC,KAAK0K,KAAK,SAAS4T,GAC3B,GAAIpC,EACJ,IAAqB,gBAAVoC,GACP,GAAI,qBAAqB/K,KAAK+K,GAC1BpC,GAAavY,IAAK2a,OACf,CACHpC,GAAa/a,MAAOmd,EAAM5M,QAAQ,gDAAgD,IAAI8e,OACtF,IAAIC,GAASnS,EAAM/Z,MAAM,qCACrBksB,KACAvU,EAASvY,IAAM8sB,EAAO,IAEtBvU,EAAS/a,MAAMiB,OAAS,KACxB8Z,EAASzY,YAAcyY,EAAS/a,MAChC+a,EAAS/a,MAAQ+a,EAAS/a,MAAMuQ,QAAQ,mBAAmB,YAInEwK,GAAWoC,CAEf,IAAInd,GAAQ+a,EAAS/a,QAAU+a,EAASvY,KAAO,IAAI+N,QAAQ,uBAAuB,IAAIA,QAAQ,cAAc,OACxG/N,EAAMuY,EAASvY,KAAO,GACtBF,EAAcyY,EAASzY,aAAe,GACtCD,EAAQ0Y,EAAS1Y,OAAS,EAC1BG,KAAQ,eAAe4P,KAAK5P,KAC5BA,EAAM,UAAYA,IAEjB4I,EAAOmJ,SAAYnJ,EAAOgH,KAAKpS,IAAWoL,EAAOgH,KAAK9P,MAG3DqqB,IACAH,GAAS9kB,EAAMynB,gBACX3sB,IAAKA,EACLxC,MAAOA,EACP+sB,OAAQjB,EAAU9rB,GAClBqC,MAAOA,EACPC,YAAaA,EACbmrB,aAAc3B,EAAUxpB,GACxBC,WAAYmF,EAAMtH,OAAOT,QAAQ4C,gBAGzCmF,EAAMW,OAAOR,KAAK2kB,IACbphB,EAAOmJ,SAAWoY,EACnB9tB,KAAKsJ,QAAQsM,KAAKkY,GAAOoB,OAEzBlvB,KAAKsJ,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpB9tB,KAAKiI,EAAEinB,OAFPlvB,KAAKiI,EAAEQ,OAIXzI,KAAKuB,OAAO6H,cAGhB/F,KAAKgtB,aAAa3iB,IAAI9M,UAAUyI,QAAU,WAClCrJ,KAAK0K,MACL1K,KAAK4Q,UC/EbvN,KAAKsiB,aAGLtiB,KAAKsiB,UAAU9Y,OAAS,SAASvE,EAASC,GACtCvI,KAAKuB,OAAS+G,EACdtI,KAAKovB,KAAO7mB,EAAM6mB,MAAQ,MAG9B/rB,KAAKsiB,UAAU9Y,OAAOjM,UAAUoM,WAAa,WACzC,MAAO,8CAAgDhN,KAAKovB,MAGhE/rB,KAAKsiB,UAAU9Y,OAAOjM,UAAUkM,eAAiB,WAC7C,GAAI4jB,IACA5M,GAAM,SACN6M,GAAM,UACNC,GAAM,WAEV,OAAIF,GAAM1wB,KAAKovB,MACJpvB,KAAKuB,OAAOC,UAAU,iBAAmBxB,KAAKuB,OAAOC,UAAUkvB,EAAM1wB,KAAKovB,OAE1EpvB,KAAKuB,OAAOC,UAAU,aAAe,KAAOxB,KAAKovB,KAAO,KAIvE/rB,KAAKsiB,UAAU9Y,OAAOjM,UAAU2L,OAAS,SAAS8iB,GAC9CrvB,KAAKuB,OAAOqK,KAAK9B,KACb,GAAIzG,MAAKsiB,UAAUjY,IAAI1N,KAAKuB,QACxB6tB,KAAMpvB,KAAKovB,KACX7iB,OAAQ8iB,MAKpBhsB,KAAKsiB,UAAUjY,IAAMrK,KAAKC,MAAMsQ,QAAQvQ,KAAKgF,UAE7ChF,KAAKsiB,UAAUjY,IAAI9M,UAAUuT,MAAQ,SAAS7L,EAASC,GACnDvI,KAAKuB,OAAS+G,EACdtI,KAAKuM,OAAShE,EAAMgE,OACpBvM,KAAKswB,eAAiBhoB,EAAQxH,QAAQkJ,UAAU,+CAChDhK,KAAKovB,KAAO7mB,EAAM6mB,MAAQ,KAC1BpvB,KAAK4I,aAAaF,SAAS,6CAA+C1I,KAAKovB,MAC/EpvB,KAAKuJ,QAAQP,KAAKhJ,KAAKuM,QAAQ7D,SAAS,sBACxC1I,KAAKqJ,WAGThG,KAAKsiB,UAAUjY,IAAI9M,UAAUgQ,OAAS,SAASoc,GAG3C,QAASC,GAAUpc,GACf,MAAO4e,GAAY/d,QAAQrR,EAAEwQ,GAAOvQ,SAAU,uCAHlD,GAAIiM,GAASygB,GAAc3pB,KAAKC,MAAMmN,wBAClCgf,EAAeljB,EAAOmJ,QAAUrS,KAAKC,MAAMmN,sBAAsBzQ,KAAKuM,QAAUA,EAIhFohB,EAAQ,GACR9kB,EAAQ7I,KACR8tB,EAAQ,CACZzqB,MAAKhD,EAAEgC,KAAKrC,KAAK0K,KAAKmmB,MAAMtkB,OAAQ,SAASukB,GACzC,GAAI3vB,GAAQ2vB,EAAQ3vB,MAChBwC,EAAM,UAAYkF,EAAMumB,KAAO,uBAAyB2B,UAAU5vB,EAAMuQ,QAAQ,KAAK,MACrFjO,EAAcJ,KAAK4E,EAAE,SAASe,KAAK8nB,EAAQE,SAASpb,QACnDrJ,EAAOmJ,SAAYnJ,EAAOgH,KAAKpS,IAAWoL,EAAOgH,KAAK9P,MAG3DqqB,IACAH,GAAS9kB,EAAMynB,gBACX3sB,IAAKA,EACLxC,MAAOA,EACP+sB,OAAQjB,EAAU9rB,GAClBsC,YAAaA,EACbmrB,aAAc3B,EAAUxpB,GACxBC,WAAYmF,EAAMtH,OAAOT,QAAQ4C,gBAGzCmF,EAAMW,OAAOR,KAAK2kB,IACbphB,EAAOmJ,SAAWoY,EACnB9tB,KAAKsJ,QAAQsM,KAAKkY,GAAOoB,OAEzBlvB,KAAKsJ,QAAQb,OAEZ8D,EAAOmJ,SAAYoY,EAGpB9tB,KAAKiI,EAAEinB,OAFPlvB,KAAKiI,EAAEQ,OAIXzI,KAAKuB,OAAO6H,cAGhB/F,KAAKsiB,UAAUjY,IAAI9M,UAAUyI,QAAU,WACnC,GAAIR,GAAQ7I,IACZqD,MAAK4E,EAAE2iB,MACHjnB,IAAK,UAAYkF,EAAMumB,KAAO,8DAAgExqB,mBAAmB5E,KAAKuM,QAAU,eAChI4iB,SAAU,QACVnE,QAAS,SAASP,GACd5hB,EAAM6B,KAAO+f,EACb5hB,EAAM+H,aC5FlBqgB,OAAO,+BAA+B,SAAU,cAAe,SAAUhpB,EAAG5H,GACxE,YAQA,IAAI6wB,GAAsB,SAASC,EAAW/iB,GAC1C,GAAyB,mBAAd+iB,KACPnxB,KAAKyL,SAAW0lB,EAChBnxB,KAAKuB,OAAS4vB,EAAU5vB,OACxBvB,KAAK6G,QAAUsqB,EAAU5vB,OAAOsF,QAChC7G,KAAKc,QAAUqwB,EAAU5vB,OAAOT,QAChCd,KAAKkf,MAAQ9Q,EACTpO,KAAKkf,OAAO,CACZ,GAAIrW,GAAQ7I,IACZA,MAAKoxB,eAAiB,WAClBvoB,EAAMwoB,QAAQC,QAAQ,KAE1BtxB,KAAKuxB,eAAiB,WAClBJ,EAAUK,qBAAqB3oB,GAC/BxI,EAAEoxB,MAAM,WACJN,EAAUE,YAGlBrxB,KAAK0xB,eAAiB,WAClB7oB,EAAM8oB,UAEV3xB,KAAK4xB,iBAAmB,WACpB/oB,EAAMgpB,YAEV7xB,KAAKkf,MAAMlT,GAAG,SAAUhM,KAAKoxB,gBAC7BpxB,KAAKkf,MAAMlT,GAAG,SAAUhM,KAAKuxB,gBAC7BvxB,KAAKkf,MAAMlT,GAAG,SAAUhM,KAAK0xB,gBAC7B1xB,KAAKkf,MAAMlT,GAAG,WAAYhM,KAAK4xB,mBA6C3C,OAtCAvxB,GAAE6wB,EAAoBtwB,WAAWyT,QAC7Byd,OAAQ,SAASC,GACb,MAAOb,GAAoBtwB,UAAUmxB,GAAO9d,MAAMjU,KAAMW,MAAMC,UAAUsT,MAAMzT,KAAKC,UAAW,KAElG2wB,OAAQ,aACRW,OAAQ,aACR9C,KAAM,WAAa,MAAO,2BAC1BzmB,KAAM,aACNkpB,OAAQ,WACA3xB,KAAKkf,OACLlf,KAAKkf,MAAM5E,QAAQ,aAG3BuX,SAAU,WACF7xB,KAAKkf,OACLlf,KAAKkf,MAAM5E,QAAQ,eAG3B2S,UAAW,aACXgF,YAAa,aACbC,UAAW,aACXC,QAAS,WACDnyB,KAAKkf,OACLlf,KAAKkf,MAAM5E,QAAQ,YAG3BpR,QAAS,WACDlJ,KAAKkf,QACLlf,KAAKkf,MAAMnQ,IAAI,SAAU/O,KAAKoxB,gBAC9BpxB,KAAKkf,MAAMnQ,IAAI,SAAU/O,KAAKuxB,gBAC9BvxB,KAAKkf,MAAMnQ,IAAI,SAAU/O,KAAK0xB,gBAC9B1xB,KAAKkf,MAAMnQ,IAAI,WAAY/O,KAAK4xB,sBAGzCvnB,QAII6mB,IAIXD,OAAO,cAAe,SAAUhpB,EAAG5H,GAC/B,YACA,QACI+xB,SAAU,WACN,MAAO1oB,QAAOrG,KAAKC,OAEvB+uB,YAAa,WACT,MAAO3oB,QAAOrG,KAAKgJ,aAO/B4kB,OAAO,uBAAuB,SAAU,aAAc,WAAY,+BAAgC,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,GACxH,YAEA,IAAIjvB,GAAQgvB,EAASF,WAMjBI,EAAclvB,EAAMsQ,QAAQ2e,EA4BhC,OA1BAlyB,GAAEmyB,EAAY5xB,WAAWyT,QACrB2d,OAAQ,SAASS,GACbzyB,KAAK0yB,OAAOV,OAAOS,IAEvBvD,KAAM,WACFlvB,KAAK0yB,OAAOxD,QAEhBzmB,KAAM,WACEzI,KAAK0yB,QACL1yB,KAAK0yB,OAAOjqB,QAGpBkpB,OAAQ,WACJ3xB,KAAK0yB,OAAOf,UAEhBE,SAAU,SAASc,GACf3yB,KAAK0yB,OAAOb,aACPc,GAAeA,IAAe3yB,KAAK4yB,uBAAyBD,EAAWC,wBAA0B5yB,KAAK4yB,wBACvG5yB,KAAK4yB,sBAAsBf,YAGnC3oB,QAAS,WACLlJ,KAAK0yB,OAAOxpB,aAEjBmB,QAEImoB,IAKXvB,OAAO,2BAA4B,WAC/B,YAEA,IAAI4B,GAAa,s7CAGbC,GACAC,QACIC,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKtK,QAAQ,EAAG,GAAI,IAEzCuK,cAAe,SAAS/a,EAAQgb,GAC5B,MAAO,IAAIlb,OAAMgb,KAAKtK,OAAOxQ,EAAQgb,KAG7CC,WACIJ,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKI,YAAW,GAAI,IAAM,EAAG,KAElDH,cAAe,SAAS/a,EAAQgb,GAC5B,MAAO,IAAIlb,OAAMgb,KAAKI,YAAYF,GAASA,IAAiB,EAAPA,EAAiB,EAAPA,MAGvEG,SACIN,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKlK,QAAQ,GAAI9Q,OAAMob,YAAW,GAAI,IAAM,EAAG,MAEpEH,cAAe,SAAS/a,EAAQgb,GAC5B,MAAO,IAAIlb,OAAMgb,KAAKlK,QAAQ,GAAI9Q,OAAMob,YAAYF,GAASA,EAAO,IAAY,EAAPA,EAAUA,OAG3FI,SACIP,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKO,gBAAgB,EAAG,GAAI,EAAG,IAEpDN,cAAe,SAAS/a,EAAQgb,GAC5B,MAAO,IAAIlb,OAAMgb,KAAKO,eAAerb,EAAQ,EAAGgb,KAGxDM,SACIT,SAAU,WACN,GAAIU,GAAI,GAAIzb,OAAMgb,KAAKI,YAAYzhB,KAAK+hB,OAAQ/hB,KAAK+hB,QAAS/hB,KAAK+hB,MAAO/hB,KAAK+hB,OAE/E,OADAD,GAAEE,OAAO,IACFF,GAEXR,cAAe,SAAS/a,EAAQgb,GAC5B,GAAIO,GAAI,GAAIzb,OAAMgb,KAAKI,YAAYF,EAAOvhB,KAAK+hB,MAAM,GAAIR,EAAOvhB,KAAK+hB,MAAM,IAAKR,EAAOvhB,KAAK+hB,MAAOR,EAAOvhB,KAAK+hB,OAE/G,OADAD,GAAEE,OAAO,IACFF,IAGfG,MACIb,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKjK,MAAM,EAAG,GAAI,EAAG,EAAG,KAE7CkK,cAAe,SAAS/a,EAAQgb,GAC5B,MAAO,IAAIlb,OAAMgb,KAAKjK,KAAK7Q,EAAQ,EAAU,EAAPgb,EAAiB,GAAPA,KAGxDW,OACId,SAAU,WACN,GAAIe,GAAO,GAAI9b,OAAMgb,KAAKJ,EAC1B,OAAOkB,IAGXb,cAAe,SAAS/a,EAAQgb,GAC5B,GAAIY,GAAO,GAAI9b,OAAMgb,KAAKJ,EAG1B,OAFAkB,GAAKC,MAAMb,GACXY,EAAKvyB,UAAU2W,GACR4b,IAGfE,UACIjB,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKO,gBAAgB,EAAE,GAAI,EAAG,IAEnDN,cAAe,SAAS/a,EAAQgb,GAC5B,GAAI1sB,GAAQ,GAAIwR,OAAMgb,KAAKO,gBAAgB,EAAE,GAAI,EAAG,EAGpD,OAFA/sB,GAAMutB,MAAMb,GACZ1sB,EAAMjF,UAAU2W,GACT1R,IAGfytB,IAAO,SAASH,GACZ,OACIf,SAAU,WACN,MAAO,IAAI/a,OAAMgb,KAAKc,IAE1Bb,cAAe,SAAS/a,EAAQgb,GAE5B,MAAO,IAAIlb,OAAMgb,SAM7BkB,EAAe,SAAU1tB,GAIzB,MAHa,QAAVA,GAAmC,mBAAVA,KACxBA,EAAQ,UAEW,SAApBA,EAAMuK,OAAO,EAAE,GACP8hB,EAASoB,IAAIztB,EAAMuK,OAAO,KAEhCvK,IAASqsB,KACVrsB,EAAQ,UAELqsB,EAASrsB,IAKpB,OAFA0tB,GAAarB,SAAWA,EAEjBqB,IAIXlD,OAAO,qBAAqB,SAAU,aAAc,WAAY,8BAA+B,yBAA0B,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,EAAoB4B,GACnK,YAEA,IAAI7wB,GAAQgvB,EAASF,WASjBgC,EAAW9wB,EAAMsQ,QAAQ2e,EAqmB7B,OAnmBAlyB,GAAE+zB,EAASxzB,WAAWyT,QAClBF,MAAO,WAcH,GAbAnU,KAAKyL,SAAS4oB,WAAWC,WACzBt0B,KAAKsF,KAAO,OACZtF,KAAKu0B,aACLv0B,KAAKw0B,QAAS,EACdx0B,KAAKy0B,OAAO,EACRz0B,KAAKc,QAAQqgB,mBACbnhB,KAAK+yB,OAAO2B,YAAc10B,KAAKc,QAAQygB,kBACvCvhB,KAAK20B,QAAU,GAEf30B,KAAK20B,QAAU,EAEnB30B,KAAKmB,MAAQ8G,EAAE,0BAA0BU,SAAS3I,KAAKyL,SAASmpB,UAE5D50B,KAAKc,QAAQ6F,YAAa,CAC1B,GAAI0F,GAAWimB,EAASD,aACxBryB,MAAK60B,gBACkB,GAAIxoB,GAASyoB,eAAe90B,KAAKyL,SAAU,MAC3C,GAAIY,GAAS0oB,iBAAiB/0B,KAAKyL,SAAU,MAC7C,GAAIY,GAAS2oB,eAAeh1B,KAAKyL,SAAU,MAC3C,GAAIY,GAAS4oB,kBAAkBj1B,KAAKyL,SAAU,MAC9C,GAAIY,GAAS6oB,iBAAiBl1B,KAAKyL,SAAU,OAEhEzL,KAAKc,QAAQiH,YACb/H,KAAK60B,eAAe/qB,KACZ,GAAIuC,GAAS8oB,eAAen1B,KAAKyL,SAAU,MAC3C,GAAIY,GAAS+oB,eAAep1B,KAAKyL,SAAU,OAGvDzL,KAAKq1B,wBAC0B,GAAIhpB,GAASipB,iBAAiBt1B,KAAKyL,SAAU,OAE5EzL,KAAKu1B,YAAcv1B,KAAK60B,eAAelqB,OAAO3K,KAAKq1B,uBAEnD,KAAK,GAAIhkB,GAAI,EAAGA,EAAIrR,KAAKu1B,YAAYnzB,OAAQiP,IACzCrR,KAAKu1B,YAAYlkB,GAAGuhB,sBAAwB5yB,IAEhDA,MAAKw1B,sBAELx1B,MAAKw1B,eAAiBx1B,KAAKu1B,cAE/Bv1B,MAAKy1B,mBAAqB,EAEtBz1B,KAAKyL,SAASiqB,UACd11B,KAAKyL,SAASiqB,QAAQrB,WAAWC,WACjCt0B,KAAK21B,eAAiB,GAAI1d,OAAMgb,KAAKtK,QAAQ,EAAG,GAAI,GACpD3oB,KAAK21B,eAAeC,iBAAmB51B,KAAKyL,SAASiqB,QAAQG,UAAUD,iBACvE51B,KAAKyL,SAASiqB,QAAQI,WAAWC,SAAS/1B,KAAK21B,kBAGvDK,gBAAiB,WACb,GAAIjzB,GAAa/C,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS/D,WAAc,CAClF,OAAO/C,MAAKc,QAAQygB,mBAAqBxe,EAAU,IAAM/C,KAAKc,QAAQ0gB,sBAAwBxhB,KAAKc,QAAQygB,oBAAsBvhB,KAAKc,QAAQ6gB,wBAAwB,IAE1KuU,wBAAyB,WACrB,GAAInzB,GAAa/C,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS/D,WAAc,CAClF,OAAO/C,MAAKc,QAAQ2gB,4BAA8B1e,EAAU,IAAM/C,KAAKc,QAAQ4gB,+BAAiC1hB,KAAKc,QAAQ2gB,6BAA+BzhB,KAAKc,QAAQ6gB,wBAAwB,IAErM4S,WAAY,WACJ,SAAWv0B,MAAKkf,MAAMiX,eACfn2B,MAAKwT,IAEbxT,KAAK+yB,SACJ/yB,KAAK+yB,OAAO9U,eACLje,MAAK+yB,QAGhB/yB,KAAKo2B,aAAe,GAAIjC,GAAan0B,KAAKkf,MAAMpY,IAAI,UACpD9G,KAAK+yB,OAAS/yB,KAAKo2B,aAAapD,WAChChzB,KAAK+yB,OAAO6C,iBAAmB51B,KAC/BA,KAAK+yB,OAAOsD,aACZr2B,KAAKy1B,mBAAqB,GAE9BpE,OAAQ,SAASvwB,GACT,SAAWd,MAAKkf,MAAMiX,SAAW,UAAYr1B,IAAWA,EAAQwwB,QAEhEtxB,KAAKu0B,YAET,IAAI+B,GAAgB,GAAIre,OAAMse,MAAMv2B,KAAKkf,MAAMpY,IAAI,aAC/C0vB,EAAcx2B,KAAKc,QAAQwgB,eAAiB1P,KAAK6kB,KAAKz2B,KAAKkf,MAAMpY,IAAI,SAAW,GAAKxD,EAAM8S,gBAC1FpW,MAAK02B,aAAgB12B,KAAK22B,eAC3B32B,KAAK22B,aAAe32B,KAAKyL,SAASmrB,cAAcN,IAEpDt2B,KAAK62B,cAAgBL,EAAcx2B,KAAKyL,SAASyM,KAAK8b,MAClDh0B,KAAKy1B,qBAAuBz1B,KAAK62B,gBACjC72B,KAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAEmd,kBAEN92B,KAAK+yB,OAAOiB,MAAMh0B,KAAK62B,cAAgB72B,KAAKy1B,oBACxCz1B,KAAK+2B,YACL/2B,KAAK+2B,WAAW/C,MAAMh0B,KAAK62B,cAAgB72B,KAAKy1B,qBAGxDz1B,KAAK+yB,OAAOrW,SAAW1c,KAAK22B,aACxB32B,KAAK+2B,aACL/2B,KAAK+2B,WAAWra,SAAW1c,KAAK22B,aAAaK,SAASh3B,KAAKi3B,YAAYC,SAASl3B,KAAK62B,iBAEzF72B,KAAKy1B,mBAAqBz1B,KAAK62B,aAE/B,IAAIM,GAAcn3B,KAAKw1B,eAEnB4B,EAAU,CACVp3B,MAAKkf,MAAMpY,IAAI,qBACfswB,EAAU,GACVp3B,KAAKw1B,eAAiBx1B,KAAKq1B,uBAC3Br1B,KAAK+yB,OAAOsE,WAAa,EAAE,KAE3BD,EAAU,EACVp3B,KAAKw1B,eAAiBx1B,KAAK60B,eAC3B70B,KAAK+yB,OAAOsE,UAAY,MAExBr3B,KAAKs3B,UAAYt3B,KAAKyL,SAAS8rB,eAAiBv3B,KAAKy0B,QACjD0C,IAAgBn3B,KAAKw1B,gBACrB2B,EAAYjd,QAAQ,SAASP,GACzBA,EAAElR,SAGVzI,KAAKw1B,eAAetb,QAAQ,SAASP,GACjCA,EAAEuV,UAINlvB,KAAK+2B,aACL/2B,KAAK+2B,WAAWK,QAAUp3B,KAAKw3B,YAAwB,GAAVJ,EAAiBA,EAAU,KAG5Ep3B,KAAK+yB,OAAO9Z,UAAYjZ,KAAKw3B,YAAcx3B,KAAKc,QAAQkhB,4BAA8BhiB,KAAKc,QAAQihB,gBAEnG/hB,KAAK+yB,OAAOqE,QAAUp3B,KAAKc,QAAQqgB,kBAAoBiW,EAAU,GAIjE,IAAIpuB,GAAOhJ,KAAKkf,MAAMpY,IAAI,SACtB6I,EAAMC,SAASC,cAAc,MACjCF,GAAIO,UAAYlH,CAChB,IAAIyuB,GAAc9nB,EAAI+nB,aAAe/nB,EAAIgoB,WAAa,GAElD9mB,EAAQ4mB,GAAez3B,KAAKuB,OAAOC,UAAUxB,KAAKc,QAAQshB,uBAAyB,EACvFvR,GAAQvN,EAAM5B,YAAYmP,EAAO7Q,KAAKc,QAAQqhB,uBAKd,gBAArBniB,MAAKw3B,cACZ3mB,EAAQ7Q,KAAKw3B,YAAY9lB,QAAQrR,EAAEwQ,GAAOvQ,SAAS,0CAIvD,IAAIs3B,GAAc53B,KAAKkf,MAAMpY,IAAI,WAAa7B,WAAc,EAAG4yB,cAAe,UAC1EC,EAAYF,EAAW3yB,YAAc,EACrC8yB,EAAaH,EAAW5yB,aAAehF,KAAKc,QAAQmhB,iBAEpD+V,GACAC,cAAe,MAGF,KAAdH,IACCE,EAAW,aAAeF,EAAU5yB,QAAQ,GAAG,MAGjC,YAAf6yB,IACCC,EAAW/2B,MAAQ82B,EAGvB,IAAIG,GAAYjwB,EAAE,UAAUuJ,IAAIwmB,GAAYhvB,KAAK6H,EAEjD7Q,MAAKmB,MAAMg3B,QAAQC,OAAOF,EAE1B,IAAIG,GAAer4B,KAAKg2B,iBACxBh2B,MAAKmB,MAAMqQ,KACPjC,KAAMvP,KAAK22B,aAAa3e,EACxBvI,IAAKzP,KAAK22B,aAAane,EAAIxY,KAAK62B,cAAgB72B,KAAK20B,QAAU30B,KAAKc,QAAQohB,oBAAsB,GAAImW,EACtGjB,QAASA,GAEb,IAAIkB,GAAUt4B,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS7F,QAAWjB,KAAKkf,MAAMpY,IAAI,eAAiBxD,EAAMqT,kBAAkB3W,KAAKuB,SAASuF,IAAI,SAClJyxB,EAASv4B,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAASjE,KAAQ7C,KAAKc,QAAQogB,mBAAqB,IAC1GlhB,MAAK+yB,OAAO2B,YAAc2D,EAC1Br4B,KAAK+yB,OAAOyF,YAAcF,EAC1Bt4B,KAAK+yB,OAAOsE,UAAYkB,CACxB,IAAIE,GAAMz4B,KAAK22B,YACf32B,MAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAEqY,OAAOyG,IAEb,IAAIC,GAAY14B,KAAKwT,GAarB,IAZAxT,KAAKwT,IAAMxT,KAAKkf,MAAMpY,IAAI,SACtB9G,KAAKwT,KAAOxT,KAAKwT,MAAQklB,IACzB14B,KAAK24B,YACF34B,KAAK+yB,QACJ/yB,KAAK+yB,OAAOsD,cAGhBr2B,KAAK+2B,aAAe/2B,KAAKwT,MACzBxT,KAAK+2B,WAAW9Y,eACTje,MAAK+2B,YAGZ/2B,KAAKyL,SAASiqB,QAAS,CACvB11B,KAAK21B,eAAe1c,UAAYqf,CAChC,IAAIM,GAAU54B,KAAKyL,SAASotB,gBAAgBvC,GAC5CwC,EAAa94B,KAAKyL,SAASiqB,QAAQ1B,MAAQwC,EAC3CuC,EAAW,GAAI9gB,OAAM+gB,MAAMF,EAAYA,GACvC94B,MAAK21B,eAAesD,UAAUL,EAAQ5B,SAAS+B,GAAWA,EAAS7B,SAAS,IAGhF,KAAuB,mBAAZp2B,IAA6B,mBAAqBA,IAAaA,EAAQo4B,iBAAiB,CAC/F,GAAIrwB,GAAQ7I,IACZK,GAAEgC,KACMrC,KAAK6G,QAAQC,IAAI,SAAS4X,OAClB,SAAUya,GACN,MAASA,GAAGryB,IAAI,QAAU+B,EAAMqW,OAAWia,EAAGryB,IAAI,UAAY+B,EAAMqW,QAGhF,SAASle,EAAM+Y,EAAOwW,GAClB,GAAI6I,GAAOvwB,EAAM4C,SAAS4tB,yBAAyBr4B,EAC/Co4B,IAA4C,mBAA7BA,GAAKE,qBAAwF,mBAA1CF,GAAKE,oBAAoB3C,cAAkE,mBAA3ByC,GAAKG,mBAAoF,mBAAxCH,GAAKG,kBAAkB5C,cAC1MyC,EAAK/H,WAKrBrxB,KAAKy0B,MACLz0B,KAAKkvB,MAAK,GAENlvB,KAAKw0B,QAAUx0B,KAAKyI,QAGhCkwB,UAAW,WACP,GAAIa,GAAS,IACsC,oBAAxCx5B,MAAKyL,SAASguB,YAAYz5B,KAAKwT,MACtCgmB,EAAS,GAAI/lB,OACbzT,KAAKyL,SAASguB,YAAYz5B,KAAKwT,KAAOgmB,EACtCA,EAAO9lB,IAAM1T,KAAKwT,KAElBgmB,EAASx5B,KAAKyL,SAASguB,YAAYz5B,KAAKwT,IAE5C,IAAI3K,GAAQ7I,IACZ,IAAIw5B,EAAOrqB,MAAO,CAEVnP,KAAK+2B,YACL/2B,KAAK+2B,WAAW9Y,SAEpBje,KAAKyL,SAAS4oB,WAAWC,UACzB,IAAInlB,GAAQqqB,EAAOrqB,MACfE,EAASmqB,EAAOnqB,OAChBqqB,EAAW15B,KAAKkf,MAAMpY,IAAI,aAC1B6yB,EAAmC,mBAAbD,IAA4BA,EAClDE,EAAQ,KACRC,EAAa,KACbC,EAAc,IAElB,IAAIH,EAAa,CACbC,EAAQ,GAAI3hB,OAAMgb,IAClB,IAAI8G,GAAeL,EAASn1B,MAAM,sBAClCy1B,GAAc,EAAE,GAChBC,EAAOC,EAAAA,EACPC,EAAOD,EAAAA,EACPE,IAAQF,EAAAA,GACRG,IAAQH,EAAAA,GAEJI,EAAkB,SAASC,EAAMC,GACjC,GAAIC,GAAYF,EAAKrmB,MAAM,GAAG/H,IAAI,SAAS2F,EAAG2C,GAC1C,GAAId,GAAM+mB,WAAW5oB,GACrB6oB,EAAMlmB,EAAI,CAgBV,OAdId,GADAgnB,GACQhnB,EAAM,IAAQtE,GAEdsE,EAAM,IAAQxE,EAEtBqrB,IACA7mB,GAAOqmB,EAAWW,IAElBA,GACAR,EAAOvoB,KAAKgH,IAAIuhB,EAAMxmB,GACtB0mB,EAAOzoB,KAAK8G,IAAI2hB,EAAM1mB,KAEtBsmB,EAAOroB,KAAKgH,IAAIqhB,EAAMtmB,GACtBymB,EAAOxoB,KAAK8G,IAAI0hB,EAAMzmB,IAEnBA,GAGX,OADAqmB,GAAaS,EAAUvmB,OAAM,GACtBumB,EAGXV,GAAa7f,QAAQ,SAAS0gB,GAC1B,GAAIC,GAASD,EAAMr2B,MAAM,wBAA0B,GACnD,QAAOs2B,EAAO,IACd,IAAK,IACDjB,EAAM5H,OAAOsI,EAAgBO,GAC7B,MACJ,KAAK,IACDjB,EAAM5H,OAAOsI,EAAgBO,GAAQ,GACrC,MACJ,KAAK,IACDjB,EAAMkB,OAAOR,EAAgBO,GAC7B,MACJ,KAAK,IACDjB,EAAMkB,OAAOR,EAAgBO,GAAQ,GACrC,MACJ,KAAK,IACDjB,EAAMmB,aAAaT,EAAgBO,GACnC,MACJ,KAAK,IACDjB,EAAMmB,aAAaT,EAAgBO,GAAQ,GAC3C,MACJ,KAAK,IACDjB,EAAMoB,iBAAiBV,EAAgBO,GACvC,MACJ,KAAK,IACDjB,EAAMoB,iBAAiBV,EAAgBO,GAAQ,OAKvDhB,EAAajoB,KAAK5R,KAAKc,QAAQugB,sBAAwB,MAAQ,OAAO+Y,EAAOH,EAAMI,EAAOF,GAAQ,EAClGL,EAAc,GAAI7hB,OAAMse,OAAO6D,EAAOH,GAAQ,GAAII,EAAOF,GAAQ,GAC5Dn6B,KAAKc,QAAQqgB,oBACdnhB,KAAK20B,SAAW0F,EAAOF,IAAS,EAAIN,QAGxCA,GAAajoB,KAAK5R,KAAKc,QAAQugB,sBAAwB,MAAQ,OAAOlS,EAAOE,GAAU,EACvFyqB,EAAc,GAAI7hB,OAAMse,MAAM,EAAE,GAC3Bv2B,KAAKc,QAAQqgB,oBACdnhB,KAAK20B,QAAUtlB,GAAU,EAAIwqB,GAGrC,IAAIoB,GAAU,GAAIhjB,OAAMijB,OAAO1B,EAW/B,IAVAyB,EAAQE,QAAS,EACbxB,IACAsB,EAAU,GAAIhjB,OAAMmjB,MAAMxB,EAAOqB,GACjCA,EAAQ7D,QAAU,IAIlB6D,EAAQI,SAAU,EAClBzB,EAAMhE,iBAAmB51B,MAEzBA,KAAKc,QAAQsgB,iBAAkB,CAC/B,GAAIka,GAAct7B,KAAKo2B,aAAalD,cAAc4G,EAAaD,EAC/DoB,GAAU,GAAIhjB,OAAMmjB,MAAME,EAAaL,GACvCA,EAAQ7D,QAAU,IAClB6D,EAAQI,SAAU,EAClBC,EAAY1F,iBAAmB51B,KAEnCA,KAAKi3B,YAAc6C,EAAYyB,OAAO1B,GACtC75B,KAAK+2B,WAAakE,EAClBj7B,KAAK+2B,WAAWnB,iBAAmB/sB,EACnC7I,KAAK+2B,WAAW/C,MAAMh0B,KAAK62B,cAAgBgD,GAC3C75B,KAAK+2B,WAAWra,SAAW1c,KAAK22B,aAAaK,SAASh3B,KAAKi3B,YAAYC,SAASl3B,KAAK62B,gBACrF72B,KAAK+2B,WAAWyE,YAAYx7B,KAAK+yB,YAEjC9qB,GAAEuxB,GAAQxtB,GAAG,OAAQ,WACjBnD,EAAM8vB,eAIlB8C,WAAY,SAASC,GACb17B,KAAKc,QAAQ6F,YACR3G,KAAKuB,OAAOqJ,YACb5K,KAAK02B,aAAc,EACnB12B,KAAK22B,aAAe32B,KAAK22B,aAAa3d,IAAI0iB,GAC1C17B,KAAKqxB,UAGTrxB,KAAKyL,SAASyM,KAAKujB,WAAWC,IAGtCC,WAAY,WACR37B,KAAKyL,SAASmwB,4BAA4B,SAC1C,IAAIC,GAAU77B,KAAKyL,SAASqwB,kBAAkB,aAAa,KAC3DD,GAAQjJ,sBAAwB5yB,KAChC67B,EAAQE,QAEZpK,OAAQ,WACJqK,aAAah8B,KAAKi8B,cAClBj8B,KAAKs3B,UAAW,EAChBt3B,KAAK+yB,OAAO2B,YAAc10B,KAAKk2B,0BAC3Bl2B,KAAKyL,SAAS8rB,eAAiBv3B,KAAKw0B,QACpCx0B,KAAKw1B,eAAetb,QAAQ,SAASP,GACjCA,EAAEuV,QAGV,IAAIgN,GAAOl8B,KAAKkf,MAAMpY,IAAI,MACtBo1B,IACAj0B,EAAE,gBAAgB5F,KAAK,WACnB,GAAI4K,GAAMhF,EAAEjI,KACRiN,GAAInE,KAAK,cAAgBozB,GACzBjvB,EAAIvE,SAAS,cAIpB1I,KAAKc,QAAQ6F,aACd3G,KAAK27B,aAGL37B,KAAKyL,SAASiqB,UACd11B,KAAK21B,eAAejB,YAAc10B,KAAKc,QAAQ+f,yBAC/C7gB,KAAK21B,eAAe6C,YAAcx4B,KAAKc,QAAQ8f,yBAG/C5gB,KAAKw0B,OACLx0B,KAAKkvB,MAAK,GAGVlvB,KAAKm8B,eAAc,GAEvBn8B,KAAK8xB,OAAO,WAEhBsK,YAAa,WACTp8B,KAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAElR,eAECzI,MAAkB,eAE7B6xB,SAAU,SAASc,GACf,IAAKA,GAAcA,EAAWC,wBAA0B5yB,KAAM,CAC1DA,KAAKs3B,UAAW,CAChB,IAAIzuB,GAAQ7I,IACZA,MAAKq8B,gBAAkBhR,WAAW,WAAaxiB,EAAMuzB,eAAkB,KACvEp8B,KAAK+yB,OAAO2B,YAAc10B,KAAKg2B,kBAC/B/tB,EAAE,gBAAgBikB,YAAY,YAC1BlsB,KAAKyL,SAASiqB,UACd11B,KAAK21B,eAAe6C,YAAc9zB,QAGlC1E,KAAKw0B,QACLx0B,KAAKyL,SAASmwB,4BAA4B,UAC1C57B,KAAKyI,QAGLzI,KAAKs8B,eAAc,GAEvBt8B,KAAK8xB,OAAO,cAGpByK,WAAY,WACR,GAAI1zB,GAAQ7I,IACZA,MAAKi8B,aAAe5Q,WAAW,WAC3BxiB,EAAMJ,QACP,MAEPA,KAAM,WACF,GAAII,GAAQ7I,IACZA,MAAKy0B,OAAQ,EACbz0B,KAAKw0B,QAAS,EACiB,mBAApBx0B,MAAK+2B,aACZ/2B,KAAK+2B,WAAWK,QAAU,GAE9Bp3B,KAAKo8B,cACLp8B,KAAK+yB,OAAOqE,QAAU,EACtBp3B,KAAKmB,MAAMqQ,IAAI,UAAW,GAC1BxR,KAAK21B,eAAeyB,QAAU,EAG9B/2B,EAAEgC,KACMrC,KAAK6G,QAAQC,IAAI,SAAS4X,OAClB,SAAUya,GACN,MAASA,GAAGryB,IAAI,QAAU+B,EAAMqW,OAAWia,EAAGryB,IAAI,UAAY+B,EAAMqW,QAGhF,SAASle,EAAM+Y,EAAOwW,GAClB,GAAI6I,GAAOvwB,EAAM4C,SAAS4tB,yBAAyBr4B,EAC/Co4B,IAA4C,mBAA7BA,GAAKE,qBAAwF,mBAA1CF,GAAKE,oBAAoB3C,cAAkE,mBAA3ByC,GAAKG,mBAAoF,mBAAxCH,GAAKG,kBAAkB5C,cAC1MyC,EAAK3wB,SAIrBzI,KAAKs8B,eAAc,IAEvBpN,KAAM,SAASuF,GACX,GAAI5rB,GAAQ7I,IACZA,MAAKy0B,MAAQA,EACTz0B,KAAKy0B,OAC0B,mBAApBz0B,MAAK+2B,aACZ/2B,KAAK+2B,WAAWK,QAAUp3B,KAAKc,QAAQmgB,eAE3CjhB,KAAK+yB,OAAOqE,QAAUp3B,KAAKc,QAAQmgB,cACnCjhB,KAAKmB,MAAMqQ,IAAI,UAAWxR,KAAKc,QAAQmgB,eACvCjhB,KAAK21B,eAAeyB,QAAUp3B,KAAKc,QAAQmgB,gBAE3CjhB,KAAK21B,eAAeyB,QAAU,EAC9Bp3B,KAAKw0B,QAAS,EACdx0B,KAAKqxB,UAGThxB,EAAEgC,KACMrC,KAAK6G,QAAQC,IAAI,SAAS4X,OAClB,SAAUya,GACN,MAASA,GAAGryB,IAAI,QAAU+B,EAAMqW,OAAWia,EAAGryB,IAAI,UAAY+B,EAAMqW,QAGhF,SAASle,EAAM+Y,EAAOwW,GAClB,GAAI6I,GAAOvwB,EAAM4C,SAAS4tB,yBAAyBr4B,EAC/Co4B,IAA4C,mBAA7BA,GAAKE,qBAAwF,mBAA1CF,GAAKE,oBAAoB3C,cAAkE,mBAA3ByC,GAAKG,mBAAoF,mBAAxCH,GAAKG,kBAAkB5C,cAC1MyC,EAAKlK,KAAKrmB,EAAM4rB,UAKpC6H,cAAe,SAASE,GACpB,GAAI3zB,GAAQ7I,IACZK,GAAEgC,KACMrC,KAAK6G,QAAQC,IAAI,SAAS4X,OAClB,SAAUya,GACN,MAAQA,GAAGryB,IAAI,UAAY+B,EAAMqW,QAG7C,SAASle,EAAM+Y,EAAOwW,GAClB,GAAI6I,GAAOvwB,EAAM4C,SAAS4tB,yBAAyBr4B,EAAK8F,IAAI,MACxDsyB,IAAQA,EAAK3E,QACT+H,EAAQpD,EAAKmD,aAAsBnD,EAAK3wB,WAKhE0zB,cAAe,SAAS1H,GACpB,GAAI5rB,GAAQ7I,IACZK,GAAEgC,KACMrC,KAAK6G,QAAQC,IAAI,SAAS4X,OAClB,SAAUya,GACN,MAAQA,GAAGryB,IAAI,UAAY+B,EAAMqW,QAG7C,SAASle,EAAM+Y,EAAOwW,GAClB,GAAI6I,GAAOvwB,EAAM4C,SAAS4tB,yBAAyBr4B,EAAK8F,IAAI,MAC5D,IAAIsyB,GAAQA,EAAK5E,SACb4E,EAAKlK,KAAKuF,IACLA,GAAM,CACP,GAAIgI,GAAY5zB,EAAM4C,SAASyM,KAAKwkB,YAAYC,QAAQvD,EAAKla,MAAMtD,GAC/D6gB,MAAc,GACd5zB,EAAM4C,SAASyM,KAAKwkB,YAAYE,OAAOH,EAAW,OAO9ExP,UAAW,SAAS4P,GAChB,GAAIC,GAAUD,IAAiB,CAC3B78B,MAAKw3B,cAAgBsF,IAGzB98B,KAAKw3B,YAAcsF,EACnB98B,KAAKqxB,SACLrxB,KAAKyL,SAASsxB,uBAElB9K,YAAa,WACJjyB,KAAKw3B,cAGVx3B,KAAKw3B,aAAc,EACnBx3B,KAAKqxB,SACLrxB,KAAKyL,SAASsxB,uBAElBC,WAAY,WACR,GAAI/lB,GAAUjX,KAAKyL,SAASwxB,cAAcj9B,KAAK22B,cAC/ClM,GACI/N,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAGfxY,MAAKyL,SAAS8rB,cACdv3B,KAAKkf,MAAM7D,IAAIoP,IAGvByH,UAAW,SAASgL,EAAQC,GACpBA,IACAn9B,KAAKyL,SAAS2xB,cACdp9B,KAAK2xB,WAGbQ,QAAS,SAAS+K,EAAQC,GACtB,GAAIn9B,KAAKyL,SAASirB,aAAe12B,KAAKyL,SAAS8rB,aAC3Cv3B,KAAKg9B,iBAEL,IAAIh9B,KAAKw0B,OAAQ,CACb,GAAIza,GAAQ/Z,KAAKyL,SAASyM,KAAKwkB,YAAYC,QAAQ38B,KAAKkf,MAAMtD,GAC1D7B,MAAU,GACV/Z,KAAKyL,SAASyM,KAAKwkB,YAAYE,OAAO7iB,EAAO,GAEjD/Z,KAAKkvB,MAAK,GACVlvB,KAAK2xB,aAEAwL,IAAan9B,KAAKkf,MAAMpY,IAAI,qBAC7B9G,KAAK27B,aAET37B,KAAKkf,MAAM5E,QAAQ,UAG3Bta,MAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EAC5B12B,KAAK02B,aAAc,GAEvBxtB,QAAS,SAASg0B,GACdl9B,KAAK8xB,OAAO,WACZ9xB,KAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAEzQ,YAENlJ,KAAK+yB,OAAO9U,SACZje,KAAKmB,MAAM8c,SACPje,KAAKyL,SAASiqB,SACd11B,KAAK21B,eAAe1X,SAEpBje,KAAK+2B,YACL/2B,KAAK+2B,WAAW9Y,YAGzB5T,QAEI+pB,IAKXnD,OAAO,iBAAiB,SAAU,aAAc,WAAY,+BAAgC,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,GAClH,YAEA,IAAIjvB,GAAQgvB,EAASF,WAKjBzV,EAAOrZ,EAAMsQ,QAAQ2e,EAuTzB,OArTAlyB,GAAEsc,EAAK/b,WAAWyT,QACdF,MAAO,WAwBH,GAvBAnU,KAAKyL,SAAS6xB,WAAWhJ,WACzBt0B,KAAKsF,KAAO,OACZtF,KAAKw0B,QAAS,EACdx0B,KAAKy0B,OAAQ,EACbz0B,KAAKw3B,aAAc,EACnBx3B,KAAKs5B,oBAAsBt5B,KAAKyL,SAAS4tB,yBAAyBr5B,KAAKkf,MAAMpY,IAAI,SACjF9G,KAAKu5B,kBAAoBv5B,KAAKyL,SAAS4tB,yBAAyBr5B,KAAKkf,MAAMpY,IAAI,OAC/E9G,KAAKu9B,OAASv9B,KAAKyL,SAAS+xB,aAAax9B,MACzCA,KAAKy9B,KAAO,GAAIxlB,OAAMgb,KACtBjzB,KAAKy9B,KAAKzkB,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAC7BhZ,KAAKy9B,KAAK7H,iBAAmB51B,KAC7BA,KAAKy9B,KAAK/I,YAAc10B,KAAKc,QAAQyhB,kBACrCviB,KAAK09B,YAAc,EACnB19B,KAAKiD,MAAQ,GAAIgV,OAAMgb,KACvBjzB,KAAKiD,MAAM+V,KACD,EAAG,IACHhZ,KAAKc,QAAQgiB,kBAAmB9iB,KAAKc,QAAQiiB,iBAAmB,IAChE,EAAG/iB,KAAKc,QAAQiiB,mBAE1B/iB,KAAKiD,MAAM06B,MAAQ,GAAI1lB,OAAMse,OAAQv2B,KAAKc,QAAQgiB,kBAAoB,EAAG9iB,KAAKc,QAAQiiB,iBAAmB,IACzG/iB,KAAKiD,MAAM2yB,iBAAmB51B,KAC9BA,KAAK4V,KAAO3N,EAAE,wCAAwCU,SAAS3I,KAAKyL,SAASmpB,UAC7E50B,KAAK49B,YAAc,EACf59B,KAAKc,QAAQ6F,YAAa,CAC1B,GAAI0F,GAAWimB,EAASD,aACxBryB,MAAK60B,gBACkB,GAAIxoB,GAASwxB,eAAe79B,KAAKyL,SAAU,MAC3C,GAAIY,GAASyxB,iBAAiB99B,KAAKyL,SAAU,OAEpEzL,KAAKq1B,wBAC0B,GAAIhpB,GAAS0xB,iBAAiB/9B,KAAKyL,SAAU,OAE5EzL,KAAKu1B,YAAcv1B,KAAK60B,eAAelqB,OAAO3K,KAAKq1B,uBACnD,KAAK,GAAIhkB,GAAI,EAAGA,EAAIrR,KAAKu1B,YAAYnzB,OAAQiP,IACzCrR,KAAKu1B,YAAYlkB,GAAGuhB,sBAAwB5yB,IAEhDA,MAAKw1B,sBAELx1B,MAAKw1B,eAAiBx1B,KAAKu1B,cAG3Bv1B,MAAKyL,SAASiqB,UACd11B,KAAKyL,SAASiqB,QAAQ4H,WAAWhJ,WACjCt0B,KAAKg+B,aAAe,GAAI/lB,OAAMgb,KAC9BjzB,KAAKg+B,aAAahlB,KAAK,EAAE,IAAI,EAAE,IAC/BhZ,KAAKg+B,aAAapI,iBAAmB51B,KAAKyL,SAASiqB,QAAQG,UAAUD,iBACrE51B,KAAKg+B,aAAatJ,YAAc,IAGxCsB,gBAAiB,WACb,GAAIjzB,GAAa/C,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS/D,WAAc,CAClF,OAAO/C,MAAKc,QAAQyhB,mBAAqBxf,EAAU,IAAM/C,KAAKc,QAAQ0hB,sBAAwBxiB,KAAKc,QAAQyhB,oBAAsBviB,KAAKc,QAAQ6hB,wBAAwB,IAE1KuT,wBAAyB,WACrB,GAAInzB,GAAa/C,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS/D,WAAc,CAClF,OAAO/C,MAAKc,QAAQ2hB,4BAA8B1f,EAAU,IAAM/C,KAAKc,QAAQ4hB,+BAAiC1iB,KAAKc,QAAQ2hB,6BAA+BziB,KAAKc,QAAQ6hB,wBAAwB,IAErMsb,eAAgB,WACZ,GAAIl7B,GAAa/C,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS/D,WAAc,CAClF,OAAO,IAAKA,EAAU,IAAO/C,KAAKc,QAAQkiB,qBAAuBhjB,KAAKc,QAAQiiB,iBAAoB,IAAM/iB,KAAKc,QAAQ6hB,wBAAwB,IAEjJ0O,OAAQ,WACJ,GAAIzU,GAAO5c,KAAKkf,MAAMpY,IAAI,QACtB+V,EAAK7c,KAAKkf,MAAMpY,IAAI,KACxB,IAAK8V,GAASC,KAAO7c,KAAKw0B,QAAWx0B,KAAKy0B,OAA1C,CAKA,GAFAz0B,KAAKs5B,oBAAsBt5B,KAAKyL,SAAS4tB,yBAAyBzc,GAClE5c,KAAKu5B,kBAAoBv5B,KAAKyL,SAAS4tB,yBAAyBxc,GACxB,mBAA7B7c,MAAKs5B,qBAAyE,mBAA3Bt5B,MAAKu5B,mBAC1Dv5B,KAAKs5B,oBAAoB9E,SAAWx0B,KAAKs5B,oBAAoB7E,OAC7Dz0B,KAAKu5B,kBAAkB/E,SAAWx0B,KAAKu5B,kBAAkB9E,MAE9D,WADAz0B,MAAKyI,MAGT,IAmBIy1B,GAnBA7F,EAAer4B,KAAKg2B,kBACpBmI,EAAen+B,KAAKi+B,iBACpBG,EAAOp+B,KAAKs5B,oBAAoB3C,aAChC0H,EAAOr+B,KAAKu5B,kBAAkB5C,aAC9B2H,EAAKD,EAAKrH,SAASoH,GACnBG,EAAKD,EAAGl8B,OACRo8B,EAAKF,EAAG/C,OAAOgD,GACfE,EAAS,GAAIxmB,OAAMse,QAASiI,EAAGhmB,EAAGgmB,EAAGxmB,IACrC0mB,EAAa1+B,KAAKu9B,OAAOoB,YAAY3+B,MACrC07B,EAAS+C,EAAOvH,SAAUl3B,KAAKc,QAAQmiB,oBAAsByb,GAC7DE,EAAOR,EAAKplB,IAAI0iB,GAChBmD,EAAOR,EAAKrlB,IAAI0iB,GAChBoD,EAAKR,EAAGS,MACRC,EAAaP,EAAOvH,SAASl3B,KAAKc,QAAQ8hB,oBAAsB,GAAMub,EAAen+B,KAAKc,QAAQiiB,kBAClGkc,EAAUX,EAAG/C,OAAO,GACpBjD,EAAUt4B,KAAKw3B,aAAex3B,KAAKc,QAAQoiB,wBACtCljB,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS7F,QACnDjB,KAAKkf,MAAMpY,IAAI,eAAiBxD,EAAMqT,kBAAkB3W,KAAKuB,SAASuF,IAAI,SAC/EyxB,EAASv4B,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAASjE,KAAQ7C,KAAKc,QAAQogB,mBAAqB,IAGtGlhB,MAAKkf,MAAMpY,IAAI,qBAAuB9G,KAAKs5B,oBAAoBpa,MAAMpY,IAAI,qBAAuB9G,KAAKu5B,kBAAkBra,MAAMpY,IAAI,qBACjIo3B,EAAW,GACXl+B,KAAKy9B,KAAKpG,WAAa,EAAG,KAE1B6G,EAAWl+B,KAAKy0B,MAAQz0B,KAAKc,QAAQmgB,cAAgB,EACrDjhB,KAAKy9B,KAAKpG,UAAY,KAG1B,IAAIF,GAAcn3B,KAAKw1B,cAEvBx1B,MAAKiD,MAAMi8B,QACNl/B,KAAKkf,MAAM+W,IAAI,UAAYj2B,KAAKkf,MAAMpY,IAAI,SAAS7D,QACnDjD,KAAKkf,MAAM+W,IAAI,UACyB,mBAAlCj2B,MAAKkf,MAAMpY,IAAI,SAAS7D,MAEnCjD,KAAKw1B,eAAiBx1B,KAAKkf,MAAMpY,IAAI,oBAAsB9G,KAAKq1B,uBAAyBr1B,KAAK60B,eAE1F70B,KAAKs3B,UAAYt3B,KAAKyL,SAAS8rB,cAAgBJ,IAAgBn3B,KAAKw1B,iBACpE2B,EAAYjd,QAAQ,SAASP,GACzBA,EAAElR,SAENzI,KAAKw1B,eAAetb,QAAQ,SAASP,GACjCA,EAAEuV,UAIVlvB,KAAK22B,aAAeiI,EAAK5lB,IAAI6lB,GAAMtD,OAAO,GAC1Cv7B,KAAKy9B,KAAK/I,YAAc2D,EACxBr4B,KAAKy9B,KAAKjF,YAAcF,EACxBt4B,KAAKy9B,KAAKpG,UAAYkB,EACtBv4B,KAAKy9B,KAAKrG,QAAU8G,EACpBl+B,KAAKy9B,KAAK3kB,SAAS,GAAGC,MAAQqlB,EAC9Bp+B,KAAKy9B,KAAK3kB,SAAS,GAAGC,MAAQ/Y,KAAK22B,aACnC32B,KAAKy9B,KAAK3kB,SAAS,GAAGqmB,SAAWF,EAAQ/H,UAAS,GAClDl3B,KAAKy9B,KAAK3kB,SAAS,GAAGsmB,UAAYH,EAClCj/B,KAAKy9B,KAAK3kB,SAAS,GAAGC,MAAQslB,EAC9Br+B,KAAKiD,MAAM+wB,MAAMmK,EAAen+B,KAAK09B,aACrC19B,KAAK09B,YAAcS,EACnBn+B,KAAKiD,MAAMgW,UAAYqf,EACvBt4B,KAAKiD,MAAMm0B,QAAU8G,EACrBl+B,KAAKiD,MAAM2wB,OAAOkL,EAAK9+B,KAAK49B,YAAa59B,KAAKiD,MAAMo8B,OAAOlnB,QAC3DnY,KAAKiD,MAAMyZ,SAAW1c,KAAK22B,aAE3B32B,KAAK49B,YAAckB,EACfA,EAAK,KACLA,GAAM,IACNE,EAAaA,EAAW9H,UAAS,IAEjC4H,GAAK,KACLA,GAAM,IACNE,EAAaA,EAAW9H,UAAS,GAErC,IAAIrmB,GAAQ7Q,KAAKkf,MAAMpY,IAAI,UAAY9G,KAAKuB,OAAOC,UAAUxB,KAAKc,QAAQqiB,uBAAyB,EACnGtS,GAAQvN,EAAM5B,YAAYmP,EAAO7Q,KAAKc,QAAQqhB,uBACd,gBAArBniB,MAAKw3B,YACZx3B,KAAK4V,KAAK5M,KAAKhJ,KAAKw3B,YAAY9lB,QAAQrR,EAAEwQ,GAAOvQ,SAAS,2CAE1DN,KAAK4V,KAAKA,KAAK/E,EAEnB,IAAIyuB,GAAWt/B,KAAK22B,aAAa3d,IAAIgmB,EACrCh/B,MAAK4V,KAAKpE,KACNjC,KAAM+vB,EAAStnB,EACfvI,IAAK6vB,EAAS9mB,EACd+mB,UAAW,UAAYT,EAAK,OAC5BU,iBAAkB,UAAYV,EAAK,OACnCW,oBAAqB,UAAYX,EAAK,OACtC1H,QAAS8G,IAEbl+B,KAAK0/B,WAAaZ,CAElB,IAAIrG,GAAMz4B,KAAK22B,YACf32B,MAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAEqY,OAAOyG,KAGTz4B,KAAKyL,SAASiqB,UACd11B,KAAKg+B,aAAaxF,YAAcF,EAChCt4B,KAAKg+B,aAAallB,SAAS,GAAGC,MAAQ/Y,KAAKyL,SAASotB,gBAAgB,GAAI5gB,OAAMse,MAAMv2B,KAAKs5B,oBAAoBpa,MAAMpY,IAAI,cACvH9G,KAAKg+B,aAAallB,SAAS,GAAGC,MAAQ/Y,KAAKyL,SAASotB,gBAAgB,GAAI5gB,OAAMse,MAAMv2B,KAAKu5B,kBAAkBra,MAAMpY,IAAI,iBAG7H2B,KAAM,WACFzI,KAAKw0B,QAAS,EACdx0B,KAAKy0B,OAAQ,EAEbz0B,KAAK4V,KAAKnN,OACVzI,KAAKy9B,KAAKyB,SAAU,EACpBl/B,KAAKiD,MAAMi8B,SAAU,EACrBl/B,KAAKg+B,aAAakB,SAAU,GAEhChQ,KAAM,SAASuF,GACXz0B,KAAKy0B,MAAQA,EACTz0B,KAAKy0B,OACLz0B,KAAK4V,KAAKpE,IAAI,UAAW,IACzBxR,KAAKy9B,KAAKrG,QAAU,GACpBp3B,KAAKiD,MAAMm0B,QAAU,GACrBp3B,KAAKg+B,aAAa5G,QAAU,KAE5Bp3B,KAAKw0B,QAAS,EAEdx0B,KAAK4V,KAAKpE,IAAI,UAAW,GACzBxR,KAAKy9B,KAAKrG,QAAU,EACpBp3B,KAAKiD,MAAMm0B,QAAU,EACrBp3B,KAAKg+B,aAAa5G,QAAU,GAEhCp3B,KAAK4V,KAAKsZ,OACVlvB,KAAKy9B,KAAKyB,SAAU,EACpBl/B,KAAKiD,MAAMi8B,SAAU,EACrBl/B,KAAKg+B,aAAakB,SAAU,EAC5Bl/B,KAAKqxB,UAETsK,WAAY,WACR37B,KAAKyL,SAASmwB,4BAA4B,SAC1C,IAAIC,GAAU77B,KAAKyL,SAASqwB,kBAAkB,aAAa,KAC3DD,GAAQjJ,sBAAwB5yB,KAChC67B,EAAQE,QAEZpK,OAAQ,WACJ3xB,KAAKs3B,UAAW,EAChBt3B,KAAKy9B,KAAK/I,YAAc10B,KAAKk2B,0BACzBl2B,KAAKyL,SAAS8rB,cACdv3B,KAAKw1B,eAAetb,QAAQ,SAASP,GACjCA,EAAEuV,SAGLlvB,KAAKc,QAAQ6F,aACd3G,KAAK27B,aAET37B,KAAK8xB,OAAO,WAEhBD,SAAU,SAASc,GACVA,GAAcA,EAAWC,wBAA0B5yB,OACpDA,KAAKs3B,UAAW,EACZt3B,KAAKc,QAAQ6F,aACb3G,KAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAElR,SAGNzI,KAAKw0B,QACLx0B,KAAKyL,SAASmwB,4BAA4B,UAE9C57B,KAAKy9B,KAAK/I,YAAc10B,KAAKg2B,kBAC7Bh2B,KAAK8xB,OAAO,cAGpBI,UAAW,SAASgL,EAAQC,GACpBA,IACAn9B,KAAKyL,SAAS2xB,cACdp9B,KAAK2xB,WAGbQ,QAAS,SAAS+K,EAAQC,IACjBn9B,KAAKuB,OAAOqJ,WAAa5K,KAAKyL,SAASirB,aACxC12B,KAAKs5B,oBAAoB0D,aACzBh9B,KAAKu5B,kBAAkByD,aACvBh9B,KAAKs5B,oBAAoB5C,aAAc,EACvC12B,KAAKu5B,kBAAkB7C,aAAc,IAEhCyG,GACDn9B,KAAK27B,aAET37B,KAAKkf,MAAM5E,QAAQ,YAEvBta,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,GAEhC+E,WAAY,SAASC,GACb17B,KAAKc,QAAQ6F,YACR3G,KAAKc,QAAQ8J,YACd5K,KAAKs5B,oBAAoBmC,WAAWC,GACpC17B,KAAKu5B,kBAAkBkC,WAAWC,IAGtC17B,KAAKyL,SAASgwB,WAAWC,IAGjCzO,UAAW,SAAS4P,GAChB,GAAIC,GAAUD,IAAiB,CAC3B78B,MAAKw3B,cAAgBsF,IAGzB98B,KAAKw3B,YAAcsF,EACnB98B,KAAKqxB,SACLrxB,KAAKyL,SAASsxB,uBAElB9K,YAAa,WACJjyB,KAAKw3B,cAGVx3B,KAAKw3B,aAAc,EACnBx3B,KAAKqxB,SACLrxB,KAAKyL,SAASsxB,uBAElB7zB,QAAS,WACLlJ,KAAK8xB,OAAO,WACZ9xB,KAAKy9B,KAAKxf,SACVje,KAAKiD,MAAMgb,SACXje,KAAK4V,KAAKqI,SACNje,KAAKyL,SAASiqB,SACd11B,KAAKg+B,aAAa/f,SAEtBje,KAAKu1B,YAAYrb,QAAQ,SAASP,GAC9BA,EAAEzQ,WAEN,IAAIL,GAAQ7I,IACZA,MAAKu9B,OAAO3iB,MAAQva,EAAEs/B,OAAO3/B,KAAKu9B,OAAO3iB,MAAO,SAASiD,GACrD,MAAOhV,KAAUgV,OAG1BxT,QAEIsS,IAMXsU,OAAO,qBAAqB,SAAU,aAAc,WAAY,+BAAgC,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,GACtH,YAEA,IAAIjvB,GAAQgvB,EAASF,WAKjBwN,EAAWt8B,EAAMsQ,QAAQ2e,EAyF7B,OAvFAlyB,GAAEu/B,EAASh/B,WAAWyT,QAClBF,MAAO,WACHnU,KAAKyL,SAAS6xB,WAAWhJ,WACzBt0B,KAAKsF,KAAO,YACZtF,KAAK6/B,OAASv8B,EAAM0O,WAAWI,IAE/B,IAAIkmB,IAAUt4B,KAAK6G,QAAQC,IAAI,SAASA,IAAI9G,KAAKuB,OAAOiK,eAAiBlI,EAAMqT,kBAAkB3W,KAAKuB,SAASuF,IAAI,QACnH9G,MAAKy9B,KAAO,GAAIxlB,OAAMgb,KACtBjzB,KAAKy9B,KAAKjF,YAAcF,EACxBt4B,KAAKy9B,KAAKpG,WAAa,EAAG,GAC1Br3B,KAAKy9B,KAAK/I,YAAc10B,KAAKc,QAAQ2hB,2BACrCziB,KAAKy9B,KAAKzkB,KAAK,EAAE,IAAI,EAAE,IACvBhZ,KAAKy9B,KAAK7H,iBAAmB51B,KAC7BA,KAAKiD,MAAQ,GAAIgV,OAAMgb,KACvBjzB,KAAKiD,MAAMgW,UAAYqf,EACvBt4B,KAAKiD,MAAM+V,KACD,EAAG,IACHhZ,KAAKc,QAAQgiB,kBAAmB9iB,KAAKc,QAAQiiB,iBAAmB,IAChE,EAAG/iB,KAAKc,QAAQiiB,mBAE1B/iB,KAAKiD,MAAM2yB,iBAAmB51B,KAC9BA,KAAK49B,YAAc,GAEvBvM,OAAQ,WACJ,GAAIyO,GAAM9/B,KAAKs5B,oBAAoB3C,aACnCoJ,EAAM//B,KAAKggC,QACXlB,EAAKiB,EAAI/I,SAAS8I,GAAKf,MACvBkB,EAAKH,EAAI9mB,IAAI+mB,GAAKxE,OAAO,EACzBv7B,MAAKy9B,KAAK3kB,SAAS,GAAGC,MAAQ+mB,EAC9B9/B,KAAKy9B,KAAK3kB,SAAS,GAAGC,MAAQgnB,EAC9B//B,KAAKiD,MAAM2wB,OAAOkL,EAAK9+B,KAAK49B,aAC5B59B,KAAKiD,MAAMyZ,SAAWujB,EACtBjgC,KAAK49B,YAAckB,GAEvBrD,WAAY,SAASC,GACjB,IAAK17B,KAAKyL,SAAS8rB,aAGf,MAFAv3B,MAAKyL,SAAS+lB,qBAAqB3oB,WACnCoP,OAAMC,KAAK6jB,MAGf/7B,MAAKggC,QAAUhgC,KAAKggC,QAAQhnB,IAAI0iB,EAChC,IAAIwE,GAAajoB,MAAMpR,QAAQs5B,QAAQngC,KAAKggC,QAC5ChgC,MAAKyL,SAAS20B,WAAWF,GACzBlgC,KAAKqxB,UAETc,QAAS,SAAS+K,EAAQC,GACtB,GAAI+C,GAAajoB,MAAMpR,QAAQs5B,QAAQjD,EAAOnkB,OAC1C3K,EAASpO,KAAKs5B,oBAAoBpa,MAClCmhB,GAAW,CACf,IAAIH,GAA0D,mBAArCA,GAAW9lB,KAAKwb,iBAAkC,CACvE,GAAI0K,GAAUJ,EAAW9lB,KAAKwb,gBAC9B,IAAiC,SAA7B0K,EAAQh7B,KAAK0L,OAAO,EAAE,GAAe,CACrC,GAAIuvB,GAAaD,EAAQphB,OAASohB,EAAQ1N,sBAAsB1T,KAChE,IAAI9Q,IAAWmyB,EAAY,CACvB,GAAI9V,IACA7O,GAAItY,EAAMqP,OAAO,QACjB8J,WAAYzc,KAAKuB,OAAOiK,aACxBoR,KAAMxO,EACNyO,GAAI0jB,EACJV,OAAQ7/B,KAAK6/B,OAEb7/B,MAAKyL,SAAS8rB,cACdv3B,KAAK6G,QAAQ+W,QAAQ6M,KAK7Brc,IAAWkyB,EAAQphB,OAAUohB,EAAQ1N,uBAAyB0N,EAAQ1N,sBAAsB1T,QAAU9Q,KACtGiyB,GAAW,EACXrgC,KAAKyL,SAASirB,aAAc,GAGhC2J,IACArgC,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EAC5B12B,KAAKyL,SAAS+lB,qBAAqBxxB;AACnCiY,MAAMC,KAAK6jB,SAGnB7yB,QAAS,WACLlJ,KAAKiD,MAAMgb,SACXje,KAAKy9B,KAAKxf,YAEf5T,QAIIu1B,IAKX3O,OAAO,uBAAuB,SAAU,aAAc,WAAY,+BAAgC,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,GACxH,YAEA,IAAIjvB,GAAQgvB,EAASF,WAIjBoO,EAAcl9B,EAAMsQ,QAAQ2e,EA4BhC,OA1BAlyB,GAAEmgC,EAAY5/B,WAAWyT,QACrBF,MAAO,WACHnU,KAAKyL,SAASg1B,cAAcnM,WAC5Bt0B,KAAKsF,KAAO,SACZtF,KAAK0gC,aAAe,GAAIzoB,OAAMgb,IAC9B,IAAI0N,GAAOtgC,EAAE8L,IAAI9L,EAAEugC,MAAM,GAAI,WAAY,OAAQ,EAAE,IACnD5gC,MAAK0gC,aAAa1nB,IAAI/E,MAAMjU,KAAK0gC,aAAcC,GAC/C3gC,KAAK0gC,aAAahM,YAAc10B,KAAKc,QAAQuiB,qBAC7CrjB,KAAK0gC,aAAalI,YAAcx4B,KAAKc,QAAQsiB,qBAC7CpjB,KAAK0gC,aAAatJ,QAAUp3B,KAAKc,QAAQwiB,gBACzCtjB,KAAK6gC,SAAW54B,EAAE,SACbU,SAAS3I,KAAKyL,SAASo1B,UACvBrvB,KACGkL,SAAU,WACV0a,QAASp3B,KAAKc,QAAQwiB,kBAEzB7a,QAETS,QAAS,WACLlJ,KAAK0gC,aAAaziB,SAClBje,KAAK6gC,SAAS5iB,YAEnB5T,QAIIm2B,IAKXvP,OAAO,uBAAuB,SAAU,aAAc,WAAY,sBAAuB,wBAAyB,iBAAkB,SAAUhpB,EAAG5H,EAAGiyB,EAAUwO,EAAY3M,EAAc4M,GACpL,YAEA,IAAIz9B,GAAQgvB,EAASF,WAIjB4O,EAAa19B,EAAMsQ,QAAQktB,EAqY/B,OAnYAzgC,GAAE2gC,EAAWpgC,WAAWyT,QACpBF,MAAO,WACH2sB,EAAWlgC,UAAUuT,MAAMF,MAAMjU,MACjCA,KAAKmK,SAAWnK,KAAKc,QAAQkJ,UAAU,6BAEvChK,KAAKihC,iBAAmBjhC,KAAKc,QAAQoJ,uBAEzC6xB,KAAM,WACF,GAAI3tB,GAASpO,KAAK4yB,sBAAsB1T,MACxCgiB,EAAc9yB,EAAOtH,IAAI,eAAiBxD,EAAMqT,kBAAkB3W,KAAKuB,QACvE4/B,EAAanhC,KAAKyL,SAAS8rB,aAAev3B,KAAKmK,SAAWnK,KAAKihC,iBAAiB7yB,EAAOtH,IAAI,UAAY9G,KAAKihC,iBAA0B,QACtIG,EAAqBphC,KAAKc,QAAQ4C,WAAa,4BAC/C29B,EAASjzB,EAAOtH,IAAI,SAAW,CAC/B9G,MAAK6gC,SACJ73B,KAAKm4B,GACFp9B,MACIK,IAAKgK,EAAOtH,IAAI,OAChB/E,cAAeqM,EAAOtH,IAAI,cAC1B3F,MAAOiN,EAAOtH,IAAI,SAClB5F,IAAKkN,EAAOtH,IAAI,OAChBxB,KAAM8I,EAAOtH,IAAI,SAAW,UAC5BzF,UAAYiC,EAAM5B,aAAa0M,EAAOtH,IAAI,QAAU,IAAI4K,QAAQ,0BAA0B,IAAIA,QAAQ,MAAM,IAAI,IAChHjO,YAAa2K,EAAOtH,IAAI,eACxBtD,MAAO4K,EAAOtH,IAAI,UAAY,GAC9BX,kBAAmBi7B,EACnBngC,MAAQmN,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7F,OAAUigC,EAAYp6B,IAAI,SAC7E7B,WAAamJ,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7B,YAAe,EACvED,YAAcoJ,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS9B,aAAgBhF,KAAKc,QAAQmhB,iBACtFlf,UAAYqL,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS/D,WAAc,EACrEF,KAAMuL,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAASjE,KAAO,UAAY,GACpEuD,UAAWgI,EAAOtH,IAAI,eAAgB,EACtC9E,iBAAkBk/B,EAAYp6B,IAAI,SAClC7E,iBAAkBi/B,EAAYp6B,IAAI,SAClCjB,MAAOw7B,EAAQ,EAAI,IAAM,IAAMA,EAC/B56B,MAAO2H,EAAOtH,IAAI,UAAY,UAElCvF,OAAQvB,KAAKuB,OACbT,QAASd,KAAKc,QACdY,YAAa4B,EAAM5B,YACnB8E,OAASnG,EAAE8zB,EAAarB,UAAU9T,KAAK,OAAOsiB,OAAOj3B,QACrDhF,MAAQhF,EAAEL,KAAKc,QAAQoJ,uBAAuBo3B,OAAOj3B,WAEzDrK,KAAKqxB,QACL,IAAIxoB,GAAQ7I,KACRuhC,KAAkBvhC,KAAKyL,SAAS8rB,eAAiB1uB,EAAM/H,QAAQ6E,wCAC3Do7B,EAASS,OAAO,uBAAuBpzB,EAAOtH,IAAI,OAAQ+B,EAAM/H,QAAQyiB,wBAE5Eke,KAAuBzhC,KAAKyL,SAAS8rB,eAAgB1uB,EAAM/H,QAAQgE,kCAC/Di8B,EAASS,OAAO,iBAAiBpzB,EAAOtH,IAAI,OAAQ+B,EAAM/H,QAAQyiB,wBAEtEme,EAAc,WACV74B,EAAM4C,SAAS+lB,qBAAqB3oB,GACpCoP,MAAMC,KAAK6jB,OAuCnB,IApCAlzB,EAAM84B,YAAc,WAChB94B,EAAMg4B,SAAS9xB,IAAI,SACnBlG,EAAMg4B,SAASr4B,KAAK,2BAA2BuG,IAAI,sBACnDlG,EAAMg4B,SAASr4B,KAAK,uBAAuBuG,IAAI,UAC/ClG,EAAMg4B,SAASr4B,KAAK,gCAAgCuG,IAAI,SACxDlG,EAAMg4B,SAASr4B,KAAK,qBAAqBuG,IAAI,SAC7ClG,EAAMg4B,SAASr4B,KAAK,sBAAsBuG,IAAI,SAC9ClG,EAAMg4B,SAASr4B,KAAK,wBAAwBA,KAAK,MAAMuG,IAAI,eAC3DlG,EAAMg4B,SAASr4B,KAAK,cAAcuG,IAAI,SACtClG,EAAMg4B,SAASr4B,KAAK,iBAAiBuG,IAAI,SAEtClG,EAAM/H,QAAQ6E,uCACV47B,IACCA,EAAeK,aAAaC,MAAK,GACjCN,EAAer4B,WAGpBL,EAAM/H,QAAQgE,iCACV28B,IACCA,EAAoBG,aAAaC,MAAK,GACtCJ,EAAoBv4B,YAKhClJ,KAAK6gC,SAASr4B,KAAK,cAAcS,MAAM,SAAUuF,GAC7CA,EAAEG,iBACF+yB,MAGJ1hC,KAAK6gC,SAASr4B,KAAK,iBAAiBS,MAAM,WACtC,IAAKmF,EAAOtH,IAAI,OACZ,OAAO,IAIX9G,KAAKyL,SAAS8rB,aAAc,CAE5B,GAAIuK,GAAgBzhC,EAAE0hC,SAAS,WAC7B1hC,EAAEoxB,MAAM,WACN,GAAI5oB,EAAM4C,SAAS8rB,aAAc,CAC7B,GAAI9M,KAiCJ,IAhCI5hB,EAAM/H,QAAQqE,uBACdslB,EAAMvpB,IAAM2H,EAAMg4B,SAASr4B,KAAK,gBAAgB4E,MAChDvE,EAAMg4B,SAASr4B,KAAK,iBAAiBM,KAAK,OAAO2hB,EAAMvpB,KAAO,MAE9D2H,EAAM/H,QAAQoF,yBACdukB,EAAMjnB,MAAQqF,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,MACpDvE,EAAMg4B,SAASr4B,KAAK,uBAAuBM,KAAK,MAAO2hB,EAAMjnB,OAAS49B,IAEtEv4B,EAAM/H,QAAQ4E,+BACXmD,EAAM/H,QAAQ6E,sCACV47B,GACCA,EAAeS,eACfvX,EAAMhnB,YAAc89B,EAAeU,UACnCV,EAAeW,cAInBzX,EAAMhnB,YAAcoF,EAAMg4B,SAASr4B,KAAK,wBAAwB4E,OAGpEvE,EAAM/H,QAAQ8iB,yBACX/a,EAAM/H,QAAQgE,gCACV28B,GACKA,EAAoBO,eACxBvX,EAAMtpB,MAAQsgC,EAAoBQ,UAClCR,EAAoBS,cAIxBzX,EAAMtpB,MAAQ0H,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,OAGxDvE,EAAM/H,QAAQgF,uBAAwB,CACtC,GAAIjD,GAAOgG,EAAMg4B,SAASr4B,KAAK,iBAAiBsF,GAAG,WACnD2c,GAAM9P,MAAQta,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoBjE,KAAMA,IAE9FgG,EAAM/H,QAAQyF,eACX6H,EAAOtH,IAAI,WAAW+B,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,QAC3Dqd,EAAMhkB,MAAQoC,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,OAGxDvE,EAAM/H,QAAQsE,cACXgJ,EAAOtH,IAAI,UAAU+B,EAAMg4B,SAASr4B,KAAK,iBAAiB4E,QACzDqd,EAAMnlB,KAAOuD,EAAMg4B,SAASr4B,KAAK,iBAAiB4E,OAG1DgB,EAAOiN,IAAIoP,GACX5hB,EAAMwoB,aAENqQ,QAGL,IAEH1hC,MAAK6gC,SAAS70B,GAAG,QAAS,SAASgC,GACZ,KAAfA,EAAGo0B,SACHV,MAIR1hC,KAAK6gC,SAASr4B,KAAK,2BAA2BwD,GAAG,qBAAsB81B,GACnEj5B,EAAM/H,QAAQ4E,8BACdmD,EAAM/H,QAAQ6E,uCACd47B,IAEAA,EAAev1B,GAAG,SAAU81B,GAC5BP,EAAev1B,GAAG,OAAQ81B,IAG1Bj5B,EAAM/H,QAAQ8iB,wBACd/a,EAAM/H,QAAQgE,iCACd28B,IAEAA,EAAoBz1B,GAAG,SAAU81B,GACjCL,EAAoBz1B,GAAG,OAAQ81B,IAGhCj5B,EAAM/H,QAAQuF,oBACbrG,KAAK6gC,SAASr4B,KAAK,uBAAuB8oB,OAAO,WAC7C,GAAItxB,KAAKqiC,MAAMjgC,OAAQ,CACnB,GAAIoI,GAAIxK,KAAKqiC,MAAM,GACnBve,EAAK,GAAIwe,WACT,IAA2B,UAAvB93B,EAAElF,KAAK0L,OAAO,EAAE,GAEhB,WADAuxB,OAAM15B,EAAMtH,OAAOC,UAAU,6BAGjC,IAAIgJ,EAAE3E,KAA8C,KAAtCgD,EAAM/H,QAAQ+iB,sBAExB,WADA0e,OAAM15B,EAAMtH,OAAOC,UAAU,6BAA+BqH,EAAM/H,QAAQ+iB,sBAAwBhb,EAAMtH,OAAOC,UAAU,MAG7HsiB,GAAG0e,OAAS,SAASh0B,GACjB3F,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,IAAIoB,EAAEi0B,OAAOxoB,QACnD6nB,KAEJhe,EAAG4e,cAAcl4B,MAI7BxK,KAAK6gC,SAASr4B,KAAK,kBAAkB,GAAGm6B,OAExC,IAAIC,GAAU/5B,EAAMg4B,SAASr4B,KAAK,8BAElCxI,MAAK6gC,SAASr4B,KAAK,gCAAgCq6B,MAC3C,SAAS70B,GACLA,EAAGW,iBACHi0B,EAAQ1T,QAEZ,SAASlhB,GACLA,EAAGW,iBACHi0B,EAAQn6B,SAIpBm6B,EAAQp6B,KAAK,MAAMq6B,MACX,SAAS70B,GACLA,EAAGW,iBACH9F,EAAMg4B,SAASr4B,KAAK,kBAAkBgJ,IAAI,aAAcvJ,EAAEjI,MAAM8I,KAAK,gBAEzE,SAASkF,GACLA,EAAGW,iBACH9F,EAAMg4B,SAASr4B,KAAK,kBAAkBgJ,IAAI,aAAepD,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7F,QAAWmN,EAAOtH,IAAI,eAAiBxD,EAAMqT,kBAAkB9N,EAAMtH,SAASuF,IAAI,YAEhMmC,MAAM,SAAS+E,GACbA,EAAGW,iBACC9F,EAAM4C,SAAS8rB,cACfnpB,EAAOiN,IAAI,QAAShb,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoB7F,MAAOgH,EAAEjI,MAAM8I,KAAK,iBAClH85B,EAAQn6B,OACRwP,MAAMC,KAAK6jB,QAEX2F,KAIR,IAAIoB,GAAY,SAASjwB,GACrB,GAAIhK,EAAM4C,SAAS8rB,aAAc,CAC7B,GAAIwL,GAAWlwB,GAAGzE,EAAOtH,IAAI,SAAW,EACxC+B,GAAMg4B,SAASr4B,KAAK,uBAAuBoN,MAAMmtB,EAAW,EAAI,IAAM,IAAMA,GAC5E30B,EAAOiN,IAAI,OAAQ0nB,GACnB9qB,MAAMC,KAAK6jB,WAEX2F,KAIR1hC,MAAK6gC,SAASr4B,KAAK,sBAAsBS,MAAM,WAE3C,MADA65B,IAAU,IACH,IAEX9iC,KAAK6gC,SAASr4B,KAAK,oBAAoBS,MAAM,WAEzC,MADA65B,GAAU,IACH,GAGX,IAAIE,GAAiB,SAASnwB,GAC1B,GAAIhK,EAAM4C,SAAS8rB,aAAc,CAC7B,GAAI0L,GAAkB70B,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS/D,WAAc,EAC3EmgC,EAAgBrwB,EAAIowB,CACrBC,GAAgB,EACfA,EAAgB,EAEXA,EAAgBr6B,EAAM/H,QAAQ6gB,0BACnCuhB,EAAgBr6B,EAAM/H,QAAQ6gB,yBAE9BuhB,IAAkBD,IAClBp6B,EAAMg4B,SAASr4B,KAAK,4BAA4BoN,KAAKstB,GACrD90B,EAAOiN,IAAI,QAAShb,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoB/D,UAAWmgC,KACzGjrB,MAAMC,KAAK6jB,YAIf2F,KAIR1hC,MAAK6gC,SAASr4B,KAAK,2BAA2BS,MAAM,WAEhD,MADA+5B,IAAe,IACR,IAEXhjC,KAAK6gC,SAASr4B,KAAK,yBAAyBS,MAAM,WAE9C,MADA+5B,GAAe,IACR,GAGX,IAAIG,GAAiB,SAAStwB,GAC1B,GAAI+F,GAAM/P,EAAM/H,QAAQ8gB,oBACpBlJ,EAAM7P,EAAM/H,QAAQ+gB,mBACxB,IAAIhZ,EAAM4C,SAAS8rB,aAAc,CAC7B,GAAI6L,GAAkBh1B,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7B,YAAe,EAC5Eo+B,EAAgBxwB,EAAIuwB,CACrBC,GAAgBzqB,EACfyqB,EAAgBzqB,EAEXyqB,EAAgB3qB,IACrB2qB,EAAgB3qB,GAEhB2qB,IAAkBD,IAClBv6B,EAAMg4B,SAASr4B,KAAK,6BAA6BoN,KAAKytB,EAAcn+B,QAAQ,IAC5EkJ,EAAOiN,IAAI,QAAShb,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoB7B,WAAYo+B,KAC1GprB,MAAMC,KAAK6jB,YAIf2F,MAKJ4B,EAAez6B,EAAMg4B,SAASr4B,KAAK,+BAEvCxI,MAAK6gC,SAASr4B,KAAK,4BAA4Bq6B,MACvC,SAAS70B,GACLA,EAAGW,iBACH20B,EAAapU,QAEjB,SAASlhB,GACLA,EAAGW,iBACH20B,EAAa76B,SAIzB66B,EAAa96B,KAAK,MAAMq6B,MAChB,SAAS70B,GACLA,EAAGW,iBACH9F,EAAMg4B,SAASr4B,KAAK,2CAA2CgJ,IAAI,aAAcvJ,EAAEjI,MAAM8I,KAAK,gBAElG,SAASkF,GACLA,EAAGW,gBACH,IAAI3J,GAAeoJ,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS9B,aAAgB6D,EAAM/H,QAAQihB,eAC5FlZ,GAAMg4B,SAASr4B,KAAK,2CAA2CgJ,IAAI,aAAcxM,KAE3FiE,MAAM,SAAS+E,GACbA,EAAGW,iBACC9F,EAAM4C,SAAS8rB,cACfnpB,EAAOiN,IAAI,QAAShb,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoB9B,YAAaiD,EAAEjI,MAAM8I,KAAK,iBACxHw6B,EAAa76B,OACbwP,MAAMC,KAAK6jB,QAEX2F,MAKR1hC,KAAK6gC,SAASr4B,KAAK,4BAA4BS,MAAM,WACjD,GAAIs6B,GAAO16B,EAAM/H,QAAQghB,oBAEzB,OADAqhB,IAAgBI,IACT,IAEXvjC,KAAK6gC,SAASr4B,KAAK,0BAA0BS,MAAM,WAC/C,GAAIs6B,GAAO16B,EAAM/H,QAAQghB,oBAEzB,OADAqhB,GAAeI,IACR,IAGXvjC,KAAK6gC,SAASr4B,KAAK,sBAAsBS,MAAM,WAG3C,MAFAJ,GAAMg4B,SAASr4B,KAAK,kBAAkB4E,IAAI,IAC1C00B,KACO,QAGX,IAAsD,gBAA3C9hC,MAAK4yB,sBAAsB4E,YAA0B,CAC5D,GAAIgM,GAAYxjC,KAAK4yB,sBAAsB4E,YAAY9lB,QAAQrR,EAAE+N,EAAOtH,IAAI,UAAUxG,SAAS,yCAC/FN,MAAK6gC,SAASr4B,KAAK,qBAAuB4F,EAAOtH,IAAI,OAAS,KAAO,KAAKkC,KAAKw6B,GAC3ExjC,KAAKc,QAAQmD,+BACbjE,KAAK6gC,SAASr4B,KAAK,2BAA2BQ,KAAKhJ,KAAK4yB,sBAAsB4E,YAAY9lB,QAAQrR,EAAE+N,EAAOtH,IAAI,gBAAgBxG,SAAS,2CAIpJN,KAAK6gC,SAASr4B,KAAK,OAAO4S,KAAK,WAC3BvS,EAAMwoB,YAGdA,OAAQ,WACJ,GAAIrxB,KAAKc,QAAQue,aAAa,CAC1B,GAAIpI,GAAUjX,KAAK4yB,sBAAsB+D,YACzCrzB,GAAMyT,YAAY/W,KAAKc,QAASmW,EAASjX,KAAK0gC,aAAyD,IAA3C1gC,KAAK4yB,sBAAsBiE,cAAsB72B,KAAK6gC,SAAU7gC,KAAKyL,SAASlK,QAE9IvB,KAAK6gC,SAAS3R,OACdjX,MAAMC,KAAK6jB,QAEf7yB,QAAS,WAC0B,mBAArBlJ,MAAK2hC,aACX3hC,KAAK2hC,cAET3hC,KAAK0gC,aAAaziB,SAClBje,KAAK6gC,SAAS5iB,YAEnB5T,QAII22B,IAKX/P,OAAO,uBAAuB,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAUwO,GAChH,YAEA,IAAIx9B,GAAQgvB,EAASF,WAKjBqR,EAAangC,EAAMsQ,QAAQktB,EAoL/B,OAlLAzgC,GAAEojC,EAAW7iC,WAAWyT,QACpBF,MAAO,WACL2sB,EAAWlgC,UAAUuT,MAAMF,MAAMjU,MACjCA,KAAKmK,SAAWnK,KAAKc,QAAQkJ,UAAU,6BACvChK,KAAKihC,iBAAmBjhC,KAAKc,QAAQkJ,UAAU,uCAEjD+xB,KAAM,WACF,GAAI3tB,GAASpO,KAAK4yB,sBAAsB1T,MACxCwkB,EAAct1B,EAAOtH,IAAI,QACzB68B,EAAYv1B,EAAOtH,IAAI,MACvBo6B,EAAc9yB,EAAOtH,IAAI,eAAiBxD,EAAMqT,kBAAkB3W,KAAKuB,QACvE4/B,EAAanhC,KAAKyL,SAAS8rB,aAAev3B,KAAKmK,SAAWnK,KAAKihC,gBAC/DjhC,MAAK6gC,SACF73B,KAAKm4B,GACJngC,MACIe,cAAeqM,EAAOtH,IAAI,cAC1B3F,MAAOiN,EAAOtH,IAAI,SAClB5F,IAAKkN,EAAOtH,IAAI,OAChBzF,UAAYiC,EAAM5B,aAAa0M,EAAOtH,IAAI,QAAU,IAAI4K,QAAQ,0BAA0B,IAAIA,QAAQ,MAAM,IAAI,IAChHjO,YAAa2K,EAAOtH,IAAI,eACxB7F,MAAQmN,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7F,OAAUigC,EAAYp6B,IAAI,SAC7EjE,KAAMuL,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAASjE,KAAO,UAAY,GACpEI,MAAQmL,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7D,QAAWmL,EAAO6nB,IAAI,UAAkD,mBAA9B7nB,GAAOtH,IAAI,SAAS7D,MAAyB,UAAY,GACtJF,UAAYqL,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS/D,WAAc,EACrEpB,WAAY+hC,EAAY58B,IAAI,SAC5BjF,SAAU8hC,EAAU78B,IAAI,SACxBrF,WAAaiiC,EAAYzN,IAAI,UAAYyN,EAAY58B,IAAI,SAAS7F,QAAWyiC,EAAY58B,IAAI,eAAiBxD,EAAMqT,kBAAkB3W,KAAKuB,SAASuF,IAAI,SACxJlF,SAAW+hC,EAAU1N,IAAI,UAAY0N,EAAU78B,IAAI,SAAS7F,QAAW0iC,EAAU78B,IAAI,eAAiBxD,EAAMqT,kBAAkB3W,KAAKuB,SAASuF,IAAI,SAChJ9E,iBAAkBk/B,EAAYp6B,IAAI,SAClC7E,iBAAkBi/B,EAAYp6B,IAAI,UAEtCvF,OAAQvB,KAAKuB,OACbG,YAAa4B,EAAM5B,YACnBZ,QAASd,KAAKc,WAElBd,KAAKqxB,QACL,IAAIxoB,GAAQ7I,KACZ0hC,EAAc,WACV74B,EAAM4C,SAAS+lB,qBAAqB3oB,GACpCA,EAAMg4B,SAASr4B,KAAK,qBAAqBuG,IAAI,SAC7CkJ,MAAMC,KAAK6jB,OASf,IAPA/7B,KAAK6gC,SAASr4B,KAAK,cAAcS,MAAMy4B,GACvC1hC,KAAK6gC,SAASr4B,KAAK,iBAAiBS,MAAM,WACtC,IAAKmF,EAAOtH,IAAI,OACZ,OAAO,IAIX9G,KAAKyL,SAAS8rB,aAAc,CAE5B,GAAIuK,GAAgBzhC,EAAE0hC,SAAS,WAC3B1hC,EAAEoxB,MAAM,WACJ,GAAI5oB,EAAM4C,SAAS8rB,aAAc,CAC7B,GAAI9M,IACAtpB,MAAO0H,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,MAKjD,IAHIvE,EAAM/H,QAAQoB,uBACduoB,EAAMvpB,IAAM2H,EAAMg4B,SAASr4B,KAAK,gBAAgB4E,OAEhDvE,EAAM/H,QAAQgF,uBAAwB,CACtC,GAAIjD,GAAOgG,EAAMg4B,SAASr4B,KAAK,iBAAiBsF,GAAG,YAC/C7K,EAAQ4F,EAAMg4B,SAASr4B,KAAK,kBAAkBsF,GAAG,WACrD2c,GAAM9P,MAAQta,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoBjE,KAAMA,EAAMI,MAAOA,IAE/G4F,EAAMg4B,SAASr4B,KAAK,iBAAiBM,KAAK,OAAO2hB,EAAMvpB,KAAO,KAC9DkN,EAAOiN,IAAIoP,GACXxS,MAAMC,KAAK6jB,WAEX2F,QAGV,IAEF1hC,MAAK6gC,SAAS70B,GAAG,QAAS,SAASgC,GACZ,KAAfA,EAAGo0B,SACHV,MAIR1hC,KAAK6gC,SAASr4B,KAAK,SAASwD,GAAG,qBAAsB81B,GAErD9hC,KAAK6gC,SAASr4B,KAAK,uBAAuB8oB,OAAO,WAC7C,GAAI9iB,GAAIvG,EAAEjI,MACV8R,EAAItD,EAAEpB,KACF0E,KACAjJ,EAAMg4B,SAASr4B,KAAK,kBAAkB4E,IAAIoB,EAAEhG,KAAK,aAAaoN,QAC9D/M,EAAMg4B,SAASr4B,KAAK,gBAAgB4E,IAAI0E,GACxCgwB,OAGR9hC,KAAK6gC,SAASr4B,KAAK,sBAAsBS,MAAM,WACvCJ,EAAM4C,SAAS8rB,cACfnpB,EAAOiN,KACHuB,KAAMxO,EAAOtH,IAAI,MACjB+V,GAAIzO,EAAOtH,IAAI,UAEnB+B,EAAMkzB,QAEN2F,KAIR,IAAIkB,GAAU/5B,EAAMg4B,SAASr4B,KAAK,8BAElCxI,MAAK6gC,SAASr4B,KAAK,gCAAgCq6B,MAC3C,SAAS70B,GACLA,EAAGW,iBACHi0B,EAAQ1T,QAEZ,SAASlhB,GACLA,EAAGW,iBACHi0B,EAAQn6B,SAIpBm6B,EAAQp6B,KAAK,MAAMq6B,MACX,SAAS70B,GACLA,EAAGW,iBACH9F,EAAMg4B,SAASr4B,KAAK,kBAAkBgJ,IAAI,aAAcvJ,EAAEjI,MAAM8I,KAAK,gBAEzE,SAASkF,GACLA,EAAGW,iBACH9F,EAAMg4B,SAASr4B,KAAK,kBAAkBgJ,IAAI,aAAepD,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS7F,QAAUmN,EAAOtH,IAAI,eAAiBxD,EAAMqT,kBAAkB9N,EAAMtH,SAASuF,IAAI,YAE/LmC,MAAM,SAAS+E,GACbA,EAAGW,iBACC9F,EAAM4C,SAAS8rB,cACfnpB,EAAOiN,IAAI,QAAShb,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoB7F,MAAOgH,EAAEjI,MAAM8I,KAAK,iBAClH85B,EAAQn6B,OACRwP,MAAMC,KAAK6jB,QAEX2F,KAGR,IAAIsB,GAAiB,SAASnwB,GAC1B,GAAIhK,EAAM4C,SAAS8rB,aAAc,CAC7B,GAAI0L,GAAkB70B,EAAO6nB,IAAI,UAAY7nB,EAAOtH,IAAI,SAAS/D,WAAc,EAC3EmgC,EAAgBrwB,EAAIowB,CACrBC,GAAgB,EACfA,EAAgB,EAEXA,EAAgBr6B,EAAM/H,QAAQ6gB,0BACnCuhB,EAAgBr6B,EAAM/H,QAAQ6gB,yBAE9BuhB,IAAkBD,IAClBp6B,EAAMg4B,SAASr4B,KAAK,4BAA4BoN,KAAKstB,GACrD90B,EAAOiN,IAAI,QAAShb,EAAE8hC,OAAU/zB,EAAO6nB,IAAI,UAAY51B,EAAEue,MAAMxQ,EAAOtH,IAAI,eAAoB/D,UAAWmgC,KACzGjrB,MAAMC,KAAK6jB,YAIf2F,KAIR1hC,MAAK6gC,SAASr4B,KAAK,2BAA2BS,MAAM,WAEhD,MADA+5B,IAAe,IACR,IAEXhjC,KAAK6gC,SAASr4B,KAAK,yBAAyBS,MAAM,WAE9C,MADA+5B,GAAe,IACR,MAInB3R,OAAQ,WACJ,GAAIrxB,KAAKc,QAAQue,aAAa,CAC1B,GAAIpI,GAAUjX,KAAK4yB,sBAAsB+D,YACzCrzB,GAAMyT,YAAY/W,KAAKc,QAASmW,EAASjX,KAAK0gC,aAAc,EAAG1gC,KAAK6gC,SAAU7gC,KAAKyL,SAASlK,QAEhGvB,KAAK6gC,SAAS3R,OACdjX,MAAMC,KAAK6jB,UAEhB1xB,QAIIo5B,IAKXxS,OAAO,uBAAuB,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAUsR,GAChH,YAEA,IAAItgC,GAAQgvB,EAASF,WAKjByR,EAAcvgC,EAAMsQ,QAAQgwB,EAuChC,OArCAvjC,GAAEwjC,EAAYjjC,WAAWyT,QACrByiB,cAAe,WACX,GAAIgN,GAAc9jC,KAAK4yB,sBAAsBiE,aACzCiN,KAAgB9jC,KAAK+jC,kBACjB/jC,KAAK0yB,QACL1yB,KAAK0yB,OAAOxpB,UAEhBlJ,KAAK0yB,OAAS1yB,KAAKyL,SAASu4B,WACpBhkC,KAAM,EAAI8jC,EACVxgC,EAAMwS,mBAAqBguB,EAC3B9jC,KAAKikC,WACLjkC,KAAKkkC,SACL,EACAlkC,KAAKmkC,UACLnkC,KAAKuB,OAAOC,UAAUxB,KAAK4V,OAEnC5V,KAAK+jC,gBAAkBD,IAG/BjS,SAAU,WACN+R,EAAWhjC,UAAUixB,SAAS5d,MAAMjU,KAAMW,MAAMC,UAAUsT,MAAMzT,KAAKC,UAAW,IAC7EV,KAAK4yB,uBAAyB5yB,KAAK4yB,sBAAsByJ,kBACxDL,aAAah8B,KAAK4yB,sBAAsByJ,iBACxCr8B,KAAK4yB,sBAAsBwJ,gBAGnCzK,OAAQ,WACD3xB,KAAK4yB,uBAAyB5yB,KAAK4yB,sBAAsByJ,iBACxDL,aAAah8B,KAAK4yB,sBAAsByJ,iBAE5Cr8B,KAAK0yB,OAAOf,YAEjBtnB,QAKIw5B,IAKX5S,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACpH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjB0C,EAAiBxxB,EAAMsQ,QAAQwwB,EAoBnC,OAlBA/jC,GAAEy0B,EAAel0B,WAAWyT,QACxBF,MAAO,WACHnU,KAAKsF,KAAO,mBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAajkC,KAAKc,QAAQiH,YAAa,KAAO,IACnD/H,KAAKkkC,SAAWlkC,KAAKc,QAAQiH,YAAa,IAAM,GAChD/H,KAAKmkC,UAAY,OACjBnkC,KAAK4V,KAAO,QAEhBuc,QAAS,WACAnyB,KAAKyL,SAASirB,aACf12B,KAAK4yB,sBAAsB+I,gBAGpCtxB,QAIIyqB,IAKX7D,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACtH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjB2C,EAAmBzxB,EAAMsQ,QAAQwwB,EAkCrC,OAhCA/jC,GAAE00B,EAAiBn0B,WAAWyT,QAC1BF,MAAO,WACHnU,KAAKsF,KAAO,qBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAajkC,KAAKc,QAAQiH,YAAa,GAAM,EAClD/H,KAAKkkC,SAAWlkC,KAAKc,QAAQiH,WAAa,GAAK,GAC/C/H,KAAKmkC,UAAY,SACjBnkC,KAAK4V,KAAO,UAEhBuc,QAAS,WAIL,GAHAnyB,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EAC5B12B,KAAKyL,SAASmwB,4BAA4B,UACtC57B,KAAKyL,SAAS8rB,aACd,GAAIv3B,KAAKc,QAAQgf,qBAAsB,CACnC,GAAIukB,GAAQ/gC,EAAMqP,OAAO,SACzB3S,MAAKyL,SAAS64B,YAAYx6B,MACtB8R,GAAIyoB,EACJE,MAAM,GAAIzxB,OAAO0xB,UAAYxkC,KAAKc,QAAQgf,uBAE9C9f,KAAK4yB,sBAAsB1T,MAAM7D,IAAI,mBAAoBgpB,OAErDI,SAAQzkC,KAAKuB,OAAOC,UAAU,sCAAwC,IAAMxB,KAAK4yB,sBAAsB1T,MAAMpY,IAAI,SAAW,OAC5H9G,KAAK6G,QAAQmX,WAAWhe,KAAK4yB,sBAAsB1T,UAKpE7U,QAII0qB,IAKX9D,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACpH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjB+C,EAAiB7xB,EAAMsQ,QAAQwwB,EAuBnC,OArBA/jC,GAAE80B,EAAev0B,WAAWyT,QACxBF,MAAO,WACHnU,KAAKsF,KAAO,mBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAa,GAClBjkC,KAAKkkC,SAAW,GAChBlkC,KAAKmkC,UAAY,OACjBnkC,KAAK4V,KAAO,QAEhBuc,QAAS,WACLnyB,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EAC5B12B,KAAKyL,SAASmwB,4BAA4B,UACtC57B,KAAKyL,SAAS8rB,cACdv3B,KAAKyL,SAASyM,KAAKwsB,cAAc1kC,KAAK4yB,sBAAsB1T,UAGrE7U,QAII8qB,IAKXlE,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACpH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjBgD,EAAiB9xB,EAAMsQ,QAAQwwB,EAuBnC,OArBA/jC,GAAE+0B,EAAex0B,WAAWyT,QACxBF,MAAO,WACHnU,KAAKsF,KAAO,mBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAa,GAClBjkC,KAAKkkC,SAAW,IAChBlkC,KAAKmkC,UAAY,OACjBnkC,KAAK4V,KAAO,kBAEhBuc,QAAS,WACLnyB,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EAC5B12B,KAAKyL,SAASmwB,4BAA4B,UACtC57B,KAAKyL,SAAS8rB,cACdv3B,KAAK4yB,sBAAsBuJ,eAAc,MAGlD9xB,QAII+qB,IAKXnE,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACtH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjBkD,EAAmBhyB,EAAMsQ,QAAQwwB,EAsBrC,OApBA/jC,GAAEi1B,EAAiB10B,WAAWyT,QAC1BF,MAAO,WACHnU,KAAKsF,KAAO,qBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,YAAa,IAClBjkC,KAAKkkC,SAAW,IAChBlkC,KAAKmkC,UAAY,SACjBnkC,KAAK4V,KAAO,mBAEhBuc,QAAS,WACLnyB,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EACxB12B,KAAKyL,SAAS8rB,cACdv3B,KAAK4yB,sBAAsB1T,MAAMylB,MAAM,uBAGhDt6B,QAIIirB,IAKXrE,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACpH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjB4C,EAAiB1xB,EAAMsQ,QAAQwwB,EA2BnC,OAzBA/jC,GAAE20B,EAAep0B,WAAWyT,QACxBF,MAAO,WACHnU,KAAKsF,KAAO,mBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAajkC,KAAKc,QAAQiH,WAAa,IAAM,GAClD/H,KAAKkkC,SAAWlkC,KAAKc,QAAQiH,WAAa,IAAM,IAChD/H,KAAKmkC,UAAY,OACjBnkC,KAAK4V,KAAO,wBAEhBsc,UAAW,SAASgL,EAAQC,GACxB,GAAIn9B,KAAKyL,SAAS8rB,aAAc,CAC5B,GAAIqN,GAAO5kC,KAAKyL,SAASuD,SAASC,SAClC41B,EAAS,GAAI5sB,OAAMse,OACf2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,KAExBzP,MAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASmwB,4BAA4B,UAC1C57B,KAAKyL,SAASq5B,YAAY9kC,KAAK4yB,sBAAuBiS,EAAQvhC,EAAM0O,WAAWU,wBAGxFrI,QAII2qB,IAMX/D,OAAO,8BAA8B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACvH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjB6C,EAAoB3xB,EAAMsQ,QAAQwwB,EAsBtC,OApBA/jC,GAAE40B,EAAkBr0B,WAAWyT,QAC3BF,MAAO,WACHnU,KAAKsF,KAAO,sBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAajkC,KAAKc,QAAQiH,YAAa,IAAM,GAClD/H,KAAKkkC,SAAWlkC,KAAKc,QAAQiH,YAAa,GAAM,EAChD/H,KAAKmkC,UAAY,UACjBnkC,KAAK4V,KAAO,WAEhBuc,QAAS,WACL,GAAI4Q,GAAW,GAAK/iC,KAAK4yB,sBAAsB1T,MAAMpY,IAAI,SAAW,EACpE9G,MAAK4yB,sBAAsB1T,MAAM7D,IAAI,OAAQ0nB,GAC7C/iC,KAAK4yB,sBAAsBjB,SAC3B3xB,KAAK2xB,SACL1Z,MAAMC,KAAK6jB,UAEhB1xB,QAII4qB,IAKXhE,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAU8R,GACtH,YAEA,IAAI9gC,GAAQgvB,EAASF,WAKjB8C,EAAmB5xB,EAAMsQ,QAAQwwB,EAsBrC,OApBA/jC,GAAE60B,EAAiBt0B,WAAWyT,QAC1BF,MAAO,WACHnU,KAAKsF,KAAO,qBACZtF,KAAK+jC,gBAAkB,EACvB/jC,KAAKikC,WAAajkC,KAAKc,QAAQiH,YAAa,KAAO,IACnD/H,KAAKkkC,SAAWlkC,KAAKc,QAAQiH,YAAa,KAAO,IACjD/H,KAAKmkC,UAAY,SACjBnkC,KAAK4V,KAAO,UAEhBuc,QAAS,WACL,GAAI4Q,IAAW,GAAM/iC,KAAK4yB,sBAAsB1T,MAAMpY,IAAI,SAAW,EACrE9G,MAAK4yB,sBAAsB1T,MAAM7D,IAAI,OAAQ0nB,GAC7C/iC,KAAK4yB,sBAAsBjB,SAC3B3xB,KAAK2xB,SACL1Z,MAAMC,KAAK6jB,UAEhB1xB,QAII6qB,IAKXjE,OAAO,2BAA2B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAUsR,GACpH,YAEA,IAAItgC,GAAQgvB,EAASF,WAKjByL,EAAiBv6B,EAAMsQ,QAAQgwB,EAgBnC,OAdAvjC,GAAEw9B,EAAej9B,WAAWyT,QACxBF,MAAO,WACHnU,KAAKsF,KAAO,mBACZtF,KAAK0yB,OAAS1yB,KAAKyL,SAASu4B,WAAWhkC,KAAMsD,EAAMyS,mBAAoBzS,EAAM0S,oBAAoB,KAAM,GAAK,EAAG,OAAQhW,KAAKuB,OAAOC,UAAU,UAEjJ2wB,QAAS,WACAnyB,KAAKyL,SAASirB,aACf12B,KAAK4yB,sBAAsB+I,gBAGpCtxB,QAIIwzB,IAKX5M,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAUsR,GACtH,YAEA,IAAItgC,GAAQgvB,EAASF,WAKjB0L,EAAmBx6B,EAAMsQ,QAAQgwB,EA8BrC,OA5BAvjC,GAAEy9B,EAAiBl9B,WAAWyT,QAC1BF,MAAO,WACHnU,KAAKsF,KAAO,qBACZtF,KAAK0yB,OAAS1yB,KAAKyL,SAASu4B,WAAWhkC,KAAMsD,EAAMyS,mBAAoBzS,EAAM0S,oBAAoB,GAAK,GAAI,EAAG,SAAUhW,KAAKuB,OAAOC,UAAU,YAEjJ2wB,QAAS,WAIL,GAHAnyB,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EAC5B12B,KAAKyL,SAASmwB,4BAA4B,UACtC57B,KAAKyL,SAAS8rB,aACd,GAAIv3B,KAAKc,QAAQgf,qBAAsB,CACnC,GAAIukB,GAAQ/gC,EAAMqP,OAAO,SACzB3S,MAAKyL,SAAS64B,YAAYx6B,MACtB8R,GAAIyoB,EACJE,MAAM,GAAIzxB,OAAO0xB,UAAYxkC,KAAKc,QAAQgf,uBAE9C9f,KAAK4yB,sBAAsB1T,MAAM7D,IAAI,mBAAoBgpB,OAErDI,SAAQzkC,KAAKuB,OAAOC,UAAU,sCAAwC,IAAMxB,KAAK4yB,sBAAsB1T,MAAMpY,IAAI,SAAW,OAC5H9G,KAAK6G,QAAQqX,WAAWle,KAAK4yB,sBAAsB1T,UAKpE7U,QAIIyzB,IAKX7M,OAAO,6BAA6B,SAAU,aAAc,WAAY,uBAAwB,SAAUhpB,EAAG5H,EAAGiyB,EAAUsR,GACtH,YAEA,IAAItgC,GAAQgvB,EAASF,WAKjB2L,EAAmBz6B,EAAMsQ,QAAQgwB,EAkBrC,OAhBAvjC,GAAE09B,EAAiBn9B,WAAWyT,QAC1BF,MAAO,WACHnU,KAAKsF,KAAO,qBACZtF,KAAK0yB,OAAS1yB,KAAKyL,SAASu4B,WAAWhkC,KAAMsD,EAAMyS,mBAAoBzS,EAAM0S,oBAAoB,IAAM,IAAK,EAAG,SAAUhW,KAAKuB,OAAOC,UAAU,qBAEnJ2wB,QAAS,WACLnyB,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,EACxB12B,KAAKyL,SAAS8rB,cACdv3B,KAAK4yB,sBAAsB1T,MAAMylB,MAAM,uBAGhDt6B,QAII0zB,IAKX9M,OAAO,sBAAsB,SAAU,aAAc,WAAY,+BAAgC,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,GACvH,YAEA,IAAIjvB,GAAQgvB,EAASF,WAKjB2S,EAAYzhC,EAAMsQ,QAAQ2e,EAgB9B,OAdAlyB,GAAE0kC,EAAUnkC,WAAWyT,QACnBonB,WAAY,SAASC,GACjB17B,KAAKyL,SAASwD,OAASjP,KAAKyL,SAASwD,OAAO+nB,SAAS0E,EAAOH,OAAOv7B,KAAKyL,SAASiqB,QAAQ1B,OAAOkD,SAASl3B,KAAKyL,SAASuoB,QACvHh0B,KAAKyL,SAAS4lB,UAElBc,QAAS,SAASuJ,GACd17B,KAAKyL,SAAS4xB,aAAe,KAC7Br9B,KAAKyL,SAASirB,aAAc,KAEjCrsB,QAKI06B,IAKX9T,OAAO,kBAAkB,SAAU,aAAc,YAAa,WAAY,qBAAsB,cAAe,SAAUhpB,EAAG5H,EAAG2kC,EAAW1S,EAAUyS,EAAWE,GAC3J,YAEA,IAAI3hC,GAAQgvB,EAASF,WAIjB9lB,EAAQ,SAAShE,GACjBtI,KAAKuB,OAAS+G,EACdtI,KAAKiI,EAAIA,EAAE,cACXjI,KAAKklC,mBACLllC,KAAKiI,EAAEe,KAAKV,EAAQxH,QAAQkJ,UAAU,wBAAwB1B,IAC9DtI,KAAKiR,iBACLjR,KAAKgP,SAAWhP,KAAKiI,EAAEO,KAAK,cAC5BxI,KAAK40B,SAAW50B,KAAKiI,EAAEO,KAAK,cACvBF,EAAQxH,QAAQue,aAGjBrf,KAAK6gC,SAAW7gC,KAAKiI,EAAEO,KAAK,cAF5BxI,KAAK6gC,SAAW54B,EAAE,IAAMK,EAAQxH,QAAQwe,cAI5Ctf,KAAKmlC,QAAUnlC,KAAKiI,EAAEO,KAAK,qBAC3ByP,MAAMmtB,MAAMplC,KAAKgP,SAAS,IAC1BhP,KAAKqlC,YAAc,EACnBrlC,KAAKslC,YAAa,EAClBtlC,KAAKq9B,aAAe,KACpBr9B,KAAKulC,gBAAkB,KACvBvlC,KAAKs9B,WAAa,GAAIrlB,OAAMutB,MAC5BxlC,KAAKq0B,WAAa,GAAIpc,OAAMutB,MAC5BxlC,KAAKygC,cAAgB,GAAIxoB,OAAMutB,MAC/BxlC,KAAKskC,eACLtkC,KAAKylC,cAAe,EAEhBn9B,EAAQxH,QAAQwf,eAChBtgB,KAAK01B,SACGgQ,iBAAkB,GAAIztB,OAAMutB,MAC5BlI,WAAY,GAAIrlB,OAAMutB,MACtBnR,WAAY,GAAIpc,OAAMutB,MACtB1P,WAAY,GAAI7d,OAAMmjB,MACtBv1B,KAAM,GAAIoS,OAAM+gB,KAAM1wB,EAAQxH,QAAQyf,cAAejY,EAAQxH,QAAQ0f,iBAG7ExgB,KAAK01B,QAAQgQ,iBAAiBpR,WAC9Bt0B,KAAK01B,QAAQiQ,QAAU1tB,MAAMC,KAAKmnB,OAAOuG,YAAY5O,SAASh3B,KAAK01B,QAAQ7vB,MAC3E7F,KAAK01B,QAAQtC,UAAY,GAAInb,OAAMgb,KAAKI,UAAUrzB,KAAK01B,QAAQiQ,QAAQ3O,UAAU,EAAE,IAAKh3B,KAAK01B,QAAQ7vB,KAAKmT,KAAK,EAAE,KACjHhZ,KAAK01B,QAAQtC,UAAUna,UAAY3Q,EAAQxH,QAAQ4f,yBACnD1gB,KAAK01B,QAAQtC,UAAUoF,YAAclwB,EAAQxH,QAAQ6f,qBACrD3gB,KAAK01B,QAAQtC,UAAUsB,YAAc,EACrC10B,KAAK01B,QAAQzmB,OAAS,GAAIgJ,OAAMse,MAAMv2B,KAAK01B,QAAQ7vB,KAAK01B,OAAO,IAC/Dv7B,KAAK01B,QAAQ1B,MAAQ,GAErBh0B,KAAK01B,QAAQrB,WAAWC,WACxBt0B,KAAK01B,QAAQmQ,cAAgB,GAAI5tB,OAAMgb,KAAKI,UAAUrzB,KAAK01B,QAAQiQ,QAAS3lC,KAAK01B,QAAQ7vB,MACzF7F,KAAK01B,QAAQI,WAAWC,SAAS/1B,KAAK01B,QAAQmQ,eAC9C7lC,KAAK01B,QAAQI,WAAWuF,SAAU,EAClCr7B,KAAK01B,QAAQG,UAAY,GAAI5d,OAAMgb,KAAKI,UAAUrzB,KAAK01B,QAAQiQ,QAAS3lC,KAAK01B,QAAQ7vB,MACrF7F,KAAK01B,QAAQI,WAAWC,SAAS/1B,KAAK01B,QAAQG,WAC9C71B,KAAK01B,QAAQG,UAAU5c,UAAY,UACnCjZ,KAAK01B,QAAQG,UAAUuB,QAAU,GACjCp3B,KAAK01B,QAAQG,UAAU2C,YAAc,UACrCx4B,KAAK01B,QAAQG,UAAUnB,YAAc,EACrC10B,KAAK01B,QAAQG,UAAUD,iBAAmB,GAAImP,GAAU/kC,KAAM,OAGlEA,KAAK+8B,mBAAqB18B,EAAE,WACxB4X,MAAMC,KAAK6jB,SACZ3Q,SAAS,KAAK/gB,QAEjBrK,KAAK8lC,WACL9lC,KAAK+lC,YAAa,CAElB,IAAIl9B,GAAQ7I,KACZgmC,GAAe,EACfC,EAAiB,EACjBC,GAAW,EACXC,EAAY,EACZC,EAAY,EACZC,EAAW,CAEXrmC,MAAKy5B,eACLz5B,KAAKsmC,eAEJ,OAAQ,SAAU,OAAQ,OAAQ,OAAQ,UAAW,SAAU,UAAWpsB,QAAQ,SAASqsB,GACxF,GAAI/yB,GAAM,GAAIC,MACdD,GAAIE,IAAMpL,EAAQxH,QAAQ4C,WAAa,OAAS6iC,EAAU,OAC1D19B,EAAMy9B,WAAWC,GAAW/yB,GAGhC,IAAIgzB,GAAqBnmC,EAAE+qB,SAAS,SAAS8R,EAAQC,GACjDt0B,EAAM6G,YAAYwtB,EAAQC,IAC3B75B,EAAMkT,gBAETxW,MAAKgP,SAAShD,IACVkmB,UAAW,SAASgL,GAChBA,EAAOvuB,iBACP9F,EAAMsH,YAAY+sB,GAAQ,IAE9BuJ,UAAW,SAASvJ,GAChBA,EAAOvuB,iBACP63B,EAAmBtJ,GAAQ,IAE/B/K,QAAS,SAAS+K,GACdA,EAAOvuB,iBACP9F,EAAMuH,UAAU8sB,GAAQ,IAE5BwJ,WAAY,SAASxJ,EAAQxB,GACtBpzB,EAAQxH,QAAQ+e,iBACfqd,EAAOvuB,iBACHq3B,GACAn9B,EAAM89B,SAASzJ,EAAQxB,KAInCkL,WAAY,SAAS1J,GACjBA,EAAOvuB,gBACP,IAAIk4B,GAAW3J,EAAOruB,cAAci4B,QAAQ,EAEpCx+B,GAAQxH,QAAQ4e,oBAChB,GAAI5M,MAASuzB,EAAW/iC,EAAMmT,kBAC5B7E,KAAKm1B,IAAIZ,EAAYU,EAASv3B,MAAO,GAAKsC,KAAKm1B,IAAIX,EAAYS,EAASr3B,MAAO,GAAKlM,EAAMoT,qBAEhG2vB,EAAW,EACXx9B,EAAMm+B,cAAcH,KAEpBR,EAAW,GAAIvzB,MACfqzB,EAAYU,EAASv3B,MACrB82B,EAAYS,EAASr3B,MACrBy2B,EAAiBp9B,EAAMqP,KAAK8b,MAC5BkS,GAAW,EACXr9B,EAAMsH,YAAY02B,GAAU,KAGpCI,UAAW,SAAS/J,GAGhB,GAFAA,EAAOvuB,iBACP03B,EAAW,EACiC,IAAxCnJ,EAAOruB,cAAci4B,QAAQ1kC,OAC7ByG,EAAM6G,YAAYwtB,EAAOruB,cAAci4B,QAAQ,IAAI,OAChD,CAOH,GANKZ,IACDr9B,EAAMuH,UAAU8sB,EAAOruB,cAAci4B,QAAQ,IAAI,GACjDj+B,EAAMw0B,aAAe,KACrBx0B,EAAM6tB,aAAc,EACpBwP,GAAW,GAEoB,cAA/BhJ,EAAOruB,cAAcmlB,MACrB,MAEJ,IAAIkT,GAAYhK,EAAOruB,cAAcmlB,MAAQiS,EAC7CkB,EAAcD,EAAYr+B,EAAMqP,KAAK8b,MACrCoT,EAAa,GAAInvB,OAAMse,OACO1tB,EAAMmG,SAASG,QACftG,EAAMmG,SAASK,WACZ6nB,SAAU,IAAQ,EAAIiQ,IAAgBnuB,IAAInQ,EAAMqP,KAAKjJ,OAAOioB,SAAUiQ,GACvGt+B,GAAMqP,KAAKmvB,SAASH,EAAWE,KAGvCE,SAAU,SAASpK,GACfA,EAAOvuB,iBACP9F,EAAMuH,UAAU8sB,EAAOruB,cAAcC,eAAe,IAAI,IAE5D7F,MAAO,SAASi0B,GACZA,EAAOvuB,iBACP9F,EAAM0+B,QAAQrK,IAElBsK,SAAU,SAAStK,GACfA,EAAOvuB,iBACHrG,EAAQxH,QAAQ4e,oBAChB7W,EAAMm+B,cAAc9J,IAG5B3vB,WAAY,SAAS2vB,GACjBA,EAAOvuB,iBAEP9F,EAAMw0B,aAAe,KACrBx0B,EAAM6tB,aAAc,GAExB+Q,SAAU,SAASvK,GACfA,EAAOvuB,kBAEX+4B,UAAW,SAASxK,GAChBA,EAAOvuB,iBACPq3B,GAAe,GAEnB2B,UAAW,SAASzK,GAChBA,EAAOvuB,iBACPq3B,GAAe,GAEnB4B,KAAM,SAAS1K,GACXA,EAAOvuB,iBACPq3B,GAAe,CACf,IAAIryB,KACJtT,GAAEgC,KAAK66B,EAAOruB,cAAcwB,aAAahL,MAAO,SAASkZ,GACrD,IACI5K,EAAI4K,GAAK2e,EAAOruB,cAAcwB,aAAa4xB,QAAQ1jB,GACrD,MAAM/P,MAEZ,IAAIoH,GAAOsnB,EAAOruB,cAAcwB,aAAa4xB,QAAQ,OACrD,IAAoB,gBAATrsB,GACP,OAAOA,EAAK,IACZ,IAAK,IACL,IAAK,IACD,IACI,GAAIlL,GAAOogB,KAAK+c,MAAMjyB,EACtBvV,GAAEgU,OAAOV,EAAIjJ,GAEjB,MAAM8D,GACGmF,EAAI,gBACLA,EAAI,cAAgBiC,GAG5B,KACJ,KAAK,IACIjC,EAAI,eACLA,EAAI,aAAeiC,EAEvB,MACJ,SACSjC,EAAI,gBACLA,EAAI,cAAgBiC,GAIhC,GAAIjS,GAAMu5B,EAAOruB,cAAcwB,aAAa4xB,QAAQ,MAChDt+B,KAAQgQ,EAAI,mBACZA,EAAI,iBAAmBhQ,GAE3BkF,EAAMmH,SAAS2D,EAAKupB,EAAOruB,iBAInC,IAAIi5B,GAAY,SAASC,EAAUC,GAC/Bn/B,EAAMZ,EAAEO,KAAKu/B,GAAU9+B,MAAM,SAASg/B,GAElC,MADAp/B,GAAMm/B,GAAOC,IACN,IAIZjoC,MAAKuB,OAAOsF,QAAQC,IAAI,SAAS1E,OAAS,GAAKpC,KAAKuB,OAAOT,QAAQgH,WAClE9H,KAAKiI,EAAEO,KAAK,oBAAoB0mB,OAEpClvB,KAAKiI,EAAEO,KAAK,mBAAmB8E,WACvB,WAAazE,EAAMZ,EAAEO,KAAK,gBAAgBW,cAElDnJ,KAAKiI,EAAEO,KAAK,aAAa+E,WACjB,WAAa1E,EAAMZ,EAAEO,KAAK,gBAAgBuF,YAG9Ck3B,EAAWiD,SACXJ,EAAU,wBAAyB,cAEnCl4B,SAASu4B,iBAAiBlD,EAAWmD,IAAIC,iBAAkB,WAGvDhd,WAAW,WACP,GAAIid,GAAWz/B,EAAMZ,EAAEkH,QACnBo5B,EAAY1/B,EAAMZ,EAAEoH,QAEpBxG,GAAMtH,OAAOT,QAAQ4F,eACrB6hC,GAAa1/B,EAAMZ,EAAEO,KAAK,cAAc6G,UAExCxG,EAAMtH,OAAOT,QAAQ8C,WAAc5D,KAAKuB,OAAO0G,EAAEO,KAAK,YAAYkU,WAAWnN,KAAO,IACpF+4B,GAAYtoC,KAAKuB,OAAO0G,EAAEO,KAAK,YAAY2G,SAG/C8I,MAAMC,KAAKswB,SAAW,GAAIvwB,OAAM+gB,MAAMsP,EAAUC,IAChD1/B,EAAMjB,OAAOiB,EAAM4/B,aAAcH,EAAUz/B,EAAM6/B,cAAeH,GAEhE1/B,EAAM4/B,aAAeH,EACrBz/B,EAAM6/B,cAAgBH,EAEjBtD,EAAW0D,eACZ1wB,MAAMC,KAAK0wB,SAAW,SAAS1L,GAC3B,GAAI2L,GAAW3L,EAAOr3B,KAAKijC,OACvBC,EAAY7L,EAAOr3B,KAAKiS,QACxBkxB,EAAaD,EAAY7L,EAAO+L,MAAM55B,OACtC65B,EAAYL,EAAW3L,EAAO+L,MAAM95B,KAExCtG,GAAMjB,OAAOshC,EAAWL,EAAUG,EAAYD,MAGvD,SAGP/oC,KAAKiI,EAAEO,KAAK,yBAAyBE,SAAS,YAC9C1I,KAAKiI,EAAEO,KAAK,qDAAqDQ,KAAKhJ,KAAKuB,OAAOC,UAAU,8CAGhGsmC,EAAU,qBAAsB,cAChCA,EAAU,qBAAsB,cAChCA,EAAU,kBAAmB,QAC7BA,EAAU,kBAAmB,QAC7BA,EAAU,oBAAqB,iBAC/B9nC,KAAKiI,EAAEO,KAAK,0BAETM,KAAK,OAAO,cAAgBxF,EAAMuT,kBAAkBvO,IACpDW,MAAM,WAMH,MALAJ,GAAMs8B,QACLvvB,KAAKtN,EAAQ9G,UAAU,uIACvB2nC,SACA3M,MAAM,KACN4M,WACM,IAEbppC,KAAKiI,EAAEO,KAAK,qBAAqB6gC,UAAU,WACvCphC,EAAEjI,MAAMwI,KAAK,sBAAsB0mB,SACpC5gB,SAAS,WACRrG,EAAEjI,MAAMwI,KAAK,sBAAsBC,SAEvCq/B,EAAU,gBAAiB,YAE3B7vB,MAAMC,KAAKlM,GAAG,SAAU,SAASkxB,GAC7B,GAAI2L,GAAW3L,EAAOr3B,KAAKijC,OACvBC,EAAY7L,EAAOr3B,KAAKiS,QACxBkxB,EAAaD,EAAY7L,EAAO+L,MAAM55B,OACtC65B,EAAYL,EAAW3L,EAAO+L,MAAM95B,KAExCtG,GAAMjB,OAAOshC,EAAWL,EAAUG,EAAYD,IAGlD,IAAIO,GAAYjpC,EAAE+qB,SAAS,WACvBviB,EAAMwoB,UACR,GAEFrxB,MAAKupC,mBAAmB,OAAQvpC,KAAKuB,OAAOsF,QAAQC,IAAI,UACxD9G,KAAKupC,mBAAmB,OAAQvpC,KAAKuB,OAAOsF,QAAQC,IAAI,UACxD9G,KAAKuB,OAAOsF,QAAQmF,GAAG,eAAgB,WACnCnD,EAAMZ,EAAEO,KAAK,gBAAgB4E,IAAI9E,EAAQzB,QAAQC,IAAI,UAAU0iC,KAAK,QAASlhC,EAAQzB,QAAQC,IAAI,YAGrG9G,KAAKiI,EAAEO,KAAK,gBAAgBwD,GAAG,oBAAqB,WAChD1D,EAAQzB,QAAQwU,KAAKla,MAAS8G,EAAEjI,MAAMoN,SAG1C,IAAIq8B,GAAiBppC,EAAE+qB,SAAS,WAC5BviB,EAAM6C,eACP,IAmFH,IAjFA+9B,IAGAzpC,KAAKuB,OAAOsF,QAAQmF,GAAG,oBAAqB,WACxC,OAAQnD,EAAMtH,OAAOsF,QAAQC,IAAI,eAC7B,IAAK,GACD+B,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,WAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,UAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmBE,SAAS,QACzC,MACJ,KAAK,GACDG,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,SAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,UAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmBE,SAAS,UACzC,MACJ,KAAK,GACDG,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,SAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmB0jB,YAAY,WAC5CrjB,EAAMZ,EAAEO,KAAK,mBAAmBE,SAAS,aAKrD1I,KAAKuB,OAAOsF,QAAQmF,GAAG,SAAU,WACzBnD,EAAMtH,OAAOT,QAAQqf,eACrBvG,SAAS8vB,QAAQ7a,QAEjBhmB,EAAM8gC,UAEV9gC,EAAM48B,cAAe,EACrB6D,MAIJtpC,KAAKuB,OAAOsJ,OAAOmB,GAAG,SAAU,SAAS49B,GACrC/gC,EAAMghC,kBAAkBD,KAG5B5pC,KAAKuB,OAAOsF,QAAQmF,GAAG,uBAAwB,WAC3C,GAAInD,EAAMtH,OAAOsF,QAAQC,IAAI,iBACzB,CAAc+B,EAAMZ,EAAEO,KAAK,WAAWE,SAAS,OACnC2iB,WAAW,WACnBxiB,EAAMZ,EAAEO,KAAK,WAAWC,KAAK,MAC9B,QAIXzI,KAAKuB,OAAOsF,QAAQmF,GAAG,yBAA0By9B,GAEjDzpC,KAAKuB,OAAOsF,QAAQmF,GAAG,yBAA0B,SAAS2R,GACnD9U,EAAMtH,OAAOsF,QAAQC,IAAI,SAAS1E,OAAS,EAC1CyG,EAAMZ,EAAEO,KAAK,oBAAoB0mB,OAGjCrmB,EAAMZ,EAAEO,KAAK,oBAAoBC,SAIzCzI,KAAKuB,OAAOsF,QAAQmF,GAAG,YAAa,SAAS2R,GACzC9U,EAAMizB,kBAAkB,OAAQne,GAC3B9U,EAAMtH,OAAOsF,QAAQC,IAAI,kBAC1BwiC,MAGRtpC,KAAKuB,OAAOsF,QAAQmF,GAAG,YAAa,SAAS6R,GACzChV,EAAMizB,kBAAkB,OAAQje,GAC3BhV,EAAMtH,OAAOsF,QAAQC,IAAI,kBAC1BwiC,MAGRtpC,KAAKuB,OAAOsF,QAAQmF,GAAG,eAAgB,SAASoC,EAAQ6f,GACpD,GAAI6b,GAAKjhC,EAAMZ,EAAEO,KAAK,eAClBshC,GAAGh8B,GAAG,SACFg8B,EAAG18B,QAAU6gB,GACb6b,EAAG18B,IAAI6gB,GAGX6b,EAAGl0B,KAAKqY,KAIZ3lB,EAAQxH,QAAQ0e,aAAc,CAC9B,GAAIuqB,GAC4C,gBAAjCzhC,GAAQxH,QAAQ0e,aACnBlX,EAAQxH,QAAQ0e,aACN,GAEtB9V,QAAO2hB,WACC,WACIxiB,EAAM8gC,WAEVI,GAUZ,GANIzhC,EAAQxH,QAAQ2e,cAChBxX,EAAEyB,QAAQ9B,OAAO,WACbiB,EAAMmhC,cAIV1hC,EAAQxH,QAAQiG,gBAAkBuB,EAAQxH,QAAQmG,oBAAqB,CACvE,GAAIgjC,GAAajqC,KAAKiI,EAAEO,KAAK,0CAC7B0hC,EAAUlqC,KAAKiI,EAAEO,KAAK,wCAEtByhC,GAAWpH,MACH,SAAS70B,GACDnF,EAAM0uB,eACNvpB,EAAGW,iBACHu7B,EAAQhb,SAGhB,SAASlhB,GACLA,EAAGW,iBACHu7B,EAAQzhC,SAIpByhC,EAAQ1hC,KAAK,MAAM8E,WACX,SAASU,GACDnF,EAAM0uB,eACNvpB,EAAGW,iBACH9F,EAAMZ,EAAEO,KAAK,yBAAyBgJ,IAAI,aAAcvJ,EAAEjI,MAAM8I,KAAK,kBAMzF,GAAIR,EAAQxH,QAAQ6G,kBAAmB,CAEnC,GAAI6I,GAAU,EAEdxQ,MAAKiI,EAAEO,KAAK,yBAAyBwD,GAAG,2BAA4B;AAChE,GAAIm+B,GAAQliC,EAAEjI,MACdoN,EAAM+8B,EAAM/8B,KACZ,IAAIA,IAAQoD,EAIZ,GADAA,EAAUpD,EACNA,EAAIhL,OAAS,EACbkG,EAAQzB,QAAQC,IAAI,SAASzE,KAAK,SAASwQ,GACvChK,EAAMwwB,yBAAyBxmB,GAAGof,gBAEtC3pB,EAAQzB,QAAQC,IAAI,SAASzE,KAAK,SAASmM,GACvC3F,EAAMwwB,yBAAyB7qB,GAAGyjB,oBAEnC,CACH,GAAImY,GAAM9mC,EAAMmN,sBAAsBrD,EACtC9E,GAAQzB,QAAQC,IAAI,SAASzE,KAAK,SAASwQ,GACnCA,EAAE+I,KAAOxO,GAAOg9B,EAAI72B,KAAKV,EAAE/L,IAAI,WAAasjC,EAAI72B,KAAKV,EAAE/L,IAAI,gBAC3D+B,EAAMwwB,yBAAyBxmB,GAAGoa,UAAUmd,GAE5CvhC,EAAMwwB,yBAAyBxmB,GAAGof,gBAG1C3pB,EAAQzB,QAAQC,IAAI,SAASzE,KAAK,SAASmM,GACnCA,EAAEoN,KAAOxO,GAAOg9B,EAAI72B,KAAK/E,EAAE1H,IAAI,WAAasjC,EAAI72B,KAAK/E,EAAE1H,IAAI,gBAC3D+B,EAAMwwB,yBAAyB7qB,GAAGye,UAAUmd,GAE5CvhC,EAAMwwB,yBAAyB7qB,GAAGyjB,mBAQtDjyB,KAAKqxB,SAEL3nB,OAAOC,YAAY,WACf,GAAI0gC,IAAO,GAAIv3B,OAAO0xB,SACtB37B,GAAMy7B,YAAYpqB,QAAQ,SAASwZ,GAC/B,GAAI2W,GAAQ3W,EAAE6Q,KAAM,CAChB,GAAIuF,GAAKxhC,EAAQzB,QAAQC,IAAI,SAASwjC,WAAWC,iBAAmB7W,EAAE9X,IAClEkuB,IACAjjC,QAAQmX,WAAW8rB,GAEvBA,EAAKxhC,EAAQzB,QAAQC,IAAI,SAASwjC,WAAWC,iBAAmB7W,EAAE9X,KAC9DkuB,GACAjjC,QAAQqX,WAAW4rB,MAI/BjhC,EAAMy7B,YAAcz7B,EAAMy7B,YAAY5lB,OAAO,SAASgV,GAClD,MAAOprB,GAAQzB,QAAQC,IAAI,SAASwjC,WAAWC,iBAAmB7W,EAAE9X,MAAQtT,EAAQzB,QAAQC,IAAI,SAASwjC,WAAWC,iBAAmB7W,EAAE9X,QAE9I,KAEC5b,KAAK01B,SACLhsB,OAAOC,YAAY,WACfd,EAAM2hC,kBACP,KAs0BX,OAj0BAnqC,GAAEiM,EAAM1L,WAAWyT,QACfs1B,QAAS,WACmB,mBAAd3pC,MAAKkY,OACXlY,KAAKkY,KAAOlY,KAAK87B,kBAAkB,OAAQ97B,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS2jC,SAEhFzqC,KAAKkY,KAAK8xB,aAEdhG,WAAY,SAAS0G,EAAOC,EAAMC,EAAOC,EAAaC,EAAWC,EAAUC,EAAUC,GACjF,GAAIj0B,GAAWhX,KAAKuB,OAAOT,QACvBoqC,EAAaL,EAAcj5B,KAAKu5B,GAAK,IACrCC,EAAWN,EAAYl5B,KAAKu5B,GAAK,IACjCxc,EAAO3uB,KAAKsmC,WAAW0E,GACvBK,GAAaz5B,KAAK05B,IAAIJ,GACtBK,EAAW35B,KAAK45B,IAAIN,GACpBO,EAAY75B,KAAK45B,IAAIN,GAAcP,EAAOI,EAAWM,EACrDK,EAAY95B,KAAK05B,IAAIJ,GAAcP,EAAOI,EAAWQ,EACrDI,EAAa/5B,KAAK45B,IAAIN,GAAcN,EAAQG,EAAWM,EACvDO,EAAah6B,KAAK05B,IAAIJ,GAAcN,EAAQG,EAAWQ,EACvDM,GAAWj6B,KAAK05B,IAAIF,GACpBU,EAASl6B,KAAK45B,IAAIJ,GAClBW,EAAUn6B,KAAK45B,IAAIJ,GAAYT,EAAOI,EAAWc,EACjDG,EAAUp6B,KAAK05B,IAAIF,GAAYT,EAAOI,EAAWe,EACjDG,EAAWr6B,KAAK45B,IAAIJ,GAAYR,EAAQG,EAAWc,EACnDK,EAAWt6B,KAAK05B,IAAIF,GAAYR,EAAQG,EAAWe,EACnDK,GAAYxB,EAAOC,GAAS,EAC5BwB,GAAelB,EAAaE,GAAY,EACxCiB,EAAWz6B,KAAK45B,IAAIY,GAAeD,EACnCG,EAAW16B,KAAK05B,IAAIc,GAAeD,EACnCI,EAAa36B,KAAK45B,IAAIY,GAAezB,EACrC6B,EAAc56B,KAAK45B,IAAIY,GAAexB,EACtC6B,EAAa76B,KAAK05B,IAAIc,GAAezB,EACrC+B,EAAc96B,KAAK05B,IAAIc,GAAexB,EACtC+B,EAAS/6B,KAAK45B,IAAIY,IAAgBxB,EAAQ,GAC1CgC,EAASh7B,KAAK05B,IAAIc,IAAgBxB,EAAQ5zB,EAASgK,yBAA2BhK,EAASgK,wBAA0B,CACrHhhB,MAAKygC,cAAcnM,UACnB,IAAIpd,GAAQ,GAAIe,OAAMgb,IACtB/b,GAAM8B,KAAKyyB,EAAWC,IACtBx0B,EAAM21B,OAAON,EAAYE,IAAcV,EAASC,IAChD90B,EAAM4jB,QAAQmR,EAAWC,IACzBh1B,EAAM21B,OAAOL,EAAaE,IAAef,EAAYC,IACrD10B,EAAM+B,UAAYjC,EAAS8J,mBAC3B5J,EAAMkgB,QAAU,GAChBlgB,EAAM41B,QAAS,EACf51B,EAAM0e,iBAAmB8U,CACzB,IAAI75B,GAAQ,GAAIoH,OAAM80B,UAAUJ,EAAOC,EACvC/7B,GAAMm8B,gBACEC,SAAUj2B,EAASgK,wBACnB/H,UAAWjC,EAAS+J,qBAExB4rB,EAAS,EACT97B,EAAMq8B,eAAeC,cAAgB,OAC9BR,GAAS,EAChB97B,EAAMq8B,eAAeC,cAAgB,QAErCt8B,EAAMq8B,eAAeC,cAAgB,SAEzCt8B,EAAMquB,SAAU,CAChB,IAAIkO,IAAW,EACXC,EAAW,GAAIp1B,OAAMse,OAAM,KAAM,KACjC+W,EAAO,GAAIr1B,OAAMmjB,OAAOlkB,EAAOrG,IAE/B6qB,EAAS4R,EAAK5wB,SACd6wB,EAAY,GAAIt1B,OAAMse,OAAO8V,EAAUC,IACvCkB,EAAc,GAAIv1B,OAAMse,MAAM,EAAE,EACpC1lB,GAAM0d,QAAU0c,EAEhBqC,EAAK3P,MAAQ2P,EAAKjO,OAAOlnB,OACzBm1B,EAAKpO,SAAU,EACfoO,EAAK5wB,SAAW2wB,CAChB,IAAIjgB,IACI8B,KAAM,WACFke,GAAW,EACXE,EAAK5wB,SAAW8wB,EAAYx0B,IAAI0iB,GAChC4R,EAAKpO,SAAU,GAEnBlN,OAAQ,SAAS6S,GACb2I,EAAc3I,EACVuI,IACAE,EAAK5wB,SAAWmoB,EAAO7rB,IAAI0iB,KAGnCjzB,KAAM,WACF2kC,GAAW,EACXE,EAAKpO,SAAU,EACfoO,EAAK5wB,SAAW2wB,GAEpB1b,OAAQ,WACJza,EAAMkgB,QAAU,GAChBvmB,EAAMquB,SAAU,GAEpBrN,SAAU,WACN3a,EAAMkgB,QAAU,GAChBvmB,EAAMquB,SAAU,GAEpBh2B,QAAS,WACLokC,EAAKrvB,WAGb0a,EAAY,WACZ,GAAIsC,GAAU,GAAIhjB,OAAMijB,OAAOvM,EAC/BsM,GAAQve,SAAW6wB,EAAUv0B,IAAIs0B,EAAK5wB,UAAUsa,SAAS0E,GACzDT,EAAQE,QAAS,EACjBmS,EAAKvX,SAASkF,GAQlB,OANItM,GAAKxf,MACLwpB,IAEA1wB,EAAE0mB,GAAM3iB,GAAG,OAAO2sB,GAGfvL,GAEXoQ,aAAc,SAASiQ,GACnB,GAAIC,GAAUrtC,EAAEL,KAAK8lC,SAASt9B,KAAK,SAASklC,GACxC,MACUA,GAAQ9wB,OAAS6wB,EAAUnU,qBAAuBoU,EAAQ7wB,KAAO4wB,EAAUlU,mBAC3EmU,EAAQ9wB,OAAS6wB,EAAUlU,mBAAqBmU,EAAQ7wB,KAAO4wB,EAAUnU,qBAiBvF,OAduB,mBAAZoU,GACPA,EAAQ9yB,MAAM9Q,KAAK2jC,IAEnBC,GACQ9wB,KAAM6wB,EAAUnU,oBAChBzc,GAAI4wB,EAAUlU,kBACd3e,OAAS6yB,GACT9O,YAAa,SAASgP,GAClB,GAAIC,GAAQD,EAAIrU,sBAAwBt5B,KAAK4c,KAAQ,GAAI,CACzD,OAAOgxB,IAASvtC,EAAEL,KAAK4a,OAAO+hB,QAAQgR,IAAQ3tC,KAAK4a,MAAMxY,OAAS,GAAK,KAGnFpC,KAAK8lC,QAAQh8B,KAAK4jC,IAEfA,GAEXnW,WAAY,WACR,MAAQv3B,MAAKuB,OAAOT,QAAQ6F,cAAgB3G,KAAKuB,OAAOqJ,WAE5DqG,eAAgB,WACZ,GAAI48B,GAAU7tC,KAAKiI,EAAEO,KAAK,mBAC1BslC,EAAMD,EAAQrlC,KAAK,8BACfxI,MAAKuB,OAAOqJ,WACZijC,EAAQ3hB,YAAY,2BAA2BxjB,SAAS,oBACxDolC,EAAIl4B,KAAK5V,KAAKuB,OAAOC,UAAU,qBAE3BxB,KAAKuB,OAAOT,QAAQye,aACpBsuB,EAAQ3hB,YAAY,mCACpB4hB,EAAIl4B,KAAK5V,KAAKuB,OAAOC,UAAU,mBAE/BqsC,EAAQ3hB,YAAY,6BAA6BxjB,SAAS,kBAC1DolC,EAAIl4B,KAAK5V,KAAKuB,OAAOC,UAAU,uBAGvCxB,KAAK0L,eAETqiC,gBAAiB,WACb,GAAIpI,GAAU3lC,KAAK64B,gBAAgB74B,KAAKi9B,cAAc,GAAIhlB,OAAMse,OAAO,EAAE,MACrEyX,EAAchuC,KAAK64B,gBAAgB74B,KAAKi9B,cAAchlB,MAAMC,KAAKmnB,OAAOuG,aAC5E5lC,MAAK01B,QAAQG,UAAUoD,UAAU0M,EAASqI,IAE9CxD,eAAgB,WACZ,GAAI9vB,GAAQ1a,KAAKuB,OAAOsF,QAAQC,IAAI,QACpC,IAAI4T,EAAMtY,OAAS,EAAG,CAClB,GAAI6rC,GAAMvzB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAYkR,IAC/Dk2B,EAAMxzB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAY0R,IAC/D21B,EAAQv8B,KAAKgH,IAAI3E,MAAMrC,KAAMq8B,GAC7BG,EAAQx8B,KAAKgH,IAAI3E,MAAMrC,KAAMs8B,GAC7BG,EAAQz8B,KAAK8G,IAAIzE,MAAMrC,KAAMq8B,GAC7BK,EAAQ18B,KAAK8G,IAAIzE,MAAMrC,KAAMs8B,GAC7BK,EAAS38B,KAAKgH,IACQ,GAAlB5Y,KAAKkY,KAAK8b,MAAch0B,KAAKuB,OAAOT,QAAQyf,cAAgBtI,MAAMC,KAAKmnB,OAAOlwB,MAC5D,GAAlBnP,KAAKkY,KAAK8b,MAAch0B,KAAKuB,OAAOT,QAAQ0f,eAAiBvI,MAAMC,KAAKmnB,OAAOhwB,QAC7ErP,KAAKuB,OAAOT,QAAQyf,cAAgB,EAAIvgB,KAAKuB,OAAOT,QAAQ2f,kBAAqB4tB,EAAQF,IACzFnuC,KAAKuB,OAAOT,QAAQ0f,eAAiB,EAAIxgB,KAAKuB,OAAOT,QAAQ2f,kBAAqB6tB,EAAQF,GAEpGpuC,MAAK01B,QAAQzmB,OAASjP,KAAK01B,QAAQ7vB,KAAK01B,OAAO,GAAGvE,SAAS,GAAI/e,OAAMse,QAAQ8X,EAAQF,GAAS,GAAIG,EAAQF,GAAS,IAAIlX,SAASqX,IAChIvuC,KAAK01B,QAAQ1B,MAAQua,EAEJ,IAAjB7zB,EAAMtY,SACNpC,KAAK01B,QAAQ1B,MAAQ,GACrBh0B,KAAK01B,QAAQzmB,OAASjP,KAAK01B,QAAQ7vB,KAAK01B,OAAO,GAAGvE,SAAS,GAAI/e,OAAMse,OAAO7b,EAAM8zB,GAAG,GAAG1nC,IAAI,YAAYkR,EAAG0C,EAAM8zB,GAAG,GAAG1nC,IAAI,YAAY0R,IAAI0e,SAASl3B,KAAK01B,QAAQ1B,SAErKh0B,KAAKqxB,UAETuF,cAAe,SAASiO,GACpB,MAAOA,GAAO3N,SAASl3B,KAAKkY,KAAK8b,OAAOhb,IAAIhZ,KAAKkY,KAAKjJ,SAE1D4pB,gBAAiB,SAASgM,GACtB,MAAOA,GAAO3N,SAASl3B,KAAK01B,QAAQ1B,OAAOhb,IAAIhZ,KAAK01B,QAAQzmB,QAAQ+J,IAAIhZ,KAAK01B,QAAQiQ,UAEzF1I,cAAe,SAAS4H,GACpB,MAAOA,GAAO7N,SAASh3B,KAAKkY,KAAKjJ,QAAQssB,OAAOv7B,KAAKkY,KAAK8b,QAE9D8H,kBAAmB,SAAS2S,EAAOrgC,GAC/B,GAAIsgC,GAAepc,EAASD,cAAcoc,GACtC/D,EAAQ,GAAIgE,GAAa1uC,KAAMoO,EAEnC,OADApO,MAAKklC,gBAAgBp7B,KAAK4gC,GACnBA,GAEXnB,mBAAoB,SAASkF,EAAOE,GAChC,GAAI9lC,GAAQ7I,IACZ2uC,GAAYz0B,QAAQ,SAAS9L,GACzBvF,EAAMizB,kBAAkB2S,EAAOrgC,MAGvCwgC,aAAcvuC,EAAE8J,SACR,4GAERuB,YAAa,WACT,GAAK1L,KAAKuB,OAAOT,QAAQiG,eAAzB,CAGA,GAAI8nC,MAAclkC,QAAQ3K,KAAKuB,OAAOsF,QAAQiF,uBAAyBgjC,YAAe9uC,KAAKuB,OAAOsF,QAAQC,IAAI,cAAgBgoC,YAC9HC,EAAY,GACZC,EAAahvC,KAAKiI,EAAEO,KAAK,aACzBymC,EAAQD,EAAWxmC,KAAK,wBACxB0mC,EAAWF,EAAWxmC,KAAK,2BAC3B2mC,EAAeH,EAAWxmC,KAAK,yBAC/BK,EAAQ7I,IACRivC,GAAMlgC,IAAI,SAAS6G,KAAK5V,KAAKuB,OAAOC,UAAU,mBAC9C0tC,EAASngC,IAAI,oBACb8/B,EAAS30B,QAAQ,SAASsD,GAClBA,EAAM1W,IAAI,SAAW+B,EAAMtH,OAAOiK,cAClCyjC,EAAMr5B,KAAK4H,EAAM1W,IAAI,UACrBqoC,EAAa39B,IAAI,aAAcgM,EAAM1W,IAAI,UACrC+B,EAAM0uB,eAEF1uB,EAAMtH,OAAOT,QAAQuf,oBACrB4uB,EAAMhmC,MAAM,WACR,GAAIkhC,GAAQliC,EAAEjI,MACdovC,EAASnnC,EAAE,WAAWmF,IAAIoQ,EAAM1W,IAAI,UAAU+6B,KAAK,WAC/CrkB,EAAMnC,IAAI,QAASpT,EAAEjI,MAAMoN,OAC3BvE,EAAM6C,cACN7C,EAAMwoB,UAEV8Y,GAAMhS,QAAQnvB,KAAKomC,GACnBA,EAAOzd,WAIX9oB,EAAMtH,OAAOT,QAAQmG,qBACrBioC,EAASjmC,MACD,SAAS+E,GACLA,EAAGW,iBACC9F,EAAM0uB,cACN/Z,EAAMnC,IAAI,QAASpT,EAAEjI,MAAM8I,KAAK,eAEpCb,EAAEjI,MAAMqvC,SAAS5mC,SAE3B8E,WAAW,WACT4hC,EAAa39B,IAAI,aAAcgM,EAAM1W,IAAI,cAMrDioC,GAAalmC,EAAM+lC,cACfnrB,KAAMjG,EAAM1W,IAAI,SAChBwoC,WAAY9xB,EAAM1W,IAAI,aAIlCkoC,EAAWxmC,KAAK,gBAAgBQ,KAAK+lC,KAEzCvd,qBAAsB,SAAS+d,GAC3BA,EAAgBrmC,UAChBlJ,KAAKklC,gBAAkB7kC,EAAEs/B,OAAO3/B,KAAKklC,gBACjC,SAASwF,GACL,MAAOA,KAAU6E,KAI7BlW,yBAA0B,SAASjrB,GAC/B,GAAKA,EAGL,MAAO/N,GAAEmI,KAAKxI,KAAKklC,gBAAiB,SAASwF,GACzC,MAAOA,GAAMxrB,QAAU9Q,KAG/BwtB,4BAA6B,SAAS6S,GAClC,GAAIe,GAAmBnvC,EAAEqe,OAAO1e,KAAKklC,gBAAgB,SAASwF,GAC1D,MAAOA,GAAMplC,OAASmpC,IAEtB5lC,EAAQ7I,IACZK,GAAEgC,KAAKmtC,EAAkB,SAAS9E,GAC9B7hC,EAAM2oB,qBAAqBkZ,MAGnCr8B,eAAgB,SAASD,GACrB,GAAIs8B,GAAQ1qC,KAAKq5B,yBAAyBjrB,EACtCs8B,IACAA,EAAMzd,aAGd1e,eAAgB,SAASH,GACrB/N,EAAEgC,KAAKrC,KAAKklC,gBAAiB,SAASwF,GAClCA,EAAMzY,iBAGdmL,YAAa,SAAShvB,GAClB/N,EAAEgC,KAAKrC,KAAKklC,gBAAiB,SAASwF,GAClCA,EAAM7Y,cAGdR,OAAQ,WAECrxB,KAAKylC,eAGVplC,EAAEgC,KAAKrC,KAAKklC,gBAAiB,SAASqK,GAClCA,EAAgBle,QAAS6H,iBAAgB,MAEzCl5B,KAAK01B,SAAgC,mBAAd11B,MAAKkY,MAC5BlY,KAAK+tC,kBAET91B,MAAMC,KAAK6jB,SAEfn0B,OAAQ,SAASshC,EAAWL,EAAUG,EAAYD,GAC9C,GAAI0G,EAEAzvC,MAAK01B,UACL11B,KAAK01B,QAAQiQ,QAAU1tB,MAAMC,KAAKmnB,OAAOuG,YAAY5O,SAASh3B,KAAK01B,QAAQ7vB,MAC3E7F,KAAK01B,QAAQtC,UAAU6F,UAAUj5B,KAAK01B,QAAQiQ,QAAQ3O,UAAU,EAAE,IAAKh3B,KAAK01B,QAAQ7vB,KAAKmT,KAAK,EAAE,KAChGhZ,KAAK01B,QAAQmQ,cAAc5M,UAAUj5B,KAAK01B,QAAQiQ,QAAS3lC,KAAK01B,QAAQ7vB,MAG5E,IAAI6pC,GAAS3G,EAAUC,EACnB2G,EAAS9G,EAASK,CAEduG,GADJ1G,EAAYF,EACC6G,EAEJC,EAEb3vC,KAAKkY,KAAK03B,WAAW/G,EAAWK,EAAWH,EAAYC,EAAYyG,GAEnEzvC,KAAKqxB,UAETyT,YAAa,SAAS+K,EAAOhL,EAAQiL,GACjC,GAAIC,GAAW/vC,KAAK87B,kBAAkB,WAAW,KACjDiU,GAAS/P,QAAU6E,EACnBkL,EAASzW,oBAAsBuW,EAC/BE,EAASlQ,OAASiQ,EAClBC,EAAS1e,SACTrxB,KAAKq9B,aAAe0S,GAExB3P,WAAY,SAASF,GACjB,GAAIA,GAA0D,mBAArCA,GAAW9lB,KAAKwb,iBAAkC,CACvE,GAAIjD,GAAauN,EAAW9lB,KAAKwb,gBAC7B51B,MAAKulC,kBAAoBrF,EAAW9lB,KAAKwb,mBACrC51B,KAAKulC,iBACLvlC,KAAKulC,gBAAgB1T,SAASc,GAElCA,EAAWhB,OAAO3xB,KAAKulC,iBACvBvlC,KAAKulC,gBAAkB5S,OAGvB3yB,MAAKulC,iBACLvlC,KAAKulC,gBAAgB1T,WAEzB7xB,KAAKulC,gBAAkB,MAG/B71B,YAAa,SAASwtB,GAClB,GAAI0H,GAAO5kC,KAAKgP,SAASC,SACzB41B,EAAS,GAAI5sB,OAAMse,OACO2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,MAEpBisB,EAASmJ,EAAO7N,SAASh3B,KAAKgwC,WACxDhwC,MAAKgwC,WAAanL,GACb7kC,KAAK02B,aAAe12B,KAAKslC,YAAc5J,EAAOt5B,OAASkB,EAAMuS,qBAC9D7V,KAAK02B,aAAc,EAEvB,IAAIwJ,GAAajoB,MAAMpR,QAAQs5B,QAAQ0E,EACnC7kC,MAAK02B,YACD12B,KAAKq9B,cAAwD,kBAAjCr9B,MAAKq9B,aAAa5B,WAC9Cz7B,KAAKq9B,aAAa5B,WAAWC,GAE7B17B,KAAKkY,KAAKujB,WAAWC,GAGzB17B,KAAKogC,WAAWF,GAEpBjoB,MAAMC,KAAK6jB,QAEf5rB,YAAa,SAAS+sB,EAAQC,GAC1B,GAAIyH,GAAO5kC,KAAKgP,SAASC,SACzB41B,EAAS,GAAI5sB,OAAMse,OACO2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,KAI9C,IAFAzP,KAAKgwC,WAAanL,EAClB7kC,KAAKslC,YAAa,GACbtlC,KAAKq9B,cAA2C,cAA3Br9B,KAAKq9B,aAAa/3B,KAAsB,CAC9DtF,KAAK47B,4BAA4B,UACjC57B,KAAK02B,aAAc,CACnB,IAAIwJ,GAAajoB,MAAMpR,QAAQs5B,QAAQ0E,EACvC,IAAI3E,GAA0D,mBAArCA,GAAW9lB,KAAKwb,iBACrC51B,KAAKq9B,aAAe6C,EAAW9lB,KAAKwb,iBACpC51B,KAAKq9B,aAAanL,UAAUgL,EAAQC,OAGpC,IADAn9B,KAAKq9B,aAAe,KAChBr9B,KAAKu3B,cAAgBv3B,KAAK+lC,aAAeziC,EAAM2S,mBAAoB,CACnE,GAAIgB,GAAUjX,KAAKi9B,cAAc4H,GACjCpa,GACI7O,GAAItY,EAAMqP,OAAO,QACjB8J,WAAYzc,KAAKuB,OAAOiK,aACxBkR,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAEfqnB,OAAQv8B,EAAM0O,WAAWK,aAEzBsL,EAAQ3d,KAAKuB,OAAOsF,QAAQ6W,QAAQ+M,EACxCzqB,MAAKq5B,yBAAyB1b,GAAOge,cAI7C37B,KAAK+lC,aACD/lC,KAAKu3B,cAAgBv3B,KAAK+lC,aAAeziC,EAAM4S,sBAAwBlW,KAAKq9B,cAA2C,SAA3Br9B,KAAKq9B,aAAa/3B,MAC9GtF,KAAK47B,4BAA4B,UACjC57B,KAAK8kC,YAAY9kC,KAAKq9B,aAAcwH,EAAQvhC,EAAM0O,WAAWS,iBAC7DzS,KAAK+lC,WAAaziC,EAAM6S,mBACxBnW,KAAKmlC,QAAQiE,QAAQ,WACjBnhC,EAAEjI,MAAMgJ,KAAKhJ,KAAKuB,OAAOC,UAAU,gDAAgD2nC,aAGvFnpC,KAAKmlC,QAAQ18B,OACbzI,KAAK+lC,YAAa,IAG1B9tB,MAAMC,KAAK6jB,QAEf3rB,UAAW,SAAS8sB,EAAQC,GAExB,GADAn9B,KAAKslC,YAAa,EACdtlC,KAAKq9B,aAAc,CACnB,GAAIuH,GAAO5kC,KAAKgP,SAASC,QACzBjP,MAAKq9B,aAAalL,SAENpZ,MAAO,GAAId,OAAMse,OACO2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,OAGhD0tB,OAGRn9B,MAAKq9B,aAAe,KACpBr9B,KAAK02B,aAAc,EACfyG,GACAn9B,KAAKo9B,cAETp9B,KAAKkY,KAAK+3B,WAEdh4B,OAAMC,KAAK6jB,QAEf4K,SAAU,SAASzJ,EAAQgT,GAEvB,GADAlwC,KAAKqlC,aAAe6K,EAChBt+B,KAAK0b,IAAIttB,KAAKqlC,cAAgB,EAAG,CACjC,GAAIT,GAAO5kC,KAAKgP,SAASC,SACzBysB,EAAS,GAAIzjB,OAAMse,OACO2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,MACjBunB,SAASh3B,KAAKkY,KAAKjJ,QAAQioB,SAAUtlB,KAAK+hB,MAAQ,EAC3E3zB,MAAKqlC,YAAc,EACnBrlC,KAAKkY,KAAKmvB,SAAUrnC,KAAKkY,KAAK8b,MAAQpiB,KAAK+hB,MAAO3zB,KAAKkY,KAAKjJ,OAAO+nB,SAAS0E,IAE5E17B,KAAKkY,KAAKmvB,SAAUrnC,KAAKkY,KAAK8b,MAAQpiB,KAAKu+B,QAASnwC,KAAKkY,KAAKjJ,OAAO+J,IAAI0iB,EAAOH,OAAO3pB,KAAK+hB,SAEhG3zB,KAAKqlC,YAAc,IAG3BkC,QAAS,SAASrK,GACd,IAAKl9B,KAAKu3B,aAAc,CACpB,GAAIqN,GAAO5kC,KAAKgP,SAASC,SACzB41B,EAAS,GAAI5sB,OAAMse,OACK2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,MAExCywB,EAAajoB,MAAMpR,QAAQs5B,QAAQ0E,IACnC7kC,KAAKowC,cACLpwC,KAAKuB,OAAOT,QAAQ8e,uBACpBsgB,GAC4C,mBAArCA,GAAW9lB,KAAKwb,kBACvBsK,EAAW9lB,KAAKwb,iBAAiB1W,MAAMpY,IAAI,SAC1C9G,KAAKqwC,uBAENrwC,KAAKqwC,qBAAuBhlB,WAAW,WACnC3hB,OAAO4mC,KAAKpQ,EAAW9lB,KAAKwb,iBAAiB1W,MAAMpY,IAAI,OAAQ,UAC/D9G,KAAKqwC,qBAAuB,MAC9BE,KAAKvwC,MAAO,QAI1BgnC,cAAe,SAAS9J,GACpB,GAAI0H,GAAO5kC,KAAKgP,SAASC,SACzB41B,EAAS,GAAI5sB,OAAMse,OACO2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,MAE1CywB,EAAajoB,MAAMpR,QAAQs5B,QAAQ0E,EAEvC,KAAK7kC,KAAKu3B,aASN,YARIv3B,KAAKuB,OAAOT,QAAQ6e,uBACpBugB,GAC4C,mBAArCA,GAAW9lB,KAAKwb,kBACvBsK,EAAW9lB,KAAKwb,iBAAiB1W,MAAMpY,IAAI,SAC1C9G,KAAKqwC,sBAEN3mC,OAAO4mC,KAAKpQ,EAAW9lB,KAAKwb,iBAAiB1W,MAAMpY,IAAI,OAAQ,UAIvE,IAAI9G,KAAKu3B,gBAAkB2I,GAA0D,mBAArCA,GAAW9lB,KAAKwb,kBAAmC,CAC/F,GAAI3e,GAAUjX,KAAKi9B,cAAc4H,GACjCpa,GACI7O,GAAItY,EAAMqP,OAAO,QACjB8J,WAAYzc,KAAKuB,OAAOiK,aACxBkR,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAEfqnB,OAAQv8B,EAAM0O,WAAWM,mBAE7BqL,EAAQ3d,KAAKuB,OAAOsF,QAAQ6W,QAAQ+M,EACpCzqB,MAAKq5B,yBAAyB1b,GAAOge,aAEzC1jB,MAAMC,KAAK6jB,QAEfyU,mBAAoB,SAAS/lB,GACzB,GAAIgmB,MACAzf,EAAU,EACd,QAAOvG,EAAM,6BACT,IAAK,UACDuG,EAAU/oB,EAAE,SAASe,KAAKyhB,EAAM,4BAChC,IAAIimB,GAAW1f,EAAQxoB,KAAK,SAC5BioC,GAAQtvC,MAAQnB,KAAKuB,OAAOC,UAAU,aAAekvC,EAAS5nC,KAAK,aACnE2nC,EAAQvvC,IAAM,sBAAwBwvC,EAAS5nC,KAAK,oBAAsB,WAAa4nC,EAAS5nC,KAAK,iBACrG2nC,EAAQjtC,MAAQktC,EAASloC,KAAK,WAAWM,KAAK,OAC9C2nC,EAAQhtC,YAAcitC,EAASloC,KAAK,wBAAwBoN,MAC5D,MACJ,KAAK,SACDob,EAAU/oB,EAAE,SAASe,KAAKyhB,EAAM,6BAChCgmB,EAAQtvC,MAAQ6vB,EAAQxoB,KAAK,YAAYoN,OAAO4a,OAChDigB,EAAQvvC,IAAM8vB,EAAQxoB,KAAK,QAAQM,KAAK,QACxC2nC,EAAQhtC,YAAcutB,EAAQxoB,KAAK,aAAaoN,OAAO4a,MACvD,MACJ,SACQ/F,EAAM,2BACNgmB,EAAQvvC,IAAMupB,EAAM,0BAMhC,IAHIA,EAAM,eAAiBA,EAAM,+BAC7BgmB,EAAQhtC,aAAegnB,EAAM,eAAiBA,EAAM,6BAA6B/Y,QAAQ,YAAY,KAAK8e,QAE1G/F,EAAM,cAAgBA,EAAM,4BAA6B,CACzDuG,EAAU/oB,EAAE,SAASe,KAAKyhB,EAAM,cAAgBA,EAAM,4BACtD,IAAIkmB,GAAW3f,EAAQxoB,KAAK,QACxBmoC,GAASvuC,SACTquC,EAAQjtC,MAAQmtC,EAAS7nC,KAAK,cAElC,IAAI8nC,GAAY5f,EAAQxoB,KAAK,OACzBooC,GAAUxuC,SACVquC,EAAQ/W,SAAWkX,EAAU9nC,KAAK,KAEtC,IAAI+nC,GAAQ7f,EAAQxoB,KAAK,MACrBqoC,GAAMzuC,SACNquC,EAAQjtC,MAAQqtC,EAAM,GAAGn9B,IAE7B,IAAIo9B,GAAM9f,EAAQxoB,KAAK,IACnBsoC,GAAI1uC,SACJquC,EAAQvvC,IAAM4vC,EAAI,GAAG/nC,MAEzB0nC,EAAQtvC,MAAQ6vB,EAAQxoB,KAAK,WAAWM,KAAK,UAAY2nC,EAAQtvC,MACjEsvC,EAAQhtC,YAAcutB,EAAQpb,OAAOlE,QAAQ,YAAY,KAAK8e,OAE9D/F,EAAM,mBACNgmB,EAAQvvC,IAAMupB,EAAM,kBAEpBA,EAAM,oBAAsBgmB,EAAQtvC,QACpCsvC,EAAQtvC,OAASspB,EAAM,kBAAkBtZ,MAAM,MAAM,IAAM,IAAIqf,OAC3DigB,EAAQtvC,QAAUsvC,EAAQvvC,MAC1BuvC,EAAQtvC,OAAQ,IAGpBspB,EAAM,6BAA+BgmB,EAAQtvC,QAC7CsvC,EAAQtvC,MAAQspB,EAAM,6BAEtBA,EAAM,cAAgBA,EAAM,+BAC5BuG,EAAU/oB,EAAE,SAASe,KAAKyhB,EAAM,cAAgBA,EAAM,6BACtDgmB,EAAQjtC,MAAQwtB,EAAQxoB,KAAK,gBAAgBM,KAAK,eAAiB2nC,EAAQjtC,MAC3EitC,EAAQvvC,IAAM8vB,EAAQxoB,KAAK,cAAcM,KAAK,aAAe2nC,EAAQvvC,IACrEuvC,EAAQtvC,MAAQ6vB,EAAQxoB,KAAK,gBAAgBM,KAAK,eAAiB2nC,EAAQtvC,MAC3EsvC,EAAQhtC,YAAcutB,EAAQxoB,KAAK,sBAAsBM,KAAK,qBAAuB2nC,EAAQhtC,YAC7FgtC,EAAQ/W,SAAW1I,EAAQxoB,KAAK,oBAAoBM,KAAK,mBAAqB2nC,EAAQ/W,UAGrF+W,EAAQtvC,QACTsvC,EAAQtvC,MAAQnB,KAAKuB,OAAOC,UAAU,oBAG1C,KAAK,GADDuvC,IAAU,QAAS,cAAe,MAAO,SACpC1/B,EAAI,EAAGA,EAAI0/B,EAAO3uC,OAAQiP,IAAK,CACpC,GAAI7G,GAAIumC,EAAO1/B,IACXoZ,EAAM,cAAgBjgB,IAAMigB,EAAMjgB,MAClCimC,EAAQjmC,GAAKigB,EAAM,cAAgBjgB,IAAMigB,EAAMjgB,IAEhC,SAAfimC,EAAQjmC,IAAgC,SAAfimC,EAAQjmC,KACjCimC,EAAQjmC,GAAK9F,QAQrB,MAJgD,kBAAtC1E,MAAKuB,OAAOT,QAAQkwC,gBAC1BP,EAAUzwC,KAAKuB,OAAOT,QAAQkwC,cAAcP,EAAShmB,IAGlDgmB,GAGXzgC,SAAU,SAASya,EAAOyS,GACtB,GAAKl9B,KAAKu3B,aAAV,CAGA,GAAI9M,EAAM,cAAgBA,EAAM,oBAC5B,IACI,GAAIwmB,GAAWnmB,KAAK+c,MAAMpd,EAAM,cAAgBA,EAAM,oBACtDpqB,GAAEgU,OAAOoW,EAAMwmB,GAEnB,MAAMziC,IAGV,GAAIiiC,GAAuD,mBAArCzwC,MAAKuB,OAAOT,QAAQowC,aAA8BlxC,KAAKwwC,mBAAmB/lB,GAAOzqB,KAAKuB,OAAOT,QAAQowC,aAAazmB,GAEpIma,EAAO5kC,KAAKgP,SAASC,SACrB41B,EAAS,GAAI5sB,OAAMse,OACf2G,EAAO5tB,MAAQs1B,EAAKr1B,KACpB2tB,EAAO1tB,MAAQo1B,EAAKn1B,MAExBwH,EAAUjX,KAAKi9B,cAAc4H,GAC7BsM,GACIv1B,GAAItY,EAAMqP,OAAO,QACjB8J,WAAYzc,KAAKuB,OAAOiK,aACxBtK,IAAKuvC,EAAQvvC,KAAO,GACpBC,MAAOsvC,EAAQtvC,OAAS,GACxBsC,YAAagtC,EAAQhtC,aAAe,GACpCD,MAAOitC,EAAQjtC,OAAS,GACxBvC,MAAOwvC,EAAQxvC,OAASyD,OACxB0B,UAAWqqC,EAAQ/W,UAAYh1B,OAC/BgY,UACI1E,EAAGf,EAAQe,EACXQ,EAAGvB,EAAQuB,GAGfqnB,OAAQv8B,EAAM0O,WAAWO,eAE7BoL,EAAQ3d,KAAKuB,OAAOsF,QAAQ6W,QAAQyzB,GACxCzG,EAAQ1qC,KAAKq5B,yBAAyB1b,EAClB,UAAhBuf,EAAO53B,MACPolC,EAAM/O,eAGdyV,WAAY,WACRpxC,KAAKyoC,aAAezoC,KAAKiI,EAAEkH,QAC3BnP,KAAK0oC,cAAgB1oC,KAAKiI,EAAEoH,QAE5B,IAAIpC,GAAMjN,KAAKuB,OAAO0G,EAAE,EACxBgQ,OAAMC,KAAKnJ,IAAI,UACfk2B,EAAWoM,OAAOpkC,IAEtBqkC,WAAY,WAQR,MAPItxC,MAAK+lC,aAAeziC,EAAM2S,oBAC1BjW,KAAK+lC,YAAa,EAClB/lC,KAAKmlC,QAAQ18B,SAEbzI,KAAK+lC,WAAaziC,EAAM2S,mBACxBjW,KAAKmlC,QAAQvvB,KAAK5V,KAAKuB,OAAOC,UAAU,iDAAiD2nC,WAEtF,GAEXoI,WAAY,WAQR,MAPIvxC,MAAK+lC,aAAeziC,EAAM4S,sBAAwBlW,KAAK+lC,aAAeziC,EAAM6S,oBAC5EnW,KAAK+lC,YAAa,EAClB/lC,KAAKmlC,QAAQ18B,SAEbzI,KAAK+lC,WAAaziC,EAAM4S,qBACxBlW,KAAKmlC,QAAQvvB,KAAK5V,KAAKuB,OAAOC,UAAU,4CAA4C2nC,WAEjF,GAEXqI,cAAe,WACb,GAAIC,GAAczxC,KAAKuB,OAAOsF,QAAQuV,SAElCs1B,GADe9hC,SAASC,cAAc,KAC1B4hC,EAAY71B,IACxB+1B,EAAmBD,EAAY,cAG5BD,GAAY71B,SACZ61B,GAAYrtC,UACZqtC,GAAYG,QAEnB,IAAIC,GAEAnV,EADAoV,IAGJzxC,GAAEgC,KAAKovC,EAAY/2B,MAAO,SAASlM,EAAE6C,EAAEmD,GACrCq9B,EAAQrjC,EAAEoN,IAAMpN,EAAEpK,UACXoK,GAAEpK,UACFoK,GAAEoN,GACTk2B,EAAOD,GAASrjC,EAAE,OAASlL,EAAMmO,aAEnCpR,EAAEgC,KAAKovC,EAAY72B,MAAO,SAASpM,EAAE6C,EAAEmD,SAC9BhG,GAAEpK,UACFoK,GAAEoN,GACTpN,EAAEqO,GAAKi1B,EAAOtjC,EAAEqO,IAChBrO,EAAEoO,KAAOk1B,EAAOtjC,EAAEoO,QAEpBvc,EAAEgC,KAAKovC,EAAYpzB,MAAO,SAAS7P,EAAE6C,EAAEmD,SAC9BhG,GAAEpK,UACFoK,GAAEoN,GAENpN,EAAEyO,eACDyf,EAAcluB,EAAEyO,aAChBzO,EAAEyO,gBACF5c,EAAEgC,KAAKq6B,EAAa,SAASttB,EAAE0F,GAC3BtG,EAAEyO,aAAanT,KAAKgoC,EAAO1iC,SAIrCqiC,EAAYrzB,QAEZ,IAAI2zB,GAAiBjnB,KAAKC,UAAU0mB,EAAa,KAAM,GACnDO,EAAO,GAAIC,OAAMF,IAAkBzsC,KAAM,kCAC7C0/B,GAAUgN,EAAKL,IAGjB9H,kBAAmB,SAASD,GAExB,GADA5pC,KAAK47B,4BAA4B,QAC7B3zB,EAAEiqC,cAActI,GAEhB,YADA5pC,KAAKkY,KAAOlY,KAAK87B,kBAAkB,OAAQ97B,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS0nC,GAAGxuC,KAAKmyC,eAAenyC,KAAKuB,OAAOT,QAAQof,sBAQ3H,IALiC,mBAAtB0pB,GAAQwI,UACfpyC,KAAKkY,KAAOlY,KAAK87B,kBAAkB,OAAQ97B,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS0nC,GAAGxuC,KAAKmyC,eAAevI,EAAQwI,aAE3GpyC,KAAKkY,KAAOlY,KAAK87B,kBAAkB,OAAQ97B,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS0nC,GAAGxuC,KAAKmyC,eAAenyC,KAAKuB,OAAOT,QAAQof,sBAE/F,mBAAjB0pB,GAAQ1xB,MAAwB0xB,EAAQ1xB,KAAK/G,MAAM,KAAK/O,QAAU,EAAE,CAC3E,GAAIiwC,GAAazI,EAAQ1xB,KAAK/G,MAAM,KAChCmhC,GACIzrC,QAAW7G,KAAKuB,OAAOsF,QACvBoI,QACI+I,EAAK0iB,WAAW2X,EAAW,IAC3B75B,EAAKkiB,WAAW2X,EAAW,KAE/Br1B,WAAc0d,WAAW2X,EAAW,IAE5CryC,MAAKkY,KAAKmvB,SAASiL,EAAOt1B,WAAY,GAAI/E,OAAMse,MAAM+b,EAAOrjC,SAGpC,mBAAjB26B,GAAQ1xB,MAAyC,cAAjB0xB,EAAQ1xB,MAChDlY,KAAKkY,KAAK8xB,YAGoB,mBAAvBJ,GAAQ2I,aACY,SAAvB3I,EAAQ2I,YACRvyC,KAAKkY,KAAKwkB,aAAe18B,KAAKkY,KAAKo6B,OAAOr1B,kBAAoBtS,SAC9D3K,KAAKkY,KAAKs6B,aAEVxyC,KAAKkY,KAAKu6B,WAAU,IAI5BzyC,KAAKuO,iBACuB,mBAAjBq7B,GAAQ7lC,MAAwB6lC,EAAQ7lC,MAC/C/D,KAAKqO,eAAerO,KAAKuB,OAAOsF,QAAQC,IAAI,SAASA,IAAI8iC,EAAQ7lC,OAEzC,mBAAjB6lC,GAAQ5oC,MAAwB4oC,EAAQ5oC,MAC/ChB,KAAKqO,eAAerO,KAAKuB,OAAOsF,QAAQC,IAAI,SAASA,IAAI8iC,EAAQ5oC,QAIzEmxC,eAAgB,SAASp4B,GAErB,GAAI24B,GAASj5B,SAASM,GAClB44B,EAAa,CASjB,OAPIA,GADAD,EAAS,EACI1yC,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS1E,OAASswC,EAE1CA,EAE0C,mBAAhD1yC,MAAKuB,OAAOsF,QAAQC,IAAI,SAAS0nC,GAAGkE,KAC3CC,EAAa,GAEVA,GAEXC,SAAU,WACN,GAKIC,GALAC,EAAiB9yC,KAAKiI,EAAEO,KAAK,iBAC7BgF,EAAOxN,KAAKuB,OAAO0G,EAAEO,KAAK,YAC1BkzB,EAAS,EACT7yB,EAAQ7I,KACR+yC,EAAUlqC,EAAMmG,SAASG,OAEzB3B,GAAKkP,WAAWnN,KAAO,GACvBmsB,EAAQ,GAAIzjB,OAAMse,QAAQ/oB,EAAK2B,QAAQ,EAAG,IAC1C3B,EAAKwlC,SAASzjC,KAAM,GAAG,KACvBvP,KAAKiI,EAAE+qC,SAASzjC,KAAM,KAAK,IAAI,WAC3B,GAAIL,GAAIrG,EAAMZ,EAAEkH,OAChB8I,OAAMC,KAAKswB,SAAW,GAAIvwB,OAAM+gB,MAAM9pB,EAAGrG,EAAMmG,SAASK,aAGxDwjC,EADCE,EAAWvlC,EAAK2B,QAAW3B,EAAK6B,SACvB0jC,EAEAA,EAAUvlC,EAAK2B,QAE7B2jC,EAAe9pC,KAAK,aAEpB0yB,EAAQ,GAAIzjB,OAAMse,OAAO/oB,EAAK2B,QAAQ,EAAG,IACzC3B,EAAKwlC,SAASzjC,MAAM,KAAM,KAC1BvP,KAAKiI,EAAE+qC,SAASzjC,KAAM,GAAG,IAAI,WACzB,GAAIL,GAAIrG,EAAMZ,EAAEkH,OAChB8I,OAAMC,KAAKswB,SAAW,GAAIvwB,OAAM+gB,MAAM9pB,EAAGrG,EAAMmG,SAASK,aAE5DwjC,EAAUE,EAAQ,IAClBD,EAAe9pC,KAAK,YAExBhJ,KAAKkY,KAAKujB,WAAWC,IAEzBvP,KAAM,aACNmkB,KAAM,eACPjmC,QAIIiC,IAIX2kB,OAAO,qBAAqB,SAAU,aAAc,WAAY,+BAAgC,SAAUhpB,EAAG5H,EAAGiyB,EAAUC,GACtH,YAEA,IAAIjvB,GAAQgvB,EAASF,WAMjB6gB,EAAW3vC,EAAMsQ,QAAQ2e,EA8N7B,OA5NAlyB,GAAE4yC,EAASryC,WAAWyT,QAClBF,MAAO,WACH,GAAItL,GAAQ7I,IACZA,MAAKiI,EAAIA,EAAE,cACXjI,KAAKsF,KAAO,OACZtF,KAAK08B,eACL18B,KAAKg0B,MAAQ,EACbh0B,KAAKkzC,aAAe,EACpBlzC,KAAKiP,OAASgJ,MAAMC,KAAKC,OACzBnY,KAAKsyC,UAEDtyC,KAAKkf,QACLlf,KAAKsyC,QACDt1B,WAAcnU,EAAMqW,MAAMpY,IAAI,cAC9BmI,OAAUpG,EAAMqW,MAAMpY,IAAI,UAC1BmW,aAAgBpU,EAAMqW,MAAMpY,IAAI,kBAIxC9G,KAAKmzC,gBAEL,IAAIrL,GAAY,SAASC,EAAUC,GAC/Bn/B,EAAMZ,EAAEO,KAAKu/B,GAAU9+B,MAAM,SAASg/B,GAElC,MADAp/B,GAAMm/B,GAAOC,IACN,IAIfH,GAAU,cAAe,WACzBA,EAAU,aAAc,UACxBA,EAAU,cAAe,aACzBA,EAAU,eAAgB,YAE1B9nC,KAAKiI,EAAEO,KAAK,oBAAoBS,MAAO,WACnCJ,EAAMw+B,SAASx+B,EAAMypC,OAAOt1B,WAAY,GAAI/E,OAAMse,MAAM1tB,EAAMypC,OAAOrjC,SACrEpG,EAAM4pC,WAAU,GACZ5pC,EAAM/H,QAAQiH,aACdc,EAAM6zB,aAAe7zB,EAAMypC,OAAOr1B,kBAAoBtS,SACtD9B,EAAM2pC,aAEV3pC,EAAMonC,cAGVjwC,KAAKiI,EAAEO,KAAK,uBAAuB8E,WAAY,WAC3CzE,EAAM4pC,WAAU,GAChB5pC,EAAMZ,EAAEO,KAAK,uBAAuB+E,WAAY,WAC5C1E,EAAM2pC,gBAGdxyC,KAAKiI,EAAEO,KAAK,uBAAuBS,MAAO,WACtCJ,EAAM4pC,WAAU,GAChB5pC,EAAMZ,EAAEO,KAAK,uBAAuBuG,IAAK,gBAG1C/O,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS1E,OAAS,GAAKpC,KAAKuB,OAAOT,QAAQgH,WAClE9H,KAAKiI,EAAEO,KAAK,oBAAoB0mB,QAGxCmC,OAAQ,SAASvwB,KAGjBqyC,eAAgB,WACZ,GAAItqC,GAAQ7I,IAER6I,GAAM/H,QAAQkf,qBACdhgB,KAAKgqC,YAELnhC,EAAMw+B,SAASx+B,EAAMypC,OAAOt1B,WAAY,GAAI/E,OAAMse,MAAM1tB,EAAMypC,OAAOrjC,SAGrEpG,EAAM/H,QAAQiH,aAAec,EAAM/H,QAAQmf,uBAC3CpX,EAAM6zB,aAAe7zB,EAAMypC,OAAOr1B,kBAAoBtS,SACtD9B,EAAM2pC,aAEN3pC,EAAM4pC,WAAU,IAGxBW,SAAU,WACN,GAAIvqC,GAAQ7I,KAERiP,GACA+I,EAAKnP,EAAMoG,OAAO+I,EAClBQ,EAAK3P,EAAMoG,OAAOuJ,EAGtB3P,GAAMqW,MAAQrW,EAAMtH,OAAOsF,QAAQiX,SAAWd,WAAWnU,EAAMmrB,MAAO/kB,OAAOA,EAAQgO,aAAcpU,EAAM6zB,YAAY/xB,WACrH9B,EAAMypC,QACEt1B,WAAcnU,EAAMqW,MAAMpY,IAAI,cAC9BmI,OAAUpG,EAAMqW,MAAMpY,IAAI,UAC1BmW,aAAgBpU,EAAMqW,MAAMpY,IAAI,iBAGxC9G,KAAKiI,EAAEO,KAAK,oBAAoB0mB,OAEhCrmB,EAAMonC,aAEVvL,cAAe,SAASt2B,GACpBpO,KAAKqzC,SAASjlC,GACdpO,KAAK08B,YAAY5yB,KAAKsE,EAAOwN,IAC7B5b,KAAKiwC,aAEToD,SAAU,SAASjlC,GAC+C,mBAAnDpO,MAAKyL,SAAS4tB,yBAAyBjrB,IAC9CpO,KAAKyL,SAAS4tB,yBAAyBjrB,GAAQ3F,QAGvD+pC,UAAW,WACP,GAAI3pC,GAAQ7I,IACZA,MAAK08B,YAAYxiB,QAAQ,SAAS9V,EAAK2V,GACnC,GAAIhW,GAAO8E,EAAMtH,OAAOsF,QAAQC,IAAI,SAASA,IAAI1C,EACjD,OAAoB,mBAATL,GACA8E,EAAMwqC,SAASxqC,EAAMtH,OAAOsF,QAAQC,IAAI,SAASA,IAAI1C,QAE5DyE,GAAM6zB,YAAYE,OAAO7iB,EAAO,KAGxC9B,MAAMC,KAAK6jB,QAEf0W,UAAW,SAAShe,GAChB,GAAI5rB,GAAQ7I,IACZA,MAAK08B,YAAYxiB,QAAQ,SAAS9V,GAC9ByE,EAAM4C,SAAS4tB,yBAAyBxwB,EAAMtH,OAAOsF,QAAQC,IAAI,SAASA,IAAI1C,IAAM8qB,KAAKuF,KAExFA,IACDz0B,KAAK08B,gBAETzkB,MAAMC,KAAK6jB,QAEfsL,SAAU,SAASH,EAAWoM,GACrBpM,EAAUlnC,KAAKkzC,aAAgB5vC,EAAMgT,YAAe4wB,EAAUlnC,KAAKkzC,aAAgB5vC,EAAMiT,aAC1FvW,KAAKg0B,MAAQkT,EACToM,IACAtzC,KAAKiP,OAASqkC,GAElBtzC,KAAKyL,SAAS4lB,SACdrxB,KAAKiwC,cAGbsD,QAAS,WACL,GAAIrM,GAAYlnC,KAAKg0B,MAAQpiB,KAAKu+B,QAClCmD,EAAU,GAAIr7B,OAAMse,OACOv2B,KAAKyL,SAASuD,SAASG,QACvBnP,KAAKyL,SAASuD,SAASK,WACpB6nB,SAAU,IAAQ,EAAItlB,KAAKu+B,UAAYn3B,IAAIhZ,KAAKiP,OAAOioB,SAAUtlB,KAAKu+B,SACpGnwC,MAAKqnC,SAAUH,EAAWoM,IAE9BE,OAAQ,WACJ,GAAItM,GAAYlnC,KAAKg0B,MAAQpiB,KAAK+hB,MAClC2f,EAAU,GAAIr7B,OAAMse,OACOv2B,KAAKyL,SAASuD,SAASG,QACvBnP,KAAKyL,SAASuD,SAASK,WACpB6nB,SAAU,IAAQ,EAAItlB,KAAK+hB,QAAU3a,IAAIhZ,KAAKiP,OAAOioB,SAAUtlB,KAAK+hB,OAClG3zB,MAAKqnC,SAAUH,EAAWoM,IAE9B1D,WAAY,SAAS6D,EAAQC,EAAQjE,GACjC,GAAIvI,GAAYlnC,KAAKg0B,MAAQyb,EACzB6D,EAAU,GAAIr7B,OAAMse,OACqC,GAAjCv2B,KAAKyL,SAASuD,SAASG,SAAkB,EAAIsgC,IAAazvC,KAAKiP,OAAO+I,EAAIy3B,EAASgE,EAAShE,EAAS,IACnE,GAAlCzvC,KAAKyL,SAASuD,SAASK,UAAmB,EAAIogC,IAAazvC,KAAKiP,OAAOuJ,EAAIi3B,EAASiE,EAASjE,EAAS,KAElIzvC,MAAKqnC,SAAUH,EAAWoM,IAE9BtJ,UAAW,SAAS2J,GAChB,GAAIj5B,GAAQ1a,KAAKuB,OAAOsF,QAAQC,IAAI,QACpC,IAAI4T,EAAMtY,OAAS,EAAG,CAClB,GAAI6rC,GAAMvzB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAYkR,IACnEk2B,EAAMxzB,EAAMvO,IAAI,SAASwR,GAAS,MAAOA,GAAM7W,IAAI,YAAY0R,IAC/D21B,EAAQv8B,KAAKgH,IAAI3E,MAAMrC,KAAMq8B,GAC7BG,EAAQx8B,KAAKgH,IAAI3E,MAAMrC,KAAMs8B,GAC7BG,EAAQz8B,KAAK8G,IAAIzE,MAAMrC,KAAMq8B,GAC7BK,EAAQ18B,KAAK8G,IAAIzE,MAAMrC,KAAMs8B,GACzBK,EAAS38B,KAAKgH,KAAMX,MAAMC,KAAKrS,KAAKsJ,MAAQ,EAAInP,KAAKuB,OAAOT,QAAQif,oBAAsBsuB,EAAQF,IAASl2B,MAAMC,KAAKrS,KAAKwJ,OAAS,EAAIrP,KAAKuB,OAAOT,QAAQif,oBAAsBuuB,EAAQF,GAC9LpuC,MAAKkzC,aAAe3E,EAEM,mBAAfoF,IAA+BjZ,WAAWiZ,EAAW32B,YAAY,GAAK0d,WAAWiZ,EAAW1kC,OAAO+I,GAAG,GAAK0iB,WAAWiZ,EAAW1kC,OAAOuJ,GAAG,EAClJxY,KAAKqnC,SAAS3M,WAAWiZ,EAAW32B,YAAa,GAAI/E,OAAMse,MAAMmE,WAAWiZ,EAAW1kC,OAAO+I,GAAI0iB,WAAWiZ,EAAW1kC,OAAOuJ,KAG/HxY,KAAKqnC,SAASkH,EAAQt2B,MAAMC,KAAKC,OAAO6e,SAAS,GAAI/e,OAAMse,QAAQ8X,EAAQF,GAAS,GAAIG,EAAQF,GAAS,IAAIlX,SAASqX,KAGzG,IAAjB7zB,EAAMtY,QACNpC,KAAKqnC,SAAS,EAAGpvB,MAAMC,KAAKC,OAAO6e,SAAS,GAAI/e,OAAMse,OAAO7b,EAAM8zB,GAAG,GAAG1nC,IAAI,YAAYkR,EAAG0C,EAAM8zB,GAAG,GAAG1nC,IAAI,YAAY0R,OAGhIijB,WAAY,SAASC,GACjB17B,KAAKiP,OAASjP,KAAKiP,OAAO+J,IAAI0iB,GAC9B17B,KAAKyL,SAAS4lB,UAElB4e,UAAW,WACP,GAAGjwC,KAAKc,QAAQqf,gBAAkBngB,KAAKc,QAAQsf,WAAW,CACtD,GAAInG,MACAD,EAAaJ,SAAS8vB,QAAQkK,cAAcziC,MAAM,IAClD6I,GAAW5X,OAAS,GACpB4X,EAAW,GAAG7I,MAAM,KAAK+I,QAAQ,SAASC,GACtC,GAAIC,GAAOD,EAAKhJ,MAAM,IACtB8I,GAAOG,EAAK,IAAMC,mBAAmBD,EAAK,MAGlDH,EAAO/B,KAAOtG,KAAKiiC,MAAoB,IAAd7zC,KAAKiP,OAAO+I,GAAQ,IAAO,IAAMpG,KAAKiiC,MAAoB,IAAd7zC,KAAKiP,OAAOuJ,GAAQ,IAAO,IAAM5G,KAAKiiC,MAAiB,IAAX7zC,KAAKg0B,OAAY,IAE9Hh0B,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS61B,QAAQ38B,KAAKkf,QAAS,GACvDjF,EAAOm4B,UAAYpyC,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS61B,QAAQ38B,KAAKkf,OAC7DjF,EAAOm4B,YAAcpyC,KAAKuB,OAAOsF,QAAQC,IAAI,SAAS1E,OAAS,IAC/D6X,EAAOm4B,WAAY,IAGnBn4B,EAAOm4B,iBACAn4B,GAAOm4B,UAGtBpyC,KAAKuB,OAAOsJ,OAAOipC,SAAS,IAAMz5B,mBAAmBpS,EAAE8rC,MAAM95B,KAAWK,SAAS,EAAO5I,SAAS,MAGzGxI,QAAS,SAASg0B,GACdl9B,KAAK8xB,OAAO,WACZ9xB,KAAKyyC,WAAU,MAEpBpoC,QAEI4oC,IAMmB,kBAAnBe,SAAQC,QACfD,QAAQC,QACJC,OACIC,OAAS,uBACTC,WAAa,uBACbpP,UAAa,6BACb1S,SAAW,gBACX+hB,iBAAiB,iBACjBC,gBAAgB,2BAChBC,WAAa,oCAGjBpoC,KACIqoC,KAAOL,OAAU,kBACjBE,kBAAoBF,OAAU,WAElCM,MACIH,iBACII,QAAS,eAMzBV,SAAS,8BACA,sBACA,oBACA,gBACA,oBACA,sBACA,sBACA,sBACA,sBACA,0BACA,4BACA,0BACA,0BACA,4BACA,0BACA,6BACA,4BACA,0BACA,4BACA,4BACA,qBACA,iBACA,qBACG,SAASzhB,EAAoBqR,EAAYxP,EAAUzX,EAAMijB,EAAUkB,EAAYE,EAAYyC,EAAYW,EAAYtP,EAAgBC,EAAkBI,EAAgBC,EAAgBE,EAAkBN,EAAgBC,EAAmBC,EAAkB2I,EAAgBC,EAAkBC,EAAkBgH,EAAWz4B,EAAO2mC,GAE1U,YAEA,IAAI5vC,GAAOqG,OAAOrG,IAEU,oBAAlBA,GAAKgJ,WACXhJ,EAAKgJ,YAET,IAAIA,GAAWhJ,EAAKgJ,QAEpBA,GAAS6kB,oBAAsBqB,EAC/BlmB,EAASmmB,YAAcoR,EACvBv3B,EAASgQ,KAAO+X,EAChB/nB,EAASsQ,KAAOA,EAChBtQ,EAASyQ,KAAOm2B,EAChB5mC,EAASuzB,SAAWA,EACpBvzB,EAASm0B,YAAcM,EACvBz0B,EAAS20B,WAAaA,EACtB30B,EAASo3B,WAAaA,EACtBp3B,EAASw3B,YAAcO,EACvB/3B,EAASyoB,eAAiBA,EAC1BzoB,EAAS0oB,iBAAmBA,EAC5B1oB,EAAS8oB,eAAiBA,EAC1B9oB,EAAS+oB,eAAiBA,EAC1B/oB,EAASipB,iBAAmBA,EAC5BjpB,EAAS2oB,eAAiBA,EAC1B3oB,EAAS4oB,kBAAoBA,EAC7B5oB,EAAS6oB,iBAAmBA,EAC5B7oB,EAASwxB,eAAiBA,EAC1BxxB,EAASyxB,iBAAmBA,EAC5BzxB,EAAS0xB,iBAAmBA,EAC5B1xB,EAAS04B,UAAYA,EACrB14B,EAASC,MAAQA,EAEjBqoC,gBAGJ1jB,OAAO,gBAAiB,cAGxBA,OAAO,kBAAkB,UAAW,SAAU2jB,GAC1C,YACA,OAAOA,GAAGC,YAAY","file":"renkan.min.js","sourcesContent":["this[\"renkanJST\"] = this[\"renkanJST\"] || {};\n\nthis[\"renkanJST\"][\"templates/colorpicker.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                            • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor_readonly.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                              \\n ×\\n ';\n if (options.show_edge_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (edge.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n__e(edge.title) +\n'\\n ';\n if (edge.uri) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n

                                              \\n';\n if (options.show_edge_tooltip_uri && edge.uri) { ;\n__p += '\\n

                                              \\n ' +\n__e( edge.short_uri ) +\n'\\n

                                              \\n';\n } ;\n__p += '\\n

                                              ' +\n((__t = (edge.description)) == null ? '' : __t) +\n'

                                              \\n';\n if (options.show_edge_tooltip_nodes) { ;\n__p += '\\n

                                              \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                              \\n

                                              \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                              \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_tooltip_creator && edge.has_creator) { ;\n__p += '\\n

                                              \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                              \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                              \\n ×' +\n__e(renkan.translate(\"Edit Edge\")) +\n'\\n

                                              \\n

                                              \\n \\n \\n

                                              \\n';\n if (options.show_edge_editor_uri) { ;\n__p += '\\n

                                              \\n \\n \\n \\n

                                              \\n ';\n if (options.properties.length) { ;\n__p += '\\n

                                              \\n \\n \\n

                                              \\n';\n } } ;\n__p += '\\n';\n if (options.show_edge_editor_style) { ;\n__p += '\\n
                                              \\n ';\n if (options.show_edge_editor_style_color) { ;\n__p += '\\n
                                              \\n ' +\n__e(renkan.translate(\"Edge color:\")) +\n'\\n
                                              \\n ;\">\\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Edge') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                              \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_dash) { ;\n__p += '\\n
                                              \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_thickness) { ;\n__p += '\\n
                                              \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e( edge.thickness ) +\n'\\n +\\n
                                              \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_arrow) { ;\n__p += '\\n
                                              \\n ' +\n__e(renkan.translate(\"Arrow:\")) +\n'\\n \\n
                                              \\n ';\n } ;\n__p += '\\n
                                              \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_direction) { ;\n__p += '\\n

                                              \\n ' +\n__e( renkan.translate(\"Change edge direction\") ) +\n'\\n

                                              \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_nodes) { ;\n__p += '\\n

                                              \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                              \\n

                                              \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n %-edge.to_color%>;\">\\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                              \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_creator && edge.has_creator) { ;\n__p += '\\n

                                              \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n ;\">\\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                              \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/annotationtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                            • \\n\\n \\n

                                              ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                              \\n

                                              ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                              \\n

                                              Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                              \\n
                                              \\n
                                            • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/segmenttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                            • \\n\\n \\n

                                              ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                              \\n

                                              ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                              \\n

                                              Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                              \\n
                                              \\n
                                            • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/tagtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                            • \\n\\n \\n

                                              ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                              \\n
                                              \\n
                                            • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/list-bin.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
                                            • \\n';\n } ;\n__p += '\\n

                                              \\n ';\n if (url) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n ';\n if (url) { ;\n__p += '';\n } ;\n__p += '\\n

                                              \\n ';\n if (description) { ;\n__p += '\\n

                                              ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                              \\n ';\n } ;\n__p += '\\n ';\n if (image) { ;\n__p += '\\n
                                              \\n ';\n } ;\n__p += '\\n
                                            • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/main.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_bins) { ;\n__p += '\\n
                                              \\n
                                              \\n

                                              ' +\n__e( translate(\"Select contents:\")) +\n'

                                              \\n
                                              \\n \\n
                                              \\n
                                              \\n
                                                \\n
                                                \\n \\n
                                                \\n
                                                \\n \\n \\n
                                                \\n
                                                  \\n
                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_editor) { ;\n__p += '\\n
                                                  \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                                  \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n

                                                  \\n ' +\n__e(node.short_uri) +\n'\\n

                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_node_tooltip_description) { ;\n__p += '\\n

                                                  ' +\n((__t = (node.description)) == null ? '' : __t) +\n'

                                                  \\n';\n } ;\n__p += ' ';\n if (node.image && options.show_node_tooltip_image) { ;\n__p += '\\n \\n';\n } ;\n__p += ' ';\n if (node.has_creator && options.show_node_tooltip_creator) { ;\n__p += '\\n

                                                  \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                                  \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor_video.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n\nfunction get_youtube_id(url) {\n var regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/;\n var match = url.match(regExp);\n if (match && match[2].length == 11) {\n return match[2];\n } else {\n return false;\n }\n}\n\nfunction get_vimeo_id(url) {\n var regExp = /https?:\\/\\/(www\\.)?vimeo.com\\/(\\d+)($|\\/)/;\n \n var match = url.match(regExp);\n \n if (match){\n return match[2];\n } else {\n return false;\n }\n}\n\nfunction get_dailymotion_id(url) {\n var regExp = /^(?:(?:http|https):\\/\\/)?(?:www.)?(dailymotion\\.com|dai\\.ly)\\/((video\\/([^_]+))|(hub\\/([^_]+)|([^\\/_]+)))$/;\n\n var match = url.match(regExp);\n\n if (match) {\n if(match[4] !== undefined) {\n return match[4];\n }\n return match[2];\n }\n return false;\n}\n\nfunction get_facebook_id(url) {\n var regExp = /^https?:\\/\\/www\\.facebook\\.com\\/(?:video\\.php\\?v=\\d+|.*?\\/videos\\/\\d+)\\/?$/;\n \n var match = url.match(regExp);\n\n if (match) {\n return encodeURIComponent(url);\n }\n return false;\n}\n\n;\n__p += '\\n

                                                  \\n ×\\n ';\n if (options.show_node_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                                  \\n';\n if (node.uri && options.show_node_tooltip_uri) {\n var video_id = false;\n if(video_id = get_youtube_id(node.uri)) { ;\n__p += '\\n \\n

                                                  ' +\n__e(renkan.translate(\"Link\")) +\n'

                                                  \\n ';\n }\n else if(video_id = get_vimeo_id(node.uri)) { ;\n__p += '\\n \\n

                                                  ' +\n__e(renkan.translate(\"Link\")) +\n'

                                                  \\n ';\n }\n else if(video_id = get_dailymotion_id(node.uri)) { ;\n__p += '\\n \\n

                                                  ' +\n__e(renkan.translate(\"Link\")) +\n'

                                                  \\n ';\n }\n else if(video_id = get_facebook_id(node.uri)) { ;\n__p += '\\n \\n

                                                  ' +\n__e(renkan.translate(\"Video link\")) +\n'

                                                  \\n ';\n }\n else { ;\n__p += ' \\n \\n ';\n }\n }\n;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n //TODO: change class to id ;\n__p += '\\n

                                                  \\n ×' +\n__e(renkan.translate(\"Edit Node\")) +\n'\\n

                                                  \\n

                                                  \\n \\n ';\n if (options.show_node_editor_title_richtext) { ;\n__p += '\\n

                                                  ' +\n((__t = (node.title)) == null ? '' : __t) +\n'
                                                  \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                                  \\n';\n if (options.show_node_title_style) { ;\n__p += '\\n
                                                  \\n
                                                  \\n ' +\n__e(renkan.translate(\"Title color:\")) +\n'\\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Title') )) == null ? '' : __t) +\n'\\n
                                                  \\n
                                                  \\n ' +\n__e(renkan.translate(\"Title size:\")) +\n'\\n -\\n ' +\n__e(node.title_size.toFixed(1)) +\n'\\n +\\n
                                                  \\n
                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_uri) { ;\n__p += '\\n

                                                  \\n \\n \\n \\n

                                                  \\n';\n } ;\n__p += ' ';\n if (options.change_types) { ;\n__p += '\\n

                                                  \\n \\n \\n

                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_description) { ;\n__p += '\\n

                                                  \\n \\n ';\n if (options.show_node_editor_description_richtext) { ;\n__p += '\\n

                                                  ' +\n((__t = (node.description)) == null ? '' : __t) +\n'
                                                  \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_size) { ;\n__p += '\\n

                                                  \\n ' +\n__e(renkan.translate(\"Size:\")) +\n'\\n -\\n ' +\n__e(node.size) +\n'\\n +\\n

                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_style) { ;\n__p += '\\n
                                                  \\n ';\n if (options.show_node_editor_style_color) { ;\n__p += '\\n
                                                  \\n \\n ' +\n__e(renkan.translate(\"Node color:\")) +\n'\\n
                                                  \\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Node') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                                  \\n
                                                  \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_dash) { ;\n__p += '\\n
                                                  \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                                  \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_thickness) { ;\n__p += '\\n
                                                  \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e(node.thickness) +\n'\\n +\\n
                                                  \\n ';\n } ;\n__p += '\\n
                                                  \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_image) { ;\n__p += '\\n
                                                  \\n
                                                  \\n \\n ';\n if (node.clip_path) { ;\n__p += '\\n \\n \\n \\n ';\n };\n__p += '\\n
                                                  \\n
                                                  \\n

                                                  \\n \\n

                                                  \\n \\n \\n
                                                  \\n

                                                  \\n';\n if (options.allow_image_upload) { ;\n__p += '\\n

                                                  \\n \\n \\n

                                                  \\n';\n };\n\n } ;\n__p += ' ';\n if (options.show_node_editor_creator && node.has_creator) { ;\n__p += '\\n

                                                  \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                                  \\n';\n } ;\n__p += ' ';\n if (options.change_shapes) { ;\n__p += '\\n

                                                  \\n \\n \\n

                                                  \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/scene.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_top_bar) { ;\n__p += '\\n
                                                  \\n
                                                  \\n ';\n if (!options.editor_mode || !options.title_editable) { ;\n__p += '\\n

                                                  \\n ' +\n__e( project.get(\"title\") || translate(\"Untitled project\")) +\n'\\n

                                                  \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (options.show_user_list) { ;\n__p += '\\n
                                                  \\n
                                                  \\n ';\n if (options.show_user_color) { ;\n__p += '\\n
                                                  \\n \\n ';\n if (options.user_color_editable) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (options.user_color_editable) { print(colorPicker('Rk-Editor-ColorPicker-User')) } ;\n__p += '\\n
                                                  \\n ';\n } ;\n__p += '\\n <unknown user>\\n
                                                  \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.home_button_url) {;\n__p += '\\n
                                                    \\n \\n
                                                    \\n
                                                    \\n ' +\n__e( translate(options.home_button_title) ) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_fullscreen_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Full Screen\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.editor_mode) { ;\n__p += '\\n ';\n if (options.show_addnode_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Add Node\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_addedge_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Add Edge\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_save_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_open_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Open Project\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_bookmarklet) { ;\n__p += '\\n
                                                    \\n \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Renkan \\'Drag-to-Add\\' bookmarklet\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n } else { ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                                    \\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n }; ;\n__p += '\\n ';\n if (options.show_search_field) { ;\n__p += '\\n
                                                    \\n \\n
                                                    \\n
                                                    \\n ';\n } ;\n__p += '\\n
                                                    \\n';\n } ;\n__p += '\\n
                                                    \\n
                                                    \\n
                                                    \\n ';\n if (options.editor_mode && options.save_view) { ;\n__p += '\\n
                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.save_view) { ;\n__p += '\\n
                                                    \\n ';\n if (options.hide_nodes) { ;\n__p += '\\n \\t \\n ';\n } ;\n__p += ' \\n ';\n } ;\n__p += '\\n
                                                    \\n ';\n } ;\n__p += '\\n \\n\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/search.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                  • ' +\n((__t = ( title )) == null ? '' : __t) +\n'
                                                  • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/wikipedia-bin/resulttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                  • \\n\\n \\n

                                                    \\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n

                                                    \\n

                                                    ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                    \\n
                                                  • \\n';\n\n}\nreturn __p\n};","/* Declaring the Renkan Namespace Rkns and Default values */\n\n(function(root) {\n\n \"use strict\";\n\n if (typeof root.Rkns !== \"object\") {\n root.Rkns = {};\n }\n\n var Rkns = root.Rkns;\n var $ = Rkns.$ = root.jQuery;\n var _ = Rkns._ = root._;\n\n Rkns.pickerColors = [\"#8f1919\", \"#a80000\", \"#d82626\", \"#ff0000\", \"#e87c7c\", \"#ff6565\", \"#f7d3d3\", \"#fecccc\",\n \"#8f5419\", \"#a85400\", \"#d87f26\", \"#ff7f00\", \"#e8b27c\", \"#ffb265\", \"#f7e5d3\", \"#fee5cc\",\n \"#8f8f19\", \"#a8a800\", \"#d8d826\", \"#feff00\", \"#e8e87c\", \"#feff65\", \"#f7f7d3\", \"#fefecc\",\n \"#198f19\", \"#00a800\", \"#26d826\", \"#00ff00\", \"#7ce87c\", \"#65ff65\", \"#d3f7d3\", \"#ccfecc\",\n \"#198f8f\", \"#00a8a8\", \"#26d8d8\", \"#00feff\", \"#7ce8e8\", \"#65feff\", \"#d3f7f7\", \"#ccfefe\",\n \"#19198f\", \"#0000a8\", \"#2626d8\", \"#0000ff\", \"#7c7ce8\", \"#6565ff\", \"#d3d3f7\", \"#ccccfe\",\n \"#8f198f\", \"#a800a8\", \"#d826d8\", \"#ff00fe\", \"#e87ce8\", \"#ff65fe\", \"#f7d3f7\", \"#feccfe\",\n \"#000000\", \"#242424\", \"#484848\", \"#6d6d6d\", \"#919191\", \"#b6b6b6\", \"#dadada\", \"#ffffff\"\n ];\n\n Rkns.__renkans = [];\n\n var _BaseBin = Rkns._BaseBin = function(_renkan, _opts) {\n if (typeof _renkan !== \"undefined\") {\n this.renkan = _renkan;\n this.renkan.$.find(\".Rk-Bin-Main\").hide();\n this.$ = Rkns.$('
                                                  • ')\n .addClass(\"Rk-Bin\")\n .appendTo(_renkan.$.find(\".Rk-Bin-List\"));\n this.title_icon_$ = Rkns.$('')\n .addClass(\"Rk-Bin-Title-Icon\")\n .appendTo(this.$);\n\n var _this = this;\n\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Close bin\")\n })\n .addClass(\"Rk-Bin-Close\")\n .html('×')\n .appendTo(this.$)\n .click(function() {\n _this.destroy();\n if (!_renkan.$.find(\".Rk-Bin-Main:visible\").length) {\n _renkan.$.find(\".Rk-Bin-Main:last\").slideDown();\n }\n _renkan.resizeBins();\n return false;\n });\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Refresh bin\")\n })\n .addClass(\"Rk-Bin-Refresh\")\n .appendTo(this.$)\n .click(function() {\n _this.refresh();\n return false;\n });\n this.count_$ = Rkns.$('
                                                    ')\n .addClass(\"Rk-Bin-Count\")\n .appendTo(this.$);\n this.title_$ = Rkns.$('

                                                    ')\n .addClass(\"Rk-Bin-Title\")\n .appendTo(this.$);\n this.main_$ = Rkns.$('
                                                    ')\n .addClass(\"Rk-Bin-Main\")\n .appendTo(this.$)\n .html('

                                                    ' + _renkan.translate(\"Loading, please wait\") + '

                                                    ');\n this.title_$.html(_opts.title || '(new bin)');\n this.renkan.resizeBins();\n\n if (_opts.auto_refresh) {\n window.setInterval(function() {\n _this.refresh();\n }, _opts.auto_refresh);\n }\n }\n };\n\n _BaseBin.prototype.destroy = function() {\n this.$.detach();\n this.renkan.resizeBins();\n };\n\n /* Point of entry */\n\n var Renkan = Rkns.Renkan = function(_opts) {\n var _this = this;\n\n Rkns.__renkans.push(this);\n\n this.options = _.defaults(_opts, Rkns.defaults, {\n templates: _.defaults(_opts.templates, renkanJST) || renkanJST,\n node_editor_templates: _.defaults(_opts.node_editor_templates, Rkns.defaults.node_editor_templates)\n });\n this.template = this.options.templates['templates/main.html'];\n\n var types_templates = {};\n _.each(this.options.node_editor_templates, function(value, key) {\n types_templates[key] = _this.options.templates[value];\n delete _this.options.templates[value];\n });\n this.options.node_editor_templates = types_templates;\n\n _.each(this.options.property_files, function(f) {\n Rkns.$.getJSON(f, function(data) {\n _this.options.properties = _this.options.properties.concat(data);\n });\n });\n\n this.read_only = this.options.read_only || !this.options.editor_mode;\n\n this.router = new Rkns.Router();\n\n this.project = new Rkns.Models.Project();\n this.dataloader = new Rkns.DataLoader.Loader(this.project, this.options);\n\n this.setCurrentUser = function(user_id, user_name) {\n this.project.addUser({\n _id: user_id,\n title: user_name\n });\n this.current_user = user_id;\n this.renderer.redrawUsers();\n };\n\n if (typeof this.options.user_id !== \"undefined\") {\n this.current_user = this.options.user_id;\n }\n this.$ = Rkns.$(\"#\" + this.options.container);\n this.$\n .addClass(\"Rk-Main\")\n .html(this.template(this));\n\n this.tabs = [];\n this.search_engines = [];\n\n this.current_user_list = new Rkns.Models.UsersList();\n\n this.current_user_list.on(\"add remove\", function() {\n if (this.renderer) {\n this.renderer.redrawUsers();\n }\n });\n\n this.colorPicker = function(pickerClass) {\n var _tmpl = _this.options.templates['templates/colorpicker.html'];\n return '
                                                      ' + Rkns.pickerColors.map(function(c) {\n return _tmpl({\n c: c\n });\n }).join(\"\") + '
                                                    ';\n };\n\n if (this.options.show_editor) {\n this.renderer = new Rkns.Renderer.Scene(this);\n }\n\n if (!this.options.search.length) {\n this.$.find(\".Rk-Web-Search-Form\").detach();\n } else {\n var _tmpl = _this.options.templates['templates/search.html'],\n _select = this.$.find(\".Rk-Search-List\"),\n _input = this.$.find(\".Rk-Web-Search-Input\"),\n _form = this.$.find(\".Rk-Web-Search-Form\");\n _.each(this.options.search, function(_search, _key) {\n if (Rkns[_search.type] && Rkns[_search.type].Search) {\n _this.search_engines.push(new Rkns[_search.type].Search(_this, _search));\n }\n });\n _select.html(\n _(this.search_engines).map(function(_search, _key) {\n return _tmpl({\n key: _key,\n title: _search.getSearchTitle(),\n className: _search.getBgClass()\n });\n }).join(\"\")\n );\n _select.find(\"li\").click(function() {\n var _el = Rkns.$(this);\n _this.setSearchEngine(_el.attr(\"data-key\"));\n _form.submit();\n });\n _form.submit(function() {\n if (_input.val()) {\n var _search = _this.search_engine;\n _search.search(_input.val());\n }\n return false;\n });\n this.$.find(\".Rk-Search-Current\").mouseenter(\n function() {\n _select.slideDown();\n }\n );\n this.$.find(\".Rk-Search-Select\").mouseleave(\n function() {\n _select.hide();\n }\n );\n this.setSearchEngine(0);\n }\n _.each(this.options.bins, function(_bin) {\n if (Rkns[_bin.type] && Rkns[_bin.type].Bin) {\n _this.tabs.push(new Rkns[_bin.type].Bin(_this, _bin));\n }\n });\n\n var elementDropped = false;\n\n this.$.find(\".Rk-Bins\")\n .on(\"click\", \".Rk-Bin-Title,.Rk-Bin-Title-Icon\", function() {\n var _mainDiv = Rkns.$(this).siblings(\".Rk-Bin-Main\");\n if (_mainDiv.is(\":hidden\")) {\n _this.$.find(\".Rk-Bin-Main\").slideUp();\n _mainDiv.slideDown();\n }\n });\n\n if (this.options.show_editor) {\n\n this.$.find(\".Rk-Bins\").on(\"mouseover\", \".Rk-Bin-Item\", function(_e) {\n var _t = Rkns.$(this);\n if (_t && $(_t).attr(\"data-uri\")) {\n var _models = _this.project.get(\"nodes\").where({\n uri: $(_t).attr(\"data-uri\")\n });\n _.each(_models, function(_model) {\n _this.renderer.highlightModel(_model);\n });\n }\n }).mouseout(function() {\n _this.renderer.unhighlightAll();\n }).on(\"mousemove\", \".Rk-Bin-Item\", function(e) {\n try {\n this.dragDrop();\n } catch (err) {}\n }).on(\"touchstart\", \".Rk-Bin-Item\", function(e) {\n elementDropped = false;\n }).on(\"touchmove\", \".Rk-Bin-Item\", function(e) {\n e.preventDefault();\n var touch = e.originalEvent.changedTouches[0],\n off = _this.renderer.canvas_$.offset(),\n w = _this.renderer.canvas_$.width(),\n h = _this.renderer.canvas_$.height();\n if (touch.pageX >= off.left && touch.pageX < (off.left + w) && touch.pageY >= off.top && touch.pageY < (off.top + h)) {\n if (elementDropped) {\n _this.renderer.onMouseMove(touch, true);\n } else {\n elementDropped = true;\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n _this.renderer.dropData({\n \"text/html\": div.innerHTML\n }, touch);\n _this.renderer.onMouseDown(touch, true);\n }\n }\n }).on(\"touchend\", \".Rk-Bin-Item\", function(e) {\n if (elementDropped) {\n _this.renderer.onMouseUp(e.originalEvent.changedTouches[0], true);\n }\n elementDropped = false;\n }).on(\"dragstart\", \".Rk-Bin-Item\", function(e) {\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n try {\n e.originalEvent.dataTransfer.setData(\"text/html\", div.innerHTML);\n } catch (err) {\n e.originalEvent.dataTransfer.setData(\"text\", div.innerHTML);\n }\n });\n\n }\n\n Rkns.$(window).resize(function() {\n _this.resizeBins();\n });\n\n var lastsearch = false,\n lastval = '';\n\n this.$.find(\".Rk-Bins-Search-Input\").on(\"change keyup paste input\", function() {\n var val = Rkns.$(this).val();\n if (val === lastval) {\n return;\n }\n var search = Rkns.Utils.regexpFromTextOrArray(val.length > 1 ? val : null);\n if (search.source === lastsearch) {\n return;\n }\n lastsearch = search.source;\n _.each(_this.tabs, function(tab) {\n tab.render(search);\n });\n\n });\n this.$.find(\".Rk-Bins-Search-Form\").submit(function() {\n return false;\n });\n };\n\n Renkan.prototype.translate = function(_text) {\n if (Rkns.i18n[this.options.language] && Rkns.i18n[this.options.language][_text]) {\n return Rkns.i18n[this.options.language][_text];\n }\n if (this.options.language.length > 2 && Rkns.i18n[this.options.language.substr(0, 2)] && Rkns.i18n[this.options.language.substr(0, 2)][_text]) {\n return Rkns.i18n[this.options.language.substr(0, 2)][_text];\n }\n return _text;\n };\n\n Renkan.prototype.onStatusChange = function() {\n this.renderer.onStatusChange();\n };\n\n Renkan.prototype.setSearchEngine = function(_key) {\n this.search_engine = this.search_engines[_key];\n this.$.find(\".Rk-Search-Current\").attr(\"class\", \"Rk-Search-Current \" + this.search_engine.getBgClass());\n var listClasses = this.search_engine.getBgClass().split(\" \");\n var classes = \"\";\n for (var i = 0; i < listClasses.length; i++) {\n classes += \".\" + listClasses[i];\n }\n this.$.find(\".Rk-Web-Search-Input.Rk-Search-Input\").attr(\"placeholder\", this.translate(\"Search in \") + this.$.find(\".Rk-Search-List \" + classes).html());\n };\n\n Renkan.prototype.resizeBins = function() {\n var _d = +this.$.find(\".Rk-Bins-Head\").outerHeight();\n this.$.find(\".Rk-Bin-Title:visible\").each(function() {\n _d += Rkns.$(this).outerHeight();\n });\n this.$.find(\".Rk-Bin-Main\").css({\n height: this.$.find(\".Rk-Bins\").height() - _d\n });\n };\n\n /* Utility functions */\n var getUUID4 = function() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n Rkns.Utils = {\n\n OriginEnum: (function(o) { return (Object.freeze && Object.freeze(o)) || o; }) ({\n NONE: 0,\n NODE_BUTTON: 1,\n NODE_DOUBLE_CLICK: 2,\n NODE_DROP_EXT: 3,\n NODE_DROP_BIN: 4,\n EDGE_BUTTON_BAR: 256,\n EDGE_BUTTON_CIRCLE: 512\n }),\n\n getUUID4: getUUID4,\n getUID: (function() {\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n var _d = new Date(),\n ID_AUTO_INCREMENT = 0,\n ID_BASE = _d.getUTCFullYear() + '-' +\n pad(_d.getUTCMonth() + 1) + '-' +\n pad(_d.getUTCDate()) + '-' +\n getUUID4();\n return function(_base) {\n var _n = (++ID_AUTO_INCREMENT).toString(16),\n _uidbase = (typeof _base === \"undefined\" ? \"\" : _base + \"-\");\n while (_n.length < 4) {\n _n = '0' + _n;\n }\n return _uidbase + ID_BASE + '-' + _n;\n };\n })(),\n getFullURL: function(url) {\n\n if (typeof(url) === 'undefined' || url == null) {\n return \"\";\n }\n if (/https?:\\/\\//.test(url)) {\n return url;\n }\n var img = new Image();\n img.src = url;\n var res = img.src;\n img.src = null;\n return res;\n\n },\n inherit: function(_baseClass, _callbefore) {\n\n var _class = function(_arg) {\n if (typeof _callbefore === \"function\") {\n _callbefore.apply(this, Array.prototype.slice.call(arguments, 0));\n }\n _baseClass.apply(this, Array.prototype.slice.call(arguments, 0));\n if (typeof this._init === \"function\" && !this._initialized) {\n this._init.apply(this, Array.prototype.slice.call(arguments, 0));\n this._initialized = true;\n }\n };\n _.extend(_class.prototype, _baseClass.prototype);\n\n return _class;\n\n },\n regexpFromTextOrArray: (function() {\n var charsub = [\n '[aáàâä]',\n '[cç]',\n '[eéèêë]',\n '[iíìîï]',\n '[oóòôö]',\n '[uùûü]'\n ],\n removeChars = [\n String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \"【\", \"】\", \"、\", \"・\", \"‥\", \"。\", \"「\", \"」\", \"『\", \"』\", \"〜\", \":\", \"!\", \"?\", \" \",\n \",\", \" \", \";\", \"(\", \")\", \".\", \"*\", \"+\", \"\\\\\", \"?\", \"|\", \"{\", \"}\", \"[\", \"]\", \"^\", \"#\", \"/\"\n ],\n remsrc = \"[\\\\\" + removeChars.join(\"\\\\\") + \"]\",\n remrx = new RegExp(remsrc, \"gm\"),\n charsrx = _.map(charsub, function(c) {\n return new RegExp(c);\n });\n\n function replaceText(_text) {\n var txt = _text.toLowerCase().replace(remrx, \"\"),\n src = \"\";\n\n function makeReplaceFunc(l) {\n return function(k, v) {\n l = l.replace(charsrx[k], v);\n };\n }\n for (var j = 0; j < txt.length; j++) {\n if (j) {\n src += remsrc + \"*\";\n }\n var l = txt[j];\n _.each(charsub, makeReplaceFunc(l));\n src += l;\n }\n return src;\n }\n\n function getSource(inp) {\n switch (typeof inp) {\n case \"string\":\n return replaceText(inp);\n case \"object\":\n var src = '';\n _.each(inp, function(v) {\n var res = getSource(v);\n if (res) {\n if (src) {\n src += '|';\n }\n src += res;\n }\n });\n return src;\n }\n return '';\n }\n\n return function(_textOrArray) {\n var source = getSource(_textOrArray);\n if (source) {\n var testrx = new RegExp(source, \"im\"),\n replacerx = new RegExp('(' + source + ')', \"igm\");\n return {\n isempty: false,\n source: source,\n test: function(_t) {\n return testrx.test(_t);\n },\n replace: function(_text, _replace) {\n return _text.replace(replacerx, _replace);\n }\n };\n } else {\n return {\n isempty: true,\n source: '',\n test: function() {\n return true;\n },\n replace: function(_text) {\n return text;\n }\n };\n }\n };\n })(),\n /* The minimum distance (in pixels) the mouse has to move to consider an element was dragged */\n _MIN_DRAG_DISTANCE: 2,\n /* Distance between the inner and outer radius of buttons that appear when hovering on a node */\n _NODE_BUTTON_WIDTH: 40,\n\n _EDGE_BUTTON_INNER: 2,\n _EDGE_BUTTON_OUTER: 40,\n /* Constants used to know if a specific action is to be performed when clicking on the canvas */\n _CLICKMODE_ADDNODE: 1,\n _CLICKMODE_STARTEDGE: 2,\n _CLICKMODE_ENDEDGE: 4,\n /* Node size step: Used to calculate the size change when clicking the +/- buttons */\n _NODE_SIZE_STEP: Math.LN2 / 4,\n _MIN_SCALE: 1 / 20,\n _MAX_SCALE: 20,\n _MOUSEMOVE_RATE: 80,\n _DOUBLETAP_DELAY: 800,\n /* Maximum distance in pixels (squared, to reduce calculations)\n * between two taps when double-tapping on a touch terminal */\n _DOUBLETAP_DISTANCE: 20 * 20,\n /* A placeholder so a default colour is displayed when a node has a null value for its user property */\n _USER_PLACEHOLDER: function(_renkan) {\n return {\n color: _renkan.options.default_user_color,\n title: _renkan.translate(\"(unknown user)\"),\n get: function(attr) {\n return this[attr] || false;\n }\n };\n },\n /* The code for the \"Drag and Add Bookmarklet\", slightly minified and with whitespaces removed, though\n * it doesn't seem that it's still a requirement in newer browsers (i.e. the ones compatibles with canvas drawing)\n */\n _BOOKMARKLET_CODE: function(_renkan) {\n return \"(function(a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r){a=document;b=a.body;c=a.location.href;j='draggable';m='text/x-iri-';d=a.createElement('div');d.innerHTML='\" +\n _renkan.translate(\"Drag items from this website, drop them in Renkan\").replace(/ /g, \"_\") +\n \"

                                                    '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\\\/\\\\/[^\\\\/]*twitter\\\\.com\\\\//,s:'.tweet',n:'twitter'},{r:/https?:\\\\/\\\\/[^\\\\/]*google\\\\.[^\\\\/]+\\\\//,s:'.g',n:'google'},{r:/https?:\\\\/\\\\/[^\\\\/]*lemonde\\\\.fr\\\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();\";\n },\n /* Shortens text to the required length then adds ellipsis */\n shortenText: function(_text, _maxlength) {\n return (_text.length > _maxlength ? (_text.substr(0, _maxlength) + '…') : _text);\n },\n /* Drawing an edit box with an arrow and positioning the edit box according to the position of the node/edge being edited\n * Called by Rkns.Renderer.NodeEditor and Rkns.Renderer.EdgeEditor */\n drawEditBox: function(_options, _coords, _path, _xmargin, _selector, _renkan) {\n _selector.css({\n width: (_options.tooltip_width - 2 * _options.tooltip_padding)\n });\n \n var rect = _selector[0].getBoundingClientRect();\n var container_rect = _renkan.$[0].getBoundingClientRect();\n\n if(rect.bottom > (container_rect.bottom - 2 * _options.tooltip_padding - 10)) {\n _selector.css({\n 'overflow-x': 'hidden',\n 'overflow-y': 'scroll',\n 'max-height':(container_rect.bottom - 2 * _options.tooltip_padding - 5 - rect.top) + 'px'\n });\n }\n\n var _height = _selector.outerHeight() + 2 * _options.tooltip_padding + 5,\n _isLeft = (_coords.x < paper.view.center.x ? 1 : -1),\n _left = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length),\n _right = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length + _options.tooltip_width),\n _top = _coords.y - _height / 2;\n if (_top + _height > (paper.view.size.height - _options.tooltip_margin)) {\n _top = Math.max(paper.view.size.height - _options.tooltip_margin, _coords.y + _options.tooltip_arrow_width / 2) - _height;\n }\n if (_top < _options.tooltip_margin) {\n _top = Math.min(_options.tooltip_margin, _coords.y - _options.tooltip_arrow_width / 2);\n }\n var _bottom = _top + _height;\n /* jshint laxbreak:true */\n _path.segments[0].point = _path.segments[7].point = _coords.add([_isLeft * _xmargin, 0]);\n _path.segments[1].point.x = _path.segments[2].point.x = _path.segments[5].point.x = _path.segments[6].point.x = _left;\n _path.segments[3].point.x = _path.segments[4].point.x = _right;\n _path.segments[2].point.y = _path.segments[3].point.y = _top;\n _path.segments[4].point.y = _path.segments[5].point.y = _bottom;\n _path.segments[1].point.y = _coords.y - _options.tooltip_arrow_width / 2;\n _path.segments[6].point.y = _coords.y + _options.tooltip_arrow_width / 2;\n _path.fillColor = new paper.Color(new paper.Gradient([_options.tooltip_top_color, _options.tooltip_bottom_color]), [0, _top], [0, _bottom]);\n\n _selector.css({\n left: (_options.tooltip_padding + Math.min(_left, _right)),\n top: (_options.tooltip_padding + _top)\n });\n \n return _path;\n },\n // from http://stackoverflow.com/a/6444043\n increaseBrightness: function (hex, percent){\n // strip the leading # if it's there\n hex = hex.replace(/^\\s*#|\\s*$/g, '');\n\n // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`\n if(hex.length === 3){\n hex = hex.replace(/(.)/g, '$1$1');\n }\n\n var r = parseInt(hex.substr(0, 2), 16),\n g = parseInt(hex.substr(2, 2), 16),\n b = parseInt(hex.substr(4, 2), 16);\n\n return '#' +\n ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);\n }\n };\n})(window);\n\n/* END main.js */\n","(function(root) {\n \"use strict\";\n \n var Backbone = root.Backbone;\n \n var Router = root.Rkns.Router = Backbone.Router.extend({\n routes: {\n '': 'index'\n },\n \n index: function (parameters) {\n \n var result = {};\n if (parameters !== null){\n parameters.split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n this.trigger('router', result); \n } \n });\n\n})(window);","(function(root) {\n\n \"use strict\";\n\n var DataLoader = root.Rkns.DataLoader = {\n converters: {\n from1to2: function(data) {\n\n var i, len;\n if(typeof data.nodes !== 'undefined') {\n for(i=0, len=data.nodes.length; i 1 ? options.offset[1]\n : options.offset[0];\n }\n else if (options.offset.x != null) {\n offset.x = options.offset.x;\n offset.y = options.offset.y;\n }\n options.offset = offset;\n }\n return options;\n },\n toJSON : function() {\n return {\n _id : this.get('_id'),\n zoom_level : this.get('zoom_level'),\n offset : this.get('offset'),\n title : this.get('title'),\n description : this.get('description'),\n created_by : this.get('created_by') ? this.get('created_by')\n .get('_id') : null,\n hidden_nodes: this.get('hidden_nodes')\n // Don't need project id\n };\n }\n });\n\n // PROJECT\n var Project = Models.Project = RenkanModel.extend({\n schema_version : '2',\n type : 'project',\n blacklist : [ 'saveStatus', 'loadingStatus'],\n relations : [ {\n type : Backbone.HasMany,\n key : 'users',\n relatedModel : User,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'nodes',\n relatedModel : Node,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'edges',\n relatedModel : Edge,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'views',\n relatedModel : View,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n } ],\n addUser : function(_props, _options) {\n _props.project = this;\n var _user = User.findOrCreate(_props);\n this.get('users').push(_user, _options);\n return _user;\n },\n addNode : function(_props, _options) {\n _props.project = this;\n var _node = Node.findOrCreate(_props);\n this.get('nodes').push(_node, _options);\n return _node;\n },\n addEdge : function(_props, _options) {\n _props.project = this;\n var _edge = Edge.findOrCreate(_props);\n this.get('edges').push(_edge, _options);\n return _edge;\n },\n addView : function(_props, _options) {\n _props.project = this;\n // TODO: check if need to replace with create only\n var _view = View.findOrCreate(_props);\n // TODO: Should we remember only one view?\n this.get('views').push(_view, _options);\n return _view;\n },\n removeNode : function(_model) {\n this.get('nodes').remove(_model);\n },\n removeEdge : function(_model) {\n this.get('edges').remove(_model);\n },\n validate : function(options) {\n var _project = this;\n _.each(\n [].concat(options.users, options.nodes, options.edges,options.views),\n function(_item) {\n if (_item) {\n _item.project = _project;\n }\n }\n );\n },\n getSchemaVersion : function(data) {\n var t = data;\n if(typeof(t) === 'undefined') {\n t = this;\n }\n var version = t.schema_version;\n if(!version) {\n return 1;\n }\n else {\n return version;\n }\n },\n // Add event handler to remove edges when a node is removed\n initialize : function() {\n var _this = this;\n this.on('remove:nodes', function(_node) {\n _this.get('edges').remove(\n _this.get('edges').filter(\n function(_edge) {\n return _edge.get('from') === _node ||\n _edge.get('to') === _node;\n }));\n });\n },\n toJSON : function() {\n var json = _.clone(this.attributes);\n for ( var attr in json) {\n if ((json[attr] instanceof Backbone.Model) ||\n (json[attr] instanceof Backbone.Collection) ||\n (json[attr] instanceof RenkanModel)) {\n json[attr] = json[attr].toJSON();\n }\n }\n return _.omit(json, this.blacklist);\n }\n });\n\n var RosterUser = Models.RosterUser = Backbone.Model\n .extend({\n type : 'roster_user',\n idAttribute : '_id',\n\n constructor : function(options) {\n\n if (typeof options !== 'undefined') {\n options._id = options._id ||\n options.id ||\n Models.getUID(this);\n options.title = options.title || '(untitled ' + this.type + ')';\n options.description = options.description || '';\n options.uri = options.uri || '';\n options.project = options.project || null;\n options.site_id = options.site_id || 0;\n\n if (typeof this.prepare === 'function') {\n options = this.prepare(options);\n }\n }\n Backbone.Model.prototype.constructor.call(this, options);\n },\n\n validate : function() {\n if (!this.type) {\n return 'object has no type';\n }\n },\n\n prepare : function(options) {\n options.color = options.color || '#666666';\n return options;\n },\n\n toJSON : function() {\n return {\n _id : this.get('_id'),\n title : this.get('title'),\n uri : this.get('uri'),\n description : this.get('description'),\n color : this.get('color'),\n project : (this.get('project') != null) ? this.get(\n 'project').get('id') : null,\n site_id : this.get('site_id')\n };\n }\n });\n\n var UsersList = Models.UsersList = Backbone.Collection.extend({\n model : RosterUser\n });\n\n})(window);\n","Rkns.defaults = {\n\n language: (navigator.language || navigator.userLanguage || \"en\"),\n /* GUI Language */\n container: \"renkan\",\n /* GUI Container DOM element ID */\n search: [],\n /* List of Search Engines */\n bins: [],\n /* List of Bins */\n static_url: \"\",\n /* URL for static resources */\n popup_editor: true,\n /* show the node editor as a popup inside the renkan view */\n editor_panel: 'editor-panel',\n /* GUI continer DOM element ID of the editor panel */\n show_bins: true,\n /* Show bins in left column */\n properties: [],\n /* Semantic properties for edges */\n show_editor: true,\n /* Show the graph editor... Setting this to \"false\" only shows the bins part ! */\n read_only: false,\n /* Allows editing of renkan without changing the rest of the GUI. Can be switched on/off on the fly to block/enable editing */\n editor_mode: true,\n /* Switch for Publish/Edit GUI. If editor_mode is false, read_only will be true. */\n manual_save: false,\n /* In snapshot mode, clicking on the floppy will save a snapshot. Otherwise, it will show the connection status */\n show_top_bar: true,\n /* Show the top bar, (title, buttons, users) */\n default_user_color: \"#303030\",\n size_bug_fix: false,\n /* Resize the canvas after load (fixes a bug on iPad and FF Mac) */\n force_resize: false,\n allow_double_click: true,\n /* Allows Double Click to create a node on an empty background */\n double_click_open_url: true,\n /* In read_only mode open node uri in new window with a double click */\n simple_click_open_url: false,\n /* In read_only mode open node uri in new window with a simple click (do not disable the double click) */\n zoom_on_scroll: true,\n /* Allows to use the scrollwheel to zoom */\n element_delete_delay: 0,\n /* Delay between clicking on the bin on an element and really deleting it\n Set to 0 for delete confirm */\n autoscale_padding: 50,\n resize: true,\n\n /* zoom options */\n show_zoom: true,\n /* show zoom buttons */\n save_view: true,\n /* show buttons to save view */\n view_force_autoscale: true,\n /* Force autoscale when the Renkan is loaded */\n view_show_hiddennodes: true,\n /* Show all the node when the Renkan is loaded */\n default_index_view: -1,\n\n /* URL parsing */\n url_parameters: true,\n /* accept or not hash parameters in the url */\n update_url: true,\n /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */\n /* Considered as false if url_parameters is false */\n\n\n /* TOP BAR BUTTONS */\n show_search_field: true,\n show_user_list: true,\n /* show the user list */\n user_name_editable: true,\n /* allow the edition of the user name */\n user_color_editable: true,\n /* allow the edition of the user color */\n title_editable: true,\n /* allow the edition of the renkan title */\n show_user_color: true,\n /* show user colors in the list */\n show_save_button: true,\n show_export_button: true,\n show_open_button: false,\n show_addnode_button: true,\n show_addedge_button: true,\n show_bookmarklet: true,\n show_fullscreen_button: true,\n home_button_url: false,\n home_button_title: \"Home\",\n\n /* MINI-MAP OPTIONS */\n\n show_minimap: true,\n /* Show a small map at the bottom right */\n minimap_width: 160,\n minimap_height: 120,\n minimap_padding: 20,\n minimap_background_color: \"#ffffff\",\n minimap_border_color: \"#cccccc\",\n minimap_highlight_color: \"#ffff00\",\n minimap_highlight_weight: 5,\n\n\n /* EDGE/NODE COMMON OPTIONS */\n\n buttons_background: \"#202020\",\n buttons_label_color: \"#c000c0\",\n buttons_label_font_size: 9,\n\n ghost_opacity : 0.3,\n /* opacity when the hidden element is revealed */\n default_dash_array : [4, 5],\n /* dash line genometry */\n\n /* NODE DISPLAY OPTIONS */\n\n show_node_circles: true,\n /* Show circles for nodes */\n clip_node_images: true,\n /* Constraint node images to circles */\n node_images_fill_mode: false,\n /* Set to false for \"letterboxing\" (height/width of node adapted to show full image)\n Set to true for \"crop\" (adapted to fill circle) */\n node_size_base: 25,\n node_stroke_width: 2,\n node_stroke_max_width: 12,\n selected_node_stroke_width: 4,\n selected_node_stroke_max_width: 24,\n node_stroke_witdh_scale: 5,\n node_title_size_min: 0,\n /* minimum relative size for node title (in graph) */\n node_title_size_max: 5,\n /* maximum relative size for node title (in graph) */\n node_title_size_step: 0.1,\n /* step for relative size for node title (in graph) */\n node_fill_color: \"#ffffff\",\n /* default color to fill node background */\n highlighted_node_fill_color: \"#ffff00\",\n /* default color to fill highlighted node background */\n node_title_color: \"#000000\",\n /* default title color */\n node_label_distance: 5,\n /* Vertical distance between node and label */\n node_label_max_length: 60,\n /* Maximum displayed text length */\n label_untitled_nodes: \"(untitled)\",\n /* Label to display on untitled nodes */\n hide_nodes: true,\n /* allow hide/show nodes */\n change_shapes: true,\n /* Change shapes enabled */\n change_types: true,\n /* Change type enabled */\n\n /* NODE EDITOR TEMPLATE*/\n\n node_editor_templates: {\n \"default\": \"templates/nodeeditor_readonly.html\",\n \"video\": \"templates/nodeeditor_video.html\"\n },\n\n /* EDGE DISPLAY OPTIONS */\n\n edge_stroke_width: 2,\n edge_stroke_max_width: 12,\n selected_edge_stroke_width: 4,\n selected_edge_stroke_max_width: 24,\n edge_stroke_witdh_scale: 5,\n\n edge_label_distance: 0,\n edge_label_max_length: 20,\n edge_arrow_length: 18,\n edge_arrow_width: 12,\n edge_arrow_max_width: 32,\n edge_gap_in_bundles: 12,\n highlighted_edge_color: \"#ffff00\",\n label_untitled_edges: \"\",\n\n /* CONTEXTUAL DISPLAY (TOOLTIP OR EDITOR) OPTIONS */\n\n tooltip_width: 275,\n tooltip_padding: 10,\n tooltip_margin: 15,\n tooltip_arrow_length : 20,\n tooltip_arrow_width : 40,\n tooltip_top_color: \"#f0f0f0\",\n tooltip_bottom_color: \"#d0d0d0\",\n tooltip_border_color: \"#808080\",\n tooltip_border_width: 1,\n tooltip_opacity: 0.8,\n\n richtext_editor_config: {\n toolbarGroups: [\n { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n { name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n '/',\n\t { name: 'styles'},\n ],\n removePlugins : 'colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates',\n },\n\n /* NODE EDITOR OPTIONS */\n\n show_node_title_style: true,\n show_node_editor_uri: true,\n show_node_editor_title: true,\n show_node_editor_title_richtext: true,\n show_node_editor_description: true,\n show_node_editor_description_richtext: true,\n show_node_editor_size: true,\n show_node_editor_style: true, // show node title style editor\n show_node_editor_style_color: true,\n show_node_editor_style_dash: true,\n show_node_editor_style_thickness: true,\n show_node_editor_image: true,\n show_node_editor_creator: true,\n allow_image_upload: true,\n uploaded_image_max_kb: 500,\n\n\n /* NODE TOOLTIP OPTIONS */\n\n show_node_tooltip_uri: true,\n show_node_tooltip_description: true,\n show_node_tooltip_color: true,\n show_node_tooltip_image: true,\n show_node_tooltip_creator: true,\n\n /* EDGE EDITOR OPTIONS */\n\n show_edge_editor_uri: true,\n show_edge_editor_style: true,\n show_edge_editor_style_color: true,\n show_edge_editor_style_dash: true,\n show_edge_editor_style_thickness: true,\n show_edge_editor_style_arrow: true,\n show_edge_editor_direction: true,\n show_edge_editor_nodes: true,\n show_edge_editor_creator: true,\n\n /* EDGE TOOLTIP OPTIONS */\n\n show_edge_tooltip_uri: true,\n show_edge_tooltip_color: true,\n show_edge_tooltip_nodes: true,\n show_edge_tooltip_creator: true,\n\n};\n","Rkns.i18n = {\n fr: {\n \"Edit Node\": \"Édition d’un nœud\",\n \"Edit Edge\": \"Édition d’un lien\",\n \"Title:\": \"Titre :\",\n \"URI:\": \"URI :\",\n \"Description:\": \"Description :\",\n \"From:\": \"De :\",\n \"To:\": \"Vers :\",\n \"Image\": \"Image\",\n \"Image URL:\": \"URL d'Image\",\n \"Choose Image File:\": \"Choisir un fichier image\",\n \"Full Screen\": \"Mode plein écran\",\n \"Add Node\": \"Ajouter un nœud\",\n \"Add Edge\": \"Ajouter un lien\",\n \"Save Project\": \"Enregistrer le projet\",\n \"Open Project\": \"Ouvrir un projet\",\n \"Auto-save enabled\": \"Enregistrement automatique activé\",\n \"Connection lost\": \"Connexion perdue\",\n \"Created by:\": \"Créé par :\",\n \"Zoom In\": \"Agrandir l’échelle\",\n \"Zoom Out\": \"Rapetisser l’échelle\",\n \"Edit\": \"Éditer\",\n \"Remove\": \"Supprimer\",\n \"Cancel deletion\": \"Annuler la suppression\",\n \"Link to another node\": \"Créer un lien\",\n \"Enlarge\": \"Agrandir\",\n \"Shrink\": \"Rétrécir\",\n \"Click on the background canvas to add a node\": \"Cliquer sur le fond du graphe pour rajouter un nœud\",\n \"Click on a first node to start the edge\": \"Cliquer sur un premier nœud pour commencer le lien\",\n \"Click on a second node to complete the edge\": \"Cliquer sur un second nœud pour terminer le lien\",\n \"Wikipedia\": \"Wikipédia\",\n \"Wikipedia in \": \"Wikipédia en \",\n \"French\": \"Français\",\n \"English\": \"Anglais\",\n \"Japanese\": \"Japonais\",\n \"Untitled project\": \"Projet sans titre\",\n \"Lignes de Temps\": \"Lignes de Temps\",\n \"Loading, please wait\": \"Chargement en cours, merci de patienter\",\n \"Edge color:\": \"Couleur :\",\n \"Dash:\": \"Point. :\",\n \"Thickness:\": \"Epaisseur :\",\n \"Arrow:\": \"Flèche :\",\n \"Node color:\": \"Couleur :\",\n \"Choose color\": \"Choisir une couleur\",\n \"Change edge direction\": \"Changer le sens du lien\",\n \"Do you really wish to remove node \": \"Voulez-vous réellement supprimer le nœud \",\n \"Do you really wish to remove edge \": \"Voulez-vous réellement supprimer le lien \",\n \"This file is not an image\": \"Ce fichier n'est pas une image\",\n \"Image size must be under \": \"L'image doit peser moins de \",\n \"Size:\": \"Taille :\",\n \"KB\": \"ko\",\n \"Choose from vocabulary:\": \"Choisir dans un vocabulaire :\",\n \"SKOS Documentation properties\": \"SKOS: Propriétés documentaires\",\n \"has note\": \"a pour note\",\n \"has example\": \"a pour exemple\",\n \"has definition\": \"a pour définition\",\n \"SKOS Semantic relations\": \"SKOS: Relations sémantiques\",\n \"has broader\": \"a pour concept plus large\",\n \"has narrower\": \"a pour concept plus étroit\",\n \"has related\": \"a pour concept apparenté\",\n \"Dublin Core Metadata\": \"Métadonnées Dublin Core\",\n \"has contributor\": \"a pour contributeur\",\n \"covers\": \"couvre\",\n \"created by\": \"créé par\",\n \"has date\": \"a pour date\",\n \"published by\": \"édité par\",\n \"has source\": \"a pour source\",\n \"has subject\": \"a pour sujet\",\n \"Dragged resource\": \"Ressource glisée-déposée\",\n \"Search the Web\": \"Rechercher en ligne\",\n \"Search in Bins\": \"Rechercher dans les chutiers\",\n \"Close bin\": \"Fermer le chutier\",\n \"Refresh bin\": \"Rafraîchir le chutier\",\n \"(untitled)\": \"(sans titre)\",\n \"Select contents:\": \"Sélectionner des contenus :\",\n \"Drag items from this website, drop them in Renkan\": \"Glissez des éléments de ce site web vers Renkan\",\n \"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\": \"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan\",\n \"Shapes available\": \"Formes disponibles\",\n \"Circle\": \"Cercle\",\n \"Square\": \"Carré\",\n \"Diamond\": \"Losange\",\n \"Hexagone\": \"Hexagone\",\n \"Ellipse\": \"Ellipse\",\n \"Star\": \"Étoile\",\n \"Cloud\": \"Nuage\",\n \"Triangle\": \"Triangle\",\n \"Polygon\": \"Polygone\",\n \"Zoom Fit\": \"Ajuster le Zoom\",\n \"Download Project\": \"Télécharger le projet\",\n \"Save view\": \"Sauver la vue\",\n \"View saved view\": \"Restaurer la Vue\",\n \"Renkan \\'Drag-to-Add\\' bookmarklet\": \"Renkan \\'Deplacer-Pour-Ajouter\\' Signet\",\n \"(unknown user)\":\"(non authentifié)\",\n \"\":\"\",\n \"Search in graph\":\"Rechercher dans carte\",\n \"Search in \" : \"Chercher dans \",\n \"Show hidden nodes\": \"Montrer les noeuds cachés\",\n \"Show neighbors\": \"Montrer les voisins\",\n \"Hide\": \"Cacher\",\n \"Fullscreen not supported by your browser\": \"Le plein écran n'est pas supporté par votre navigateur\",\n \"Title size:\": \"Taille :\",\n \"Title color:\": \"Couleur :\",\n \"Video link\": \"Lien vidéo\"\n }\n};\n","/* Saves the Full JSON at each modification */\n\nRkns.jsonIO = function(_renkan, _opts) {\n var _proj = _renkan.project;\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'PUT';\n }\n var _load = function() {\n _proj.set({\n loadingStatus : true\n });\n Rkns.$.getJSON(_opts.url, function(_data) {\n _renkan.dataloader.load(_data);\n \n _proj.set({\n loadingStatus : false\n });\n _proj.set({\n saveStatus : 0\n });\n });\n };\n var _save = function() {\n _proj.set({\n saveStatus : 2\n });\n var _data = _proj.toJSON();\n if (!_renkan.read_only) {\n Rkns.$.ajax({\n type : _opts.http_method,\n url : _opts.url,\n contentType : \"application/json\",\n data : JSON.stringify(_data),\n success : function(data, textStatus, jqXHR) {\n _proj.set({\n saveStatus : 0\n });\n }\n });\n }\n\n };\n var _thrSave = Rkns._.throttle(function() {\n setTimeout(_save, 100);\n }, 1000);\n \n //TODO: Rearrange to avoid the 2 firts PUT due to a change in the project model\n // Take car of setting up the listener correctly to listen the save action on the view\n _proj.on(\"add:nodes add:edges add:users add:views\", function(_model) {\n _model.on(\"change remove\", function(_model) {\n _thrSave();\n });\n _thrSave();\n });\n _proj.on(\"change\", function() {\n if (!(_proj.changedAttributes.length === 1 && _proj\n .hasChanged('saveStatus'))) {\n _thrSave();\n }\n });\n\n _load();\n};\n","/* Saves the Full JSON once */\n\nRkns.jsonIOSaveOnClick = function(_renkan, _opts) {\n var _proj = _renkan.project,\n _saveWarn = false,\n _onLeave = function() {\n return \"Project not saved\";\n };\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'POST';\n }\n var _load = function() {\n var getdata = {},\n rx = /id=([^&#?=]+)/,\n matches = document.location.hash.match(rx);\n if (matches) {\n getdata.id = matches[1];\n }\n Rkns.$.ajax({\n url: _opts.url,\n data: getdata,\n beforeSend: function(){\n \t_proj.set({loadingStatus:true});\n },\n success: function(_data) {\n _renkan.dataloader.load(_data);\n _proj.set({loadingStatus:false});\n _proj.set({saveStatus:0});\n }\n });\n };\n var _save = function() {\n _proj.set(\"saved_at\", new Date());\n var _data = _proj.toJSON();\n Rkns.$.ajax({\n type: _opts.http_method,\n url: _opts.url,\n contentType: \"application/json\",\n data: JSON.stringify(_data),\n beforeSend: function(){\n \t_proj.set({saveStatus:2});\n },\n success: function(data, textStatus, jqXHR) {\n $(window).off(\"beforeunload\", _onLeave);\n _saveWarn = false;\n _proj.set({saveStatus:0});\n //document.location.hash = \"#id=\" + data.id;\n //$(\".Rk-Notifications\").text(\"Saved as \"+document.location.href).fadeIn().delay(2000).fadeOut();\n }\n });\n };\n var _checkLeave = function() {\n \t_proj.set({saveStatus:1});\n\n var title = _proj.get(\"title\");\n if (title && _proj.get(\"nodes\").length) {\n $(\".Rk-Save-Button\").removeClass(\"disabled\");\n } else {\n $(\".Rk-Save-Button\").addClass(\"disabled\");\n }\n if (title) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#333333\");\n }\n if (!_saveWarn) {\n _saveWarn = true;\n $(window).on(\"beforeunload\", _onLeave);\n }\n };\n _load();\n _proj.on(\"add:nodes add:edges add:users change\", function(_model) {\n\t _model.on(\"change remove\", function(_model) {\n\t \tif(!(_model.changedAttributes.length === 1 && _model.hasChanged('saveStatus'))) {\n\t \t\t_checkLeave();\n\t \t}\n\t });\n\t\tif(!(_proj.changedAttributes.length === 1 && _proj.hasChanged('saveStatus'))) {\n\t\t _checkLeave();\n \t}\n });\n _renkan.renderer.save = function() {\n if ($(\".Rk-Save-Button\").hasClass(\"disabled\")) {\n if (!_proj.get(\"title\")) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#ff0000\");\n }\n } else {\n _save();\n }\n };\n};\n","(function(Rkns) {\n\"use strict\";\n\nvar _ = Rkns._;\n\nvar Ldt = Rkns.Ldt = {};\n\nvar Bin = Ldt.Bin = function(_renkan, _opts) {\n if (_opts.ldt_type) {\n var Resclass = Ldt[_opts.ldt_type+\"Bin\"];\n if (Resclass) {\n return new Resclass(_renkan, _opts);\n }\n }\n console.error(\"No such LDT Bin Type\");\n};\n\nvar ProjectBin = Ldt.ProjectBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nProjectBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.tagTemplate = _renkan.options.templates['templates/ldtjson-bin/tagtemplate.html'];\n this.annotationTemplate = _renkan.options.templates['templates/ldtjson-bin/annotationtemplate.html'];\n this.proj_id = _opts.project_id;\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.title_$.html(_opts.title);\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nProjectBin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '
                                                  • Tags

                                                  • ',\n _projtitle = this.data.meta[\"dc:title\"],\n _this = this,\n count = 0;\n _this.title_$.text('LDT Project: \"' + _projtitle + '\"');\n _.map(_this.data.tags,function(_tag) {\n var _title = _tag.meta[\"dc:title\"];\n if (!search.isempty && !search.test(_title)) {\n return;\n }\n count++;\n _html += _this.tagTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n encodedtitle : encodeURIComponent(_title),\n static_url: _this.renkan.options.static_url\n });\n });\n _html += '
                                                  • Annotations

                                                  • ';\n _.map(_this.data.annotations,function(_annotation) {\n var _description = _annotation.content.description,\n _title = _annotation.content.title.replace(_description,\"\");\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _annotation.end - _annotation.begin,\n _img = (\n (_annotation.content && _annotation.content.img && _annotation.content.img.src) ?\n _annotation.content.img.src :\n ( _duration ? _this.renkan.options.static_url+\"img/ldt-segment.png\" : _this.renkan.options.static_url+\"img/ldt-point.png\" )\n );\n _html += _this.annotationTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_annotation.begin),\n end: convertTC(_annotation.end),\n duration: convertTC(_duration),\n mediaid: _annotation.media,\n annotationid: _annotation.id,\n image: _img,\n static_url: _this.renkan.options.static_url\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nProjectBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/ldt/cljson/id/' + this.proj_id,\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\nvar Search = Ldt.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nSearch.prototype.getBgClass = function() {\n return \"Rk-Ldt-Icon\";\n};\n\nSearch.prototype.getSearchTitle = function() {\n return this.renkan.translate(\"Lignes de Temps\");\n};\n\nSearch.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new ResultsBin(this.renkan, {\n search: _q\n })\n );\n};\n\nvar ResultsBin = Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nResultsBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.segmentTemplate = _renkan.options.templates['templates/ldtjson-bin/segmenttemplate.html'];\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.max_results = _opts.max_results || 50;\n this.search = _opts.search;\n this.title_$.html('Lignes de Temps: \"' + _opts.search + '\"');\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nResultsBin.prototype.render = function(searchbase) {\n if (!this.data) {\n return;\n }\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '',\n _this = this,\n count = 0;\n _.each(this.data.objects,function(_segment) {\n var _description = _segment.abstract,\n _title = _segment.title;\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _segment.duration,\n _begin = _segment.start_ts,\n _end = + _segment.duration + _begin,\n _img = (\n _duration ?\n _this.renkan.options.static_url + \"img/ldt-segment.png\" :\n _this.renkan.options.static_url + \"img/ldt-point.png\"\n );\n _html += _this.segmentTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_begin),\n end: convertTC(_end),\n duration: convertTC(_duration),\n mediaid: _segment.iri_id,\n //projectid: _segment.project_id,\n //cuttingid: _segment.cutting_id,\n annotationid: _segment.element_id,\n image: _img\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nResultsBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',\n data: {\n format: \"jsonp\",\n q: this.search,\n limit: this.max_results\n },\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\n})(window.Rkns);\n","Rkns.ResourceList = {};\n\nRkns.ResourceList.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.ResourceList.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.resultTemplate = _renkan.options.templates['templates/list-bin.html'];\n this.title_$.html(_opts.title);\n if (_opts.list) {\n this.data = _opts.list;\n }\n this.refresh();\n};\n\nRkns.ResourceList.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data,function(_item) {\n var _element;\n if (typeof _item === \"string\") {\n if (/^(https?:\\/\\/|www)/.test(_item)) {\n _element = { url: _item };\n } else {\n _element = { title: _item.replace(/[:,]?\\s?(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+\\s?/,'').trim() };\n var _match = _item.match(/(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+/);\n if (_match) {\n _element.url = _match[0];\n }\n if (_element.title.length > 80) {\n _element.description = _element.title;\n _element.title = _element.title.replace(/^(.{30,60})\\s.+$/,'$1…');\n }\n }\n } else {\n _element = _item;\n }\n var title = _element.title || (_element.url || \"\").replace(/^https?:\\/\\/(www\\.)?/,'').replace(/^(.{40}).+$/,'$1…'),\n url = _element.url || \"\",\n description = _element.description || \"\",\n image = _element.image || \"\";\n if (url && !/^https?:\\/\\//.test(url)) {\n url = 'http://' + url;\n }\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n image: image,\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.ResourceList.Bin.prototype.refresh = function() {\n if (this.data) {\n this.render();\n }\n};\n","Rkns.Wikipedia = {\n};\n\nRkns.Wikipedia.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nRkns.Wikipedia.Search.prototype.getBgClass = function() {\n return \"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-\" + this.lang;\n};\n\nRkns.Wikipedia.Search.prototype.getSearchTitle = function() {\n var langs = {\n \"fr\": \"French\",\n \"en\": \"English\",\n \"ja\": \"Japanese\"\n };\n if (langs[this.lang]) {\n return this.renkan.translate(\"Wikipedia in \") + this.renkan.translate(langs[this.lang]);\n } else {\n return this.renkan.translate(\"Wikipedia\") + \" [\" + this.lang + \"]\";\n }\n};\n\nRkns.Wikipedia.Search.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new Rkns.Wikipedia.Bin(this.renkan, {\n lang: this.lang,\n search: _q\n })\n );\n};\n\nRkns.Wikipedia.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.Wikipedia.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.search = _opts.search;\n this.resultTemplate = _renkan.options.templates['templates/wikipedia-bin/resulttemplate.html'];\n this.lang = _opts.lang || \"en\";\n this.title_icon_$.addClass('Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-' + this.lang);\n this.title_$.html(this.search).addClass(\"Rk-Wikipedia-Title\");\n this.refresh();\n};\n\nRkns.Wikipedia.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data.query.search, function(_result) {\n var title = _result.title,\n url = \"http://\" + _this.lang + \".wikipedia.org/wiki/\" + encodeURI(title.replace(/ /g,\"_\")),\n description = Rkns.$('
                                                    ').html(_result.snippet).text();\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.Wikipedia.Bin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: \"http://\" + _this.lang + \".wikipedia.org/w/api.php?action=query&list=search&srsearch=\" + encodeURIComponent(this.search) + \"&format=json\",\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n","\ndefine('renderer/baserepresentation',['jquery', 'underscore'], function ($, _) {\n 'use strict';\n\n /* Rkns.Renderer._BaseRepresentation Class */\n\n /* In Renkan, a \"Representation\" is a sort of ViewModel (in the MVVM paradigm) and bridges the gap between\n * models (written with Backbone.js) and the view (written with Paper.js)\n * Renkan's representations all inherit from Rkns.Renderer._BaseRepresentation '*/\n\n var _BaseRepresentation = function(_renderer, _model) {\n if (typeof _renderer !== \"undefined\") {\n this.renderer = _renderer;\n this.renkan = _renderer.renkan;\n this.project = _renderer.renkan.project;\n this.options = _renderer.renkan.options;\n this.model = _model;\n if (this.model) {\n var _this = this;\n this._changeBinding = function() {\n _this.redraw({change: true});\n };\n this._removeBinding = function() {\n _renderer.removeRepresentation(_this);\n _.defer(function() {\n _renderer.redraw();\n });\n };\n this._selectBinding = function() {\n _this.select();\n };\n this._unselectBinding = function() {\n _this.unselect();\n };\n this.model.on(\"change\", this._changeBinding );\n this.model.on(\"remove\", this._removeBinding );\n this.model.on(\"select\", this._selectBinding );\n this.model.on(\"unselect\", this._unselectBinding );\n }\n }\n };\n\n /* Rkns.Renderer._BaseRepresentation Methods */\n\n _(_BaseRepresentation.prototype).extend({\n _super: function(_func) {\n return _BaseRepresentation.prototype[_func].apply(this, Array.prototype.slice.call(arguments, 1));\n },\n redraw: function() {},\n moveTo: function() {},\n show: function() { return \"BaseRepresentation.show\"; },\n hide: function() {},\n select: function() {\n if (this.model) {\n this.model.trigger(\"selected\");\n }\n },\n unselect: function() {\n if (this.model) {\n this.model.trigger(\"unselected\");\n }\n },\n highlight: function() {},\n unhighlight: function() {},\n mousedown: function() {},\n mouseup: function() {\n if (this.model) {\n this.model.trigger(\"clicked\");\n }\n },\n destroy: function() {\n if (this.model) {\n this.model.off(\"change\", this._changeBinding );\n this.model.off(\"remove\", this._removeBinding );\n this.model.off(\"select\", this._selectBinding );\n this.model.off(\"unselect\", this._unselectBinding );\n }\n }\n }).value();\n\n /* End of Rkns.Renderer._BaseRepresentation Class */\n\n return _BaseRepresentation;\n\n});\n\ndefine('requtils',[], function ($, _) {\n 'use strict';\n return {\n getUtils: function(){\n return window.Rkns.Utils;\n },\n getRenderer: function(){\n return window.Rkns.Renderer;\n }\n };\n\n});\n\n\ndefine('renderer/basebutton',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer._BaseButton Class */\n\n /* BaseButton is extended by contextual buttons that appear when hovering on nodes and edges */\n\n var _BaseButton = Utils.inherit(BaseRepresentation);\n\n _(_BaseButton.prototype).extend({\n moveTo: function(_pos) {\n this.sector.moveTo(_pos);\n },\n show: function() {\n this.sector.show();\n },\n hide: function() {\n if (this.sector){\n this.sector.hide();\n }\n },\n select: function() {\n this.sector.select();\n },\n unselect: function(_newTarget) {\n this.sector.unselect();\n if (!_newTarget || (_newTarget !== this.source_representation && _newTarget.source_representation !== this.source_representation)) {\n this.source_representation.unselect();\n }\n },\n destroy: function() {\n this.sector.destroy();\n }\n }).value();\n\n return _BaseButton;\n\n});\n\n\ndefine('renderer/shapebuilder',[], function () {\n 'use strict';\n\n var cloud_path = \"M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z\";\n /* ShapeBuilder Begin */\n\n var builders = {\n \"circle\":{\n getShape: function() {\n return new paper.Path.Circle([0, 0], 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Circle(center, radius);\n }\n },\n \"rectangle\":{\n getShape: function() {\n return new paper.Path.Rectangle([-2, -2], [2, 2]);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Rectangle([-radius, -radius], [radius*2, radius*2]);\n }\n },\n \"ellipse\":{\n getShape: function() {\n return new paper.Path.Ellipse(new paper.Rectangle([-2, -1], [2, 1]));\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Ellipse(new paper.Rectangle([-radius, -radius/2], [radius*2, radius]));\n }\n },\n \"polygon\":{\n getShape: function() {\n return new paper.Path.RegularPolygon([0, 0], 6, 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.RegularPolygon(center, 6, radius);\n }\n },\n \"diamond\":{\n getShape: function() {\n var d = new paper.Path.Rectangle([-Math.SQRT2, -Math.SQRT2], [Math.SQRT2, Math.SQRT2]);\n d.rotate(45);\n return d;\n },\n getImageShape: function(center, radius) {\n var d = new paper.Path.Rectangle([-radius*Math.SQRT2/2, -radius*Math.SQRT2/2], [radius*Math.SQRT2, radius*Math.SQRT2]);\n d.rotate(45);\n return d;\n }\n },\n \"star\":{\n getShape: function() {\n return new paper.Path.Star([0, 0], 8, 1, 0.7);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Star(center, 8, radius*1, radius*0.7);\n }\n },\n \"cloud\": {\n getShape: function() {\n var path = new paper.Path(cloud_path);\n return path;\n\n },\n getImageShape: function(center, radius) {\n var path = new paper.Path(cloud_path);\n path.scale(radius);\n path.translate(center);\n return path;\n }\n },\n \"triangle\": {\n getShape: function() {\n return new paper.Path.RegularPolygon([0,0], 3, 1);\n },\n getImageShape: function(center, radius) {\n var shape = new paper.Path.RegularPolygon([0,0], 3, 1);\n shape.scale(radius);\n shape.translate(center);\n return shape;\n }\n },\n \"svg\": function(path){\n return {\n getShape: function() {\n return new paper.Path(path);\n },\n getImageShape: function(center, radius) {\n // No calcul for the moment\n return new paper.Path();\n }\n };\n }\n };\n\n var ShapeBuilder = function (shape){\n if(shape === null || typeof shape === \"undefined\"){\n shape = \"circle\";\n }\n if(shape.substr(0,4)===\"svg:\"){\n return builders.svg(shape.substr(4));\n }\n if(!(shape in builders)){\n shape = \"circle\";\n }\n return builders[shape];\n };\n\n ShapeBuilder.builders = builders;\n\n return ShapeBuilder;\n\n});\n\ndefine('renderer/noderepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.Node Class */\n\n /* The representation for the node : A circle, with an image inside and a text label underneath.\n * The circle and the image are drawn on canvas and managed by Paper.js.\n * The text label is an HTML node, managed by jQuery. */\n\n //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);\n var NodeRepr = Utils.inherit(BaseRepresentation);\n\n _(NodeRepr.prototype).extend({\n _init: function() {\n this.renderer.node_layer.activate();\n this.type = \"Node\";\n this.buildShape();\n this.hidden = false;\n this.ghost= false;\n if (this.options.show_node_circles) {\n this.circle.strokeWidth = this.options.node_stroke_width;\n this.h_ratio = 1;\n } else {\n this.h_ratio = 0;\n }\n this.title = $('
                                                    ').appendTo(this.renderer.labels_$);\n\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.NodeEditButton(this.renderer, null),\n new Renderer.NodeRemoveButton(this.renderer, null),\n new Renderer.NodeLinkButton(this.renderer, null),\n new Renderer.NodeEnlargeButton(this.renderer, null),\n new Renderer.NodeShrinkButton(this.renderer, null)\n ];\n if (this.options.hide_nodes){\n this.normal_buttons.push(\n new Renderer.NodeHideButton(this.renderer, null),\n new Renderer.NodeShowButton(this.renderer, null)\n );\n }\n this.pending_delete_buttons = [\n new Renderer.NodeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n this.last_circle_radius = 1;\n\n if (this.renderer.minimap) {\n this.renderer.minimap.node_layer.activate();\n this.minimap_circle = new paper.Path.Circle([0, 0], 1);\n this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;\n this.renderer.minimap.node_group.addChild(this.minimap_circle);\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.node_stroke_width + (thickness-1) * (this.options.node_stroke_max_width - this.options.node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_node_stroke_width + (thickness-1) * (this.options.selected_node_stroke_max_width - this.options.selected_node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n buildShape: function(){\n if( 'shape' in this.model.changed ) {\n delete this.img;\n }\n if(this.circle){\n this.circle.remove();\n delete this.circle;\n }\n // \"circle\" \"rectangle\" \"ellipse\" \"polygon\" \"star\" \"diamond\"\n this.shapeBuilder = new ShapeBuilder(this.model.get(\"shape\"));\n this.circle = this.shapeBuilder.getShape();\n this.circle.__representation = this;\n this.circle.sendToBack();\n this.last_circle_radius = 1;\n },\n redraw: function(options) {\n if( 'shape' in this.model.changed && 'change' in options && options.change ) {\n //if( 'shape' in this.model.changed ) {\n this.buildShape();\n }\n var _model_coords = new paper.Point(this.model.get(\"position\")),\n _baseRadius = this.options.node_size_base * Math.exp((this.model.get(\"size\") || 0) * Utils._NODE_SIZE_STEP);\n if (!this.is_dragging || !this.paper_coords) {\n this.paper_coords = this.renderer.toPaperCoords(_model_coords);\n }\n this.circle_radius = _baseRadius * this.renderer.view.scale;\n if (this.last_circle_radius !== this.circle_radius) {\n this.all_buttons.forEach(function(b) {\n b.setSectorSize();\n });\n this.circle.scale(this.circle_radius / this.last_circle_radius);\n if (this.node_image) {\n this.node_image.scale(this.circle_radius / this.last_circle_radius);\n }\n }\n this.circle.position = this.paper_coords;\n if (this.node_image) {\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n }\n this.last_circle_radius = this.circle_radius;\n\n var old_act_btn = this.active_buttons;\n\n var opacity = 1;\n if (this.model.get(\"delete_scheduled\")) {\n opacity = 0.5;\n this.active_buttons = this.pending_delete_buttons;\n this.circle.dashArray = [2,2];\n } else {\n opacity = 1;\n this.active_buttons = this.normal_buttons;\n this.circle.dashArray = null;\n }\n if (this.selected && this.renderer.isEditable() && !this.ghost) {\n if (old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n }\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n if (this.node_image) {\n this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);\n }\n\n this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;\n\n this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;\n\n\n //strip html from title\n var html = this.model.get(\"title\");\n var div = document.createElement(\"div\");\n div.innerHTML = html;\n var clean_title = div.textContent || div.innerText || \"\";\n\n var _text = clean_title || this.renkan.translate(this.options.label_untitled_nodes) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n\n //_formatedText = _text;\n\n\n if (typeof this.highlighted === \"object\") {\n _text = this.highlighted.replace(_(_text).escape(),'$1');\n }\n\n //TODO: default text node color\n var node_style = (this.model.get(\"style\") || {'title_size': 1, 'title-color': '#00000' });\n var text_size = node_style.title_size || 1;\n var text_color = node_style.title_color || this.options.node_title_color;\n\n var text_style = {\n 'line-height': \"1em\"\n };\n\n if(text_size !== 1) {\n text_style['font-size'] = text_size.toFixed(1)+\"em\";\n }\n //TODO: compare with default value\n if(text_color !== \"#000000\") {\n text_style.color = text_color;\n }\n\n var text_node = $(\"\").css(text_style).html(_text);\n\n this.title.empty().append(text_node);\n\n var _strokeWidth = this._getStrokeWidth();\n this.title.css({\n left: this.paper_coords.x,\n top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance + 0.5*_strokeWidth,\n opacity: opacity\n });\n var _color = (this.model.has(\"style\") && this.model.get(\"style\").color) || (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null;\n this.circle.strokeWidth = _strokeWidth;\n this.circle.strokeColor = _color;\n this.circle.dashArray = _dash;\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n var lastImage = this.img;\n this.img = this.model.get(\"image\");\n if (this.img && this.img !== lastImage) {\n this.showImage();\n if(this.circle) {\n this.circle.sendToBack();\n }\n }\n if (this.node_image && !this.img) {\n this.node_image.remove();\n delete this.node_image;\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.fillColor = _color;\n var minipos = this.renderer.toMinimapCoords(_model_coords),\n miniradius = this.renderer.minimap.scale * _baseRadius,\n minisize = new paper.Size([miniradius, miniradius]);\n this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));\n }\n\n if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.redraw();\n }\n }\n );\n }\n if (this.ghost){\n this.show(true);\n } else {\n if (this.hidden) { this.hide(); }\n }\n },\n showImage: function() {\n var _image = null;\n if (typeof this.renderer.image_cache[this.img] === \"undefined\") {\n _image = new Image();\n this.renderer.image_cache[this.img] = _image;\n _image.src = this.img;\n } else {\n _image = this.renderer.image_cache[this.img];\n }\n var _this = this;\n if (_image.width) {\n\n if (this.node_image) {\n this.node_image.remove();\n }\n this.renderer.node_layer.activate();\n var width = _image.width,\n height = _image.height,\n clipPath = this.model.get(\"clip_path\"),\n hasClipPath = (typeof clipPath !== \"undefined\" && clipPath),\n _clip = null,\n baseRadius = null,\n centerPoint = null;\n\n if (hasClipPath) {\n _clip = new paper.Path();\n var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],\n lastCoords = [0,0],\n minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n var transformCoords = function(tabc, relative) {\n var newCoords = tabc.slice(1).map(function(v, k) {\n var res = parseFloat(v),\n isY = k % 2;\n if (isY) {\n res = ( res - 0.5 ) * height;\n } else {\n res = ( res - 0.5 ) * width;\n }\n if (relative) {\n res += lastCoords[isY];\n }\n if (isY) {\n minY = Math.min(minY, res);\n maxY = Math.max(maxY, res);\n } else {\n minX = Math.min(minX, res);\n maxX = Math.max(maxX, res);\n }\n return res;\n });\n lastCoords = newCoords.slice(-2);\n return newCoords;\n };\n\n instructions.forEach(function(instr) {\n var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [\"\"];\n switch(coords[0]) {\n case \"M\":\n _clip.moveTo(transformCoords(coords));\n break;\n case \"m\":\n _clip.moveTo(transformCoords(coords, true));\n break;\n case \"L\":\n _clip.lineTo(transformCoords(coords));\n break;\n case \"l\":\n _clip.lineTo(transformCoords(coords, true));\n break;\n case \"C\":\n _clip.cubicCurveTo(transformCoords(coords));\n break;\n case \"c\":\n _clip.cubicCurveTo(transformCoords(coords, true));\n break;\n case \"Q\":\n _clip.quadraticCurveTo(transformCoords(coords));\n break;\n case \"q\":\n _clip.quadraticCurveTo(transformCoords(coords, true));\n break;\n }\n });\n\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](maxX - minX, maxY - minY) / 2;\n centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);\n if (!this.options.show_node_circles) {\n this.h_ratio = (maxY - minY) / (2 * baseRadius);\n }\n } else {\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](width, height) / 2;\n centerPoint = new paper.Point(0,0);\n if (!this.options.show_node_circles) {\n this.h_ratio = height / (2 * baseRadius);\n }\n }\n var _raster = new paper.Raster(_image);\n _raster.locked = true; // Disable mouse events on icon\n if (hasClipPath) {\n _raster = new paper.Group(_clip, _raster);\n _raster.opacity = 0.99;\n /* This is a workaround to allow clipping at group level\n * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).\n */\n _raster.clipped = true;\n _clip.__representation = this;\n }\n if (this.options.clip_node_images) {\n var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);\n _raster = new paper.Group(_circleClip, _raster);\n _raster.opacity = 0.99;\n _raster.clipped = true;\n _circleClip.__representation = this;\n }\n this.image_delta = centerPoint.divide(baseRadius);\n this.node_image = _raster;\n this.node_image.__representation = _this;\n this.node_image.scale(this.circle_radius / baseRadius);\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n this.node_image.insertAbove(this.circle);\n } else {\n $(_image).on(\"load\", function() {\n _this.showImage();\n });\n }\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.renkan.read_only) {\n this.is_dragging = true;\n this.paper_coords = this.paper_coords.add(_delta);\n this.redraw();\n }\n } else {\n this.renderer.view.paperShift(_delta);\n }\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"NodeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n clearTimeout(this.hide_timeout);\n this.selected = true;\n this.circle.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable() && !this.hidden) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n var _uri = this.model.get(\"uri\");\n if (_uri) {\n $('.Rk-Bin-Item').each(function() {\n var _el = $(this);\n if (_el.attr(\"data-uri\") === _uri) {\n _el.addClass(\"selected\");\n }\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;\n this.minimap_circle.strokeColor = this.options.minimap_highlight_color;\n }\n //if the node is hidden and the mouse hover it, it appears as a ghost\n if (this.hidden) {\n this.show(true);\n }\n else {\n this.showNeighbors(true);\n }\n this._super(\"select\");\n },\n hideButtons: function() {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n delete(this.buttonTimeout);\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n var _this = this;\n this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);\n this.circle.strokeWidth = this._getStrokeWidth();\n $('.Rk-Bin-Item').removeClass(\"selected\");\n if (this.renderer.minimap) {\n this.minimap_circle.strokeColor = undefined;\n }\n //when the mouse don't hover the node anymore, we hide it\n if (this.hidden) {\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.hide();\n }\n else {\n this.hideNeighbors(true);\n }\n this._super(\"unselect\");\n }\n },\n hide_delay: function(){\n var _this = this;\n this.hide_timeout = setTimeout(function(){\n _this.hide();\n }, 1000);\n },\n hide: function(){\n var _this = this;\n this.ghost = false;\n this.hidden = true;\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = 0;\n }\n this.hideButtons();\n this.circle.opacity = 0;\n this.title.css('opacity', 0);\n this.minimap_circle.opacity = 0;\n\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.hide();\n }\n }\n );\n this.hideNeighbors(false);\n },\n show: function(ghost){\n var _this = this;\n this.ghost = ghost;\n if (this.ghost){\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = this.options.ghost_opacity;\n }\n this.circle.opacity = this.options.ghost_opacity;\n this.title.css('opacity', this.options.ghost_opacity);\n this.minimap_circle.opacity = this.options.ghost_opacity;\n } else {\n this.minimap_circle.opacity = 1;\n this.hidden = false;\n this.redraw();\n }\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.show(_this.ghost);\n }\n }\n );\n },\n hideNeighbors: function(delay){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.ghost) {\n if (delay){ repr.hide_delay(); } else {repr.hide(); }\n }\n }\n );\n },\n showNeighbors: function(ghost){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.hidden) {\n repr.show(ghost);\n if (!ghost){\n var indexNode = _this.renderer.view.hiddenNodes.indexOf(repr.model.id);\n if (indexNode !== -1){\n _this.renderer.view.hiddenNodes.splice(indexNode, 1);\n }\n }\n }\n }\n );\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n saveCoords: function() {\n var _coords = this.renderer.toModelCoords(this.paper_coords),\n _data = {\n position: {\n x: _coords.x,\n y: _coords.y\n }\n };\n if (this.renderer.isEditable()) {\n this.model.set(_data);\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (this.renderer.is_dragging && this.renderer.isEditable()) {\n this.saveCoords();\n } else {\n if (this.hidden) {\n var index = this.renderer.view.hiddenNodes.indexOf(this.model.id);\n if (index !== -1){\n this.renderer.view.hiddenNodes.splice(index, 1);\n }\n this.show(false);\n this.select();\n } else {\n if (!_isTouch && !this.model.get(\"delete_scheduled\")) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.is_dragging = false;\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n this.circle.remove();\n this.title.remove();\n if (this.renderer.minimap) {\n this.minimap_circle.remove();\n }\n if (this.node_image) {\n this.node_image.remove();\n }\n }\n }).value();\n\n return NodeRepr;\n\n});\n\n\ndefine('renderer/edge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Edge Class Begin */\n\n //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);\n var Edge = Utils.inherit(BaseRepresentation);\n\n _(Edge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Edge\";\n this.hidden = false;\n this.ghost = false;\n this.highlighted = false;\n this.from_representation = this.renderer.getRepresentationByModel(this.model.get(\"from\"));\n this.to_representation = this.renderer.getRepresentationByModel(this.model.get(\"to\"));\n this.bundle = this.renderer.addToBundles(this);\n this.line = new paper.Path();\n this.line.add([0,0],[0,0],[0,0]);\n this.line.__representation = this;\n this.line.strokeWidth = this.options.edge_stroke_width;\n this.arrow_scale = 1;\n this.arrow = new paper.Path();\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);\n this.arrow.__representation = this;\n this.text = $('
                                                    ').appendTo(this.renderer.labels_$);\n this.arrow_angle = 0;\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.EdgeEditButton(this.renderer, null),\n new Renderer.EdgeRemoveButton(this.renderer, null)\n ];\n this.pending_delete_buttons = [\n new Renderer.EdgeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n\n if (this.renderer.minimap) {\n this.renderer.minimap.edge_layer.activate();\n this.minimap_line = new paper.Path();\n this.minimap_line.add([0,0],[0,0]);\n this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;\n this.minimap_line.strokeWidth = 1;\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getArrowScale: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);\n },\n redraw: function() {\n var from = this.model.get(\"from\"),\n to = this.model.get(\"to\");\n if (!from || !to || (this.hidden && !this.ghost)) {\n return;\n }\n this.from_representation = this.renderer.getRepresentationByModel(from);\n this.to_representation = this.renderer.getRepresentationByModel(to);\n if (typeof this.from_representation === \"undefined\" || typeof this.to_representation === \"undefined\" ||\n (this.from_representation.hidden && !this.from_representation.ghost) ||\n (this.to_representation.hidden && !this.to_representation.ghost)) {\n this.hide();\n return;\n }\n var _strokeWidth = this._getStrokeWidth(),\n _arrow_scale = this._getArrowScale(),\n _p0a = this.from_representation.paper_coords,\n _p1a = this.to_representation.paper_coords,\n _v = _p1a.subtract(_p0a),\n _r = _v.length,\n _u = _v.divide(_r),\n _ortho = new paper.Point([- _u.y, _u.x]),\n _group_pos = this.bundle.getPosition(this),\n _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),\n _p0b = _p0a.add(_delta), /* Adding a 4 px difference */\n _p1b = _p1a.add(_delta), /* to differentiate bundled links */\n _a = _v.angle,\n _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),\n _handle = _v.divide(3),\n _color = (this.highlighted && this.options.highlighted_edge_color) ||\n (this.model.has(\"style\") && this.model.get(\"style\").color) ||\n (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null,\n _opacity;\n\n if (this.model.get(\"delete_scheduled\") || this.from_representation.model.get(\"delete_scheduled\") || this.to_representation.model.get(\"delete_scheduled\")) {\n _opacity = 0.5;\n this.line.dashArray = [2, 2];\n } else {\n _opacity = this.ghost ? this.options.ghost_opacity : 1;\n this.line.dashArray = null;\n }\n\n var old_act_btn = this.active_buttons;\n\n this.arrow.visible =\n (this.model.has(\"style\") && this.model.get(\"style\").arrow) ||\n !this.model.has(\"style\") ||\n typeof this.model.get(\"style\").arrow === 'undefined';\n\n this.active_buttons = this.model.get(\"delete_scheduled\") ? this.pending_delete_buttons : this.normal_buttons;\n\n if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n this.paper_coords = _p0b.add(_p1b).divide(2);\n this.line.strokeWidth = _strokeWidth;\n this.line.strokeColor = _color;\n this.line.dashArray = _dash;\n this.line.opacity = _opacity;\n this.line.segments[0].point = _p0a;\n this.line.segments[1].point = this.paper_coords;\n this.line.segments[1].handleIn = _handle.multiply(-1);\n this.line.segments[1].handleOut = _handle;\n this.line.segments[2].point = _p1a;\n this.arrow.scale(_arrow_scale / this.arrow_scale);\n this.arrow_scale = _arrow_scale;\n this.arrow.fillColor = _color;\n this.arrow.opacity = _opacity;\n this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);\n this.arrow.position = this.paper_coords;\n\n this.arrow_angle = _a;\n if (_a > 90) {\n _a -= 180;\n _textdelta = _textdelta.multiply(-1);\n }\n if (_a < -90) {\n _a += 180;\n _textdelta = _textdelta.multiply(-1);\n }\n var _text = this.model.get(\"title\") || this.renkan.translate(this.options.label_untitled_edges) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n if (typeof this.highlighted === \"object\") {\n this.text.html(this.highlighted.replace(_(_text).escape(),'$1'));\n } else {\n this.text.text(_text);\n }\n var _textpos = this.paper_coords.add(_textdelta);\n this.text.css({\n left: _textpos.x,\n top: _textpos.y,\n transform: \"rotate(\" + _a + \"deg)\",\n \"-moz-transform\": \"rotate(\" + _a + \"deg)\",\n \"-webkit-transform\": \"rotate(\" + _a + \"deg)\",\n opacity: _opacity\n });\n this.text_angle = _a;\n\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n\n if (this.renderer.minimap) {\n this.minimap_line.strokeColor = _color;\n this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get(\"position\")));\n this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get(\"position\")));\n }\n },\n hide: function(){\n this.hidden = true;\n this.ghost = false;\n\n this.text.hide();\n this.line.visible = false;\n this.arrow.visible = false;\n this.minimap_line.visible = false;\n },\n show: function(ghost){\n this.ghost = ghost;\n if (this.ghost) {\n this.text.css('opacity', 0.3);\n this.line.opacity = 0.3;\n this.arrow.opacity = 0.3;\n this.minimap_line.opacity = 0.3;\n } else {\n this.hidden = false;\n\n this.text.css('opacity', 1);\n this.line.opacity = 1;\n this.arrow.opacity = 1;\n this.minimap_line.opacity = 1;\n }\n this.text.show();\n this.line.visible = true;\n this.arrow.visible = true;\n this.minimap_line.visible = true;\n this.redraw();\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"EdgeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n this.selected = true;\n this.line.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable()) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n this._super(\"select\");\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n if (this.options.editor_mode) {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n }\n if (this.hidden){\n this.renderer.removeRepresentationsOfType(\"editor\");\n }\n this.line.strokeWidth = this._getStrokeWidth();\n this._super(\"unselect\");\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (!this.renkan.read_only && this.renderer.is_dragging) {\n this.from_representation.saveCoords();\n this.to_representation.saveCoords();\n this.from_representation.is_dragging = false;\n this.to_representation.is_dragging = false;\n } else {\n if (!_isTouch) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.options.read_only) {\n this.from_representation.paperShift(_delta);\n this.to_representation.paperShift(_delta);\n }\n } else {\n this.renderer.paperShift(_delta);\n }\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n destroy: function() {\n this._super(\"destroy\");\n this.line.remove();\n this.arrow.remove();\n this.text.remove();\n if (this.renderer.minimap) {\n this.minimap_line.remove();\n }\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n var _this = this;\n this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {\n return _this === _edge;\n });\n }\n }).value();\n\n return Edge;\n\n});\n\n\n\ndefine('renderer/tempedge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* TempEdge Class Begin */\n\n //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);\n var TempEdge = Utils.inherit(BaseRepresentation);\n\n _(TempEdge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Temp-edge\";\n this.origin = Utils.OriginEnum.NONE;\n\n var _color = (this.project.get(\"users\").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\");\n this.line = new paper.Path();\n this.line.strokeColor = _color;\n this.line.dashArray = [4, 2];\n this.line.strokeWidth = this.options.selected_edge_stroke_width;\n this.line.add([0,0],[0,0]);\n this.line.__representation = this;\n this.arrow = new paper.Path();\n this.arrow.fillColor = _color;\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.__representation = this;\n this.arrow_angle = 0;\n },\n redraw: function() {\n var _p0 = this.from_representation.paper_coords,\n _p1 = this.end_pos,\n _a = _p1.subtract(_p0).angle,\n _c = _p0.add(_p1).divide(2);\n this.line.segments[0].point = _p0;\n this.line.segments[1].point = _p1;\n this.arrow.rotate(_a - this.arrow_angle);\n this.arrow.position = _c;\n this.arrow_angle = _a;\n },\n paperShift: function(_delta) {\n if (!this.renderer.isEditable()) {\n this.renderer.removeRepresentation(_this);\n paper.view.draw();\n return;\n }\n this.end_pos = this.end_pos.add(_delta);\n var _hitResult = paper.project.hitTest(this.end_pos);\n this.renderer.findTarget(_hitResult);\n this.redraw();\n },\n mouseup: function(_event, _isTouch) {\n var _hitResult = paper.project.hitTest(_event.point),\n _model = this.from_representation.model,\n _endDrag = true;\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _target = _hitResult.item.__representation;\n if (_target.type.substr(0,4) === \"Node\") {\n var _destmodel = _target.model || _target.source_representation.model;\n if (_model !== _destmodel) {\n var _data = {\n id: Utils.getUID('edge'),\n created_by: this.renkan.current_user,\n from: _model,\n to: _destmodel,\n origin: this.origin\n };\n if (this.renderer.isEditable()) {\n this.project.addEdge(_data);\n }\n }\n }\n\n if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {\n _endDrag = false;\n this.renderer.is_dragging = true;\n }\n }\n if (_endDrag) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentation(this);\n paper.view.draw();\n }\n },\n destroy: function() {\n this.arrow.remove();\n this.line.remove();\n }\n }).value();\n\n /* TempEdge Class End */\n\n return TempEdge;\n\n});\n\n\ndefine('renderer/baseeditor',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _BaseEditor Begin */\n //var _BaseEditor = Renderer._BaseEditor = Utils.inherit(Renderer._BaseRepresentation);\n var _BaseEditor = Utils.inherit(BaseRepresentation);\n\n _(_BaseEditor.prototype).extend({\n _init: function() {\n this.renderer.buttons_layer.activate();\n this.type = \"editor\";\n this.editor_block = new paper.Path();\n var _pts = _.map(_.range(8), function() {return [0,0];});\n this.editor_block.add.apply(this.editor_block, _pts);\n this.editor_block.strokeWidth = this.options.tooltip_border_width;\n this.editor_block.strokeColor = this.options.tooltip_border_color;\n this.editor_block.opacity = this.options.tooltip_opacity;\n this.editor_$ = $('
                                                    ')\n .appendTo(this.renderer.editor_$)\n .css({\n position: \"absolute\",\n opacity: this.options.tooltip_opacity\n })\n .hide();\n },\n destroy: function() {\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* _BaseEditor End */\n\n return _BaseEditor;\n\n});\n\n\ndefine('renderer/nodeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor', 'renderer/shapebuilder', 'ckeditor-core'], function ($, _, requtils, BaseEditor, ShapeBuilder, CKEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditor Begin */\n //var NodeEditor = Renderer.NodeEditor = Utils.inherit(Renderer._BaseEditor);\n var NodeEditor = Utils.inherit(BaseEditor);\n\n _(NodeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/nodeeditor.html'];\n //fusionner avec this.options.node_editor_templates\n this.readOnlyTemplate = this.options.node_editor_templates;\n },\n draw: function() {\n var _model = this.source_representation.model,\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate[_model.get(\"type\")] || this.readOnlyTemplate[\"default\"]),\n _image_placeholder = this.options.static_url + \"img/image-placeholder.png\",\n _size = (_model.get(\"size\") || 0);\n this.editor_$\n .html(_template({\n node: {\n _id: _model.get(\"_id\"),\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n type: _model.get(\"type\") || \"default\",\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n image: _model.get(\"image\") || \"\",\n image_placeholder: _image_placeholder,\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n title_size: (_model.has(\"style\") && _model.get(\"style\").title_size) || 1,\n title_color: (_model.has(\"style\") && _model.get(\"style\").title_color) || this.options.node_title_color,\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n clip_path: _model.get(\"clip_path\") || false,\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\"),\n size: (_size > 0 ? \"+\" : \"\") + _size,\n shape: _model.get(\"shape\") || \"circle\"\n },\n renkan: this.renkan,\n options: this.options,\n shortenText: Utils.shortenText,\n shapes : _(ShapeBuilder.builders).omit('svg').keys().value(),\n types : _(this.options.node_editor_templates).keys().value(),\n }));\n this.redraw();\n var _this = this,\n editorInstance = (this.renderer.isEditable() && _this.options.show_node_editor_description_richtext) ?\n CKEditor.inline(\"Rk-Edit-Description-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n editorInstanceTitle = (this.renderer.isEditable() && _this.options.show_node_editor_title_richtext) ?\n CKEditor.inline(\"Rk-Edit-Title-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n paper.view.draw();\n };\n\n _this.cleanEditor = function() {\n _this.editor_$.off(\"keyup\");\n _this.editor_$.find(\"input, textarea, select\").off(\"change keyup paste\");\n _this.editor_$.find(\".Rk-Edit-Image-File\").off('change');\n _this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").off('hover');\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n _this.editor_$.find(\".Rk-Edit-Image-Del\").off('click');\n _this.editor_$.find(\".Rk-Edit-ColorPicker\").find(\"li\").off('hover click');\n _this.editor_$.find(\".Rk-CloseX\").off('click');\n _this.editor_$.find(\".Rk-Edit-Goto\").off('click');\n\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance) {\n editorInstance.focusManager.blur(true);\n editorInstance.destroy();\n }\n }\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle) {\n editorInstanceTitle.focusManager.blur(true);\n editorInstanceTitle.destroy();\n }\n }\n };\n\n this.editor_$.find(\".Rk-CloseX\").click(function (e) {\n e.preventDefault();\n closeEditor();\n });\n\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {};\n if (_this.options.show_node_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n }\n if (_this.options.show_node_editor_image) {\n _data.image = _this.editor_$.find(\".Rk-Edit-Image\").val();\n _this.editor_$.find(\".Rk-Edit-ImgPreview\").attr(\"src\", _data.image || _image_placeholder);\n }\n if (_this.options.show_node_editor_description) {\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance &&\n editorInstance.checkDirty()) {\n _data.description = editorInstance.getData();\n editorInstance.resetDirty();\n }\n }\n else {\n _data.description = _this.editor_$.find(\".Rk-Edit-Description\").val();\n }\n }\n if (_this.options.show_node_editor_title) {\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle &&\n editorInstanceTitle.checkDirty()) {\n _data.title = editorInstanceTitle.getData();\n editorInstanceTitle.resetDirty();\n }\n }\n else {\n _data.title = _this.editor_$.find(\".Rk-Edit-Title\").val();\n }\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash});\n }\n if (_this.options.change_shapes) {\n if(_model.get(\"shape\")!==_this.editor_$.find(\".Rk-Edit-Shape\").val()){\n _data.shape = _this.editor_$.find(\".Rk-Edit-Shape\").val();\n }\n }\n if (_this.options.change_types) {\n if(_model.get(\"type\")!==_this.editor_$.find(\".Rk-Edit-Type\").val()){\n _data.type = _this.editor_$.find(\".Rk-Edit-Type\").val();\n }\n }\n _model.set(_data);\n _this.redraw();\n } else {\n closeEditor();\n }\n });\n }, 1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input, textarea, select\").on(\"change keyup paste\", onFieldChange);\n if( _this.options.show_node_editor_description &&\n _this.options.show_node_editor_description_richtext &&\n editorInstance)\n {\n editorInstance.on(\"change\", onFieldChange);\n editorInstance.on(\"blur\", onFieldChange);\n }\n\n if( _this.options.show_node_editor_title &&\n _this.options.show_node_editor_title_richtext &&\n editorInstanceTitle)\n {\n editorInstanceTitle.on(\"change\", onFieldChange);\n editorInstanceTitle.on(\"blur\", onFieldChange);\n }\n\n if(_this.options.allow_image_upload) {\n this.editor_$.find(\".Rk-Edit-Image-File\").change(function() {\n if (this.files.length) {\n var f = this.files[0],\n fr = new FileReader();\n if (f.type.substr(0,5) !== \"image\") {\n alert(_this.renkan.translate(\"This file is not an image\"));\n return;\n }\n if (f.size > (_this.options.uploaded_image_max_kb * 1024)) {\n alert(_this.renkan.translate(\"Image size must be under \") + _this.options.uploaded_image_max_kb + _this.renkan.translate(\"KB\"));\n return;\n }\n fr.onload = function(e) {\n _this.editor_$.find(\".Rk-Edit-Image\").val(e.target.result);\n onFieldChange();\n };\n fr.readAsDataURL(f);\n }\n });\n }\n this.editor_$.find(\".Rk-Edit-Title\")[0].focus();\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Node\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color) || (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n var shiftSize = function(n) {\n if (_this.renderer.isEditable()) {\n var _newsize = n+(_model.get(\"size\") || 0);\n _this.editor_$.find(\"#Rk-Edit-Size-Value\").text((_newsize > 0 ? \"+\" : \"\") + _newsize);\n _model.set(\"size\", _newsize);\n paper.view.draw();\n } else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Size-Down\").click(function() {\n shiftSize(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Size-Up\").click(function() {\n shiftSize(1);\n return false;\n });\n\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n\n var shiftTitleSize = function(n) {\n var min = _this.options.node_title_size_min;\n var max = _this.options.node_title_size_max;\n if (_this.renderer.isEditable()) {\n var _oldTitleSize = ((_model.has('style') && _model.get('style').title_size) || 1),\n _newTitleSize = n + _oldTitleSize;\n if(_newTitleSize < min ) {\n _newTitleSize = min;\n }\n else if (_newTitleSize > max) {\n _newTitleSize = max;\n }\n if (_newTitleSize !== _oldTitleSize) {\n _this.editor_$.find(\"#Rk-Edit-Title-Size-Value\").text(_newTitleSize.toFixed(1));\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_size: _newTitleSize}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n\n var _pickerTitle = _this.editor_$.find(\".Rk-Editor-ColorPicker-Title\");\n\n this.editor_$.find(\".Rk-Editor-p-title-color\").hover(\n function(_e) {\n _e.preventDefault();\n _pickerTitle.show();\n },\n function(_e) {\n _e.preventDefault();\n _pickerTitle.hide();\n }\n );\n\n _pickerTitle.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n var title_color = (_model.has(\"style\") && _model.get(\"style\").title_color) || _this.options.node_fill_color;\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", title_color);\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_color: $(this).attr(\"data-color\")}));\n _pickerTitle.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n\n this.editor_$.find(\"#Rk-Edit-Title-Size-Down\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(-step);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Title-Size-Up\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(step);\n return false;\n });\n\n this.editor_$.find(\".Rk-Edit-Image-Del\").click(function() {\n _this.editor_$.find(\".Rk-Edit-Image\").val('');\n onFieldChange();\n return false;\n });\n } else {\n if (typeof this.source_representation.highlighted === \"object\") {\n var titlehtml = this.source_representation.highlighted.replace(_(_model.get(\"title\")).escape(),'$1');\n this.editor_$.find(\".Rk-Display-Title\" + (_model.get(\"uri\") ? \" a\" : \"\")).html(titlehtml);\n if (this.options.show_node_tooltip_description) {\n this.editor_$.find(\".Rk-Display-Description\").html(this.source_representation.highlighted.replace(_(_model.get(\"description\")).escape(),'$1'));\n }\n }\n }\n this.editor_$.find(\"img\").load(function() {\n _this.redraw();\n });\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, this.source_representation.circle_radius * 0.75, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n },\n destroy: function() {\n if(typeof this.cleanEditor !== 'undefined') {\n this.cleanEditor();\n }\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* NodeEditor End */\n\n return NodeEditor;\n\n});\n\n\ndefine('renderer/edgeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor'], function ($, _, requtils, BaseEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditor Begin */\n\n //var EdgeEditor = Renderer.EdgeEditor = Utils.inherit(Renderer._BaseEditor);\n var EdgeEditor = Utils.inherit(BaseEditor);\n\n _(EdgeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/edgeeditor.html'];\n this.readOnlyTemplate = this.options.templates['templates/edgeeditor_readonly.html'];\n },\n draw: function() {\n var _model = this.source_representation.model,\n _from_model = _model.get(\"from\"),\n _to_model = _model.get(\"to\"),\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate);\n this.editor_$\n .html(_template({\n edge: {\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n arrow: (_model.has(\"style\") && _model.get(\"style\").arrow) || !_model.has(\"style\") || (typeof _model.get(\"style\").arrow === 'undefined') ? \"checked\" : \"\",\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n from_title: _from_model.get(\"title\"),\n to_title: _to_model.get(\"title\"),\n from_color: (_from_model.has(\"style\") && _from_model.get(\"style\").color) || (_from_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n to_color: (_to_model.has(\"style\") && _to_model.get(\"style\").color) || (_to_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\")\n },\n renkan: this.renkan,\n shortenText: Utils.shortenText,\n options: this.options\n }));\n this.redraw();\n var _this = this,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n paper.view.draw();\n };\n this.editor_$.find(\".Rk-CloseX\").click(closeEditor);\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {\n title: _this.editor_$.find(\".Rk-Edit-Title\").val()\n };\n if (_this.options.show_edge_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked'),\n arrow = _this.editor_$.find(\".Rk-Edit-Arrow\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash, arrow: arrow});\n }\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n _model.set(_data);\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n },1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input\").on(\"keyup change paste\", onFieldChange);\n\n this.editor_$.find(\".Rk-Edit-Vocabulary\").change(function() {\n var e = $(this),\n v = e.val();\n if (v) {\n _this.editor_$.find(\".Rk-Edit-Title\").val(e.find(\":selected\").text());\n _this.editor_$.find(\".Rk-Edit-URI\").val(v);\n onFieldChange();\n }\n });\n this.editor_$.find(\".Rk-Edit-Direction\").click(function() {\n if (_this.renderer.isEditable()) {\n _model.set({\n from: _model.get(\"to\"),\n to: _model.get(\"from\")\n });\n _this.draw();\n } else {\n closeEditor();\n }\n });\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Edge\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color)|| (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n }\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, 5, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n }\n }).value();\n\n /* EdgeEditor End */\n\n return EdgeEditor;\n\n});\n\n\ndefine('renderer/nodebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _NodeButton Begin */\n\n //var _NodeButton = Renderer._NodeButton = Utils.inherit(Renderer._BaseButton);\n var _NodeButton = Utils.inherit(BaseButton);\n\n _(_NodeButton.prototype).extend({\n setSectorSize: function() {\n var sectorInner = this.source_representation.circle_radius;\n if (sectorInner !== this.lastSectorInner) {\n if (this.sector) {\n this.sector.destroy();\n }\n this.sector = this.renderer.drawSector(\n this, 1 + sectorInner,\n Utils._NODE_BUTTON_WIDTH + sectorInner,\n this.startAngle,\n this.endAngle,\n 1,\n this.imageName,\n this.renkan.translate(this.text)\n );\n this.lastSectorInner = sectorInner;\n }\n },\n unselect: function() {\n BaseButton.prototype.unselect.apply(this, Array.prototype.slice.call(arguments, 1));\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n this.source_representation.hideButtons();\n }\n },\n select: function() {\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n }\n this.sector.select();\n },\n }).value();\n\n\n /* _NodeButton End */\n\n return _NodeButton;\n\n});\n\n\ndefine('renderer/nodeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditButton Begin */\n\n //var NodeEditButton = Renderer.NodeEditButton = Utils.inherit(Renderer._NodeButton);\n var NodeEditButton = Utils.inherit(NodeButton);\n\n _(NodeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Node-edit-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -125 : -135;\n this.endAngle = this.options.hide_nodes ? -55 : -45;\n this.imageName = \"edit\";\n this.text = \"Edit\";\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* NodeEditButton End */\n\n return NodeEditButton;\n\n});\n\n\ndefine('renderer/noderemovebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeRemoveButton = Utils.inherit(NodeButton);\n\n _(NodeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Node-remove-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -10 : 0;\n this.endAngle = this.options.hide_nodes ? 45 : 90;\n this.imageName = \"remove\";\n this.text = \"Remove\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove node ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeNode(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeRemoveButton;\n\n});\n\n\ndefine('renderer/nodehidebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeHideButton = Utils.inherit(NodeButton);\n\n _(NodeHideButton.prototype).extend({\n _init: function() {\n this.type = \"Node-hide-button\";\n this.lastSectorInner = 0;\n this.startAngle = 45;\n this.endAngle = 90;\n this.imageName = \"hide\";\n this.text = \"Hide\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.renderer.view.addHiddenNode(this.source_representation.model);\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeHideButton;\n\n});\n\n\ndefine('renderer/nodeshowbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeShowButton = Utils.inherit(NodeButton);\n\n _(NodeShowButton.prototype).extend({\n _init: function() {\n this.type = \"Node-show-button\";\n this.lastSectorInner = 0;\n this.startAngle = 90;\n this.endAngle = 135;\n this.imageName = \"show\";\n this.text = \"Show neighbors\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.source_representation.showNeighbors(false);\n }\n }\n }).value();\n\n /* NodeShowButton End */\n\n return NodeShowButton;\n\n});\n\n\ndefine('renderer/noderevertbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRevertButton Begin */\n\n //var NodeRevertButton = Renderer.NodeRevertButton = Utils.inherit(Renderer._NodeButton);\n var NodeRevertButton = Utils.inherit(NodeButton);\n\n _(NodeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Node-revert-button\";\n this.lastSectorInner = 0;\n this.startAngle = -135;\n this.endAngle = 135;\n this.imageName = \"revert\";\n this.text = \"Cancel deletion\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* NodeRevertButton End */\n\n return NodeRevertButton;\n\n});\n\n\ndefine('renderer/nodelinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeLinkButton Begin */\n\n //var NodeLinkButton = Renderer.NodeLinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeLinkButton = Utils.inherit(NodeButton);\n\n _(NodeLinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-link-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? 135 : 90;\n this.endAngle = this.options.hide_nodes ? 190 : 180;\n this.imageName = \"link\";\n this.text = \"Link to another node\";\n },\n mousedown: function(_event, _isTouch) {\n if (this.renderer.isEditable()) {\n var _off = this.renderer.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.renderer.click_target = null;\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.renderer.addTempEdge(this.source_representation, _point, Utils.OriginEnum.EDGE_BUTTON_CIRCLE);\n }\n }\n }).value();\n\n /* NodeLinkButton End */\n\n return NodeLinkButton;\n\n});\n\n\n\ndefine('renderer/nodeenlargebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEnlargeButton Begin */\n\n //var NodeEnlargeButton = Renderer.NodeEnlargeButton = Utils.inherit(Renderer._NodeButton);\n var NodeEnlargeButton = Utils.inherit(NodeButton);\n\n _(NodeEnlargeButton.prototype).extend({\n _init: function() {\n this.type = \"Node-enlarge-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -55 : -45;\n this.endAngle = this.options.hide_nodes ? -10 : 0;\n this.imageName = \"enlarge\";\n this.text = \"Enlarge\";\n },\n mouseup: function() {\n var _newsize = 1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeEnlargeButton End */\n\n return NodeEnlargeButton;\n\n});\n\n\ndefine('renderer/nodeshrinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeShrinkButton Begin */\n\n //var NodeShrinkButton = Renderer.NodeShrinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeShrinkButton = Utils.inherit(NodeButton);\n\n _(NodeShrinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-shrink-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -170 : -180;\n this.endAngle = this.options.hide_nodes ? -125 : -135;\n this.imageName = \"shrink\";\n this.text = \"Shrink\";\n },\n mouseup: function() {\n var _newsize = -1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeShrinkButton End */\n\n return NodeShrinkButton;\n\n});\n\n\ndefine('renderer/edgeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditButton Begin */\n\n //var EdgeEditButton = Renderer.EdgeEditButton = Utils.inherit(Renderer._BaseButton);\n var EdgeEditButton = Utils.inherit(BaseButton);\n\n _(EdgeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-edit-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -270, -90, 1, \"edit\", this.renkan.translate(\"Edit\"));\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* EdgeEditButton End */\n\n return EdgeEditButton;\n\n});\n\n\ndefine('renderer/edgeremovebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRemoveButton Begin */\n\n //var EdgeRemoveButton = Renderer.EdgeRemoveButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRemoveButton = Utils.inherit(BaseButton);\n\n _(EdgeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-remove-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -90, 90, 1, \"remove\", this.renkan.translate(\"Remove\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove edge ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeEdge(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* EdgeRemoveButton End */\n\n return EdgeRemoveButton;\n\n});\n\n\ndefine('renderer/edgerevertbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRevertButton Begin */\n\n //var EdgeRevertButton = Renderer.EdgeRevertButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRevertButton = Utils.inherit(BaseButton);\n\n _(EdgeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-revert-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -135, 135, 1, \"revert\", this.renkan.translate(\"Cancel deletion\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* EdgeRevertButton End */\n\n return EdgeRevertButton;\n\n});\n\n\ndefine('renderer/miniframe',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* MiniFrame Begin */\n\n //var MiniFrame = Renderer.MiniFrame = Utils.inherit(Renderer._BaseRepresentation);\n var MiniFrame = Utils.inherit(BaseRepresentation);\n\n _(MiniFrame.prototype).extend({\n paperShift: function(_delta) {\n this.renderer.offset = this.renderer.offset.subtract(_delta.divide(this.renderer.minimap.scale).multiply(this.renderer.scale));\n this.renderer.redraw();\n },\n mouseup: function(_delta) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n }\n }).value();\n\n\n /* MiniFrame End */\n\n return MiniFrame;\n\n});\n\n\ndefine('renderer/scene',['jquery', 'underscore', 'filesaver', 'requtils', 'renderer/miniframe', 'screenfull'], function ($, _, filesaver, requtils, MiniFrame, Screenfull) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Scene Begin */\n\n var Scene = function(_renkan) {\n this.renkan = _renkan;\n this.$ = $(\".Rk-Render\");\n this.representations = [];\n this.$.html(_renkan.options.templates['templates/scene.html'](_renkan));\n this.onStatusChange();\n this.canvas_$ = this.$.find(\".Rk-Canvas\");\n this.labels_$ = this.$.find(\".Rk-Labels\");\n if (!_renkan.options.popup_editor){\n this.editor_$ = $(\"#\" + _renkan.options.editor_panel);\n }else{\n this.editor_$ = this.$.find(\".Rk-Editor\");\n }\n this.notif_$ = this.$.find(\".Rk-Notifications\");\n paper.setup(this.canvas_$[0]);\n this.totalScroll = 0;\n this.mouse_down = false;\n this.click_target = null;\n this.selected_target = null;\n this.edge_layer = new paper.Layer();\n this.node_layer = new paper.Layer();\n this.buttons_layer = new paper.Layer();\n this.delete_list = [];\n this.redrawActive = false;\n\n if (_renkan.options.show_minimap) {\n this.minimap = {\n background_layer: new paper.Layer(),\n edge_layer: new paper.Layer(),\n node_layer: new paper.Layer(),\n node_group: new paper.Group(),\n size: new paper.Size( _renkan.options.minimap_width, _renkan.options.minimap_height )\n };\n\n this.minimap.background_layer.activate();\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle = new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.rectangle.fillColor = _renkan.options.minimap_background_color;\n this.minimap.rectangle.strokeColor = _renkan.options.minimap_border_color;\n this.minimap.rectangle.strokeWidth = 4;\n this.minimap.offset = new paper.Point(this.minimap.size.divide(2));\n this.minimap.scale = 0.1;\n\n this.minimap.node_layer.activate();\n this.minimap.cliprectangle = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.cliprectangle);\n this.minimap.node_group.clipped = true;\n this.minimap.miniframe = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.miniframe);\n this.minimap.miniframe.fillColor = '#c0c0ff';\n this.minimap.miniframe.opacity = 0.3;\n this.minimap.miniframe.strokeColor = '#000080';\n this.minimap.miniframe.strokeWidth = 2;\n this.minimap.miniframe.__representation = new MiniFrame(this, null);\n }\n\n this.throttledPaperDraw = _(function() {\n paper.view.draw();\n }).throttle(100).value();\n\n this.bundles = [];\n this.click_mode = false;\n\n var _this = this,\n _allowScroll = true,\n _originalScale = 1,\n _zooming = false,\n _lastTapX = 0,\n _lastTapY = 0,\n _lastTap = 0;\n\n this.image_cache = {};\n this.icon_cache = {};\n\n ['edit', 'remove', 'hide', 'show', 'link', 'enlarge', 'shrink', 'revert' ].forEach(function(imgname) {\n var img = new Image();\n img.src = _renkan.options.static_url + 'img/' + imgname + '.png';\n _this.icon_cache[imgname] = img;\n });\n\n var throttledMouseMove = _.throttle(function(_event, _isTouch) {\n _this.onMouseMove(_event, _isTouch);\n }, Utils._MOUSEMOVE_RATE);\n\n this.canvas_$.on({\n mousedown: function(_event) {\n _event.preventDefault();\n _this.onMouseDown(_event, false);\n },\n mousemove: function(_event) {\n _event.preventDefault();\n throttledMouseMove(_event, false);\n },\n mouseup: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event, false);\n },\n mousewheel: function(_event, _delta) {\n if(_renkan.options.zoom_on_scroll) {\n _event.preventDefault();\n if (_allowScroll) {\n _this.onScroll(_event, _delta);\n }\n }\n },\n touchstart: function(_event) {\n _event.preventDefault();\n var _touches = _event.originalEvent.touches[0];\n if (\n _renkan.options.allow_double_click &&\n new Date() - _lastTap < Utils._DOUBLETAP_DELAY &&\n ( Math.pow(_lastTapX - _touches.pageX, 2) + Math.pow(_lastTapY - _touches.pageY, 2) < Utils._DOUBLETAP_DISTANCE )\n ) {\n _lastTap = 0;\n _this.onDoubleClick(_touches);\n } else {\n _lastTap = new Date();\n _lastTapX = _touches.pageX;\n _lastTapY = _touches.pageY;\n _originalScale = _this.view.scale;\n _zooming = false;\n _this.onMouseDown(_touches, true);\n }\n },\n touchmove: function(_event) {\n _event.preventDefault();\n _lastTap = 0;\n if (_event.originalEvent.touches.length === 1) {\n _this.onMouseMove(_event.originalEvent.touches[0], true);\n } else {\n if (!_zooming) {\n _this.onMouseUp(_event.originalEvent.touches[0], true);\n _this.click_target = null;\n _this.is_dragging = false;\n _zooming = true;\n }\n if (_event.originalEvent.scale === \"undefined\") {\n return;\n }\n var _newScale = _event.originalEvent.scale * _originalScale,\n _scaleRatio = _newScale / _this.view.scale,\n _newOffset = new paper.Point([\n _this.canvas_$.width(),\n _this.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - _scaleRatio ) ).add(_this.view.offset.multiply( _scaleRatio ));\n _this.view.setScale(_newScale, _newOffset);\n }\n },\n touchend: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event.originalEvent.changedTouches[0], true);\n },\n click: function(_event) {\n _event.preventDefault();\n _this.onClick(_event);\n },\n dblclick: function(_event) {\n _event.preventDefault();\n if (_renkan.options.allow_double_click) {\n _this.onDoubleClick(_event);\n }\n },\n mouseleave: function(_event) {\n _event.preventDefault();\n //_this.onMouseUp(_event, false);\n _this.click_target = null;\n _this.is_dragging = false;\n },\n dragover: function(_event) {\n _event.preventDefault();\n },\n dragenter: function(_event) {\n _event.preventDefault();\n _allowScroll = false;\n },\n dragleave: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n },\n drop: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n var res = {};\n _.each(_event.originalEvent.dataTransfer.types, function(t) {\n try {\n res[t] = _event.originalEvent.dataTransfer.getData(t);\n } catch(e) {}\n });\n var text = _event.originalEvent.dataTransfer.getData(\"Text\");\n if (typeof text === \"string\") {\n switch(text[0]) {\n case \"{\":\n case \"[\":\n try {\n var data = JSON.parse(text);\n _.extend(res,data);\n }\n catch(e) {\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n break;\n case \"<\":\n if (!res[\"text/html\"]) {\n res[\"text/html\"] = text;\n }\n break;\n default:\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n }\n var url = _event.originalEvent.dataTransfer.getData(\"URL\");\n if (url && !res[\"text/uri-list\"]) {\n res[\"text/uri-list\"] = url;\n }\n _this.dropData(res, _event.originalEvent);\n }\n });\n\n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n\n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n this.$.find(\".Rk-CurrentUser\").mouseenter(\n function() { _this.$.find(\".Rk-UserList\").slideDown(); }\n );\n this.$.find(\".Rk-Users\").mouseleave(\n function() { _this.$.find(\".Rk-UserList\").slideUp(); }\n );\n\n if (Screenfull.enabled){\n bindClick(\".Rk-FullScreen-Button\", \"fullScreen\");\n\n document.addEventListener(Screenfull.raw.fullscreenchange, function () {\n //the listener occur too randomly and sometimes before the fullscreen is fully set up\n //so we add 500 delay\n setTimeout(function(){\n var widthAft = _this.$.width();\n var heightAft = _this.$.height();\n\n if (_this.renkan.options.show_top_bar) {\n heightAft -= _this.$.find(\".Rk-TopBar\").height();\n }\n if (_this.renkan.options.show_bins && (this.renkan.$.find(\".Rk-Bins\").position().left > 0)) {\n widthAft -= this.renkan.$.find(\".Rk-Bins\").width();\n }\n\n paper.view.viewSize = new paper.Size([widthAft, heightAft]);\n _this.resize(_this.currentWidth, widthAft, _this.currentHeight, heightAft);\n\n _this.currentWidth = widthAft;\n _this.currentHeight = heightAft;\n\n if (!Screenfull.isFullscreen) {\n paper.view.onResize = function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n };\n }\n }, 600);\n });\n } else {\n this.$.find(\".Rk-FullScreen-Button\").addClass(\"disabled\");\n this.$.find(\".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents\").html(this.renkan.translate(\"Fullscreen not supported by your browser\"));\n }\n\n bindClick(\".Rk-AddNode-Button\", \"addNodeBtn\");\n bindClick(\".Rk-AddEdge-Button\", \"addEdgeBtn\");\n bindClick(\".Rk-Save-Button\", \"save\");\n bindClick(\".Rk-Open-Button\", \"open\");\n bindClick(\".Rk-Export-Button\", \"exportProject\");\n this.$.find(\".Rk-Bookmarklet-Button\")\n /*jshint scripturl:true */\n .attr(\"href\",\"javascript:\" + Utils._BOOKMARKLET_CODE(_renkan))\n .click(function(){\n _this.notif_$\n .text(_renkan.translate(\"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\"))\n .fadeIn()\n .delay(5000)\n .fadeOut();\n return false;\n });\n this.$.find(\".Rk-TopBar-Button\").mouseover(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").show();\n }).mouseout(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").hide();\n });\n bindClick(\".Rk-Fold-Bins\", \"foldBins\");\n\n paper.view.on(\"resize\", function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n });\n\n var _thRedraw = _.throttle(function() {\n _this.redraw();\n },50);\n\n this.addRepresentations(\"Node\", this.renkan.project.get(\"nodes\"));\n this.addRepresentations(\"Edge\", this.renkan.project.get(\"edges\"));\n this.renkan.project.on(\"change:title\", function() {\n _this.$.find(\".Rk-PadTitle\").val(_renkan.project.get(\"title\")).prop('title', _renkan.project.get(\"title\"));\n });\n\n this.$.find(\".Rk-PadTitle\").on(\"keyup input paste\", function() {\n _renkan.project.set({\"title\": $(this).val()});\n });\n\n var _thRedrawUsers = _.throttle(function() {\n _this.redrawUsers();\n }, 100);\n\n _thRedrawUsers();\n\n // register model events\n this.renkan.project.on(\"change:saveStatus\", function(){\n switch (_this.renkan.project.get(\"saveStatus\")) {\n case 0: //clean\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saved\");\n break;\n case 1: //dirty\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"to-save\");\n break;\n case 2: //saving\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saving\");\n break;\n }\n });\n\n this.renkan.project.on(\"loaded\", function(){\n if (_this.renkan.options.url_parameters){\n Backbone.history.start();\n } else {\n _this.fixSize();\n }\n _this.redrawActive = true;\n _thRedraw();\n });\n\n //register router events\n this.renkan.router.on(\"router\", function(_params){\n _this.setViewParameters(_params);\n });\n\n this.renkan.project.on(\"change:loadingStatus\", function(){\n if (_this.renkan.project.get(\"loadingStatus\")){\n var animate = _this.$.find(\".loader\").addClass(\"run\");\n var timer = setTimeout(function(){\n _this.$.find(\".loader\").hide(250);\n }, 3000);\n }\n });\n\n this.renkan.project.on(\"add:users remove:users\", _thRedrawUsers);\n\n this.renkan.project.on(\"add:views remove:views\", function(_node) {\n if(_this.renkan.project.get('views').length > 1) {\n _this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n else {\n _this.$.find(\".Rk-ZoomSetSaved\").hide();\n }\n });\n\n this.renkan.project.on(\"add:nodes\", function(_node) {\n _this.addRepresentation(\"Node\", _node);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"add:edges\", function(_edge) {\n _this.addRepresentation(\"Edge\", _edge);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"change:title\", function(_model, _title) {\n var el = _this.$.find(\".Rk-PadTitle\");\n if (el.is(\"input\")) {\n if (el.val() !== _title) {\n el.val(_title);\n }\n } else {\n el.text(_title);\n }\n });\n\n if (_renkan.options.size_bug_fix) {\n var _delay = (\n typeof _renkan.options.size_bug_fix === \"number\" ?\n _renkan.options.size_bug_fix\n : 500\n );\n window.setTimeout(\n function() {\n _this.fixSize();\n },\n _delay\n );\n }\n\n if (_renkan.options.force_resize) {\n $(window).resize(function() {\n _this.autoScale();\n });\n }\n\n if (_renkan.options.show_user_list && _renkan.options.user_color_editable) {\n var $cpwrapper = this.$.find(\".Rk-Users .Rk-Edit-ColorPicker-Wrapper\"),\n $cplist = this.$.find(\".Rk-Users .Rk-Editor-ColorPicker-User\");\n\n $cpwrapper.hover(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n $cplist.show();\n }\n },\n function(_e) {\n _e.preventDefault();\n $cplist.hide();\n }\n );\n\n $cplist.find(\"li\").mouseenter(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n _this.$.find(\".Rk-CurrentUser-Color\").css(\"background\", $(this).attr(\"data-color\"));\n }\n }\n );\n }\n\n if (_renkan.options.show_search_field) {\n\n var lastval = '';\n\n this.$.find(\".Rk-GraphSearch-Field\").on(\"keyup change paste input\", function() {\n var $this = $(this),\n val = $this.val();\n if (val === lastval) {\n return;\n }\n lastval = val;\n if (val.length < 2) {\n _renkan.project.get(\"nodes\").each(function(n) {\n _this.getRepresentationByModel(n).unhighlight();\n });\n _renkan.project.get(\"edges\").each(function(e) {\n _this.getRepresentationByModel(e).unhighlight();\n });\n } else {\n var rxs = Utils.regexpFromTextOrArray(val);\n _renkan.project.get(\"nodes\").each(function(n) {\n if (n.id === val || rxs.test(n.get(\"title\")) || rxs.test(n.get(\"description\"))) {\n _this.getRepresentationByModel(n).highlight(rxs);\n } else {\n _this.getRepresentationByModel(n).unhighlight();\n }\n });\n _renkan.project.get(\"edges\").each(function(e) {\n if (e.id === val || rxs.test(e.get(\"title\")) || rxs.test(e.get(\"description\"))) {\n _this.getRepresentationByModel(e).highlight(rxs);\n } else {\n _this.getRepresentationByModel(e).unhighlight();\n }\n });\n\n }\n });\n }\n\n this.redraw();\n\n window.setInterval(function() {\n var _now = new Date().valueOf();\n _this.delete_list.forEach(function(d) {\n if (_now >= d.time) {\n var el = _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeNode(el);\n }\n el = _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeEdge(el);\n }\n }\n });\n _this.delete_list = _this.delete_list.filter(function(d) {\n return _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id}) || _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n });\n }, 500);\n\n if (this.minimap) {\n window.setInterval(function() {\n _this.rescaleMinimap();\n }, 2000);\n }\n\n };\n\n _(Scene.prototype).extend({\n fixSize: function() {\n if(typeof this.view === 'undefined') {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").last());\n }\n this.view.autoScale();\n },\n drawSector: function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgname, _caption) {\n var _options = this.renkan.options,\n _startRads = _startAngle * Math.PI / 180,\n _endRads = _endAngle * Math.PI / 180,\n _img = this.icon_cache[_imgname],\n _startdx = - Math.sin(_startRads),\n _startdy = Math.cos(_startRads),\n _startXIn = Math.cos(_startRads) * _inR + _padding * _startdx,\n _startYIn = Math.sin(_startRads) * _inR + _padding * _startdy,\n _startXOut = Math.cos(_startRads) * _outR + _padding * _startdx,\n _startYOut = Math.sin(_startRads) * _outR + _padding * _startdy,\n _enddx = - Math.sin(_endRads),\n _enddy = Math.cos(_endRads),\n _endXIn = Math.cos(_endRads) * _inR - _padding * _enddx,\n _endYIn = Math.sin(_endRads) * _inR - _padding * _enddy,\n _endXOut = Math.cos(_endRads) * _outR - _padding * _enddx,\n _endYOut = Math.sin(_endRads) * _outR - _padding * _enddy,\n _centerR = (_inR + _outR) / 2,\n _centerRads = (_startRads + _endRads) / 2,\n _centerX = Math.cos(_centerRads) * _centerR,\n _centerY = Math.sin(_centerRads) * _centerR,\n _centerXIn = Math.cos(_centerRads) * _inR,\n _centerXOut = Math.cos(_centerRads) * _outR,\n _centerYIn = Math.sin(_centerRads) * _inR,\n _centerYOut = Math.sin(_centerRads) * _outR,\n _textX = Math.cos(_centerRads) * (_outR + 3),\n _textY = Math.sin(_centerRads) * (_outR + _options.buttons_label_font_size) + _options.buttons_label_font_size / 2;\n this.buttons_layer.activate();\n var _path = new paper.Path();\n _path.add([_startXIn, _startYIn]);\n _path.arcTo([_centerXIn, _centerYIn], [_endXIn, _endYIn]);\n _path.lineTo([_endXOut, _endYOut]);\n _path.arcTo([_centerXOut, _centerYOut], [_startXOut, _startYOut]);\n _path.fillColor = _options.buttons_background;\n _path.opacity = 0.5;\n _path.closed = true;\n _path.__representation = _repr;\n var _text = new paper.PointText(_textX,_textY);\n _text.characterStyle = {\n fontSize: _options.buttons_label_font_size,\n fillColor: _options.buttons_label_color\n };\n if (_textX > 2) {\n _text.paragraphStyle.justification = 'left';\n } else if (_textX < -2) {\n _text.paragraphStyle.justification = 'right';\n } else {\n _text.paragraphStyle.justification = 'center';\n }\n _text.visible = false;\n var _visible = false,\n _restPos = new paper.Point(-200, -200),\n _grp = new paper.Group([_path, _text]),\n //_grp = new paper.Group([_path]),\n _delta = _grp.position,\n _imgdelta = new paper.Point([_centerX, _centerY]),\n _currentPos = new paper.Point(0,0);\n _text.content = _caption;\n // set group pivot to not depend on text visibility that changes the group bounding box.\n _grp.pivot = _grp.bounds.center;\n _grp.visible = false;\n _grp.position = _restPos;\n var _res = {\n show: function() {\n _visible = true;\n _grp.position = _currentPos.add(_delta);\n _grp.visible = true;\n },\n moveTo: function(_point) {\n _currentPos = _point;\n if (_visible) {\n _grp.position = _point.add(_delta);\n }\n },\n hide: function() {\n _visible = false;\n _grp.visible = false;\n _grp.position = _restPos;\n },\n select: function() {\n _path.opacity = 0.8;\n _text.visible = true;\n },\n unselect: function() {\n _path.opacity = 0.5;\n _text.visible = false;\n },\n destroy: function() {\n _grp.remove();\n }\n };\n var showImage = function() {\n var _raster = new paper.Raster(_img);\n _raster.position = _imgdelta.add(_grp.position).subtract(_delta);\n _raster.locked = true; // Disable mouse events on icon\n _grp.addChild(_raster);\n };\n if (_img.width) {\n showImage();\n } else {\n $(_img).on(\"load\",showImage);\n }\n\n return _res;\n },\n addToBundles: function(_edgeRepr) {\n var _bundle = _(this.bundles).find(function(_bundle) {\n return (\n ( _bundle.from === _edgeRepr.from_representation && _bundle.to === _edgeRepr.to_representation ) ||\n ( _bundle.from === _edgeRepr.to_representation && _bundle.to === _edgeRepr.from_representation )\n );\n });\n if (typeof _bundle !== \"undefined\") {\n _bundle.edges.push(_edgeRepr);\n } else {\n _bundle = {\n from: _edgeRepr.from_representation,\n to: _edgeRepr.to_representation,\n edges: [ _edgeRepr ],\n getPosition: function(_er) {\n var _dir = (_er.from_representation === this.from) ? 1 : -1;\n return _dir * ( _(this.edges).indexOf(_er) - (this.edges.length - 1) / 2 );\n }\n };\n this.bundles.push(_bundle);\n }\n return _bundle;\n },\n isEditable: function() {\n return (this.renkan.options.editor_mode && !this.renkan.read_only);\n },\n onStatusChange: function() {\n var savebtn = this.$.find(\".Rk-Save-Button\"),\n tip = savebtn.find(\".Rk-TopBar-Tooltip-Contents\");\n if (this.renkan.read_only) {\n savebtn.removeClass(\"disabled Rk-Save-Online\").addClass(\"Rk-Save-ReadOnly\");\n tip.text(this.renkan.translate(\"Connection lost\"));\n } else {\n if (this.renkan.options.manual_save) {\n savebtn.removeClass(\"Rk-Save-ReadOnly Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Save Project\"));\n } else {\n savebtn.removeClass(\"disabled Rk-Save-ReadOnly\").addClass(\"Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Auto-save enabled\"));\n }\n }\n this.redrawUsers();\n },\n redrawMiniframe: function() {\n var topleft = this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),\n bottomright = this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));\n this.minimap.miniframe.fitBounds(topleft, bottomright);\n },\n rescaleMinimap: function() {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min(\n this.view.scale * 0.8 * this.renkan.options.minimap_width / paper.view.bounds.width,\n this.view.scale * 0.8 * this.renkan.options.minimap_height / paper.view.bounds.height,\n ( this.renkan.options.minimap_width - 2 * this.renkan.options.minimap_padding ) / (_maxx - _minx),\n ( this.renkan.options.minimap_height - 2 * this.renkan.options.minimap_padding ) / (_maxy - _miny)\n );\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale));\n this.minimap.scale = _scale;\n }\n if (nodes.length === 1) {\n this.minimap.scale = 0.1;\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y]).multiply(this.minimap.scale));\n }\n this.redraw();\n },\n toPaperCoords: function(_point) {\n return _point.multiply(this.view.scale).add(this.view.offset);\n },\n toMinimapCoords: function(_point) {\n return _point.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft);\n },\n toModelCoords: function(_point) {\n return _point.subtract(this.view.offset).divide(this.view.scale);\n },\n addRepresentation: function(_type, _model) {\n var RendererType = requtils.getRenderer()[_type];\n var _repr = new RendererType(this, _model);\n this.representations.push(_repr);\n return _repr;\n },\n addRepresentations: function(_type, _collection) {\n var _this = this;\n _collection.forEach(function(_model) {\n _this.addRepresentation(_type, _model);\n });\n },\n userTemplate: _.template(\n '
                                                  • ;\"><%=name%>
                                                  • '\n ),\n redrawUsers: function() {\n if (!this.renkan.options.show_user_list) {\n return;\n }\n var allUsers = [].concat((this.renkan.project.current_user_list || {}).models || [], (this.renkan.project.get(\"users\") || {}).models || []),\n ulistHtml = '',\n $userpanel = this.$.find(\".Rk-Users\"),\n $name = $userpanel.find(\".Rk-CurrentUser-Name\"),\n $cpitems = $userpanel.find(\".Rk-Edit-ColorPicker li\"),\n $colorsquare = $userpanel.find(\".Rk-CurrentUser-Color\"),\n _this = this;\n $name.off(\"click\").text(this.renkan.translate(\"\"));\n $cpitems.off(\"mouseleave click\");\n allUsers.forEach(function(_user) {\n if (_user.get(\"_id\") === _this.renkan.current_user) {\n $name.text(_user.get(\"title\"));\n $colorsquare.css(\"background\", _user.get(\"color\"));\n if (_this.isEditable()) {\n\n if (_this.renkan.options.user_name_editable) {\n $name.click(function() {\n var $this = $(this),\n $input = $('').val(_user.get(\"title\")).blur(function() {\n _user.set(\"title\", $(this).val());\n _this.redrawUsers();\n _this.redraw();\n });\n $this.empty().html($input);\n $input.select();\n });\n }\n\n if (_this.renkan.options.user_color_editable) {\n $cpitems.click(\n function(_e) {\n _e.preventDefault();\n if (_this.isEditable()) {\n _user.set(\"color\", $(this).attr(\"data-color\"));\n }\n $(this).parent().hide();\n }\n ).mouseleave(function() {\n $colorsquare.css(\"background\", _user.get(\"color\"));\n });\n }\n }\n\n } else {\n ulistHtml += _this.userTemplate({\n name: _user.get(\"title\"),\n background: _user.get(\"color\")\n });\n }\n });\n $userpanel.find(\".Rk-UserList\").html(ulistHtml);\n },\n removeRepresentation: function(_representation) {\n _representation.destroy();\n this.representations = _.reject(this.representations,\n function(_repr) {\n return _repr === _representation;\n }\n );\n },\n getRepresentationByModel: function(_model) {\n if (!_model) {\n return undefined;\n }\n return _.find(this.representations, function(_repr) {\n return _repr.model === _model;\n });\n },\n removeRepresentationsOfType: function(_type) {\n var _representations = _.filter(this.representations,function(_repr) {\n return _repr.type === _type;\n }),\n _this = this;\n _.each(_representations, function(_repr) {\n _this.removeRepresentation(_repr);\n });\n },\n highlightModel: function(_model) {\n var _repr = this.getRepresentationByModel(_model);\n if (_repr) {\n _repr.highlight();\n }\n },\n unhighlightAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unhighlight();\n });\n },\n unselectAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unselect();\n });\n },\n redraw: function() {\n var _this = this;\n if(! this.redrawActive ) {\n return;\n }\n _.each(this.representations, function(_representation) {\n _representation.redraw({ dontRedrawEdges:true });\n });\n if (this.minimap && typeof this.view !== 'undefined') {\n this.redrawMiniframe();\n }\n paper.view.draw();\n },\n resize: function(prevWidth, newWidth, prevHeight, newHeight){\n var _ratio;\n\n if (this.minimap) {\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.cliprectangle.fitBounds(this.minimap.topleft, this.minimap.size);\n }\n\n var ratioH = newHeight/prevHeight,\n ratioW = newWidth/prevWidth;\n if (newHeight < newWidth) {\n _ratio = ratioH;\n } else {\n _ratio = ratioW;\n }\n this.view.resizeZoom(newWidth - prevWidth, newHeight - prevHeight, _ratio);\n\n this.redraw();\n },\n addTempEdge: function(_from, _point, _origin) {\n var _tmpEdge = this.addRepresentation(\"TempEdge\",null);\n _tmpEdge.end_pos = _point;\n _tmpEdge.from_representation = _from;\n _tmpEdge.origin = _origin;\n _tmpEdge.redraw();\n this.click_target = _tmpEdge;\n },\n findTarget: function(_hitResult) {\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _newTarget = _hitResult.item.__representation;\n if (this.selected_target !== _hitResult.item.__representation) {\n if (this.selected_target) {\n this.selected_target.unselect(_newTarget);\n }\n _newTarget.select(this.selected_target);\n this.selected_target = _newTarget;\n }\n } else {\n if (this.selected_target) {\n this.selected_target.unselect();\n }\n this.selected_target = null;\n }\n },\n onMouseMove: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _delta = _point.subtract(this.last_point);\n this.last_point = _point;\n if (!this.is_dragging && this.mouse_down && _delta.length > Utils._MIN_DRAG_DISTANCE) {\n this.is_dragging = true;\n }\n var _hitResult = paper.project.hitTest(_point);\n if (this.is_dragging) {\n if (this.click_target && typeof this.click_target.paperShift === \"function\") {\n this.click_target.paperShift(_delta);\n } else {\n this.view.paperShift(_delta);\n }\n } else {\n this.findTarget(_hitResult);\n }\n paper.view.draw();\n },\n onMouseDown: function(_event, _isTouch) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.last_point = _point;\n this.mouse_down = true;\n if (!this.click_target || this.click_target.type !== \"Temp-edge\") {\n this.removeRepresentationsOfType(\"editor\");\n this.is_dragging = false;\n var _hitResult = paper.project.hitTest(_point);\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n this.click_target = _hitResult.item.__representation;\n this.click_target.mousedown(_event, _isTouch);\n } else {\n this.click_target = null;\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_ADDNODE) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_BUTTON\n };\n var _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n }\n }\n if (this.click_mode) {\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === \"Node\") {\n this.removeRepresentationsOfType(\"editor\");\n this.addTempEdge(this.click_target, _point, Utils.OriginEnum.EDGE_BUTTON_BAR);\n this.click_mode = Utils._CLICKMODE_ENDEDGE;\n this.notif_$.fadeOut(function() {\n $(this).html(this.renkan.translate(\"Click on a second node to complete the edge\")).fadeIn();\n });\n } else {\n this.notif_$.hide();\n this.click_mode = false;\n }\n }\n paper.view.draw();\n },\n onMouseUp: function(_event, _isTouch) {\n this.mouse_down = false;\n if (this.click_target) {\n var _off = this.canvas_$.offset();\n this.click_target.mouseup(\n {\n point: new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ])\n },\n _isTouch\n );\n } else {\n this.click_target = null;\n this.is_dragging = false;\n if (_isTouch) {\n this.unselectAll();\n }\n this.view.updateUrl();\n }\n paper.view.draw();\n },\n onScroll: function(_event, _scrolldelta) {\n this.totalScroll += _scrolldelta;\n if (Math.abs(this.totalScroll) >= 1) {\n var _off = this.canvas_$.offset(),\n _delta = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]).subtract(this.view.offset).multiply( Math.SQRT2 - 1 );\n if (this.totalScroll > 0) {\n this.view.setScale( this.view.scale * Math.SQRT2, this.view.offset.subtract(_delta) );\n } else {\n this.view.setScale( this.view.scale * Math.SQRT1_2, this.view.offset.add(_delta.divide(Math.SQRT2)));\n }\n this.totalScroll = 0;\n }\n },\n onClick: function(_event) {\n if (!this.isEditable()) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n if(!this._open_uri_cb &&\n this.renkan.options.simple_click_open_url && \n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n this._node_click_open_url = setTimeout(function() {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n this._node_click_open_url = null;\n }.bind(this), 200);\n }\n }\n },\n onDoubleClick: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n\n if (!this.isEditable()) {\n if (this.renkan.options.double_click_open_url &&\n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n }\n return;\n }\n if (this.isEditable() && (!_hitResult || typeof _hitResult.item.__representation === \"undefined\")) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_DOUBLE_CLICK\n },\n _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n paper.view.draw();\n },\n defaultDropHandler: function(_data) {\n var newNode = {};\n var snippet = \"\";\n switch(_data[\"text/x-iri-specific-site\"]) {\n case \"twitter\":\n snippet = $('
                                                    ').html(_data[\"text/x-iri-selected-html\"]);\n var tweetdiv = snippet.find(\".tweet\");\n newNode.title = this.renkan.translate(\"Tweet by \") + tweetdiv.attr(\"data-name\");\n newNode.uri = \"http://twitter.com/\" + tweetdiv.attr(\"data-screen-name\") + \"/status/\" + tweetdiv.attr(\"data-tweet-id\");\n newNode.image = tweetdiv.find(\".avatar\").attr(\"src\");\n newNode.description = tweetdiv.find(\".js-tweet-text:first\").text();\n break;\n case \"google\":\n snippet = $('
                                                    ').html(_data[\"text/x-iri-selected-html\"]);\n newNode.title = snippet.find(\"h3:first\").text().trim();\n newNode.uri = snippet.find(\"h3 a\").attr(\"href\");\n newNode.description = snippet.find(\".st:first\").text().trim();\n break;\n default:\n if (_data[\"text/x-iri-source-uri\"]) {\n newNode.uri = _data[\"text/x-iri-source-uri\"];\n }\n }\n if (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]) {\n newNode.description = (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]).replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                                    ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n var _svgimgs = snippet.find(\"image\");\n if (_svgimgs.length) {\n newNode.image = _svgimgs.attr(\"xlink:href\");\n }\n var _svgpaths = snippet.find(\"path\");\n if (_svgpaths.length) {\n newNode.clipPath = _svgpaths.attr(\"d\");\n }\n var _imgs = snippet.find(\"img\");\n if (_imgs.length) {\n newNode.image = _imgs[0].src;\n }\n var _as = snippet.find(\"a\");\n if (_as.length) {\n newNode.uri = _as[0].href;\n }\n newNode.title = snippet.find(\"[title]\").attr(\"title\") || newNode.title;\n newNode.description = snippet.text().replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/uri-list\"]) {\n newNode.uri = _data[\"text/uri-list\"];\n }\n if (_data[\"text/x-moz-url\"] && !newNode.title) {\n newNode.title = (_data[\"text/x-moz-url\"].split(\"\\n\")[1] || \"\").trim();\n if (newNode.title === newNode.uri) {\n newNode.title = false;\n }\n }\n if (_data[\"text/x-iri-source-title\"] && !newNode.title) {\n newNode.title = _data[\"text/x-iri-source-title\"];\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                                    ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n newNode.image = snippet.find(\"[data-image]\").attr(\"data-image\") || newNode.image;\n newNode.uri = snippet.find(\"[data-uri]\").attr(\"data-uri\") || newNode.uri;\n newNode.title = snippet.find(\"[data-title]\").attr(\"data-title\") || newNode.title;\n newNode.description = snippet.find(\"[data-description]\").attr(\"data-description\") || newNode.description;\n newNode.clipPath = snippet.find(\"[data-clip-path]\").attr(\"data-clip-path\") || newNode.clipPath;\n }\n\n if (!newNode.title) {\n newNode.title = this.renkan.translate(\"Dragged resource\");\n }\n var fields = [\"title\", \"description\", \"uri\", \"image\"];\n for (var i = 0; i < fields.length; i++) {\n var f = fields[i];\n if (_data[\"text/x-iri-\" + f] || _data[f]) {\n newNode[f] = _data[\"text/x-iri-\" + f] || _data[f];\n }\n if (newNode[f] === \"none\" || newNode[f] === \"null\") {\n newNode[f] = undefined;\n }\n }\n\n if(typeof this.renkan.options.drop_enhancer === \"function\"){\n newNode = this.renkan.options.drop_enhancer(newNode, _data);\n }\n\n return newNode;\n\n },\n dropData: function(_data, _event) {\n if (!this.isEditable()) {\n return;\n }\n if (_data[\"text/json\"] || _data[\"application/json\"]) {\n try {\n var jsondata = JSON.parse(_data[\"text/json\"] || _data[\"application/json\"]);\n _.extend(_data,jsondata);\n }\n catch(e) {}\n }\n\n var newNode = (typeof this.renkan.options.drop_handler === \"undefined\")?this.defaultDropHandler(_data):this.renkan.options.drop_handler(_data);\n\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _coords = this.toModelCoords(_point),\n _nodedata = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n uri: newNode.uri || \"\",\n title: newNode.title || \"\",\n description: newNode.description || \"\",\n image: newNode.image || \"\",\n color: newNode.color || undefined,\n clip_path: newNode.clipPath || undefined,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n //TODO: Determine if it comes from bin or ext\n origin: Utils.OriginEnum.NODE_DROP_EXT\n };\n var _node = this.renkan.project.addNode(_nodedata),\n _repr = this.getRepresentationByModel(_node);\n if (_event.type === \"drop\") {\n _repr.openEditor();\n }\n },\n fullScreen: function() {\n this.currentWidth = this.$.width();\n this.currentHeight = this.$.height();\n\n var _el = this.renkan.$[0];\n paper.view.off(\"resize\");\n Screenfull.toggle(_el);\n },\n addNodeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_ADDNODE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_ADDNODE;\n this.notif_$.text(this.renkan.translate(\"Click on the background canvas to add a node\")).fadeIn();\n }\n return false;\n },\n addEdgeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_STARTEDGE || this.click_mode === Utils._CLICKMODE_ENDEDGE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_STARTEDGE;\n this.notif_$.text(this.renkan.translate(\"Click on a first node to start the edge\")).fadeIn();\n }\n return false;\n },\n exportProject: function() {\n var projectJSON = this.renkan.project.toJSON(),\n downloadLink = document.createElement(\"a\"),\n projectId = projectJSON.id,\n fileNameToSaveAs = projectId + \".json\";\n\n // clean ids\n delete projectJSON.id;\n delete projectJSON._id;\n delete projectJSON.space_id;\n\n var objId,\n idsMap = {},\n hiddenNodes;\n\n _.each(projectJSON.nodes, function(e,i,l) {\n objId = e.id || e._id;\n delete e._id;\n delete e.id;\n idsMap[objId] = e['@id'] = Utils.getUUID4();\n });\n _.each(projectJSON.edges, function(e,i,l) {\n delete e._id;\n delete e.id;\n e.to = idsMap[e.to];\n e.from = idsMap[e.from];\n });\n _.each(projectJSON.views, function(e,i,l) {\n delete e._id;\n delete e.id;\n\n if(e.hidden_nodes) {\n hiddenNodes = e.hidden_nodes;\n e.hidden_nodes = [];\n _.each(hiddenNodes, function(h,j) {\n e.hidden_nodes.push(idsMap[h]);\n });\n }\n });\n projectJSON.users = [];\n\n var projectJSONStr = JSON.stringify(projectJSON, null, 2);\n var blob = new Blob([projectJSONStr], {type: \"application/json;charset=utf-8\"});\n filesaver(blob,fileNameToSaveAs);\n\n },\n setViewParameters: function(_params){\n this.removeRepresentationsOfType(\"View\");\n if ($.isEmptyObject(_params)){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n return;\n }\n if (typeof _params.viewIndex !== 'undefined'){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(_params.viewIndex)));\n } else {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n }\n if (typeof _params.view !== 'undefined' && _params.view.split(\",\").length >= 3){\n var viewParams = _params.view.split(\",\");\n var params = {\n \"project\": this.renkan.project,\n \"offset\": {\n \"x\": parseFloat(viewParams[0]),\n \"y\": parseFloat(viewParams[1])\n },\n \"zoom_level\": parseFloat(viewParams[2])\n };\n this.view.setScale(params.zoom_level, new paper.Point(params.offset));\n }\n //if view parameters = autoscale we apply a zoom fit on the view.\n if ((typeof _params.view !== 'undefined' && _params.view === \"autoscale\")){\n this.view.autoScale();\n }\n //if viewsNodes = false we show all the node by default.\n if (typeof _params.viewsNodes !== 'undefined'){\n if (_params.viewsNodes === \"true\"){\n this.view.hiddenNodes = (this.view.params.hidden_nodes || []).concat();\n this.view.hideNodes();\n } else {\n this.view.showNodes(false);\n }\n }\n //other parameters must go after because most of them depends on a view that must be initialize before\n this.unhighlightAll();\n if (typeof _params.node !== 'undefined' && _params.node){\n this.highlightModel(this.renkan.project.get(\"nodes\").get(_params.node));\n }\n if (typeof _params.edge !== 'undefined' && _params.edge){\n this.highlightModel(this.renkan.project.get(\"edges\").get(_params.edge));\n }\n\n },\n validViewIndex: function(index){\n //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist\n var _index = parseInt(index);\n var validIndex = 0;\n if (_index < 0){\n validIndex = this.renkan.project.get(\"views\").length + _index;\n } else {\n validIndex = _index;\n }\n if (typeof this.renkan.project.get(\"views\").at(_index) === 'undefined'){\n validIndex = 0;\n }\n return validIndex;\n },\n foldBins: function() {\n var foldBinsButton = this.$.find(\".Rk-Fold-Bins\"),\n bins = this.renkan.$.find(\".Rk-Bins\"),\n _delta = 0;\n var _this = this,\n sizeBef = _this.canvas_$.width(),\n sizeAft;\n if (bins.position().left < 0) {\n _delta= new paper.Point([-bins.width()/2, 0]);\n bins.animate({left: 0},250);\n this.$.animate({left: 300},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n if ((sizeBef - bins.width()) < bins.height()){\n sizeAft = sizeBef;\n } else {\n sizeAft = sizeBef - bins.width();\n }\n foldBinsButton.html(\"«\");\n } else {\n _delta= new paper.Point([bins.width()/2, 0]);\n bins.animate({left: -300},250);\n this.$.animate({left: 0},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n sizeAft = sizeBef+300;\n foldBinsButton.html(\"»\");\n }\n this.view.paperShift(_delta);\n },\n save: function() { },\n open: function() { }\n }).value();\n\n /* Scene End */\n\n return Scene;\n\n});\n\ndefine('renderer/viewrepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.View Class */\n\n /* The representation for the view. */\n\n var ViewRepr = Utils.inherit(BaseRepresentation);\n\n _(ViewRepr.prototype).extend({\n _init: function() {\n var _this = this;\n this.$ = $(\".Rk-Render\");\n this.type = \"View\";\n this.hiddenNodes = [];\n this.scale = 1;\n this.initialScale = 1;\n this.offset = paper.view.center;\n this.params = {};\n \n if (this.model){\n this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n }\n \n this.initWithParams();\n \n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n \n bindClick(\".Rk-ZoomOut\", \"zoomOut\");\n bindClick(\".Rk-ZoomIn\", \"zoomIn\");\n bindClick(\".Rk-ZoomFit\", \"autoScale\");\n bindClick(\".Rk-ZoomSave\", \"saveView\");\n \n this.$.find(\".Rk-ZoomSetSaved\").click( function() {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));\n _this.showNodes(false);\n if (_this.options.hide_nodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n }\n _this.updateUrl();\n });\n \n this.$.find(\".Rk-ShowHiddenNodes\").mouseenter( function() {\n _this.showNodes(true);\n _this.$.find(\".Rk-ShowHiddenNodes\").mouseleave( function() {\n _this.hideNodes();\n });\n });\n this.$.find(\".Rk-ShowHiddenNodes\").click( function() {\n _this.showNodes(false);\n _this.$.find(\".Rk-ShowHiddenNodes\").off( \"mouseleave\" ); \n });\n \n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n },\n redraw: function(options) {\n //console.log(\"view : \", this.model.toJSON());\n },\n initWithParams: function(){\n var _this = this;\n \n if (_this.options.view_force_autoscale){\n this.autoScale();\n } else {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); \n }\n \n if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n } else {\n _this.showNodes(false);\n }\n },\n saveView: function(){\n var _this = this;\n \n var offset = {\n \"x\": _this.offset.x,\n \"y\": _this.offset.y\n };\n \n _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );\n _this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n \n this.$.find(\".Rk-ZoomSetSaved\").show();\n \n _this.updateUrl();\n },\n addHiddenNode: function(_model){\n this.hideNode(_model);\n this.hiddenNodes.push(_model.id);\n this.updateUrl();\n },\n hideNode: function(_model){\n if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){\n this.renderer.getRepresentationByModel(_model).hide();\n }\n },\n hideNodes: function(){\n var _this = this;\n this.hiddenNodes.forEach(function(_id, index){\n var node = _this.renkan.project.get(\"nodes\").get(_id);\n if (typeof node !== 'undefined'){\n return _this.hideNode(_this.renkan.project.get(\"nodes\").get(_id));\n }else{\n _this.hiddenNodes.splice(index, 1);\n }\n });\n paper.view.draw();\n },\n showNodes: function(ghost){\n var _this = this;\n this.hiddenNodes.forEach(function(_id){\n _this.renderer.getRepresentationByModel(_this.renkan.project.get(\"nodes\").get(_id)).show(ghost);\n });\n if (!ghost){\n this.hiddenNodes = [];\n }\n paper.view.draw();\n },\n setScale: function(_newScale, _offset) {\n if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {\n this.scale = _newScale;\n if (_offset) {\n this.offset = _offset;\n }\n this.renderer.redraw();\n this.updateUrl();\n }\n },\n zoomOut: function() {\n var _newScale = this.scale * Math.SQRT1_2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));\n this.setScale( _newScale, _offset );\n },\n zoomIn: function() {\n var _newScale = this.scale * Math.SQRT2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));\n this.setScale( _newScale, _offset );\n },\n resizeZoom: function(deltaW, deltaH, _ratio) {\n var _newScale = this.scale * _ratio;\n var _offset = new paper.Point([\n (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),\n (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )\n ]);\n this.setScale( _newScale, _offset );\n },\n autoScale: function(force_view) {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny));\n this.initialScale = _scale;\n // Override calculated scale if asked\n if((typeof force_view !== \"undefined\") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){\n this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));\n }\n else{\n this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));\n }\n }\n if (nodes.length === 1) {\n this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y])));\n }\n },\n paperShift: function(_delta) {\n this.offset = this.offset.add(_delta);\n this.renderer.redraw();\n },\n updateUrl: function(){\n if(this.options.url_parameters && this.options.update_url){\n var result = {};\n var parameters = Backbone.history.getFragment().split('?');\n if (parameters.length > 1){\n parameters[1].split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000;\n\n if (this.renkan.project.get(\"views\").indexOf(this.model) > -1){\n result.viewIndex = this.renkan.project.get(\"views\").indexOf(this.model);\n if (result.viewIndex === this.renkan.project.get(\"views\").length - 1){\n result.viewIndex = -1;\n }\n } else {\n if (result.viewIndex){\n delete result.viewIndex;\n }\n }\n this.renkan.router.navigate(\"?\" + decodeURIComponent($.param(result)), {trigger: false, replace: true});\n }\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.showNodes(false);\n }\n }).value();\n\n return ViewRepr;\n\n});\n\n\n//Load modules and use them\nif( typeof require.config === \"function\" ) {\n require.config({\n paths: {\n 'jquery':'../lib/jquery/jquery',\n 'underscore':'../lib/lodash/lodash',\n 'filesaver' :'../lib/FileSaver/FileSaver',\n 'requtils':'require-utils',\n 'jquery-private':'jquery-private',\n 'ckeditor-core':'../lib/ckeditor/ckeditor',\n 'screenfull':'../lib/screenfull/screenfull-umd'\n },\n // JQuery config. cf: http://requirejs.org/docs/jquery.html#noconflictmap\n map: {\n '*': { 'jquery': 'jquery-private' },\n 'jquery-private': { 'jquery': 'jquery' }\n },\n shim: {\n 'ckeditor-core': {\n exports: 'CKEDITOR',\n }\n }\n });\n}\n\nrequire(['renderer/baserepresentation',\n 'renderer/basebutton',\n 'renderer/noderepr',\n 'renderer/edge',\n 'renderer/tempedge',\n 'renderer/baseeditor',\n 'renderer/nodeeditor',\n 'renderer/edgeeditor',\n 'renderer/nodebutton',\n 'renderer/nodeeditbutton',\n 'renderer/noderemovebutton',\n 'renderer/nodehidebutton',\n 'renderer/nodeshowbutton',\n 'renderer/noderevertbutton',\n 'renderer/nodelinkbutton',\n 'renderer/nodeenlargebutton',\n 'renderer/nodeshrinkbutton',\n 'renderer/edgeeditbutton',\n 'renderer/edgeremovebutton',\n 'renderer/edgerevertbutton',\n 'renderer/miniframe',\n 'renderer/scene',\n 'renderer/viewrepr'\n ], function(BaseRepresentation, BaseButton, NodeRepr, Edge, TempEdge, BaseEditor, NodeEditor, EdgeEditor, NodeButton, NodeEditButton, NodeRemoveButton, NodeHideButton, NodeShowButton, NodeRevertButton, NodeLinkButton, NodeEnlargeButton, NodeShrinkButton, EdgeEditButton, EdgeRemoveButton, EdgeRevertButton, MiniFrame, Scene, ViewRepr){\n\n 'use strict';\n\n var Rkns = window.Rkns;\n\n if(typeof Rkns.Renderer === \"undefined\"){\n Rkns.Renderer = {};\n }\n var Renderer = Rkns.Renderer;\n\n Renderer._BaseRepresentation = BaseRepresentation;\n Renderer._BaseButton = BaseButton;\n Renderer.Node = NodeRepr;\n Renderer.Edge = Edge;\n Renderer.View = ViewRepr;\n Renderer.TempEdge = TempEdge;\n Renderer._BaseEditor = BaseEditor;\n Renderer.NodeEditor = NodeEditor;\n Renderer.EdgeEditor = EdgeEditor;\n Renderer._NodeButton = NodeButton;\n Renderer.NodeEditButton = NodeEditButton;\n Renderer.NodeRemoveButton = NodeRemoveButton;\n Renderer.NodeHideButton = NodeHideButton;\n Renderer.NodeShowButton = NodeShowButton;\n Renderer.NodeRevertButton = NodeRevertButton;\n Renderer.NodeLinkButton = NodeLinkButton;\n Renderer.NodeEnlargeButton = NodeEnlargeButton;\n Renderer.NodeShrinkButton = NodeShrinkButton;\n Renderer.EdgeEditButton = EdgeEditButton;\n Renderer.EdgeRemoveButton = EdgeRemoveButton;\n Renderer.EdgeRevertButton = EdgeRevertButton;\n Renderer.MiniFrame = MiniFrame;\n Renderer.Scene = Scene;\n\n startRenkan();\n});\n\ndefine(\"main-renderer\", function(){});\n\n// Module o use with jquery to handle no conflict. cf: http://requirejs.org/docs/jquery.html#noconflictmap\ndefine('jquery-private',['jquery'], function (jq) {\n 'use strict';\n return jq.noConflict( true );\n});\n\n"]} \ No newline at end of file diff -r 50f5e8d2c839 -r cac26275af31 server/python/django2/renkanmanager/__init__.py --- a/server/python/django2/renkanmanager/__init__.py Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django2/renkanmanager/__init__.py Fri Sep 15 14:11:36 2017 +0200 @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- default_app_config = 'renkanmanager.apps.RenkanManagerConfig' -VERSION = (00, 13, 01, "final", 0) +VERSION = (00, 13, 02, "final", 0) def get_version(): diff -r 50f5e8d2c839 -r cac26275af31 server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/css/renkan.css --- a/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/css/renkan.css Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/css/renkan.css Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ /*! * _____ _ diff -r 50f5e8d2c839 -r cac26275af31 server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/css/space-editor.css --- a/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/css/space-editor.css Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/css/space-editor.css Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ html { overflow: visible !important; diff -r 50f5e8d2c839 -r cac26275af31 server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.js --- a/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.js Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.js Fri Sep 15 14:11:36 2017 +0200 @@ -24,7 +24,7 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ this["renkanJST"] = this["renkanJST"] || {}; @@ -470,7 +470,57 @@ var __t, __p = '', __e = _.escape, __j = Array.prototype.join; function print() { __p += __j.call(arguments, '') } with (obj) { -__p += '

                                                    \n ×\n '; + + +function get_youtube_id(url) { + var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; + var match = url.match(regExp); + if (match && match[2].length == 11) { + return match[2]; + } else { + return false; + } +} + +function get_vimeo_id(url) { + var regExp = /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/; + + var match = url.match(regExp); + + if (match){ + return match[2]; + } else { + return false; + } +} + +function get_dailymotion_id(url) { + var regExp = /^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$/; + + var match = url.match(regExp); + + if (match) { + if(match[4] !== undefined) { + return match[4]; + } + return match[2]; + } + return false; +} + +function get_facebook_id(url) { + var regExp = /^https?:\/\/www\.facebook\.com\/(?:video\.php\?v=\d+|.*?\/videos\/\d+)\/?$/; + + var match = url.match(regExp); + + if (match) { + return encodeURIComponent(url); + } + return false; +} + +; +__p += '\n

                                                    \n ×\n '; if (options.show_node_tooltip_color) { ; __p += '\n \n \n

                                                    ' + +__e(renkan.translate("Link")) + +'

                                                    \n '; + } + else if(video_id = get_vimeo_id(node.uri)) { ; +__p += '\n \n

                                                    \n \n'; - } ; +'" target="_blank">' + +__e(renkan.translate("Link")) + +'

                                                    \n '; + } + else if(video_id = get_dailymotion_id(node.uri)) { ; +__p += '\n \n

                                                    ' + +__e(renkan.translate("Link")) + +'

                                                    \n '; + } + else if(video_id = get_facebook_id(node.uri)) { ; +__p += '\n \n

                                                    ' + +__e(renkan.translate("Video link")) + +'

                                                    \n '; + } + else { ; +__p += ' \n \n '; + } + } +; __p += '\n ' + @@ -2304,6 +2394,7 @@ "Fullscreen not supported by your browser": "Le plein écran n'est pas supporté par votre navigateur", "Title size:": "Taille :", "Title color:": "Couleur :", + "Video link": "Lien vidéo" } }; diff -r 50f5e8d2c839 -r cac26275af31 server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js --- a/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js Fri Sep 15 14:11:36 2017 +0200 @@ -24,12 +24,12 @@ * knowledge of the CeCILL-C license and that you accept its terms. */ -/*! renkan - v00.13 - Copyright © IRI 2017 */ +/*! renkan - v00.13.02 - Copyright © IRI 2017 */ -this.renkanJST=this.renkanJST||{},this.renkanJST["templates/colorpicker.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                  • ';return __p},this.renkanJST["templates/edgeeditor_readonly.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                                    \n ×\n ',options.show_edge_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',edge.uri&&(__p+='\n \n '),__p+="\n "+__e(edge.title)+"\n ",edge.uri&&(__p+=" "),__p+="\n \n

                                                    \n",options.show_edge_tooltip_uri&&edge.uri&&(__p+='\n

                                                    \n '+__e(edge.short_uri)+"\n

                                                    \n"),__p+="\n

                                                    "+(null==(__t=edge.description)?"":__t)+"

                                                    \n",options.show_edge_tooltip_nodes&&(__p+='\n

                                                    \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                                                    \n

                                                    \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                                                    \n"),__p+="\n",options.show_edge_tooltip_creator&&edge.has_creator&&(__p+='\n

                                                    \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                                                    \n"),__p+="\n";return __p},this.renkanJST["templates/edgeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                                    \n ×'+__e(renkan.translate("Edit Edge"))+"\n

                                                    \n

                                                    \n \n \n

                                                    \n',options.show_edge_editor_uri&&(__p+="\n

                                                    \n \n \n \n

                                                    \n ',options.properties.length&&(__p+="\n

                                                    \n \n \n

                                                    \n")),__p+="\n",options.show_edge_editor_style&&(__p+='\n
                                                    \n ',options.show_edge_editor_style_color&&(__p+='\n
                                                    \n '+__e(renkan.translate("Edge color:"))+'\n
                                                    \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Edge"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                                    \n
                                                    \n "),__p+="\n ",options.show_edge_editor_style_dash&&(__p+='\n
                                                    \n '+__e(renkan.translate("Dash:"))+'\n \n
                                                    \n "),__p+="\n ",options.show_edge_editor_style_thickness&&(__p+='\n
                                                    \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(edge.thickness)+'\n +\n
                                                    \n '),__p+="\n ",options.show_edge_editor_style_arrow&&(__p+='\n
                                                    \n '+__e(renkan.translate("Arrow:"))+'\n \n
                                                    \n "),__p+="\n
                                                    \n"),__p+="\n",options.show_edge_editor_direction&&(__p+='\n

                                                    \n '+__e(renkan.translate("Change edge direction"))+"\n

                                                    \n"),__p+="\n",options.show_edge_editor_nodes&&(__p+='\n

                                                    \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                                                    \n

                                                    \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                                                    \n"),__p+="\n",options.show_edge_editor_creator&&edge.has_creator&&(__p+='\n

                                                    \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                                                    \n"),__p+="\n";return __p},this.renkanJST["templates/ldtjson-bin/annotationtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                  • \n\n \n

                                                    '+(null==(__t=htitle)?"":__t)+"

                                                    \n

                                                    "+(null==(__t=hdescription)?"":__t)+"

                                                    \n

                                                    Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                                                    \n
                                                    \n
                                                  • \n';return __p},this.renkanJST["templates/ldtjson-bin/segmenttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                  • \n\n \n

                                                    '+(null==(__t=htitle)?"":__t)+"

                                                    \n

                                                    "+(null==(__t=hdescription)?"":__t)+"

                                                    \n

                                                    Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                                                    \n
                                                    \n
                                                  • \n';return __p},this.renkanJST["templates/ldtjson-bin/tagtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                  • \n\n \n

                                                    '+(null==(__t=htitle)?"":__t)+'

                                                    \n
                                                    \n
                                                  • \n';return __p},this.renkanJST["templates/list-bin.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='
                                                  • \n'),__p+='\n

                                                    \n ',url&&(__p+='\n \n '),__p+="\n "+(null==(__t=htitle)?"":__t)+"\n ",url&&(__p+=""),__p+="\n

                                                    \n ",description&&(__p+='\n

                                                    '+(null==(__t=hdescription)?"":__t)+"

                                                    \n "),__p+="\n ",image&&(__p+='\n
                                                    \n '),__p+="\n
                                                  • \n";return __p},this.renkanJST["templates/main.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_bins&&(__p+='\n
                                                    \n
                                                    \n

                                                    '+__e(translate("Select contents:"))+'

                                                    \n
                                                    \n \n
                                                    \n
                                                    \n
                                                      \n
                                                      \n \n
                                                      \n
                                                      \n \n \n
                                                      \n
                                                        \n
                                                        \n'),__p+=" ",options.show_editor&&(__p+='\n
                                                        \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                                        \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n

                                                        \n '+__e(node.short_uri)+"\n

                                                        \n"),__p+=" ",options.show_node_tooltip_description&&(__p+='\n

                                                        '+(null==(__t=node.description)?"":__t)+"

                                                        \n"),__p+=" ",node.image&&options.show_node_tooltip_image&&(__p+='\n \n'),__p+=" ",node.has_creator&&options.show_node_tooltip_creator&&(__p+='\n

                                                        \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                                        \n"),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor_video.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                                        \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                                        \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n \n'),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='\n

                                                        \n ×'+__e(renkan.translate("Edit Node"))+"\n

                                                        \n

                                                        \n \n ",__p+=options.show_node_editor_title_richtext?'\n

                                                        '+(null==(__t=node.title)?"":__t)+"
                                                        \n ":'\n \n ',__p+="\n

                                                        \n",options.show_node_title_style&&(__p+='\n
                                                        \n
                                                        \n '+__e(renkan.translate("Title color:"))+'\n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Title"))?"":__t)+'\n
                                                        \n
                                                        \n '+__e(renkan.translate("Title size:"))+'\n -\n '+__e(node.title_size.toFixed(1))+'\n +\n
                                                        \n
                                                        \n'),__p+=" ",options.show_node_editor_uri&&(__p+="\n

                                                        \n \n \n \n

                                                        \n'),__p+=" ",options.change_types&&(__p+="\n

                                                        \n \n \n

                                                        \n"),__p+=" ",options.show_node_editor_description&&(__p+="\n

                                                        \n \n ",__p+=options.show_node_editor_description_richtext?'\n

                                                        '+(null==(__t=node.description)?"":__t)+"
                                                        \n ":'\n \n ",__p+="\n

                                                        \n"),__p+=" ",options.show_node_editor_size&&(__p+='\n

                                                        \n '+__e(renkan.translate("Size:"))+'\n -\n '+__e(node.size)+'\n +\n

                                                        \n'),__p+=" ",options.show_node_editor_style&&(__p+='\n
                                                        \n ',options.show_node_editor_style_color&&(__p+='\n
                                                        \n \n '+__e(renkan.translate("Node color:"))+'\n
                                                        \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Node"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                                        \n
                                                        \n "),__p+="\n ",options.show_node_editor_style_dash&&(__p+='\n
                                                        \n '+__e(renkan.translate("Dash:"))+'\n \n
                                                        \n "),__p+="\n ",options.show_node_editor_style_thickness&&(__p+='\n
                                                        \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(node.thickness)+'\n +\n
                                                        \n '),__p+="\n
                                                        \n"),__p+=" ",options.show_node_editor_image&&(__p+='\n
                                                        \n
                                                        \n \n ',node.clip_path&&(__p+='\n \n \n \n '),__p+="\n
                                                        \n
                                                        \n

                                                        \n \n

                                                        \n \n \n
                                                        \n

                                                        \n",options.allow_image_upload&&(__p+="\n

                                                        \n \n \n

                                                        \n')),__p+=" ",options.show_node_editor_creator&&node.has_creator&&(__p+='\n

                                                        \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                                        \n"),__p+=" ",options.change_shapes&&(__p+="\n

                                                        \n \n \n

                                                        \n"),__p+="\n";return __p},this.renkanJST["templates/scene.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_top_bar&&(__p+='\n
                                                        \n
                                                        \n ',__p+=options.editor_mode&&options.title_editable?'\n \n ':'\n

                                                        \n '+__e(project.get("title")||translate("Untitled project"))+"\n

                                                        \n ",__p+="\n ",options.show_user_list&&(__p+='\n
                                                        \n
                                                        \n ',options.show_user_color&&(__p+='\n
                                                        \n \n ',options.user_color_editable&&(__p+='\n \n '),__p+="\n \n ",options.user_color_editable&&print(colorPicker("Rk-Editor-ColorPicker-User")),__p+="\n
                                                        \n "),__p+='\n <unknown user>\n
                                                        \n
                                                          \n
                                                          \n '),__p+="\n ",options.home_button_url&&(__p+='\n
                                                          \n \n
                                                          \n
                                                          \n '+__e(translate(options.home_button_title))+"\n
                                                          \n
                                                          \n
                                                          \n "),__p+="\n ",options.show_fullscreen_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '+__e(translate("Full Screen"))+"\n
                                                          \n
                                                          \n
                                                          \n "),__p+="\n ",options.editor_mode?(__p+="\n ",options.show_addnode_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '+__e(translate("Add Node"))+"\n
                                                          \n
                                                          \n
                                                          \n "),__p+="\n ",options.show_addedge_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '+__e(translate("Add Edge"))+"\n
                                                          \n
                                                          \n
                                                          \n "),__p+="\n ",options.show_export_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '+__e(translate("Download Project"))+"\n
                                                          \n
                                                          \n
                                                          \n "),__p+="\n ",options.show_save_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '),__p+="\n ",options.show_open_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '+__e(translate("Open Project"))+"\n
                                                          \n
                                                          \n
                                                          \n "),__p+="\n ",options.show_bookmarklet&&(__p+='\n
                                                          \n \n
                                                          \n
                                                          \n '+__e(translate("Renkan 'Drag-to-Add' bookmarklet"))+'\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '),__p+="\n "):(__p+="\n ",options.show_export_button&&(__p+='\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '+__e(translate("Download Project"))+'\n
                                                          \n
                                                          \n
                                                          \n
                                                          \n '),__p+="\n "),__p+="\n ",options.show_search_field&&(__p+='\n
                                                          \n \n
                                                          \n
                                                          \n '),__p+="\n
                                                          \n"),__p+='\n
                                                          \n
                                                          \n
                                                          \n ',options.editor_mode&&options.save_view&&(__p+='\n
                                                          \n '),__p+="\n ",options.save_view&&(__p+='\n
                                                          \n ',options.hide_nodes&&(__p+='\n \t \n '),__p+=" \n "),__p+="\n
                                                          \n "),__p+="\n \n\n";return __p},this.renkanJST["templates/search.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                        • '+(null==(__t=title)?"":__t)+"
                                                        • ";return __p},this.renkanJST["templates/wikipedia-bin/resulttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                        • \n\n \n

                                                          \n '+(null==(__t=htitle)?"":__t)+'\n

                                                          \n

                                                          '+(null==(__t=hdescription)?"":__t)+"

                                                          \n
                                                        • \n";return __p},function(a){"use strict";"object"!=typeof a.Rkns&&(a.Rkns={});var b=a.Rkns,c=b.$=a.jQuery,d=b._=a._;b.pickerColors=["#8f1919","#a80000","#d82626","#ff0000","#e87c7c","#ff6565","#f7d3d3","#fecccc","#8f5419","#a85400","#d87f26","#ff7f00","#e8b27c","#ffb265","#f7e5d3","#fee5cc","#8f8f19","#a8a800","#d8d826","#feff00","#e8e87c","#feff65","#f7f7d3","#fefecc","#198f19","#00a800","#26d826","#00ff00","#7ce87c","#65ff65","#d3f7d3","#ccfecc","#198f8f","#00a8a8","#26d8d8","#00feff","#7ce8e8","#65feff","#d3f7f7","#ccfefe","#19198f","#0000a8","#2626d8","#0000ff","#7c7ce8","#6565ff","#d3d3f7","#ccccfe","#8f198f","#a800a8","#d826d8","#ff00fe","#e87ce8","#ff65fe","#f7d3f7","#feccfe","#000000","#242424","#484848","#6d6d6d","#919191","#b6b6b6","#dadada","#ffffff"],b.__renkans=[];var e=b._BaseBin=function(a,c){if("undefined"!=typeof a){this.renkan=a,this.renkan.$.find(".Rk-Bin-Main").hide(),this.$=b.$("
                                                        • ").addClass("Rk-Bin").appendTo(a.$.find(".Rk-Bin-List")),this.title_icon_$=b.$("").addClass("Rk-Bin-Title-Icon").appendTo(this.$);var d=this;b.$("").attr({href:"#",title:a.translate("Close bin")}).addClass("Rk-Bin-Close").html("×").appendTo(this.$).click(function(){return d.destroy(),a.$.find(".Rk-Bin-Main:visible").length||a.$.find(".Rk-Bin-Main:last").slideDown(),a.resizeBins(),!1}),b.$("").attr({href:"#",title:a.translate("Refresh bin")}).addClass("Rk-Bin-Refresh").appendTo(this.$).click(function(){return d.refresh(),!1}),this.count_$=b.$("
                                                          ").addClass("Rk-Bin-Count").appendTo(this.$),this.title_$=b.$("

                                                          ").addClass("Rk-Bin-Title").appendTo(this.$),this.main_$=b.$("
                                                          ").addClass("Rk-Bin-Main").appendTo(this.$).html('

                                                          '+a.translate("Loading, please wait")+"

                                                          "),this.title_$.html(c.title||"(new bin)"),this.renkan.resizeBins(),c.auto_refresh&&window.setInterval(function(){d.refresh()},c.auto_refresh)}};e.prototype.destroy=function(){this.$.detach(),this.renkan.resizeBins()};var f=b.Renkan=function(a){var e=this;b.__renkans.push(this),this.options=d.defaults(a,b.defaults,{templates:d.defaults(a.templates,renkanJST)||renkanJST,node_editor_templates:d.defaults(a.node_editor_templates,b.defaults.node_editor_templates)}),this.template=this.options.templates["templates/main.html"];var f={};if(d.each(this.options.node_editor_templates,function(a,b){f[b]=e.options.templates[a],delete e.options.templates[a]}),this.options.node_editor_templates=f,d.each(this.options.property_files,function(a){b.$.getJSON(a,function(a){e.options.properties=e.options.properties.concat(a)})}),this.read_only=this.options.read_only||!this.options.editor_mode,this.router=new b.Router,this.project=new b.Models.Project,this.dataloader=new b.DataLoader.Loader(this.project,this.options),this.setCurrentUser=function(a,b){this.project.addUser({_id:a,title:b}),this.current_user=a,this.renderer.redrawUsers()},"undefined"!=typeof this.options.user_id&&(this.current_user=this.options.user_id),this.$=b.$("#"+this.options.container),this.$.addClass("Rk-Main").html(this.template(this)),this.tabs=[],this.search_engines=[],this.current_user_list=new b.Models.UsersList, -this.current_user_list.on("add remove",function(){this.renderer&&this.renderer.redrawUsers()}),this.colorPicker=function(a){var c=e.options.templates["templates/colorpicker.html"];return'
                                                            '+b.pickerColors.map(function(a){return c({c:a})}).join("")+"
                                                          "},this.options.show_editor&&(this.renderer=new b.Renderer.Scene(this)),this.options.search.length){var g=e.options.templates["templates/search.html"],h=this.$.find(".Rk-Search-List"),i=this.$.find(".Rk-Web-Search-Input"),j=this.$.find(".Rk-Web-Search-Form");d.each(this.options.search,function(a,c){b[a.type]&&b[a.type].Search&&e.search_engines.push(new b[a.type].Search(e,a))}),h.html(d(this.search_engines).map(function(a,b){return g({key:b,title:a.getSearchTitle(),className:a.getBgClass()})}).join("")),h.find("li").click(function(){var a=b.$(this);e.setSearchEngine(a.attr("data-key")),j.submit()}),j.submit(function(){if(i.val()){var a=e.search_engine;a.search(i.val())}return!1}),this.$.find(".Rk-Search-Current").mouseenter(function(){h.slideDown()}),this.$.find(".Rk-Search-Select").mouseleave(function(){h.hide()}),this.setSearchEngine(0)}else this.$.find(".Rk-Web-Search-Form").detach();d.each(this.options.bins,function(a){b[a.type]&&b[a.type].Bin&&e.tabs.push(new b[a.type].Bin(e,a))});var k=!1;this.$.find(".Rk-Bins").on("click",".Rk-Bin-Title,.Rk-Bin-Title-Icon",function(){var a=b.$(this).siblings(".Rk-Bin-Main");a.is(":hidden")&&(e.$.find(".Rk-Bin-Main").slideUp(),a.slideDown())}),this.options.show_editor&&this.$.find(".Rk-Bins").on("mouseover",".Rk-Bin-Item",function(a){var f=b.$(this);if(f&&c(f).attr("data-uri")){var g=e.project.get("nodes").where({uri:c(f).attr("data-uri")});d.each(g,function(a){e.renderer.highlightModel(a)})}}).mouseout(function(){e.renderer.unhighlightAll()}).on("mousemove",".Rk-Bin-Item",function(a){try{this.dragDrop()}catch(a){}}).on("touchstart",".Rk-Bin-Item",function(a){k=!1}).on("touchmove",".Rk-Bin-Item",function(a){a.preventDefault();var b=a.originalEvent.changedTouches[0],c=e.renderer.canvas_$.offset(),d=e.renderer.canvas_$.width(),f=e.renderer.canvas_$.height();if(b.pageX>=c.left&&b.pageX=c.top&&b.pageY1?a:null);c.source!==l&&(l=c.source,d.each(e.tabs,function(a){a.render(c)}))}}),this.$.find(".Rk-Bins-Search-Form").submit(function(){return!1})};f.prototype.translate=function(a){return b.i18n[this.options.language]&&b.i18n[this.options.language][a]?b.i18n[this.options.language][a]:this.options.language.length>2&&b.i18n[this.options.language.substr(0,2)]&&b.i18n[this.options.language.substr(0,2)][a]?b.i18n[this.options.language.substr(0,2)][a]:a},f.prototype.onStatusChange=function(){this.renderer.onStatusChange()},f.prototype.setSearchEngine=function(a){this.search_engine=this.search_engines[a],this.$.find(".Rk-Search-Current").attr("class","Rk-Search-Current "+this.search_engine.getBgClass());for(var b=this.search_engine.getBgClass().split(" "),c="",d=0;d"+a.translate("Drag items from this website, drop them in Renkan").replace(/ /g,"_")+"

                                                          '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\/\\/[^\\/]*twitter\\.com\\//,s:'.tweet',n:'twitter'},{r:/https?:\\/\\/[^\\/]*google\\.[^\\/]+\\//,s:'.g',n:'google'},{r:/https?:\\/\\/[^\\/]*lemonde\\.fr\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();"},shortenText:function(a,b){return a.length>b?a.substr(0,b)+"…":a},drawEditBox:function(a,b,c,d,e,f){e.css({width:a.tooltip_width-2*a.tooltip_padding});var g=e[0].getBoundingClientRect(),h=f.$[0].getBoundingClientRect();g.bottom>h.bottom-2*a.tooltip_padding-10&&e.css({"overflow-x":"hidden","overflow-y":"scroll","max-height":h.bottom-2*a.tooltip_padding-5-g.top+"px"});var i=e.outerHeight()+2*a.tooltip_padding+5,j=b.xpaper.view.size.height-a.tooltip_margin&&(m=Math.max(paper.view.size.height-a.tooltip_margin,b.y+a.tooltip_arrow_width/2)-i),m1?a.offset[1]:a.offset[0]):null!=a.offset.x&&(c.x=a.offset.x,c.y=a.offset.y),a.offset=c}return a},toJSON:function(){return{_id:this.get("_id"),zoom_level:this.get("zoom_level"),offset:this.get("offset"),title:this.get("title"),description:this.get("description"),created_by:this.get("created_by")?this.get("created_by").get("_id"):null,hidden_nodes:this.get("hidden_nodes")}}}),i=(c.Project=d.extend({schema_version:"2",type:"project",blacklist:["saveStatus","loadingStatus"],relations:[{type:b.HasMany,key:"users",relatedModel:e,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"nodes",relatedModel:f,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"edges",relatedModel:g,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"views",relatedModel:h,reverseRelation:{key:"project",includeInJSON:"_id"}}],addUser:function(a,b){a.project=this;var c=e.findOrCreate(a);return this.get("users").push(c,b),c},addNode:function(a,b){a.project=this;var c=f.findOrCreate(a);return this.get("nodes").push(c,b),c},addEdge:function(a,b){a.project=this;var c=g.findOrCreate(a);return this.get("edges").push(c,b),c},addView:function(a,b){a.project=this;var c=h.findOrCreate(a);return this.get("views").push(c,b),c},removeNode:function(a){this.get("nodes").remove(a)},removeEdge:function(a){this.get("edges").remove(a)},validate:function(a){var b=this;_.each([].concat(a.users,a.nodes,a.edges,a.views),function(a){a&&(a.project=b)})},getSchemaVersion:function(a){var b=a;"undefined"==typeof b&&(b=this);var c=b.schema_version;return c?c:1},initialize:function(){var a=this;this.on("remove:nodes",function(b){a.get("edges").remove(a.get("edges").filter(function(a){return a.get("from")===b||a.get("to")===b}))})},toJSON:function(){var a=_.clone(this.attributes);for(var c in a)(a[c]instanceof b.Model||a[c]instanceof b.Collection||a[c]instanceof d)&&(a[c]=a[c].toJSON());return _.omit(a,this.blacklist)}}),c.RosterUser=b.Model.extend({type:"roster_user",idAttribute:"_id",constructor:function(a){"undefined"!=typeof a&&(a._id=a._id||a.id||c.getUID(this),a.title=a.title||"(untitled "+this.type+")",a.description=a.description||"",a.uri=a.uri||"",a.project=a.project||null,a.site_id=a.site_id||0,"function"==typeof this.prepare&&(a=this.prepare(a))),b.Model.prototype.constructor.call(this,a)},validate:function(){if(!this.type)return"object has no type"},prepare:function(a){return a.color=a.color||"#666666",a},toJSON:function(){return{_id:this.get("_id"),title:this.get("title"),uri:this.get("uri"),description:this.get("description"),color:this.get("color"),project:null!=this.get("project")?this.get("project").get("id"):null,site_id:this.get("site_id")}}}));c.UsersList=b.Collection.extend({model:i})}(window),Rkns.defaults={language:navigator.language||navigator.userLanguage||"en",container:"renkan",search:[],bins:[],static_url:"",popup_editor:!0,editor_panel:"editor-panel",show_bins:!0,properties:[],show_editor:!0,read_only:!1,editor_mode:!0,manual_save:!1,show_top_bar:!0,default_user_color:"#303030",size_bug_fix:!1,force_resize:!1,allow_double_click:!0,double_click_open_url:!0,simple_click_open_url:!1,zoom_on_scroll:!0,element_delete_delay:0,autoscale_padding:50,resize:!0,show_zoom:!0,save_view:!0,view_force_autoscale:!0,view_show_hiddennodes:!0,default_index_view:-1,url_parameters:!0,update_url:!0,show_search_field:!0,show_user_list:!0,user_name_editable:!0,user_color_editable:!0,title_editable:!0,show_user_color:!0,show_save_button:!0,show_export_button:!0,show_open_button:!1,show_addnode_button:!0,show_addedge_button:!0,show_bookmarklet:!0,show_fullscreen_button:!0,home_button_url:!1,home_button_title:"Home",show_minimap:!0,minimap_width:160,minimap_height:120,minimap_padding:20,minimap_background_color:"#ffffff",minimap_border_color:"#cccccc",minimap_highlight_color:"#ffff00",minimap_highlight_weight:5,buttons_background:"#202020",buttons_label_color:"#c000c0",buttons_label_font_size:9,ghost_opacity:.3,default_dash_array:[4,5],show_node_circles:!0,clip_node_images:!0,node_images_fill_mode:!1,node_size_base:25,node_stroke_width:2,node_stroke_max_width:12,selected_node_stroke_width:4,selected_node_stroke_max_width:24,node_stroke_witdh_scale:5,node_title_size_min:0,node_title_size_max:5,node_title_size_step:.1,node_fill_color:"#ffffff",highlighted_node_fill_color:"#ffff00",node_title_color:"#000000",node_label_distance:5,node_label_max_length:60,label_untitled_nodes:"(untitled)",hide_nodes:!0,change_shapes:!0,change_types:!0,node_editor_templates:{default:"templates/nodeeditor_readonly.html",video:"templates/nodeeditor_video.html"},edge_stroke_width:2,edge_stroke_max_width:12,selected_edge_stroke_width:4,selected_edge_stroke_max_width:24,edge_stroke_witdh_scale:5,edge_label_distance:0,edge_label_max_length:20,edge_arrow_length:18,edge_arrow_width:12,edge_arrow_max_width:32,edge_gap_in_bundles:12,highlighted_edge_color:"#ffff00",label_untitled_edges:"",tooltip_width:275,tooltip_padding:10,tooltip_margin:15,tooltip_arrow_length:20,tooltip_arrow_width:40,tooltip_top_color:"#f0f0f0",tooltip_bottom_color:"#d0d0d0",tooltip_border_color:"#808080",tooltip_border_width:1,tooltip_opacity:.8,richtext_editor_config:{toolbarGroups:[{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"clipboard",groups:["clipboard","undo"]},"/",{name:"styles"}],removePlugins:"colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates"},show_node_title_style:!0,show_node_editor_uri:!0,show_node_editor_title:!0,show_node_editor_title_richtext:!0,show_node_editor_description:!0,show_node_editor_description_richtext:!0,show_node_editor_size:!0,show_node_editor_style:!0,show_node_editor_style_color:!0,show_node_editor_style_dash:!0,show_node_editor_style_thickness:!0,show_node_editor_image:!0,show_node_editor_creator:!0,allow_image_upload:!0,uploaded_image_max_kb:500,show_node_tooltip_uri:!0,show_node_tooltip_description:!0,show_node_tooltip_color:!0,show_node_tooltip_image:!0,show_node_tooltip_creator:!0,show_edge_editor_uri:!0,show_edge_editor_style:!0,show_edge_editor_style_color:!0,show_edge_editor_style_dash:!0,show_edge_editor_style_thickness:!0,show_edge_editor_style_arrow:!0,show_edge_editor_direction:!0,show_edge_editor_nodes:!0,show_edge_editor_creator:!0,show_edge_tooltip_uri:!0,show_edge_tooltip_color:!0,show_edge_tooltip_nodes:!0,show_edge_tooltip_creator:!0},Rkns.i18n={fr:{"Edit Node":"Édition d’un nœud","Edit Edge":"Édition d’un lien","Title:":"Titre :","URI:":"URI :","Description:":"Description :","From:":"De :","To:":"Vers :",Image:"Image","Image URL:":"URL d'Image","Choose Image File:":"Choisir un fichier image","Full Screen":"Mode plein écran","Add Node":"Ajouter un nœud","Add Edge":"Ajouter un lien","Save Project":"Enregistrer le projet","Open Project":"Ouvrir un projet","Auto-save enabled":"Enregistrement automatique activé","Connection lost":"Connexion perdue","Created by:":"Créé par :","Zoom In":"Agrandir l’échelle","Zoom Out":"Rapetisser l’échelle",Edit:"Éditer",Remove:"Supprimer","Cancel deletion":"Annuler la suppression","Link to another node":"Créer un lien",Enlarge:"Agrandir",Shrink:"Rétrécir","Click on the background canvas to add a node":"Cliquer sur le fond du graphe pour rajouter un nœud","Click on a first node to start the edge":"Cliquer sur un premier nœud pour commencer le lien","Click on a second node to complete the edge":"Cliquer sur un second nœud pour terminer le lien",Wikipedia:"Wikipédia","Wikipedia in ":"Wikipédia en ",French:"Français",English:"Anglais",Japanese:"Japonais","Untitled project":"Projet sans titre","Lignes de Temps":"Lignes de Temps","Loading, please wait":"Chargement en cours, merci de patienter","Edge color:":"Couleur :","Dash:":"Point. :","Thickness:":"Epaisseur :","Arrow:":"Flèche :","Node color:":"Couleur :","Choose color":"Choisir une couleur","Change edge direction":"Changer le sens du lien","Do you really wish to remove node ":"Voulez-vous réellement supprimer le nœud ","Do you really wish to remove edge ":"Voulez-vous réellement supprimer le lien ","This file is not an image":"Ce fichier n'est pas une image","Image size must be under ":"L'image doit peser moins de ","Size:":"Taille :",KB:"ko","Choose from vocabulary:":"Choisir dans un vocabulaire :","SKOS Documentation properties":"SKOS: Propriétés documentaires","has note":"a pour note","has example":"a pour exemple","has definition":"a pour définition","SKOS Semantic relations":"SKOS: Relations sémantiques","has broader":"a pour concept plus large","has narrower":"a pour concept plus étroit","has related":"a pour concept apparenté","Dublin Core Metadata":"Métadonnées Dublin Core","has contributor":"a pour contributeur",covers:"couvre","created by":"créé par","has date":"a pour date","published by":"édité par","has source":"a pour source","has subject":"a pour sujet","Dragged resource":"Ressource glisée-déposée","Search the Web":"Rechercher en ligne","Search in Bins":"Rechercher dans les chutiers","Close bin":"Fermer le chutier","Refresh bin":"Rafraîchir le chutier","(untitled)":"(sans titre)","Select contents:":"Sélectionner des contenus :","Drag items from this website, drop them in Renkan":"Glissez des éléments de ce site web vers Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.":"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan","Shapes available":"Formes disponibles",Circle:"Cercle",Square:"Carré",Diamond:"Losange",Hexagone:"Hexagone",Ellipse:"Ellipse",Star:"Étoile",Cloud:"Nuage",Triangle:"Triangle",Polygon:"Polygone","Zoom Fit":"Ajuster le Zoom","Download Project":"Télécharger le projet","Save view":"Sauver la vue","View saved view":"Restaurer la Vue","Renkan 'Drag-to-Add' bookmarklet":"Renkan 'Deplacer-Pour-Ajouter' Signet","(unknown user)":"(non authentifié)","":"","Search in graph":"Rechercher dans carte","Search in ":"Chercher dans ","Show hidden nodes":"Montrer les noeuds cachés","Show neighbors":"Montrer les voisins",Hide:"Cacher","Fullscreen not supported by your browser":"Le plein écran n'est pas supporté par votre navigateur","Title size:":"Taille :","Title color:":"Couleur :"}},Rkns.jsonIO=function(a,b){var c=a.project;"undefined"==typeof b.http_method&&(b.http_method="PUT");var d=function(){c.set({loadingStatus:!0}),Rkns.$.getJSON(b.url,function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})})},e=function(){c.set({saveStatus:2});var d=c.toJSON();a.read_only||Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(d),success:function(a,b,d){c.set({saveStatus:0})}})},f=Rkns._.throttle(function(){setTimeout(e,100)},1e3);c.on("add:nodes add:edges add:users add:views",function(a){a.on("change remove",function(a){f()}),f()}),c.on("change",function(){1===c.changedAttributes.length&&c.hasChanged("saveStatus")||f()}),d()},Rkns.jsonIOSaveOnClick=function(a,b){var c=a.project,d=!1,e=function(){return"Project not saved"};"undefined"==typeof b.http_method&&(b.http_method="POST");var f=function(){var d={},e=/id=([^&#?=]+)/,f=document.location.hash.match(e);f&&(d.id=f[1]),Rkns.$.ajax({url:b.url,data:d,beforeSend:function(){c.set({loadingStatus:!0})},success:function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})}})},g=function(){c.set("saved_at",new Date);var a=c.toJSON();Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(a),beforeSend:function(){c.set({saveStatus:2})},success:function(a,b,f){$(window).off("beforeunload",e),d=!1,c.set({saveStatus:0})}})},h=function(){c.set({saveStatus:1});var a=c.get("title");a&&c.get("nodes").length?$(".Rk-Save-Button").removeClass("disabled"):$(".Rk-Save-Button").addClass("disabled"),a&&$(".Rk-PadTitle").css("border-color","#333333"),d||(d=!0,$(window).on("beforeunload",e))};f(),c.on("add:nodes add:edges add:users change",function(a){a.on("change remove",function(a){1===a.changedAttributes.length&&a.hasChanged("saveStatus")||h()}),1===c.changedAttributes.length&&c.hasChanged("saveStatus")||h()}),a.renderer.save=function(){$(".Rk-Save-Button").hasClass("disabled")?c.get("title")||$(".Rk-PadTitle").css("border-color","#ff0000"):g()}},function(a){"use strict";var b=a._,c=a.Ldt={},d=(c.Bin=function(a,b){if(b.ldt_type){var d=c[b.ldt_type+"Bin"];if(d)return new d(a,b)}console.error("No such LDT Bin Type")},c.ProjectBin=a.Utils.inherit(a._BaseBin));d.prototype._init=function(a,b){this.renkan=a,this.tagTemplate=a.options.templates["templates/ldtjson-bin/tagtemplate.html"],this.annotationTemplate=a.options.templates["templates/ldtjson-bin/annotationtemplate.html"],this.proj_id=b.project_id,this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.title_$.html(b.title),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},d.prototype.render=function(c){function d(a){var c=b(a).escape();return f.isempty?c:f.replace(c,"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}var f=c||a.Utils.regexpFromTextOrArray(),g="
                                                        • Tags

                                                        • ",h=this.data.meta["dc:title"],i=this,j=0;i.title_$.text('LDT Project: "'+h+'"'),b.map(i.data.tags,function(a){var b=a.meta["dc:title"];(f.isempty||f.test(b))&&(j++,g+=i.tagTemplate({ldt_platform:i.ldt_platform,title:b,htitle:d(b),encodedtitle:encodeURIComponent(b),static_url:i.renkan.options.static_url}))}),g+="
                                                        • Annotations

                                                        • ",b.map(i.data.annotations,function(a){var b=a.content.description,c=a.content.title.replace(b,"");if(f.isempty||f.test(c)||f.test(b)){j++;var h=a.end-a.begin,k=a.content&&a.content.img&&a.content.img.src?a.content.img.src:h?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";g+=i.annotationTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(a.begin),end:e(a.end),duration:e(h),mediaid:a.media,annotationid:a.id,image:k,static_url:i.renkan.options.static_url})}}),this.main_$.html(g),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()},d.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/ldt/cljson/id/"+this.proj_id,dataType:"jsonp",success:function(a){b.data=a,b.render()}})};var e=c.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"};e.prototype.getBgClass=function(){return"Rk-Ldt-Icon"},e.prototype.getSearchTitle=function(){return this.renkan.translate("Lignes de Temps")},e.prototype.search=function(a){this.renkan.tabs.push(new f(this.renkan,{search:a}))};var f=c.ResultsBin=a.Utils.inherit(a._BaseBin);f.prototype._init=function(a,b){this.renkan=a,this.segmentTemplate=a.options.templates["templates/ldtjson-bin/segmenttemplate.html"],this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.max_results=b.max_results||50,this.search=b.search,this.title_$.html('Lignes de Temps: "'+b.search+'"'),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},f.prototype.render=function(c){function d(a){return g.replace(b(a).escape(),"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}if(this.data){var f=c||a.Utils.regexpFromTextOrArray(),g=f.isempty?a.Utils.regexpFromTextOrArray(this.search):f,h="",i=this,j=0;b.each(this.data.objects,function(a){var b=a.abstract,c=a.title;if(f.isempty||f.test(c)||f.test(b)){j++;var g=a.duration,k=a.start_ts,l=+a.duration+k,m=g?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";h+=i.segmentTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(k),end:e(l),duration:e(g),mediaid:a.iri_id,annotationid:a.element_id,image:m})}}),this.main_$.html(h),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()}},f.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/api/ldt/1.0/segments/search/",data:{format:"jsonp",q:this.search,limit:this.max_results},dataType:"jsonp",success:function(a){b.data=a,b.render()}})}}(window.Rkns),Rkns.ResourceList={},Rkns.ResourceList.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.ResourceList.Bin.prototype._init=function(a,b){this.renkan=a,this.resultTemplate=a.options.templates["templates/list-bin.html"],this.title_$.html(b.title),b.list&&(this.data=b.list),this.refresh()},Rkns.ResourceList.Bin.prototype.render=function(a){function b(a){var b=_(a).escape();return c.isempty?b:c.replace(b,"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d="",e=this,f=0;Rkns._.each(this.data,function(a){var g;if("string"==typeof a)if(/^(https?:\/\/|www)/.test(a))g={url:a};else{g={title:a.replace(/[:,]?\s?(https?:\/\/|www)[\d\w\/.&?=#%-_]+\s?/,"").trim()};var h=a.match(/(https?:\/\/|www)[\d\w\/.&?=#%-_]+/);h&&(g.url=h[0]),g.title.length>80&&(g.description=g.title,g.title=g.title.replace(/^(.{30,60})\s.+$/,"$1…"))}else g=a;var i=g.title||(g.url||"").replace(/^https?:\/\/(www\.)?/,"").replace(/^(.{40}).+$/,"$1…"),j=g.url||"",k=g.description||"",l=g.image||"";j&&!/^https?:\/\//.test(j)&&(j="http://"+j),(c.isempty||c.test(i)||c.test(k))&&(f++,d+=e.resultTemplate({url:j,title:i,htitle:b(i),image:l,description:k,hdescription:b(k),static_url:e.renkan.options.static_url}))}),e.main_$.html(d),!c.isempty&&f?this.count_$.text(f).show():this.count_$.hide(),c.isempty||f?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.ResourceList.Bin.prototype.refresh=function(){this.data&&this.render()},Rkns.Wikipedia={},Rkns.Wikipedia.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"},Rkns.Wikipedia.Search.prototype.getBgClass=function(){ -return"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-"+this.lang},Rkns.Wikipedia.Search.prototype.getSearchTitle=function(){var a={fr:"French",en:"English",ja:"Japanese"};return a[this.lang]?this.renkan.translate("Wikipedia in ")+this.renkan.translate(a[this.lang]):this.renkan.translate("Wikipedia")+" ["+this.lang+"]"},Rkns.Wikipedia.Search.prototype.search=function(a){this.renkan.tabs.push(new Rkns.Wikipedia.Bin(this.renkan,{lang:this.lang,search:a}))},Rkns.Wikipedia.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.Wikipedia.Bin.prototype._init=function(a,b){this.renkan=a,this.search=b.search,this.resultTemplate=a.options.templates["templates/wikipedia-bin/resulttemplate.html"],this.lang=b.lang||"en",this.title_icon_$.addClass("Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-"+this.lang),this.title_$.html(this.search).addClass("Rk-Wikipedia-Title"),this.refresh()},Rkns.Wikipedia.Bin.prototype.render=function(a){function b(a){return d.replace(_(a).escape(),"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d=c.isempty?Rkns.Utils.regexpFromTextOrArray(this.search):c,e="",f=this,g=0;Rkns._.each(this.data.query.search,function(a){var d=a.title,h="http://"+f.lang+".wikipedia.org/wiki/"+encodeURI(d.replace(/ /g,"_")),i=Rkns.$("
                                                          ").html(a.snippet).text();(c.isempty||c.test(d)||c.test(i))&&(g++,e+=f.resultTemplate({url:h,title:d,htitle:b(d),description:i,hdescription:b(i),static_url:f.renkan.options.static_url}))}),f.main_$.html(e),!c.isempty&&g?this.count_$.text(g).show():this.count_$.hide(),c.isempty||g?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.Wikipedia.Bin.prototype.refresh=function(){var a=this;Rkns.$.ajax({url:"http://"+a.lang+".wikipedia.org/w/api.php?action=query&list=search&srsearch="+encodeURIComponent(this.search)+"&format=json",dataType:"jsonp",success:function(b){a.data=b,a.render()}})},define("renderer/baserepresentation",["jquery","underscore"],function(a,b){"use strict";var c=function(a,c){if("undefined"!=typeof a&&(this.renderer=a,this.renkan=a.renkan,this.project=a.renkan.project,this.options=a.renkan.options,this.model=c,this.model)){var d=this;this._changeBinding=function(){d.redraw({change:!0})},this._removeBinding=function(){a.removeRepresentation(d),b.defer(function(){a.redraw()})},this._selectBinding=function(){d.select()},this._unselectBinding=function(){d.unselect()},this.model.on("change",this._changeBinding),this.model.on("remove",this._removeBinding),this.model.on("select",this._selectBinding),this.model.on("unselect",this._unselectBinding)}};return b(c.prototype).extend({_super:function(a){return c.prototype[a].apply(this,Array.prototype.slice.call(arguments,1))},redraw:function(){},moveTo:function(){},show:function(){return"BaseRepresentation.show"},hide:function(){},select:function(){this.model&&this.model.trigger("selected")},unselect:function(){this.model&&this.model.trigger("unselected")},highlight:function(){},unhighlight:function(){},mousedown:function(){},mouseup:function(){this.model&&this.model.trigger("clicked")},destroy:function(){this.model&&(this.model.off("change",this._changeBinding),this.model.off("remove",this._removeBinding),this.model.off("select",this._selectBinding),this.model.off("unselect",this._unselectBinding))}}).value(),c}),define("requtils",[],function(a,b){"use strict";return{getUtils:function(){return window.Rkns.Utils},getRenderer:function(){return window.Rkns.Renderer}}}),define("renderer/basebutton",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({moveTo:function(a){this.sector.moveTo(a)},show:function(){this.sector.show()},hide:function(){this.sector&&this.sector.hide()},select:function(){this.sector.select()},unselect:function(a){this.sector.unselect(),(!a||a!==this.source_representation&&a.source_representation!==this.source_representation)&&this.source_representation.unselect()},destroy:function(){this.sector.destroy()}}).value(),f}),define("renderer/shapebuilder",[],function(){"use strict";var a="M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z",b={circle:{getShape:function(){return new paper.Path.Circle([0,0],1)},getImageShape:function(a,b){return new paper.Path.Circle(a,b)}},rectangle:{getShape:function(){return new paper.Path.Rectangle([-2,-2],[2,2])},getImageShape:function(a,b){return new paper.Path.Rectangle([-b,-b],[2*b,2*b])}},ellipse:{getShape:function(){return new paper.Path.Ellipse(new paper.Rectangle([-2,-1],[2,1]))},getImageShape:function(a,b){return new paper.Path.Ellipse(new paper.Rectangle([-b,-b/2],[2*b,b]))}},polygon:{getShape:function(){return new paper.Path.RegularPolygon([0,0],6,1)},getImageShape:function(a,b){return new paper.Path.RegularPolygon(a,6,b)}},diamond:{getShape:function(){var a=new paper.Path.Rectangle([-Math.SQRT2,-Math.SQRT2],[Math.SQRT2,Math.SQRT2]);return a.rotate(45),a},getImageShape:function(a,b){var c=new paper.Path.Rectangle([-b*Math.SQRT2/2,-b*Math.SQRT2/2],[b*Math.SQRT2,b*Math.SQRT2]);return c.rotate(45),c}},star:{getShape:function(){return new paper.Path.Star([0,0],8,1,.7)},getImageShape:function(a,b){return new paper.Path.Star(a,8,1*b,.7*b)}},cloud:{getShape:function(){var b=new paper.Path(a);return b},getImageShape:function(b,c){var d=new paper.Path(a);return d.scale(c),d.translate(b),d}},triangle:{getShape:function(){return new paper.Path.RegularPolygon([0,0],3,1)},getImageShape:function(a,b){var c=new paper.Path.RegularPolygon([0,0],3,1);return c.scale(b),c.translate(a),c}},svg:function(a){return{getShape:function(){return new paper.Path(a)},getImageShape:function(a,b){return new paper.Path}}}},c=function(a){return null!==a&&"undefined"!=typeof a||(a="circle"),"svg:"===a.substr(0,4)?b.svg(a.substr(4)):(a in b||(a="circle"),b[a])};return c.builders=b,c}),define("renderer/noderepr",["jquery","underscore","requtils","renderer/baserepresentation","renderer/shapebuilder"],function(a,b,c,d,e){"use strict";var f=c.getUtils(),g=f.inherit(d);return b(g.prototype).extend({_init:function(){if(this.renderer.node_layer.activate(),this.type="Node",this.buildShape(),this.hidden=!1,this.ghost=!1,this.options.show_node_circles?(this.circle.strokeWidth=this.options.node_stroke_width,this.h_ratio=1):this.h_ratio=0,this.title=a('
                                                          ').appendTo(this.renderer.labels_$),this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.NodeEditButton(this.renderer,null),new b.NodeRemoveButton(this.renderer,null),new b.NodeLinkButton(this.renderer,null),new b.NodeEnlargeButton(this.renderer,null),new b.NodeShrinkButton(this.renderer,null)],this.options.hide_nodes&&this.normal_buttons.push(new b.NodeHideButton(this.renderer,null),new b.NodeShowButton(this.renderer,null)),this.pending_delete_buttons=[new b.NodeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d$1'));var m=this.model.get("style")||{title_size:1,"title-color":"#00000"},n=m.title_size||1,o=m.title_color||this.options.node_title_color,p={"line-height":"1em"};1!==n&&(p["font-size"]=n.toFixed(1)+"em"),"#000000"!==o&&(p.color=o);var q=a("").css(p).html(l);this.title.empty().append(q);var r=this._getStrokeWidth();this.title.css({left:this.paper_coords.x,top:this.paper_coords.y+this.circle_radius*this.h_ratio+this.options.node_label_distance+.5*r,opacity:h});var s=this.model.has("style")&&this.model.get("style").color||(this.model.get("created_by")||f._USER_PLACEHOLDER(this.renkan)).get("color"),t=this.model.has("style")&&this.model.get("style").dash?this.options.default_dash_array:null;this.circle.strokeWidth=r,this.circle.strokeColor=s,this.circle.dashArray=t;var u=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(u)});var v=this.img;if(this.img=this.model.get("image"),this.img&&this.img!==v&&(this.showImage(),this.circle&&this.circle.sendToBack()),this.node_image&&!this.img&&(this.node_image.remove(),delete this.node_image),this.renderer.minimap){this.minimap_circle.fillColor=s;var w=this.renderer.toMinimapCoords(d),x=this.renderer.minimap.scale*e,y=new paper.Size([x,x]);this.minimap_circle.fitBounds(w.subtract(y),y.multiply(2))}if(!("undefined"!=typeof c&&"dontRedrawEdges"in c&&c.dontRedrawEdges)){var z=this;b.each(this.project.get("edges").filter(function(a){return a.get("to")===z.model||a.get("from")===z.model}),function(a,b,c){var d=z.renderer.getRepresentationByModel(a);d&&"undefined"!=typeof d.from_representation&&"undefined"!=typeof d.from_representation.paper_coords&&"undefined"!=typeof d.to_representation&&"undefined"!=typeof d.to_representation.paper_coords&&d.redraw()})}this.ghost?this.show(!0):this.hidden&&this.hide()},showImage:function(){var b=null;"undefined"==typeof this.renderer.image_cache[this.img]?(b=new Image,this.renderer.image_cache[this.img]=b,b.src=this.img):b=this.renderer.image_cache[this.img];var c=this;if(b.width){this.node_image&&this.node_image.remove(),this.renderer.node_layer.activate();var d=b.width,e=b.height,f=this.model.get("clip_path"),g="undefined"!=typeof f&&f,h=null,i=null,j=null;if(g){h=new paper.Path;var k=f.match(/[a-z][^a-z]+/gi)||[],l=[0,0],m=1/0,n=1/0,o=-(1/0),p=-(1/0),q=function(a,b){var c=a.slice(1).map(function(a,c){var f=parseFloat(a),g=c%2;return f=g?(f-.5)*e:(f-.5)*d,b&&(f+=l[g]),g?(n=Math.min(n,f),p=Math.max(p,f)):(m=Math.min(m,f),o=Math.max(o,f)),f});return l=c.slice(-2),c};k.forEach(function(a){var b=a.match(/([a-z]|[0-9.-]+)/gi)||[""];switch(b[0]){case"M":h.moveTo(q(b));break;case"m":h.moveTo(q(b,!0));break;case"L":h.lineTo(q(b));break;case"l":h.lineTo(q(b,!0));break;case"C":h.cubicCurveTo(q(b));break;case"c":h.cubicCurveTo(q(b,!0));break;case"Q":h.quadraticCurveTo(q(b));break;case"q":h.quadraticCurveTo(q(b,!0))}}),i=Math[this.options.node_images_fill_mode?"min":"max"](o-m,p-n)/2,j=new paper.Point((o+m)/2,(p+n)/2),this.options.show_node_circles||(this.h_ratio=(p-n)/(2*i))}else i=Math[this.options.node_images_fill_mode?"min":"max"](d,e)/2,j=new paper.Point(0,0),this.options.show_node_circles||(this.h_ratio=e/(2*i));var r=new paper.Raster(b);if(r.locked=!0,g&&(r=new paper.Group(h,r),r.opacity=.99,r.clipped=!0,h.__representation=this),this.options.clip_node_images){var s=this.shapeBuilder.getImageShape(j,i);r=new paper.Group(s,r),r.opacity=.99,r.clipped=!0,s.__representation=this}this.image_delta=j.divide(i),this.node_image=r,this.node_image.__representation=c,this.node_image.scale(this.circle_radius/i),this.node_image.position=this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius)),this.node_image.insertAbove(this.circle)}else a(b).on("load",function(){c.showImage()})},paperShift:function(a){this.options.editor_mode?this.renkan.read_only||(this.is_dragging=!0,this.paper_coords=this.paper_coords.add(a),this.redraw()):this.renderer.view.paperShift(a)},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("NodeEditor",null);a.source_representation=this,a.draw()},select:function(){clearTimeout(this.hide_timeout),this.selected=!0,this.circle.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&!this.hidden&&this.active_buttons.forEach(function(a){a.show()});var b=this.model.get("uri");b&&a(".Rk-Bin-Item").each(function(){var c=a(this);c.attr("data-uri")===b&&c.addClass("selected")}),this.options.editor_mode||this.openEditor(),this.renderer.minimap&&(this.minimap_circle.strokeWidth=this.options.minimap_highlight_weight,this.minimap_circle.strokeColor=this.options.minimap_highlight_color),this.hidden?this.show(!0):this.showNeighbors(!0),this._super("select")},hideButtons:function(){this.all_buttons.forEach(function(a){a.hide()}),delete this.buttonTimeout},unselect:function(b){if(!b||b.source_representation!==this){this.selected=!1;var c=this;this.buttons_timeout=setTimeout(function(){c.hideButtons()},200),this.circle.strokeWidth=this._getStrokeWidth(),a(".Rk-Bin-Item").removeClass("selected"),this.renderer.minimap&&(this.minimap_circle.strokeColor=void 0),this.hidden?(this.renderer.removeRepresentationsOfType("editor"),this.hide()):this.hideNeighbors(!0),this._super("unselect")}},hide_delay:function(){var a=this;this.hide_timeout=setTimeout(function(){a.hide()},1e3)},hide:function(){var a=this;this.ghost=!1,this.hidden=!0,"undefined"!=typeof this.node_image&&(this.node_image.opacity=0),this.hideButtons(),this.circle.opacity=0,this.title.css("opacity",0),this.minimap_circle.opacity=0,b.each(this.project.get("edges").filter(function(b){return b.get("to")===a.model||b.get("from")===a.model}),function(b,c,d){var e=a.renderer.getRepresentationByModel(b);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.hide()}),this.hideNeighbors(!1)},show:function(a){var c=this;this.ghost=a,this.ghost?("undefined"!=typeof this.node_image&&(this.node_image.opacity=this.options.ghost_opacity),this.circle.opacity=this.options.ghost_opacity,this.title.css("opacity",this.options.ghost_opacity),this.minimap_circle.opacity=this.options.ghost_opacity):(this.minimap_circle.opacity=1,this.hidden=!1,this.redraw()),b.each(this.project.get("edges").filter(function(a){return a.get("to")===c.model||a.get("from")===c.model}),function(a,b,d){var e=c.renderer.getRepresentationByModel(a);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.show(c.ghost)})},hideNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));f&&f.ghost&&(a?f.hide_delay():f.hide())})},showNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));if(f&&f.hidden&&(f.show(a),!a)){var g=c.renderer.view.hiddenNodes.indexOf(f.model.id);g!==-1&&c.renderer.view.hiddenNodes.splice(g,1)}})},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},saveCoords:function(){var a=this.renderer.toModelCoords(this.paper_coords),b={position:{x:a.x,y:a.y}};this.renderer.isEditable()&&this.model.set(b)},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){if(this.renderer.is_dragging&&this.renderer.isEditable())this.saveCoords();else if(this.hidden){var c=this.renderer.view.hiddenNodes.indexOf(this.model.id);c!==-1&&this.renderer.view.hiddenNodes.splice(c,1),this.show(!1),this.select()}else b||this.model.get("delete_scheduled")||this.openEditor(),this.model.trigger("clicked");this.renderer.click_target=null,this.renderer.is_dragging=!1,this.is_dragging=!1},destroy:function(a){this._super("destroy"),this.all_buttons.forEach(function(a){a.destroy()}),this.circle.remove(),this.title.remove(),this.renderer.minimap&&this.minimap_circle.remove(),this.node_image&&this.node_image.remove()}}).value(),g}),define("renderer/edge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){if(this.renderer.edge_layer.activate(),this.type="Edge",this.hidden=!1,this.ghost=!1,this.highlighted=!1,this.from_representation=this.renderer.getRepresentationByModel(this.model.get("from")),this.to_representation=this.renderer.getRepresentationByModel(this.model.get("to")),this.bundle=this.renderer.addToBundles(this),this.line=new paper.Path,this.line.add([0,0],[0,0],[0,0]),this.line.__representation=this,this.line.strokeWidth=this.options.edge_stroke_width,this.arrow_scale=1,this.arrow=new paper.Path,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.pivot=new paper.Point([this.options.edge_arrow_length/2,this.options.edge_arrow_width/2]),this.arrow.__representation=this,this.text=a('
                                                          ').appendTo(this.renderer.labels_$),this.arrow_angle=0,this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.EdgeEditButton(this.renderer,null),new b.EdgeRemoveButton(this.renderer,null)],this.pending_delete_buttons=[new b.EdgeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d90&&(r-=180,s=s.multiply(-1)),r<-90&&(r+=180,s=s.multiply(-1));var x=this.model.get("title")||this.renkan.translate(this.options.label_untitled_edges)||"";x=e.shortenText(x,this.options.node_label_max_length),"object"==typeof this.highlighted?this.text.html(this.highlighted.replace(b(x).escape(),'$1')):this.text.text(x);var y=this.paper_coords.add(s);this.text.css({left:y.x,top:y.y,transform:"rotate("+r+"deg)","-moz-transform":"rotate("+r+"deg)","-webkit-transform":"rotate("+r+"deg)",opacity:d}),this.text_angle=r;var z=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(z)}),this.renderer.minimap&&(this.minimap_line.strokeColor=u,this.minimap_line.segments[0].point=this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position"))),this.minimap_line.segments[1].point=this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position"))))}},hide:function(){this.hidden=!0,this.ghost=!1,this.text.hide(),this.line.visible=!1,this.arrow.visible=!1,this.minimap_line.visible=!1},show:function(a){this.ghost=a,this.ghost?(this.text.css("opacity",.3),this.line.opacity=.3,this.arrow.opacity=.3,this.minimap_line.opacity=.3):(this.hidden=!1,this.text.css("opacity",1),this.line.opacity=1,this.arrow.opacity=1,this.minimap_line.opacity=1),this.text.show(),this.line.visible=!0,this.arrow.visible=!0,this.minimap_line.visible=!0,this.redraw()},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("EdgeEditor",null);a.source_representation=this,a.draw()},select:function(){this.selected=!0,this.line.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&this.active_buttons.forEach(function(a){a.show()}),this.options.editor_mode||this.openEditor(),this._super("select")},unselect:function(a){a&&a.source_representation===this||(this.selected=!1,this.options.editor_mode&&this.all_buttons.forEach(function(a){a.hide()}),this.hidden&&this.renderer.removeRepresentationsOfType("editor"),this.line.strokeWidth=this._getStrokeWidth(),this._super("unselect"))},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){!this.renkan.read_only&&this.renderer.is_dragging?(this.from_representation.saveCoords(),this.to_representation.saveCoords(),this.from_representation.is_dragging=!1,this.to_representation.is_dragging=!1):(b||this.openEditor(),this.model.trigger("clicked")),this.renderer.click_target=null,this.renderer.is_dragging=!1},paperShift:function(a){this.options.editor_mode?this.options.read_only||(this.from_representation.paperShift(a),this.to_representation.paperShift(a)):this.renderer.paperShift(a)},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},destroy:function(){this._super("destroy"),this.line.remove(),this.arrow.remove(),this.text.remove(),this.renderer.minimap&&this.minimap_line.remove(),this.all_buttons.forEach(function(a){a.destroy()});var a=this;this.bundle.edges=b.reject(this.bundle.edges,function(b){return a===b})}}).value(),f}),define("renderer/tempedge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.edge_layer.activate(),this.type="Temp-edge",this.origin=e.OriginEnum.NONE;var a=(this.project.get("users").get(this.renkan.current_user)||e._USER_PLACEHOLDER(this.renkan)).get("color");this.line=new paper.Path,this.line.strokeColor=a,this.line.dashArray=[4,2],this.line.strokeWidth=this.options.selected_edge_stroke_width,this.line.add([0,0],[0,0]),this.line.__representation=this,this.arrow=new paper.Path,this.arrow.fillColor=a,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.__representation=this,this.arrow_angle=0},redraw:function(){var a=this.from_representation.paper_coords,b=this.end_pos,c=b.subtract(a).angle,d=a.add(b).divide(2);this.line.segments[0].point=a,this.line.segments[1].point=b,this.arrow.rotate(c-this.arrow_angle),this.arrow.position=d,this.arrow_angle=c},paperShift:function(a){if(!this.renderer.isEditable())return this.renderer.removeRepresentation(_this),void paper.view.draw();this.end_pos=this.end_pos.add(a);var b=paper.project.hitTest(this.end_pos);this.renderer.findTarget(b),this.redraw()},mouseup:function(a,b){var c=paper.project.hitTest(a.point),d=this.from_representation.model,f=!0;if(c&&"undefined"!=typeof c.item.__representation){var g=c.item.__representation;if("Node"===g.type.substr(0,4)){var h=g.model||g.source_representation.model;if(d!==h){var i={id:e.getUID("edge"),created_by:this.renkan.current_user,from:d,to:h,origin:this.origin};this.renderer.isEditable()&&this.project.addEdge(i)}}(d===g.model||g.source_representation&&g.source_representation.model===d)&&(f=!1,this.renderer.is_dragging=!0)}f&&(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentation(this),paper.view.draw())},destroy:function(){this.arrow.remove(),this.line.remove()}}).value(),f}),define("renderer/baseeditor",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.buttons_layer.activate(),this.type="editor",this.editor_block=new paper.Path;var c=b.map(b.range(8),function(){return[0,0]});this.editor_block.add.apply(this.editor_block,c),this.editor_block.strokeWidth=this.options.tooltip_border_width,this.editor_block.strokeColor=this.options.tooltip_border_color,this.editor_block.opacity=this.options.tooltip_opacity,this.editor_$=a("
                                                          ").appendTo(this.renderer.editor_$).css({position:"absolute",opacity:this.options.tooltip_opacity}).hide()},destroy:function(){this.editor_block.remove(),this.editor_$.remove()}}).value(),f}),define("renderer/nodeeditor",["jquery","underscore","requtils","renderer/baseeditor","renderer/shapebuilder","ckeditor-core"],function(a,b,c,d,e,f){"use strict";var g=c.getUtils(),h=g.inherit(d);return b(h.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/nodeeditor.html"],this.readOnlyTemplate=this.options.node_editor_templates},draw:function(){var c=this.source_representation.model,d=c.get("created_by")||g._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate[c.get("type")]||this.readOnlyTemplate.default,i=this.options.static_url+"img/image-placeholder.png",j=c.get("size")||0;this.editor_$.html(h({node:{_id:c.get("_id"),has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),type:c.get("type")||"default",short_uri:g.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),image:c.get("image")||"",image_placeholder:i,color:c.has("style")&&c.get("style").color||d.get("color"),title_size:c.has("style")&&c.get("style").title_size||1,title_color:c.has("style")&&c.get("style").title_color||this.options.node_title_color, -thickness:c.has("style")&&c.get("style").thickness||1,dash:c.has("style")&&c.get("style").dash?"checked":"",clip_path:c.get("clip_path")||!1,created_by_color:d.get("color"),created_by_title:d.get("title"),size:(j>0?"+":"")+j,shape:c.get("shape")||"circle"},renkan:this.renkan,options:this.options,shortenText:g.shortenText,shapes:b(e.builders).omit("svg").keys().value(),types:b(this.options.node_editor_templates).keys().value()})),this.redraw();var k=this,l=!(!this.renderer.isEditable()||!k.options.show_node_editor_description_richtext)&&f.inline("Rk-Edit-Description-"+c.get("_id"),k.options.richtext_editor_config),m=!(!this.renderer.isEditable()||!k.options.show_node_editor_title_richtext)&&f.inline("Rk-Edit-Title-"+c.get("_id"),k.options.richtext_editor_config),n=function(){k.renderer.removeRepresentation(k),paper.view.draw()};if(k.cleanEditor=function(){k.editor_$.off("keyup"),k.editor_$.find("input, textarea, select").off("change keyup paste"),k.editor_$.find(".Rk-Edit-Image-File").off("change"),k.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").off("hover"),k.editor_$.find(".Rk-Edit-Size-Btn").off("click"),k.editor_$.find(".Rk-Edit-Image-Del").off("click"),k.editor_$.find(".Rk-Edit-ColorPicker").find("li").off("hover click"),k.editor_$.find(".Rk-CloseX").off("click"),k.editor_$.find(".Rk-Edit-Goto").off("click"),k.options.show_node_editor_description_richtext&&l&&(l.focusManager.blur(!0),l.destroy()),k.options.show_node_editor_title_richtext&&m&&(m.focusManager.blur(!0),m.destroy())},this.editor_$.find(".Rk-CloseX").click(function(a){a.preventDefault(),n()}),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var o=b.debounce(function(){b.defer(function(){if(k.renderer.isEditable()){var a={};if(k.options.show_node_editor_uri&&(a.uri=k.editor_$.find(".Rk-Edit-URI").val(),k.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#")),k.options.show_node_editor_image&&(a.image=k.editor_$.find(".Rk-Edit-Image").val(),k.editor_$.find(".Rk-Edit-ImgPreview").attr("src",a.image||i)),k.options.show_node_editor_description&&(k.options.show_node_editor_description_richtext?l&&l.checkDirty()&&(a.description=l.getData(),l.resetDirty()):a.description=k.editor_$.find(".Rk-Edit-Description").val()),k.options.show_node_editor_title&&(k.options.show_node_editor_title_richtext?m&&m.checkDirty()&&(a.title=m.getData(),m.resetDirty()):a.title=k.editor_$.find(".Rk-Edit-Title").val()),k.options.show_node_editor_style){var d=k.editor_$.find(".Rk-Edit-Dash").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d})}k.options.change_shapes&&c.get("shape")!==k.editor_$.find(".Rk-Edit-Shape").val()&&(a.shape=k.editor_$.find(".Rk-Edit-Shape").val()),k.options.change_types&&c.get("type")!==k.editor_$.find(".Rk-Edit-Type").val()&&(a.type=k.editor_$.find(".Rk-Edit-Type").val()),c.set(a),k.redraw()}else n()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&n()}),this.editor_$.find("input, textarea, select").on("change keyup paste",o),k.options.show_node_editor_description&&k.options.show_node_editor_description_richtext&&l&&(l.on("change",o),l.on("blur",o)),k.options.show_node_editor_title&&k.options.show_node_editor_title_richtext&&m&&(m.on("change",o),m.on("blur",o)),k.options.allow_image_upload&&this.editor_$.find(".Rk-Edit-Image-File").change(function(){if(this.files.length){var a=this.files[0],b=new FileReader;if("image"!==a.type.substr(0,5))return void alert(k.renkan.translate("This file is not an image"));if(a.size>1024*k.options.uploaded_image_max_kb)return void alert(k.renkan.translate("Image size must be under ")+k.options.uploaded_image_max_kb+k.renkan.translate("KB"));b.onload=function(a){k.editor_$.find(".Rk-Edit-Image").val(a.target.result),o()},b.readAsDataURL(a)}}),this.editor_$.find(".Rk-Edit-Title")[0].focus();var p=k.editor_$.find(".Rk-Editor-ColorPicker-Node");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),p.show()},function(a){a.preventDefault(),p.hide()}),p.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||g._USER_PLACEHOLDER(k.renkan)).get("color"))}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),p.hide(),paper.view.draw()):n()});var q=function(a){if(k.renderer.isEditable()){var b=a+(c.get("size")||0);k.editor_$.find("#Rk-Edit-Size-Value").text((b>0?"+":"")+b),c.set("size",b),paper.view.draw()}else n()};this.editor_$.find("#Rk-Edit-Size-Down").click(function(){return q(-1),!1}),this.editor_$.find("#Rk-Edit-Size-Up").click(function(){return q(1),!1});var r=function(a){if(k.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>k.options.node_stroke_witdh_scale&&(e=k.options.node_stroke_witdh_scale),e!==d&&(k.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else n()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return r(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return r(1),!1});var s=function(a){var d=k.options.node_title_size_min,e=k.options.node_title_size_max;if(k.renderer.isEditable()){var f=c.has("style")&&c.get("style").title_size||1,g=a+f;ge&&(g=e),g!==f&&(k.editor_$.find("#Rk-Edit-Title-Size-Value").text(g.toFixed(1)),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_size:g})),paper.view.draw())}else n()},t=k.editor_$.find(".Rk-Editor-ColorPicker-Title");this.editor_$.find(".Rk-Editor-p-title-color").hover(function(a){a.preventDefault(),t.show()},function(a){a.preventDefault(),t.hide()}),t.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault();var b=c.has("style")&&c.get("style").title_color||k.options.node_fill_color;k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",b)}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_color:a(this).attr("data-color")})),t.hide(),paper.view.draw()):n()}),this.editor_$.find("#Rk-Edit-Title-Size-Down").click(function(){var a=k.options.node_title_size_step;return s(-a),!1}),this.editor_$.find("#Rk-Edit-Title-Size-Up").click(function(){var a=k.options.node_title_size_step;return s(a),!1}),this.editor_$.find(".Rk-Edit-Image-Del").click(function(){return k.editor_$.find(".Rk-Edit-Image").val(""),o(),!1})}else if("object"==typeof this.source_representation.highlighted){var u=this.source_representation.highlighted.replace(b(c.get("title")).escape(),'$1');this.editor_$.find(".Rk-Display-Title"+(c.get("uri")?" a":"")).html(u),this.options.show_node_tooltip_description&&this.editor_$.find(".Rk-Display-Description").html(this.source_representation.highlighted.replace(b(c.get("description")).escape(),'$1'))}this.editor_$.find("img").load(function(){k.redraw()})},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;g.drawEditBox(this.options,a,this.editor_block,.75*this.source_representation.circle_radius,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()},destroy:function(){"undefined"!=typeof this.cleanEditor&&this.cleanEditor(),this.editor_block.remove(),this.editor_$.remove()}}).value(),h}),define("renderer/edgeeditor",["jquery","underscore","requtils","renderer/baseeditor"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/edgeeditor.html"],this.readOnlyTemplate=this.options.templates["templates/edgeeditor_readonly.html"]},draw:function(){var c=this.source_representation.model,d=c.get("from"),f=c.get("to"),g=c.get("created_by")||e._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate;this.editor_$.html(h({edge:{has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),short_uri:e.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),color:c.has("style")&&c.get("style").color||g.get("color"),dash:c.has("style")&&c.get("style").dash?"checked":"",arrow:c.has("style")&&c.get("style").arrow||!c.has("style")||"undefined"==typeof c.get("style").arrow?"checked":"",thickness:c.has("style")&&c.get("style").thickness||1,from_title:d.get("title"),to_title:f.get("title"),from_color:d.has("style")&&d.get("style").color||(d.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),to_color:f.has("style")&&f.get("style").color||(f.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),created_by_color:g.get("color"),created_by_title:g.get("title")},renkan:this.renkan,shortenText:e.shortenText,options:this.options})),this.redraw();var i=this,j=function(){i.renderer.removeRepresentation(i),i.editor_$.find(".Rk-Edit-Size-Btn").off("click"),paper.view.draw()};if(this.editor_$.find(".Rk-CloseX").click(j),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var k=b.debounce(function(){b.defer(function(){if(i.renderer.isEditable()){var a={title:i.editor_$.find(".Rk-Edit-Title").val()};if(i.options.show_edge_editor_uri&&(a.uri=i.editor_$.find(".Rk-Edit-URI").val()),i.options.show_node_editor_style){var d=i.editor_$.find(".Rk-Edit-Dash").is(":checked"),e=i.editor_$.find(".Rk-Edit-Arrow").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d,arrow:e})}i.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#"),c.set(a),paper.view.draw()}else j()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&j()}),this.editor_$.find("input").on("keyup change paste",k),this.editor_$.find(".Rk-Edit-Vocabulary").change(function(){var b=a(this),c=b.val();c&&(i.editor_$.find(".Rk-Edit-Title").val(b.find(":selected").text()),i.editor_$.find(".Rk-Edit-URI").val(c),k())}),this.editor_$.find(".Rk-Edit-Direction").click(function(){i.renderer.isEditable()?(c.set({from:c.get("to"),to:c.get("from")}),i.draw()):j()});var l=i.editor_$.find(".Rk-Editor-ColorPicker-Edge");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),l.show()},function(a){a.preventDefault(),l.hide()}),l.find("li").hover(function(b){b.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||e._USER_PLACEHOLDER(i.renkan)).get("color"))}).click(function(d){d.preventDefault(),i.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),l.hide(),paper.view.draw()):j()});var m=function(a){if(i.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>i.options.node_stroke_witdh_scale&&(e=i.options.node_stroke_witdh_scale),e!==d&&(i.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else j()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return m(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return m(1),!1})}},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;e.drawEditBox(this.options,a,this.editor_block,5,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()}}).value(),f}),define("renderer/nodebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({setSectorSize:function(){var a=this.source_representation.circle_radius;a!==this.lastSectorInner&&(this.sector&&this.sector.destroy(),this.sector=this.renderer.drawSector(this,1+a,e._NODE_BUTTON_WIDTH+a,this.startAngle,this.endAngle,1,this.imageName,this.renkan.translate(this.text)),this.lastSectorInner=a)},unselect:function(){d.prototype.unselect.apply(this,Array.prototype.slice.call(arguments,1)),this.source_representation&&this.source_representation.buttons_timeout&&(clearTimeout(this.source_representation.buttons_timeout),this.source_representation.hideButtons())},select:function(){this.source_representation&&this.source_representation.buttons_timeout&&clearTimeout(this.source_representation.buttons_timeout),this.sector.select()}}).value(),f}),define("renderer/nodeeditbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-edit-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-125:-135,this.endAngle=this.options.hide_nodes?-55:-45,this.imageName="edit",this.text="Edit"},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/noderemovebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-remove-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-10:0,this.endAngle=this.options.hide_nodes?45:90,this.imageName="remove",this.text="Remove"},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove node ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeNode(this.source_representation.model)}}).value(),f}),define("renderer/nodehidebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-hide-button",this.lastSectorInner=0,this.startAngle=45,this.endAngle=90,this.imageName="hide",this.text="Hide"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.renderer.view.addHiddenNode(this.source_representation.model)}}).value(),f}),define("renderer/nodeshowbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-show-button",this.lastSectorInner=0,this.startAngle=90,this.endAngle=135,this.imageName="show",this.text="Show neighbors"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.source_representation.showNeighbors(!1)}}).value(),f}),define("renderer/noderevertbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-revert-button",this.lastSectorInner=0,this.startAngle=-135,this.endAngle=135,this.imageName="revert",this.text="Cancel deletion"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/nodelinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-link-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?135:90,this.endAngle=this.options.hide_nodes?190:180,this.imageName="link",this.text="Link to another node"},mousedown:function(a,b){if(this.renderer.isEditable()){var c=this.renderer.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]);this.renderer.click_target=null,this.renderer.removeRepresentationsOfType("editor"),this.renderer.addTempEdge(this.source_representation,d,e.OriginEnum.EDGE_BUTTON_CIRCLE)}}}).value(),f}),define("renderer/nodeenlargebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-enlarge-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-55:-45,this.endAngle=this.options.hide_nodes?-10:0,this.imageName="enlarge",this.text="Enlarge"},mouseup:function(){var a=1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/nodeshrinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-shrink-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-170:-180,this.endAngle=this.options.hide_nodes?-125:-135,this.imageName="shrink",this.text="Shrink"},mouseup:function(){var a=-1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/edgeeditbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-edit-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-270,-90,1,"edit",this.renkan.translate("Edit"))},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/edgeremovebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-remove-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-90,90,1,"remove",this.renkan.translate("Remove"))},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove edge ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeEdge(this.source_representation.model)}}).value(),f}),define("renderer/edgerevertbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-revert-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-135,135,1,"revert",this.renkan.translate("Cancel deletion"))},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/miniframe",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({paperShift:function(a){this.renderer.offset=this.renderer.offset.subtract(a.divide(this.renderer.minimap.scale).multiply(this.renderer.scale)),this.renderer.redraw()},mouseup:function(a){this.renderer.click_target=null,this.renderer.is_dragging=!1}}).value(),f}),define("renderer/scene",["jquery","underscore","filesaver","requtils","renderer/miniframe","screenfull"],function(a,b,c,d,e,f){"use strict";var g=d.getUtils(),h=function(c){this.renkan=c,this.$=a(".Rk-Render"),this.representations=[],this.$.html(c.options.templates["templates/scene.html"](c)),this.onStatusChange(),this.canvas_$=this.$.find(".Rk-Canvas"),this.labels_$=this.$.find(".Rk-Labels"),c.options.popup_editor?this.editor_$=this.$.find(".Rk-Editor"):this.editor_$=a("#"+c.options.editor_panel),this.notif_$=this.$.find(".Rk-Notifications"),paper.setup(this.canvas_$[0]),this.totalScroll=0,this.mouse_down=!1,this.click_target=null,this.selected_target=null,this.edge_layer=new paper.Layer,this.node_layer=new paper.Layer,this.buttons_layer=new paper.Layer,this.delete_list=[],this.redrawActive=!1,c.options.show_minimap&&(this.minimap={background_layer:new paper.Layer,edge_layer:new paper.Layer,node_layer:new paper.Layer,node_group:new paper.Group,size:new paper.Size(c.options.minimap_width,c.options.minimap_height)},this.minimap.background_layer.activate(),this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle=new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.rectangle.fillColor=c.options.minimap_background_color,this.minimap.rectangle.strokeColor=c.options.minimap_border_color,this.minimap.rectangle.strokeWidth=4,this.minimap.offset=new paper.Point(this.minimap.size.divide(2)),this.minimap.scale=.1,this.minimap.node_layer.activate(),this.minimap.cliprectangle=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.cliprectangle),this.minimap.node_group.clipped=!0,this.minimap.miniframe=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.miniframe),this.minimap.miniframe.fillColor="#c0c0ff",this.minimap.miniframe.opacity=.3,this.minimap.miniframe.strokeColor="#000080",this.minimap.miniframe.strokeWidth=2,this.minimap.miniframe.__representation=new e(this,null)),this.throttledPaperDraw=b(function(){paper.view.draw()}).throttle(100).value(),this.bundles=[],this.click_mode=!1;var d=this,h=!0,i=1,j=!1,k=0,l=0,m=0;this.image_cache={},this.icon_cache={},["edit","remove","hide","show","link","enlarge","shrink","revert"].forEach(function(a){var b=new Image;b.src=c.options.static_url+"img/"+a+".png",d.icon_cache[a]=b});var n=b.throttle(function(a,b){d.onMouseMove(a,b)},g._MOUSEMOVE_RATE);this.canvas_$.on({mousedown:function(a){a.preventDefault(),d.onMouseDown(a,!1)},mousemove:function(a){a.preventDefault(),n(a,!1)},mouseup:function(a){a.preventDefault(),d.onMouseUp(a,!1)},mousewheel:function(a,b){c.options.zoom_on_scroll&&(a.preventDefault(),h&&d.onScroll(a,b))},touchstart:function(a){a.preventDefault();var b=a.originalEvent.touches[0];c.options.allow_double_click&&new Date-m0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show(),this.$.find(".Rk-CurrentUser").mouseenter(function(){d.$.find(".Rk-UserList").slideDown()}),this.$.find(".Rk-Users").mouseleave(function(){d.$.find(".Rk-UserList").slideUp()}),f.enabled?(o(".Rk-FullScreen-Button","fullScreen"),document.addEventListener(f.raw.fullscreenchange,function(){setTimeout(function(){var a=d.$.width(),b=d.$.height();d.renkan.options.show_top_bar&&(b-=d.$.find(".Rk-TopBar").height()),d.renkan.options.show_bins&&this.renkan.$.find(".Rk-Bins").position().left>0&&(a-=this.renkan.$.find(".Rk-Bins").width()),paper.view.viewSize=new paper.Size([a,b]),d.resize(d.currentWidth,a,d.currentHeight,b),d.currentWidth=a,d.currentHeight=b,f.isFullscreen||(paper.view.onResize=function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)})},600)})):(this.$.find(".Rk-FullScreen-Button").addClass("disabled"),this.$.find(".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents").html(this.renkan.translate("Fullscreen not supported by your browser"))),o(".Rk-AddNode-Button","addNodeBtn"),o(".Rk-AddEdge-Button","addEdgeBtn"),o(".Rk-Save-Button","save"),o(".Rk-Open-Button","open"),o(".Rk-Export-Button","exportProject"),this.$.find(".Rk-Bookmarklet-Button").attr("href","javascript:"+g._BOOKMARKLET_CODE(c)).click(function(){return d.notif_$.text(c.translate("Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.")).fadeIn().delay(5e3).fadeOut(),!1}),this.$.find(".Rk-TopBar-Button").mouseover(function(){a(this).find(".Rk-TopBar-Tooltip").show()}).mouseout(function(){a(this).find(".Rk-TopBar-Tooltip").hide()}),o(".Rk-Fold-Bins","foldBins"),paper.view.on("resize",function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)});var p=b.throttle(function(){d.redraw()},50);this.addRepresentations("Node",this.renkan.project.get("nodes")),this.addRepresentations("Edge",this.renkan.project.get("edges")),this.renkan.project.on("change:title",function(){d.$.find(".Rk-PadTitle").val(c.project.get("title")).prop("title",c.project.get("title"))}),this.$.find(".Rk-PadTitle").on("keyup input paste",function(){c.project.set({title:a(this).val()})});var q=b.throttle(function(){d.redrawUsers()},100);if(q(),this.renkan.project.on("change:saveStatus",function(){switch(d.renkan.project.get("saveStatus")){case 0:d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("saved");break;case 1:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("to-save");break;case 2:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").addClass("saving")}}),this.renkan.project.on("loaded",function(){d.renkan.options.url_parameters?Backbone.history.start():d.fixSize(),d.redrawActive=!0,p()}),this.renkan.router.on("router",function(a){d.setViewParameters(a)}),this.renkan.project.on("change:loadingStatus",function(){if(d.renkan.project.get("loadingStatus")){d.$.find(".loader").addClass("run"),setTimeout(function(){d.$.find(".loader").hide(250)},3e3)}}),this.renkan.project.on("add:users remove:users",q),this.renkan.project.on("add:views remove:views",function(a){d.renkan.project.get("views").length>1?d.$.find(".Rk-ZoomSetSaved").show():d.$.find(".Rk-ZoomSetSaved").hide()}),this.renkan.project.on("add:nodes",function(a){d.addRepresentation("Node",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("add:edges",function(a){d.addRepresentation("Edge",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("change:title",function(a,b){var c=d.$.find(".Rk-PadTitle");c.is("input")?c.val()!==b&&c.val(b):c.text(b)}),c.options.size_bug_fix){var r="number"==typeof c.options.size_bug_fix?c.options.size_bug_fix:500;window.setTimeout(function(){d.fixSize()},r)}if(c.options.force_resize&&a(window).resize(function(){d.autoScale()}),c.options.show_user_list&&c.options.user_color_editable){var s=this.$.find(".Rk-Users .Rk-Edit-ColorPicker-Wrapper"),t=this.$.find(".Rk-Users .Rk-Editor-ColorPicker-User");s.hover(function(a){d.isEditable()&&(a.preventDefault(),t.show())},function(a){a.preventDefault(),t.hide()}),t.find("li").mouseenter(function(b){d.isEditable()&&(b.preventDefault(),d.$.find(".Rk-CurrentUser-Color").css("background",a(this).attr("data-color")))})}if(c.options.show_search_field){var u="";this.$.find(".Rk-GraphSearch-Field").on("keyup change paste input",function(){var b=a(this),e=b.val();if(e!==u)if(u=e,e.length<2)c.project.get("nodes").each(function(a){d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){d.getRepresentationByModel(a).unhighlight()});else{var f=g.regexpFromTextOrArray(e);c.project.get("nodes").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()})}})}this.redraw(),window.setInterval(function(){var a=(new Date).valueOf();d.delete_list.forEach(function(b){if(a>=b.time){var d=c.project.get("nodes").findWhere({delete_scheduled:b.id});d&&project.removeNode(d),d=c.project.get("edges").findWhere({delete_scheduled:b.id}),d&&project.removeEdge(d)}}),d.delete_list=d.delete_list.filter(function(a){return c.project.get("nodes").findWhere({delete_scheduled:a.id})||c.project.get("edges").findWhere({delete_scheduled:a.id})})},500),this.minimap&&window.setInterval(function(){d.rescaleMinimap()},2e3)};return b(h.prototype).extend({fixSize:function(){"undefined"==typeof this.view&&(this.view=this.addRepresentation("View",this.renkan.project.get("views").last())),this.view.autoScale()},drawSector:function(b,c,d,e,f,g,h,i){var j=this.renkan.options,k=e*Math.PI/180,l=f*Math.PI/180,m=this.icon_cache[h],n=-Math.sin(k),o=Math.cos(k),p=Math.cos(k)*c+g*n,q=Math.sin(k)*c+g*o,r=Math.cos(k)*d+g*n,s=Math.sin(k)*d+g*o,t=-Math.sin(l),u=Math.cos(l),v=Math.cos(l)*c-g*t,w=Math.sin(l)*c-g*u,x=Math.cos(l)*d-g*t,y=Math.sin(l)*d-g*u,z=(c+d)/2,A=(k+l)/2,B=Math.cos(A)*z,C=Math.sin(A)*z,D=Math.cos(A)*c,E=Math.cos(A)*d,F=Math.sin(A)*c,G=Math.sin(A)*d,H=Math.cos(A)*(d+3),I=Math.sin(A)*(d+j.buttons_label_font_size)+j.buttons_label_font_size/2;this.buttons_layer.activate();var J=new paper.Path;J.add([p,q]),J.arcTo([D,F],[v,w]),J.lineTo([x,y]),J.arcTo([E,G],[r,s]),J.fillColor=j.buttons_background,J.opacity=.5, -J.closed=!0,J.__representation=b;var K=new paper.PointText(H,I);K.characterStyle={fontSize:j.buttons_label_font_size,fillColor:j.buttons_label_color},H>2?K.paragraphStyle.justification="left":H<-2?K.paragraphStyle.justification="right":K.paragraphStyle.justification="center",K.visible=!1;var L=!1,M=new paper.Point(-200,-200),N=new paper.Group([J,K]),O=N.position,P=new paper.Point([B,C]),Q=new paper.Point(0,0);K.content=i,N.pivot=N.bounds.center,N.visible=!1,N.position=M;var R={show:function(){L=!0,N.position=Q.add(O),N.visible=!0},moveTo:function(a){Q=a,L&&(N.position=a.add(O))},hide:function(){L=!1,N.visible=!1,N.position=M},select:function(){J.opacity=.8,K.visible=!0},unselect:function(){J.opacity=.5,K.visible=!1},destroy:function(){N.remove()}},S=function(){var a=new paper.Raster(m);a.position=P.add(N.position).subtract(O),a.locked=!0,N.addChild(a)};return m.width?S():a(m).on("load",S),R},addToBundles:function(a){var c=b(this.bundles).find(function(b){return b.from===a.from_representation&&b.to===a.to_representation||b.from===a.to_representation&&b.to===a.from_representation});return"undefined"!=typeof c?c.edges.push(a):(c={from:a.from_representation,to:a.to_representation,edges:[a],getPosition:function(a){var c=a.from_representation===this.from?1:-1;return c*(b(this.edges).indexOf(a)-(this.edges.length-1)/2)}},this.bundles.push(c)),c},isEditable:function(){return this.renkan.options.editor_mode&&!this.renkan.read_only},onStatusChange:function(){var a=this.$.find(".Rk-Save-Button"),b=a.find(".Rk-TopBar-Tooltip-Contents");this.renkan.read_only?(a.removeClass("disabled Rk-Save-Online").addClass("Rk-Save-ReadOnly"),b.text(this.renkan.translate("Connection lost"))):this.renkan.options.manual_save?(a.removeClass("Rk-Save-ReadOnly Rk-Save-Online"),b.text(this.renkan.translate("Save Project"))):(a.removeClass("disabled Rk-Save-ReadOnly").addClass("Rk-Save-Online"),b.text(this.renkan.translate("Auto-save enabled"))),this.redrawUsers()},redrawMiniframe:function(){var a=this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),b=this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));this.minimap.miniframe.fitBounds(a,b)},rescaleMinimap:function(){var a=this.renkan.project.get("nodes");if(a.length>1){var b=a.map(function(a){return a.get("position").x}),c=a.map(function(a){return a.get("position").y}),d=Math.min.apply(Math,b),e=Math.min.apply(Math,c),f=Math.max.apply(Math,b),g=Math.max.apply(Math,c),h=Math.min(.8*this.view.scale*this.renkan.options.minimap_width/paper.view.bounds.width,.8*this.view.scale*this.renkan.options.minimap_height/paper.view.bounds.height,(this.renkan.options.minimap_width-2*this.renkan.options.minimap_padding)/(f-d),(this.renkan.options.minimap_height-2*this.renkan.options.minimap_padding)/(g-e));this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([(f+d)/2,(g+e)/2]).multiply(h)),this.minimap.scale=h}1===a.length&&(this.minimap.scale=.1,this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([a.at(0).get("position").x,a.at(0).get("position").y]).multiply(this.minimap.scale))),this.redraw()},toPaperCoords:function(a){return a.multiply(this.view.scale).add(this.view.offset)},toMinimapCoords:function(a){return a.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft)},toModelCoords:function(a){return a.subtract(this.view.offset).divide(this.view.scale)},addRepresentation:function(a,b){var c=d.getRenderer()[a],e=new c(this,b);return this.representations.push(e),e},addRepresentations:function(a,b){var c=this;b.forEach(function(b){c.addRepresentation(a,b)})},userTemplate:b.template('
                                                        • <%=name%>
                                                        • '),redrawUsers:function(){if(this.renkan.options.show_user_list){var b=[].concat((this.renkan.project.current_user_list||{}).models||[],(this.renkan.project.get("users")||{}).models||[]),c="",d=this.$.find(".Rk-Users"),e=d.find(".Rk-CurrentUser-Name"),f=d.find(".Rk-Edit-ColorPicker li"),g=d.find(".Rk-CurrentUser-Color"),h=this;e.off("click").text(this.renkan.translate("")),f.off("mouseleave click"),b.forEach(function(b){b.get("_id")===h.renkan.current_user?(e.text(b.get("title")),g.css("background",b.get("color")),h.isEditable()&&(h.renkan.options.user_name_editable&&e.click(function(){var c=a(this),d=a("").val(b.get("title")).blur(function(){b.set("title",a(this).val()),h.redrawUsers(),h.redraw()});c.empty().html(d),d.select()}),h.renkan.options.user_color_editable&&f.click(function(c){c.preventDefault(),h.isEditable()&&b.set("color",a(this).attr("data-color")),a(this).parent().hide()}).mouseleave(function(){g.css("background",b.get("color"))}))):c+=h.userTemplate({name:b.get("title"),background:b.get("color")})}),d.find(".Rk-UserList").html(c)}},removeRepresentation:function(a){a.destroy(),this.representations=b.reject(this.representations,function(b){return b===a})},getRepresentationByModel:function(a){if(a)return b.find(this.representations,function(b){return b.model===a})},removeRepresentationsOfType:function(a){var c=b.filter(this.representations,function(b){return b.type===a}),d=this;b.each(c,function(a){d.removeRepresentation(a)})},highlightModel:function(a){var b=this.getRepresentationByModel(a);b&&b.highlight()},unhighlightAll:function(a){b.each(this.representations,function(a){a.unhighlight()})},unselectAll:function(a){b.each(this.representations,function(a){a.unselect()})},redraw:function(){this.redrawActive&&(b.each(this.representations,function(a){a.redraw({dontRedrawEdges:!0})}),this.minimap&&"undefined"!=typeof this.view&&this.redrawMiniframe(),paper.view.draw())},resize:function(a,b,c,d){var e;this.minimap&&(this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.cliprectangle.fitBounds(this.minimap.topleft,this.minimap.size));var f=d/c,g=b/a;e=dg._MIN_DRAG_DISTANCE&&(this.is_dragging=!0);var e=paper.project.hitTest(c);this.is_dragging?this.click_target&&"function"==typeof this.click_target.paperShift?this.click_target.paperShift(d):this.view.paperShift(d):this.findTarget(e),paper.view.draw()},onMouseDown:function(b,c){var d=this.canvas_$.offset(),e=new paper.Point([b.pageX-d.left,b.pageY-d.top]);if(this.last_point=e,this.mouse_down=!0,!this.click_target||"Temp-edge"!==this.click_target.type){this.removeRepresentationsOfType("editor"),this.is_dragging=!1;var f=paper.project.hitTest(e);if(f&&"undefined"!=typeof f.item.__representation)this.click_target=f.item.__representation,this.click_target.mousedown(b,c);else if(this.click_target=null,this.isEditable()&&this.click_mode===g._CLICKMODE_ADDNODE){var h=this.toModelCoords(e),i={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:h.x,y:h.y},origin:g.OriginEnum.NODE_BUTTON},j=this.renkan.project.addNode(i);this.getRepresentationByModel(j).openEditor()}}this.click_mode&&(this.isEditable()&&this.click_mode===g._CLICKMODE_STARTEDGE&&this.click_target&&"Node"===this.click_target.type?(this.removeRepresentationsOfType("editor"),this.addTempEdge(this.click_target,e,g.OriginEnum.EDGE_BUTTON_BAR),this.click_mode=g._CLICKMODE_ENDEDGE,this.notif_$.fadeOut(function(){a(this).html(this.renkan.translate("Click on a second node to complete the edge")).fadeIn()})):(this.notif_$.hide(),this.click_mode=!1)),paper.view.draw()},onMouseUp:function(a,b){if(this.mouse_down=!1,this.click_target){var c=this.canvas_$.offset();this.click_target.mouseup({point:new paper.Point([a.pageX-c.left,a.pageY-c.top])},b)}else this.click_target=null,this.is_dragging=!1,b&&this.unselectAll(),this.view.updateUrl();paper.view.draw()},onScroll:function(a,b){if(this.totalScroll+=b,Math.abs(this.totalScroll)>=1){var c=this.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]).subtract(this.view.offset).multiply(Math.SQRT2-1);this.totalScroll>0?this.view.setScale(this.view.scale*Math.SQRT2,this.view.offset.subtract(d)):this.view.setScale(this.view.scale*Math.SQRT1_2,this.view.offset.add(d.divide(Math.SQRT2))),this.totalScroll=0}},onClick:function(a){if(!this.isEditable()){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);!this._open_uri_cb&&this.renkan.options.simple_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&(this._node_click_open_url=setTimeout(function(){window.open(d.item.__representation.model.get("uri"),"_blank"),this._node_click_open_url=null}.bind(this),200))}},onDoubleClick:function(a){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);if(!this.isEditable())return void(this.renkan.options.double_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&window.open(d.item.__representation.model.get("uri"),"_blank"));if(this.isEditable()&&(!d||"undefined"==typeof d.item.__representation)){var e=this.toModelCoords(c),f={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:e.x,y:e.y},origin:g.OriginEnum.NODE_DOUBLE_CLICK},h=this.renkan.project.addNode(f);this.getRepresentationByModel(h).openEditor()}paper.view.draw()},defaultDropHandler:function(b){var c={},d="";switch(b["text/x-iri-specific-site"]){case"twitter":d=a("
                                                          ").html(b["text/x-iri-selected-html"]);var e=d.find(".tweet");c.title=this.renkan.translate("Tweet by ")+e.attr("data-name"),c.uri="http://twitter.com/"+e.attr("data-screen-name")+"/status/"+e.attr("data-tweet-id"),c.image=e.find(".avatar").attr("src"),c.description=e.find(".js-tweet-text:first").text();break;case"google":d=a("
                                                          ").html(b["text/x-iri-selected-html"]),c.title=d.find("h3:first").text().trim(),c.uri=d.find("h3 a").attr("href"),c.description=d.find(".st:first").text().trim();break;default:b["text/x-iri-source-uri"]&&(c.uri=b["text/x-iri-source-uri"])}if((b["text/plain"]||b["text/x-iri-selected-text"])&&(c.description=(b["text/plain"]||b["text/x-iri-selected-text"]).replace(/[\s\n]+/gm," ").trim()),b["text/html"]||b["text/x-iri-selected-html"]){d=a("
                                                          ").html(b["text/html"]||b["text/x-iri-selected-html"]);var f=d.find("image");f.length&&(c.image=f.attr("xlink:href"));var g=d.find("path");g.length&&(c.clipPath=g.attr("d"));var h=d.find("img");h.length&&(c.image=h[0].src);var i=d.find("a");i.length&&(c.uri=i[0].href),c.title=d.find("[title]").attr("title")||c.title,c.description=d.text().replace(/[\s\n]+/gm," ").trim()}b["text/uri-list"]&&(c.uri=b["text/uri-list"]),b["text/x-moz-url"]&&!c.title&&(c.title=(b["text/x-moz-url"].split("\n")[1]||"").trim(),c.title===c.uri&&(c.title=!1)),b["text/x-iri-source-title"]&&!c.title&&(c.title=b["text/x-iri-source-title"]),(b["text/html"]||b["text/x-iri-selected-html"])&&(d=a("
                                                          ").html(b["text/html"]||b["text/x-iri-selected-html"]),c.image=d.find("[data-image]").attr("data-image")||c.image,c.uri=d.find("[data-uri]").attr("data-uri")||c.uri,c.title=d.find("[data-title]").attr("data-title")||c.title,c.description=d.find("[data-description]").attr("data-description")||c.description,c.clipPath=d.find("[data-clip-path]").attr("data-clip-path")||c.clipPath),c.title||(c.title=this.renkan.translate("Dragged resource"));for(var j=["title","description","uri","image"],k=0;k=3){var c=b.view.split(","),d={project:this.renkan.project,offset:{x:parseFloat(c[0]),y:parseFloat(c[1])},zoom_level:parseFloat(c[2])};this.view.setScale(d.zoom_level,new paper.Point(d.offset))}"undefined"!=typeof b.view&&"autoscale"===b.view&&this.view.autoScale(),"undefined"!=typeof b.viewsNodes&&("true"===b.viewsNodes?(this.view.hiddenNodes=(this.view.params.hidden_nodes||[]).concat(),this.view.hideNodes()):this.view.showNodes(!1)),this.unhighlightAll(),"undefined"!=typeof b.node&&b.node&&this.highlightModel(this.renkan.project.get("nodes").get(b.node)),"undefined"!=typeof b.edge&&b.edge&&this.highlightModel(this.renkan.project.get("edges").get(b.edge))},validViewIndex:function(a){var b=parseInt(a),c=0;return c=b<0?this.renkan.project.get("views").length+b:b,"undefined"==typeof this.renkan.project.get("views").at(b)&&(c=0),c},foldBins:function(){var a,b=this.$.find(".Rk-Fold-Bins"),c=this.renkan.$.find(".Rk-Bins"),d=0,e=this,f=e.canvas_$.width();c.position().left<0?(d=new paper.Point([-c.width()/2,0]),c.animate({left:0},250),this.$.animate({left:300},250,function(){var a=e.$.width();paper.view.viewSize=new paper.Size([a,e.canvas_$.height()])}),a=f-c.width()0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show()},redraw:function(a){},initWithParams:function(){var a=this;a.options.view_force_autoscale?this.autoScale():a.setScale(a.params.zoom_level,new paper.Point(a.params.offset)),a.options.hide_nodes&&!a.options.view_show_hiddennodes?(a.hiddenNodes=(a.params.hidden_nodes||[]).concat(),a.hideNodes()):a.showNodes(!1)},saveView:function(){var a=this,b={x:a.offset.x,y:a.offset.y};a.model=a.renkan.project.addView({zoom_level:a.scale,offset:b,hidden_nodes:a.hiddenNodes.concat()}),a.params={zoom_level:a.model.get("zoom_level"),offset:a.model.get("offset"),hidden_nodes:a.model.get("hidden_nodes")},this.$.find(".Rk-ZoomSetSaved").show(),a.updateUrl()},addHiddenNode:function(a){this.hideNode(a),this.hiddenNodes.push(a.id),this.updateUrl()},hideNode:function(a){"undefined"!=typeof this.renderer.getRepresentationByModel(a)&&this.renderer.getRepresentationByModel(a).hide()},hideNodes:function(){var a=this;this.hiddenNodes.forEach(function(b,c){var d=a.renkan.project.get("nodes").get(b);return"undefined"!=typeof d?a.hideNode(a.renkan.project.get("nodes").get(b)):void a.hiddenNodes.splice(c,1)}),paper.view.draw()},showNodes:function(a){var b=this;this.hiddenNodes.forEach(function(c){b.renderer.getRepresentationByModel(b.renkan.project.get("nodes").get(c)).show(a)}),a||(this.hiddenNodes=[]),paper.view.draw()},setScale:function(a,b){a/this.initialScale>e._MIN_SCALE&&a/this.initialScale1){var c=b.map(function(a){return a.get("position").x}),d=b.map(function(a){return a.get("position").y}),e=Math.min.apply(Math,c),f=Math.min.apply(Math,d),g=Math.max.apply(Math,c),h=Math.max.apply(Math,d),i=Math.min((paper.view.size.width-2*this.renkan.options.autoscale_padding)/(g-e),(paper.view.size.height-2*this.renkan.options.autoscale_padding)/(h-f));this.initialScale=i,"undefined"!=typeof a&&parseFloat(a.zoom_level)>0&&parseFloat(a.offset.x)>0&&parseFloat(a.offset.y)>0?this.setScale(parseFloat(a.zoom_level),new paper.Point(parseFloat(a.offset.x),parseFloat(a.offset.y))):this.setScale(i,paper.view.center.subtract(new paper.Point([(g+e)/2,(h+f)/2]).multiply(i)))}1===b.length&&this.setScale(1,paper.view.center.subtract(new paper.Point([b.at(0).get("position").x,b.at(0).get("position").y])))},paperShift:function(a){this.offset=this.offset.add(a),this.renderer.redraw()},updateUrl:function(){if(this.options.url_parameters&&this.options.update_url){var b={},c=Backbone.history.getFragment().split("?");c.length>1&&c[1].split("&").forEach(function(a){var c=a.split("=");b[c[0]]=decodeURIComponent(c[1])}),b.view=Math.round(1e3*this.offset.x)/1e3+","+Math.round(1e3*this.offset.y)/1e3+","+Math.round(1e3*this.scale)/1e3,this.renkan.project.get("views").indexOf(this.model)>-1?(b.viewIndex=this.renkan.project.get("views").indexOf(this.model),b.viewIndex===this.renkan.project.get("views").length-1&&(b.viewIndex=-1)):b.viewIndex&&delete b.viewIndex,this.renkan.router.navigate("?"+decodeURIComponent(a.param(b)),{trigger:!1,replace:!0})}},destroy:function(a){this._super("destroy"),this.showNodes(!1)}}).value(),f}),"function"==typeof require.config&&require.config({paths:{jquery:"../lib/jquery/jquery",underscore:"../lib/lodash/lodash",filesaver:"../lib/FileSaver/FileSaver",requtils:"require-utils","jquery-private":"jquery-private","ckeditor-core":"../lib/ckeditor/ckeditor",screenfull:"../lib/screenfull/screenfull-umd"},map:{"*":{jquery:"jquery-private"},"jquery-private":{jquery:"jquery"}},shim:{"ckeditor-core":{exports:"CKEDITOR"}}}),require(["renderer/baserepresentation","renderer/basebutton","renderer/noderepr","renderer/edge","renderer/tempedge","renderer/baseeditor","renderer/nodeeditor","renderer/edgeeditor","renderer/nodebutton","renderer/nodeeditbutton","renderer/noderemovebutton","renderer/nodehidebutton","renderer/nodeshowbutton","renderer/noderevertbutton","renderer/nodelinkbutton","renderer/nodeenlargebutton","renderer/nodeshrinkbutton","renderer/edgeeditbutton","renderer/edgeremovebutton","renderer/edgerevertbutton","renderer/miniframe","renderer/scene","renderer/viewrepr"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){"use strict";var x=window.Rkns;"undefined"==typeof x.Renderer&&(x.Renderer={});var y=x.Renderer;y._BaseRepresentation=a,y._BaseButton=b,y.Node=c,y.Edge=d,y.View=w,y.TempEdge=e,y._BaseEditor=f,y.NodeEditor=g,y.EdgeEditor=h,y._NodeButton=i,y.NodeEditButton=j,y.NodeRemoveButton=k,y.NodeHideButton=l,y.NodeShowButton=m,y.NodeRevertButton=n,y.NodeLinkButton=o,y.NodeEnlargeButton=p,y.NodeShrinkButton=q,y.EdgeEditButton=r,y.EdgeRemoveButton=s,y.EdgeRevertButton=t,y.MiniFrame=u,y.Scene=v,startRenkan()}),define("main-renderer",function(){}),define("jquery-private",["jquery"],function(a){"use strict";return a.noConflict(!0)}); +this.renkanJST=this.renkanJST||{},this.renkanJST["templates/colorpicker.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                        • ';return __p},this.renkanJST["templates/edgeeditor_readonly.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                                          \n ×\n ',options.show_edge_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',edge.uri&&(__p+='\n \n '),__p+="\n "+__e(edge.title)+"\n ",edge.uri&&(__p+=" "),__p+="\n \n

                                                          \n",options.show_edge_tooltip_uri&&edge.uri&&(__p+='\n

                                                          \n '+__e(edge.short_uri)+"\n

                                                          \n"),__p+="\n

                                                          "+(null==(__t=edge.description)?"":__t)+"

                                                          \n",options.show_edge_tooltip_nodes&&(__p+='\n

                                                          \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                                                          \n

                                                          \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                                                          \n"),__p+="\n",options.show_edge_tooltip_creator&&edge.has_creator&&(__p+='\n

                                                          \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                                                          \n"),__p+="\n";return __p},this.renkanJST["templates/edgeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='

                                                          \n ×'+__e(renkan.translate("Edit Edge"))+"\n

                                                          \n

                                                          \n \n \n

                                                          \n',options.show_edge_editor_uri&&(__p+="\n

                                                          \n \n \n \n

                                                          \n ',options.properties.length&&(__p+="\n

                                                          \n \n \n

                                                          \n")),__p+="\n",options.show_edge_editor_style&&(__p+='\n
                                                          \n ',options.show_edge_editor_style_color&&(__p+='\n
                                                          \n '+__e(renkan.translate("Edge color:"))+'\n
                                                          \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Edge"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                                          \n
                                                          \n "),__p+="\n ",options.show_edge_editor_style_dash&&(__p+='\n
                                                          \n '+__e(renkan.translate("Dash:"))+'\n \n
                                                          \n "),__p+="\n ",options.show_edge_editor_style_thickness&&(__p+='\n
                                                          \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(edge.thickness)+'\n +\n
                                                          \n '),__p+="\n ",options.show_edge_editor_style_arrow&&(__p+='\n
                                                          \n '+__e(renkan.translate("Arrow:"))+'\n \n
                                                          \n "),__p+="\n
                                                          \n"),__p+="\n",options.show_edge_editor_direction&&(__p+='\n

                                                          \n '+__e(renkan.translate("Change edge direction"))+"\n

                                                          \n"),__p+="\n",options.show_edge_editor_nodes&&(__p+='\n

                                                          \n '+__e(renkan.translate("From:"))+'\n \n '+__e(shortenText(edge.from_title,25))+'\n

                                                          \n

                                                          \n '+__e(renkan.translate("To:"))+'\n \n '+__e(shortenText(edge.to_title,25))+"\n

                                                          \n"),__p+="\n",options.show_edge_editor_creator&&edge.has_creator&&(__p+='\n

                                                          \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(edge.created_by_title,25))+"\n

                                                          \n"),__p+="\n";return __p},this.renkanJST["templates/ldtjson-bin/annotationtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                        • \n\n \n

                                                          '+(null==(__t=htitle)?"":__t)+"

                                                          \n

                                                          "+(null==(__t=hdescription)?"":__t)+"

                                                          \n

                                                          Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                                                          \n
                                                          \n
                                                        • \n';return __p},this.renkanJST["templates/ldtjson-bin/segmenttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                        • \n\n \n

                                                          '+(null==(__t=htitle)?"":__t)+"

                                                          \n

                                                          "+(null==(__t=hdescription)?"":__t)+"

                                                          \n

                                                          Start: "+(null==(__t=start)?"":__t)+", End: "+(null==(__t=end)?"":__t)+", Duration: "+(null==(__t=duration)?"":__t)+'

                                                          \n
                                                          \n
                                                        • \n';return __p},this.renkanJST["templates/ldtjson-bin/tagtemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                        • \n\n \n

                                                          '+(null==(__t=htitle)?"":__t)+'

                                                          \n
                                                          \n
                                                        • \n';return __p},this.renkanJST["templates/list-bin.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='
                                                        • \n'),__p+='\n

                                                          \n ',url&&(__p+='\n \n '),__p+="\n "+(null==(__t=htitle)?"":__t)+"\n ",url&&(__p+=""),__p+="\n

                                                          \n ",description&&(__p+='\n

                                                          '+(null==(__t=hdescription)?"":__t)+"

                                                          \n "),__p+="\n ",image&&(__p+='\n
                                                          \n '),__p+="\n
                                                        • \n";return __p},this.renkanJST["templates/main.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_bins&&(__p+='\n
                                                          \n
                                                          \n

                                                          '+__e(translate("Select contents:"))+'

                                                          \n
                                                          \n \n
                                                          \n
                                                          \n
                                                            \n
                                                            \n \n
                                                            \n
                                                            \n \n \n
                                                            \n
                                                              \n
                                                              \n'),__p+=" ",options.show_editor&&(__p+='\n
                                                              \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                                              \n",node.uri&&options.show_node_tooltip_uri&&(__p+='\n

                                                              \n '+__e(node.short_uri)+"\n

                                                              \n"),__p+=" ",options.show_node_tooltip_description&&(__p+='\n

                                                              '+(null==(__t=node.description)?"":__t)+"

                                                              \n"),__p+=" ",node.image&&options.show_node_tooltip_image&&(__p+='\n \n'),__p+=" ",node.has_creator&&options.show_node_tooltip_creator&&(__p+='\n

                                                              \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                                              \n"),__p+='\n '+__e(renkan.translate("Link to the node"))+"\n";return __p},this.renkanJST["templates/nodeeditor_video.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}function get_youtube_id(a){var b=/^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/,c=a.match(b);return!(!c||11!=c[2].length)&&c[2]}function get_vimeo_id(a){var b=/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,c=a.match(b);return!!c&&c[2]}function get_dailymotion_id(a){var b=/^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$/,c=a.match(b);return!!c&&(void 0!==c[4]?c[4]:c[2])}function get_facebook_id(a){var b=/^https?:\/\/www\.facebook\.com\/(?:video\.php\?v=\d+|.*?\/videos\/\d+)\/?$/,c=a.match(b);return!!c&&encodeURIComponent(a)}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj){if(__p+='\n

                                                              \n ×\n ',options.show_node_tooltip_color&&(__p+='\n \n '),__p+='\n \n ',node.uri&&(__p+='\n \n '),__p+="\n "+(null==(__t=node.title)?"":__t)+"\n ",node.uri&&(__p+=""),__p+="\n \n

                                                              \n",node.uri&&options.show_node_tooltip_uri){var video_id=!1;__p+=(video_id=get_youtube_id(node.uri))?'\n \n

                                                              '+__e(renkan.translate("Link"))+"

                                                              \n ":(video_id=get_vimeo_id(node.uri))?'\n \n

                                                              '+__e(renkan.translate("Link"))+"

                                                              \n ":(video_id=get_dailymotion_id(node.uri))?'\n \n

                                                              '+__e(renkan.translate("Link"))+"

                                                              \n ":(video_id=get_facebook_id(node.uri))?'\n \n

                                                              '+__e(renkan.translate("Video link"))+"

                                                              \n ":' \n \n '}__p+='\n '+__e(renkan.translate("Link to the node"))+"\n"}return __p},this.renkanJST["templates/nodeeditor.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)__p+='\n

                                                              \n ×'+__e(renkan.translate("Edit Node"))+"\n

                                                              \n

                                                              \n \n ",__p+=options.show_node_editor_title_richtext?'\n

                                                              '+(null==(__t=node.title)?"":__t)+"
                                                              \n ":'\n \n ',__p+="\n

                                                              \n",options.show_node_title_style&&(__p+='\n
                                                              \n
                                                              \n '+__e(renkan.translate("Title color:"))+'\n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Title"))?"":__t)+'\n
                                                              \n
                                                              \n '+__e(renkan.translate("Title size:"))+'\n -\n '+__e(node.title_size.toFixed(1))+'\n +\n
                                                              \n
                                                              \n'),__p+=" ",options.show_node_editor_uri&&(__p+="\n

                                                              \n \n \n \n

                                                              \n'),__p+=" ",options.change_types&&(__p+="\n

                                                              \n \n \n

                                                              \n"),__p+=" ",options.show_node_editor_description&&(__p+="\n

                                                              \n \n ",__p+=options.show_node_editor_description_richtext?'\n

                                                              '+(null==(__t=node.description)?"":__t)+"
                                                              \n ":'\n \n ",__p+="\n

                                                              \n"),__p+=" ",options.show_node_editor_size&&(__p+='\n

                                                              \n '+__e(renkan.translate("Size:"))+'\n -\n '+__e(node.size)+'\n +\n

                                                              \n'),__p+=" ",options.show_node_editor_style&&(__p+='\n
                                                              \n ',options.show_node_editor_style_color&&(__p+='\n
                                                              \n \n '+__e(renkan.translate("Node color:"))+'\n
                                                              \n \n \n \n '+(null==(__t=renkan.colorPicker("Rk-Editor-ColorPicker-Node"))?"":__t)+'\n '+__e(renkan.translate("Choose color"))+"\n
                                                              \n
                                                              \n "),__p+="\n ",options.show_node_editor_style_dash&&(__p+='\n
                                                              \n '+__e(renkan.translate("Dash:"))+'\n \n
                                                              \n "),__p+="\n ",options.show_node_editor_style_thickness&&(__p+='\n
                                                              \n '+__e(renkan.translate("Thickness:"))+'\n -\n '+__e(node.thickness)+'\n +\n
                                                              \n '),__p+="\n
                                                              \n"),__p+=" ",options.show_node_editor_image&&(__p+='\n
                                                              \n
                                                              \n \n ',node.clip_path&&(__p+='\n \n \n \n '),__p+="\n
                                                              \n
                                                              \n

                                                              \n \n

                                                              \n \n \n
                                                              \n

                                                              \n",options.allow_image_upload&&(__p+="\n

                                                              \n \n \n

                                                              \n')),__p+=" ",options.show_node_editor_creator&&node.has_creator&&(__p+='\n

                                                              \n '+__e(renkan.translate("Created by:"))+'\n \n '+__e(shortenText(node.created_by_title,25))+"\n

                                                              \n"),__p+=" ",options.change_shapes&&(__p+="\n

                                                              \n \n \n

                                                              \n"),__p+="\n";return __p},this.renkanJST["templates/scene.html"]=function(obj){function print(){__p+=__j.call(arguments,"")}obj||(obj={});var __t,__p="",__e=_.escape,__j=Array.prototype.join;with(obj)options.show_top_bar&&(__p+='\n
                                                              \n
                                                              \n ',__p+=options.editor_mode&&options.title_editable?'\n \n ':'\n

                                                              \n '+__e(project.get("title")||translate("Untitled project"))+"\n

                                                              \n ",__p+="\n ",options.show_user_list&&(__p+='\n
                                                              \n
                                                              \n ',options.show_user_color&&(__p+='\n
                                                              \n \n ',options.user_color_editable&&(__p+='\n \n '),__p+="\n \n ",options.user_color_editable&&print(colorPicker("Rk-Editor-ColorPicker-User")),__p+="\n
                                                              \n "),__p+='\n <unknown user>\n
                                                              \n
                                                                \n
                                                                \n '),__p+="\n ",options.home_button_url&&(__p+='\n
                                                                \n \n
                                                                \n
                                                                \n '+__e(translate(options.home_button_title))+"\n
                                                                \n
                                                                \n
                                                                \n "),__p+="\n ",options.show_fullscreen_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '+__e(translate("Full Screen"))+"\n
                                                                \n
                                                                \n
                                                                \n "),__p+="\n ",options.editor_mode?(__p+="\n ",options.show_addnode_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '+__e(translate("Add Node"))+"\n
                                                                \n
                                                                \n
                                                                \n "),__p+="\n ",options.show_addedge_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '+__e(translate("Add Edge"))+"\n
                                                                \n
                                                                \n
                                                                \n "),__p+="\n ",options.show_export_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '+__e(translate("Download Project"))+"\n
                                                                \n
                                                                \n
                                                                \n "),__p+="\n ",options.show_save_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '),__p+="\n ",options.show_open_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '+__e(translate("Open Project"))+"\n
                                                                \n
                                                                \n
                                                                \n "),__p+="\n ",options.show_bookmarklet&&(__p+='\n
                                                                \n \n
                                                                \n
                                                                \n '+__e(translate("Renkan 'Drag-to-Add' bookmarklet"))+'\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '),__p+="\n "):(__p+="\n ",options.show_export_button&&(__p+='\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '+__e(translate("Download Project"))+'\n
                                                                \n
                                                                \n
                                                                \n
                                                                \n '),__p+="\n "),__p+="\n ",options.show_search_field&&(__p+='\n
                                                                \n \n
                                                                \n
                                                                \n '),__p+="\n
                                                                \n"),__p+='\n
                                                                \n
                                                                \n
                                                                \n ',options.editor_mode&&options.save_view&&(__p+='\n
                                                                \n '),__p+="\n ",options.save_view&&(__p+='\n
                                                                \n ',options.hide_nodes&&(__p+='\n \t \n '),__p+=" \n "),__p+="\n
                                                                \n "),__p+="\n \n\n";return __p},this.renkanJST["templates/search.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                              • '+(null==(__t=title)?"":__t)+"
                                                              • ";return __p},this.renkanJST["templates/wikipedia-bin/resulttemplate.html"]=function(obj){obj||(obj={});var __t,__p="",__e=_.escape;with(obj)__p+='
                                                              • \n\n \n

                                                                \n '+(null==(__t=htitle)?"":__t)+'\n

                                                                \n

                                                                '+(null==(__t=hdescription)?"":__t)+"

                                                                \n
                                                              • \n";return __p},function(a){"use strict";"object"!=typeof a.Rkns&&(a.Rkns={});var b=a.Rkns,c=b.$=a.jQuery,d=b._=a._;b.pickerColors=["#8f1919","#a80000","#d82626","#ff0000","#e87c7c","#ff6565","#f7d3d3","#fecccc","#8f5419","#a85400","#d87f26","#ff7f00","#e8b27c","#ffb265","#f7e5d3","#fee5cc","#8f8f19","#a8a800","#d8d826","#feff00","#e8e87c","#feff65","#f7f7d3","#fefecc","#198f19","#00a800","#26d826","#00ff00","#7ce87c","#65ff65","#d3f7d3","#ccfecc","#198f8f","#00a8a8","#26d8d8","#00feff","#7ce8e8","#65feff","#d3f7f7","#ccfefe","#19198f","#0000a8","#2626d8","#0000ff","#7c7ce8","#6565ff","#d3d3f7","#ccccfe","#8f198f","#a800a8","#d826d8","#ff00fe","#e87ce8","#ff65fe","#f7d3f7","#feccfe","#000000","#242424","#484848","#6d6d6d","#919191","#b6b6b6","#dadada","#ffffff"],b.__renkans=[];var e=b._BaseBin=function(a,c){if("undefined"!=typeof a){this.renkan=a,this.renkan.$.find(".Rk-Bin-Main").hide(),this.$=b.$("
                                                              • ").addClass("Rk-Bin").appendTo(a.$.find(".Rk-Bin-List")),this.title_icon_$=b.$("").addClass("Rk-Bin-Title-Icon").appendTo(this.$);var d=this;b.$("").attr({href:"#", +title:a.translate("Close bin")}).addClass("Rk-Bin-Close").html("×").appendTo(this.$).click(function(){return d.destroy(),a.$.find(".Rk-Bin-Main:visible").length||a.$.find(".Rk-Bin-Main:last").slideDown(),a.resizeBins(),!1}),b.$("").attr({href:"#",title:a.translate("Refresh bin")}).addClass("Rk-Bin-Refresh").appendTo(this.$).click(function(){return d.refresh(),!1}),this.count_$=b.$("
                                                                ").addClass("Rk-Bin-Count").appendTo(this.$),this.title_$=b.$("

                                                                ").addClass("Rk-Bin-Title").appendTo(this.$),this.main_$=b.$("
                                                                ").addClass("Rk-Bin-Main").appendTo(this.$).html('

                                                                '+a.translate("Loading, please wait")+"

                                                                "),this.title_$.html(c.title||"(new bin)"),this.renkan.resizeBins(),c.auto_refresh&&window.setInterval(function(){d.refresh()},c.auto_refresh)}};e.prototype.destroy=function(){this.$.detach(),this.renkan.resizeBins()};var f=b.Renkan=function(a){var e=this;b.__renkans.push(this),this.options=d.defaults(a,b.defaults,{templates:d.defaults(a.templates,renkanJST)||renkanJST,node_editor_templates:d.defaults(a.node_editor_templates,b.defaults.node_editor_templates)}),this.template=this.options.templates["templates/main.html"];var f={};if(d.each(this.options.node_editor_templates,function(a,b){f[b]=e.options.templates[a],delete e.options.templates[a]}),this.options.node_editor_templates=f,d.each(this.options.property_files,function(a){b.$.getJSON(a,function(a){e.options.properties=e.options.properties.concat(a)})}),this.read_only=this.options.read_only||!this.options.editor_mode,this.router=new b.Router,this.project=new b.Models.Project,this.dataloader=new b.DataLoader.Loader(this.project,this.options),this.setCurrentUser=function(a,b){this.project.addUser({_id:a,title:b}),this.current_user=a,this.renderer.redrawUsers()},"undefined"!=typeof this.options.user_id&&(this.current_user=this.options.user_id),this.$=b.$("#"+this.options.container),this.$.addClass("Rk-Main").html(this.template(this)),this.tabs=[],this.search_engines=[],this.current_user_list=new b.Models.UsersList,this.current_user_list.on("add remove",function(){this.renderer&&this.renderer.redrawUsers()}),this.colorPicker=function(a){var c=e.options.templates["templates/colorpicker.html"];return'
                                                                  '+b.pickerColors.map(function(a){return c({c:a})}).join("")+"
                                                                "},this.options.show_editor&&(this.renderer=new b.Renderer.Scene(this)),this.options.search.length){var g=e.options.templates["templates/search.html"],h=this.$.find(".Rk-Search-List"),i=this.$.find(".Rk-Web-Search-Input"),j=this.$.find(".Rk-Web-Search-Form");d.each(this.options.search,function(a,c){b[a.type]&&b[a.type].Search&&e.search_engines.push(new b[a.type].Search(e,a))}),h.html(d(this.search_engines).map(function(a,b){return g({key:b,title:a.getSearchTitle(),className:a.getBgClass()})}).join("")),h.find("li").click(function(){var a=b.$(this);e.setSearchEngine(a.attr("data-key")),j.submit()}),j.submit(function(){if(i.val()){var a=e.search_engine;a.search(i.val())}return!1}),this.$.find(".Rk-Search-Current").mouseenter(function(){h.slideDown()}),this.$.find(".Rk-Search-Select").mouseleave(function(){h.hide()}),this.setSearchEngine(0)}else this.$.find(".Rk-Web-Search-Form").detach();d.each(this.options.bins,function(a){b[a.type]&&b[a.type].Bin&&e.tabs.push(new b[a.type].Bin(e,a))});var k=!1;this.$.find(".Rk-Bins").on("click",".Rk-Bin-Title,.Rk-Bin-Title-Icon",function(){var a=b.$(this).siblings(".Rk-Bin-Main");a.is(":hidden")&&(e.$.find(".Rk-Bin-Main").slideUp(),a.slideDown())}),this.options.show_editor&&this.$.find(".Rk-Bins").on("mouseover",".Rk-Bin-Item",function(a){var f=b.$(this);if(f&&c(f).attr("data-uri")){var g=e.project.get("nodes").where({uri:c(f).attr("data-uri")});d.each(g,function(a){e.renderer.highlightModel(a)})}}).mouseout(function(){e.renderer.unhighlightAll()}).on("mousemove",".Rk-Bin-Item",function(a){try{this.dragDrop()}catch(a){}}).on("touchstart",".Rk-Bin-Item",function(a){k=!1}).on("touchmove",".Rk-Bin-Item",function(a){a.preventDefault();var b=a.originalEvent.changedTouches[0],c=e.renderer.canvas_$.offset(),d=e.renderer.canvas_$.width(),f=e.renderer.canvas_$.height();if(b.pageX>=c.left&&b.pageX=c.top&&b.pageY1?a:null);c.source!==l&&(l=c.source,d.each(e.tabs,function(a){a.render(c)}))}}),this.$.find(".Rk-Bins-Search-Form").submit(function(){return!1})};f.prototype.translate=function(a){return b.i18n[this.options.language]&&b.i18n[this.options.language][a]?b.i18n[this.options.language][a]:this.options.language.length>2&&b.i18n[this.options.language.substr(0,2)]&&b.i18n[this.options.language.substr(0,2)][a]?b.i18n[this.options.language.substr(0,2)][a]:a},f.prototype.onStatusChange=function(){this.renderer.onStatusChange()},f.prototype.setSearchEngine=function(a){this.search_engine=this.search_engines[a],this.$.find(".Rk-Search-Current").attr("class","Rk-Search-Current "+this.search_engine.getBgClass());for(var b=this.search_engine.getBgClass().split(" "),c="",d=0;d"+a.translate("Drag items from this website, drop them in Renkan").replace(/ /g,"_")+"

                                                                '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\/\\/[^\\/]*twitter\\.com\\//,s:'.tweet',n:'twitter'},{r:/https?:\\/\\/[^\\/]*google\\.[^\\/]+\\//,s:'.g',n:'google'},{r:/https?:\\/\\/[^\\/]*lemonde\\.fr\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();"},shortenText:function(a,b){return a.length>b?a.substr(0,b)+"…":a},drawEditBox:function(a,b,c,d,e,f){e.css({width:a.tooltip_width-2*a.tooltip_padding});var g=e[0].getBoundingClientRect(),h=f.$[0].getBoundingClientRect();g.bottom>h.bottom-2*a.tooltip_padding-10&&e.css({"overflow-x":"hidden","overflow-y":"scroll","max-height":h.bottom-2*a.tooltip_padding-5-g.top+"px"});var i=e.outerHeight()+2*a.tooltip_padding+5,j=b.xpaper.view.size.height-a.tooltip_margin&&(m=Math.max(paper.view.size.height-a.tooltip_margin,b.y+a.tooltip_arrow_width/2)-i),m1?a.offset[1]:a.offset[0]):null!=a.offset.x&&(c.x=a.offset.x,c.y=a.offset.y),a.offset=c}return a},toJSON:function(){return{_id:this.get("_id"),zoom_level:this.get("zoom_level"),offset:this.get("offset"),title:this.get("title"),description:this.get("description"),created_by:this.get("created_by")?this.get("created_by").get("_id"):null,hidden_nodes:this.get("hidden_nodes")}}}),i=(c.Project=d.extend({schema_version:"2",type:"project",blacklist:["saveStatus","loadingStatus"],relations:[{type:b.HasMany,key:"users",relatedModel:e,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"nodes",relatedModel:f,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"edges",relatedModel:g,reverseRelation:{key:"project",includeInJSON:"_id"}},{type:b.HasMany,key:"views",relatedModel:h,reverseRelation:{key:"project",includeInJSON:"_id"}}],addUser:function(a,b){a.project=this;var c=e.findOrCreate(a);return this.get("users").push(c,b),c},addNode:function(a,b){a.project=this;var c=f.findOrCreate(a);return this.get("nodes").push(c,b),c},addEdge:function(a,b){a.project=this;var c=g.findOrCreate(a);return this.get("edges").push(c,b),c},addView:function(a,b){a.project=this;var c=h.findOrCreate(a);return this.get("views").push(c,b),c},removeNode:function(a){this.get("nodes").remove(a)},removeEdge:function(a){this.get("edges").remove(a)},validate:function(a){var b=this;_.each([].concat(a.users,a.nodes,a.edges,a.views),function(a){a&&(a.project=b)})},getSchemaVersion:function(a){var b=a;"undefined"==typeof b&&(b=this);var c=b.schema_version;return c?c:1},initialize:function(){var a=this;this.on("remove:nodes",function(b){a.get("edges").remove(a.get("edges").filter(function(a){return a.get("from")===b||a.get("to")===b}))})},toJSON:function(){var a=_.clone(this.attributes);for(var c in a)(a[c]instanceof b.Model||a[c]instanceof b.Collection||a[c]instanceof d)&&(a[c]=a[c].toJSON());return _.omit(a,this.blacklist)}}),c.RosterUser=b.Model.extend({type:"roster_user",idAttribute:"_id",constructor:function(a){"undefined"!=typeof a&&(a._id=a._id||a.id||c.getUID(this),a.title=a.title||"(untitled "+this.type+")",a.description=a.description||"",a.uri=a.uri||"",a.project=a.project||null,a.site_id=a.site_id||0,"function"==typeof this.prepare&&(a=this.prepare(a))),b.Model.prototype.constructor.call(this,a)},validate:function(){if(!this.type)return"object has no type"},prepare:function(a){return a.color=a.color||"#666666",a},toJSON:function(){return{_id:this.get("_id"),title:this.get("title"),uri:this.get("uri"),description:this.get("description"),color:this.get("color"),project:null!=this.get("project")?this.get("project").get("id"):null,site_id:this.get("site_id")}}}));c.UsersList=b.Collection.extend({model:i})}(window),Rkns.defaults={language:navigator.language||navigator.userLanguage||"en",container:"renkan",search:[],bins:[],static_url:"",popup_editor:!0,editor_panel:"editor-panel",show_bins:!0,properties:[],show_editor:!0,read_only:!1,editor_mode:!0,manual_save:!1,show_top_bar:!0,default_user_color:"#303030",size_bug_fix:!1,force_resize:!1,allow_double_click:!0,double_click_open_url:!0,simple_click_open_url:!1,zoom_on_scroll:!0,element_delete_delay:0,autoscale_padding:50,resize:!0,show_zoom:!0,save_view:!0,view_force_autoscale:!0,view_show_hiddennodes:!0,default_index_view:-1,url_parameters:!0,update_url:!0,show_search_field:!0,show_user_list:!0,user_name_editable:!0,user_color_editable:!0,title_editable:!0,show_user_color:!0,show_save_button:!0,show_export_button:!0,show_open_button:!1,show_addnode_button:!0,show_addedge_button:!0,show_bookmarklet:!0,show_fullscreen_button:!0,home_button_url:!1,home_button_title:"Home",show_minimap:!0,minimap_width:160,minimap_height:120,minimap_padding:20,minimap_background_color:"#ffffff",minimap_border_color:"#cccccc",minimap_highlight_color:"#ffff00",minimap_highlight_weight:5,buttons_background:"#202020",buttons_label_color:"#c000c0",buttons_label_font_size:9,ghost_opacity:.3,default_dash_array:[4,5],show_node_circles:!0,clip_node_images:!0,node_images_fill_mode:!1,node_size_base:25,node_stroke_width:2,node_stroke_max_width:12,selected_node_stroke_width:4,selected_node_stroke_max_width:24,node_stroke_witdh_scale:5,node_title_size_min:0,node_title_size_max:5,node_title_size_step:.1,node_fill_color:"#ffffff",highlighted_node_fill_color:"#ffff00",node_title_color:"#000000",node_label_distance:5,node_label_max_length:60,label_untitled_nodes:"(untitled)",hide_nodes:!0,change_shapes:!0,change_types:!0,node_editor_templates:{default:"templates/nodeeditor_readonly.html",video:"templates/nodeeditor_video.html"},edge_stroke_width:2,edge_stroke_max_width:12,selected_edge_stroke_width:4,selected_edge_stroke_max_width:24,edge_stroke_witdh_scale:5,edge_label_distance:0,edge_label_max_length:20,edge_arrow_length:18,edge_arrow_width:12,edge_arrow_max_width:32,edge_gap_in_bundles:12,highlighted_edge_color:"#ffff00",label_untitled_edges:"",tooltip_width:275,tooltip_padding:10,tooltip_margin:15,tooltip_arrow_length:20,tooltip_arrow_width:40,tooltip_top_color:"#f0f0f0",tooltip_bottom_color:"#d0d0d0",tooltip_border_color:"#808080",tooltip_border_width:1,tooltip_opacity:.8,richtext_editor_config:{toolbarGroups:[{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"clipboard",groups:["clipboard","undo"]},"/",{name:"styles"}],removePlugins:"colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates"},show_node_title_style:!0,show_node_editor_uri:!0,show_node_editor_title:!0,show_node_editor_title_richtext:!0,show_node_editor_description:!0,show_node_editor_description_richtext:!0,show_node_editor_size:!0,show_node_editor_style:!0,show_node_editor_style_color:!0,show_node_editor_style_dash:!0,show_node_editor_style_thickness:!0,show_node_editor_image:!0,show_node_editor_creator:!0,allow_image_upload:!0,uploaded_image_max_kb:500,show_node_tooltip_uri:!0,show_node_tooltip_description:!0,show_node_tooltip_color:!0,show_node_tooltip_image:!0,show_node_tooltip_creator:!0,show_edge_editor_uri:!0,show_edge_editor_style:!0,show_edge_editor_style_color:!0,show_edge_editor_style_dash:!0,show_edge_editor_style_thickness:!0,show_edge_editor_style_arrow:!0,show_edge_editor_direction:!0,show_edge_editor_nodes:!0,show_edge_editor_creator:!0,show_edge_tooltip_uri:!0,show_edge_tooltip_color:!0,show_edge_tooltip_nodes:!0,show_edge_tooltip_creator:!0},Rkns.i18n={fr:{"Edit Node":"Édition d’un nœud","Edit Edge":"Édition d’un lien","Title:":"Titre :","URI:":"URI :","Description:":"Description :","From:":"De :","To:":"Vers :",Image:"Image","Image URL:":"URL d'Image","Choose Image File:":"Choisir un fichier image","Full Screen":"Mode plein écran","Add Node":"Ajouter un nœud","Add Edge":"Ajouter un lien","Save Project":"Enregistrer le projet","Open Project":"Ouvrir un projet","Auto-save enabled":"Enregistrement automatique activé","Connection lost":"Connexion perdue","Created by:":"Créé par :","Zoom In":"Agrandir l’échelle","Zoom Out":"Rapetisser l’échelle",Edit:"Éditer",Remove:"Supprimer","Cancel deletion":"Annuler la suppression","Link to another node":"Créer un lien",Enlarge:"Agrandir",Shrink:"Rétrécir","Click on the background canvas to add a node":"Cliquer sur le fond du graphe pour rajouter un nœud","Click on a first node to start the edge":"Cliquer sur un premier nœud pour commencer le lien","Click on a second node to complete the edge":"Cliquer sur un second nœud pour terminer le lien",Wikipedia:"Wikipédia","Wikipedia in ":"Wikipédia en ",French:"Français",English:"Anglais",Japanese:"Japonais","Untitled project":"Projet sans titre","Lignes de Temps":"Lignes de Temps","Loading, please wait":"Chargement en cours, merci de patienter","Edge color:":"Couleur :","Dash:":"Point. :","Thickness:":"Epaisseur :","Arrow:":"Flèche :","Node color:":"Couleur :","Choose color":"Choisir une couleur","Change edge direction":"Changer le sens du lien","Do you really wish to remove node ":"Voulez-vous réellement supprimer le nœud ","Do you really wish to remove edge ":"Voulez-vous réellement supprimer le lien ","This file is not an image":"Ce fichier n'est pas une image","Image size must be under ":"L'image doit peser moins de ","Size:":"Taille :",KB:"ko","Choose from vocabulary:":"Choisir dans un vocabulaire :","SKOS Documentation properties":"SKOS: Propriétés documentaires","has note":"a pour note","has example":"a pour exemple","has definition":"a pour définition","SKOS Semantic relations":"SKOS: Relations sémantiques","has broader":"a pour concept plus large","has narrower":"a pour concept plus étroit","has related":"a pour concept apparenté","Dublin Core Metadata":"Métadonnées Dublin Core","has contributor":"a pour contributeur",covers:"couvre","created by":"créé par","has date":"a pour date","published by":"édité par","has source":"a pour source","has subject":"a pour sujet","Dragged resource":"Ressource glisée-déposée","Search the Web":"Rechercher en ligne","Search in Bins":"Rechercher dans les chutiers","Close bin":"Fermer le chutier","Refresh bin":"Rafraîchir le chutier","(untitled)":"(sans titre)","Select contents:":"Sélectionner des contenus :","Drag items from this website, drop them in Renkan":"Glissez des éléments de ce site web vers Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.":"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan","Shapes available":"Formes disponibles",Circle:"Cercle",Square:"Carré",Diamond:"Losange",Hexagone:"Hexagone",Ellipse:"Ellipse",Star:"Étoile",Cloud:"Nuage",Triangle:"Triangle",Polygon:"Polygone","Zoom Fit":"Ajuster le Zoom","Download Project":"Télécharger le projet","Save view":"Sauver la vue","View saved view":"Restaurer la Vue","Renkan 'Drag-to-Add' bookmarklet":"Renkan 'Deplacer-Pour-Ajouter' Signet","(unknown user)":"(non authentifié)","":"","Search in graph":"Rechercher dans carte","Search in ":"Chercher dans ","Show hidden nodes":"Montrer les noeuds cachés","Show neighbors":"Montrer les voisins",Hide:"Cacher","Fullscreen not supported by your browser":"Le plein écran n'est pas supporté par votre navigateur","Title size:":"Taille :","Title color:":"Couleur :","Video link":"Lien vidéo"}},Rkns.jsonIO=function(a,b){var c=a.project;"undefined"==typeof b.http_method&&(b.http_method="PUT");var d=function(){c.set({loadingStatus:!0}),Rkns.$.getJSON(b.url,function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})})},e=function(){c.set({saveStatus:2});var d=c.toJSON();a.read_only||Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(d),success:function(a,b,d){c.set({saveStatus:0})}})},f=Rkns._.throttle(function(){setTimeout(e,100)},1e3);c.on("add:nodes add:edges add:users add:views",function(a){a.on("change remove",function(a){f()}),f()}),c.on("change",function(){1===c.changedAttributes.length&&c.hasChanged("saveStatus")||f()}),d()},Rkns.jsonIOSaveOnClick=function(a,b){var c=a.project,d=!1,e=function(){return"Project not saved"};"undefined"==typeof b.http_method&&(b.http_method="POST");var f=function(){var d={},e=/id=([^&#?=]+)/,f=document.location.hash.match(e);f&&(d.id=f[1]),Rkns.$.ajax({url:b.url,data:d,beforeSend:function(){c.set({loadingStatus:!0})},success:function(b){a.dataloader.load(b),c.set({loadingStatus:!1}),c.set({saveStatus:0})}})},g=function(){c.set("saved_at",new Date);var a=c.toJSON();Rkns.$.ajax({type:b.http_method,url:b.url,contentType:"application/json",data:JSON.stringify(a),beforeSend:function(){c.set({saveStatus:2})},success:function(a,b,f){$(window).off("beforeunload",e),d=!1,c.set({saveStatus:0})}})},h=function(){c.set({saveStatus:1});var a=c.get("title");a&&c.get("nodes").length?$(".Rk-Save-Button").removeClass("disabled"):$(".Rk-Save-Button").addClass("disabled"),a&&$(".Rk-PadTitle").css("border-color","#333333"),d||(d=!0,$(window).on("beforeunload",e))};f(),c.on("add:nodes add:edges add:users change",function(a){a.on("change remove",function(a){1===a.changedAttributes.length&&a.hasChanged("saveStatus")||h()}),1===c.changedAttributes.length&&c.hasChanged("saveStatus")||h()}),a.renderer.save=function(){$(".Rk-Save-Button").hasClass("disabled")?c.get("title")||$(".Rk-PadTitle").css("border-color","#ff0000"):g()}},function(a){"use strict";var b=a._,c=a.Ldt={},d=(c.Bin=function(a,b){if(b.ldt_type){var d=c[b.ldt_type+"Bin"];if(d)return new d(a,b)}console.error("No such LDT Bin Type")},c.ProjectBin=a.Utils.inherit(a._BaseBin));d.prototype._init=function(a,b){this.renkan=a,this.tagTemplate=a.options.templates["templates/ldtjson-bin/tagtemplate.html"],this.annotationTemplate=a.options.templates["templates/ldtjson-bin/annotationtemplate.html"],this.proj_id=b.project_id,this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.title_$.html(b.title),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},d.prototype.render=function(c){function d(a){var c=b(a).escape();return f.isempty?c:f.replace(c,"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}var f=c||a.Utils.regexpFromTextOrArray(),g="
                                                              • Tags

                                                              • ",h=this.data.meta["dc:title"],i=this,j=0;i.title_$.text('LDT Project: "'+h+'"'),b.map(i.data.tags,function(a){var b=a.meta["dc:title"];(f.isempty||f.test(b))&&(j++,g+=i.tagTemplate({ldt_platform:i.ldt_platform,title:b,htitle:d(b),encodedtitle:encodeURIComponent(b),static_url:i.renkan.options.static_url}))}),g+="
                                                              • Annotations

                                                              • ",b.map(i.data.annotations,function(a){var b=a.content.description,c=a.content.title.replace(b,"");if(f.isempty||f.test(c)||f.test(b)){j++;var h=a.end-a.begin,k=a.content&&a.content.img&&a.content.img.src?a.content.img.src:h?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";g+=i.annotationTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b,hdescription:d(b),start:e(a.begin),end:e(a.end),duration:e(h),mediaid:a.media,annotationid:a.id,image:k,static_url:i.renkan.options.static_url})}}),this.main_$.html(g),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()},d.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/ldt/cljson/id/"+this.proj_id,dataType:"jsonp",success:function(a){b.data=a,b.render()}})};var e=c.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"};e.prototype.getBgClass=function(){return"Rk-Ldt-Icon"},e.prototype.getSearchTitle=function(){return this.renkan.translate("Lignes de Temps")},e.prototype.search=function(a){this.renkan.tabs.push(new f(this.renkan,{search:a}))};var f=c.ResultsBin=a.Utils.inherit(a._BaseBin);f.prototype._init=function(a,b){this.renkan=a,this.segmentTemplate=a.options.templates["templates/ldtjson-bin/segmenttemplate.html"],this.ldt_platform=b.ldt_platform||"http://ldt.iri.centrepompidou.fr/",this.max_results=b.max_results||50,this.search=b.search,this.title_$.html('Lignes de Temps: "'+b.search+'"'),this.title_icon_$.addClass("Rk-Ldt-Title-Icon"),this.refresh()},f.prototype.render=function(c){function d(a){return g.replace(b(a).escape(),"$1")}function e(a){function b(a){for(var b=a.toString();b.length<2;)b="0"+b;return b}var c=Math.abs(Math.floor(a/1e3)),d=Math.floor(c/3600),e=Math.floor(c/60)%60,f=c%60,g="";return d&&(g+=b(d)+":"),g+=b(e)+":"+b(f)}if(this.data){var f=c||a.Utils.regexpFromTextOrArray(),g=f.isempty?a.Utils.regexpFromTextOrArray(this.search):f,h="",i=this,j=0;b.each(this.data.objects,function(a){var b=a.abstract,c=a.title;if(f.isempty||f.test(c)||f.test(b)){j++;var g=a.duration,k=a.start_ts,l=+a.duration+k,m=g?i.renkan.options.static_url+"img/ldt-segment.png":i.renkan.options.static_url+"img/ldt-point.png";h+=i.segmentTemplate({ldt_platform:i.ldt_platform,title:c,htitle:d(c),description:b, +hdescription:d(b),start:e(k),end:e(l),duration:e(g),mediaid:a.iri_id,annotationid:a.element_id,image:m})}}),this.main_$.html(h),!f.isempty&&j?this.count_$.text(j).show():this.count_$.hide(),f.isempty||j?this.$.show():this.$.hide(),this.renkan.resizeBins()}},f.prototype.refresh=function(){var b=this;a.$.ajax({url:this.ldt_platform+"ldtplatform/api/ldt/1.0/segments/search/",data:{format:"jsonp",q:this.search,limit:this.max_results},dataType:"jsonp",success:function(a){b.data=a,b.render()}})}}(window.Rkns),Rkns.ResourceList={},Rkns.ResourceList.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.ResourceList.Bin.prototype._init=function(a,b){this.renkan=a,this.resultTemplate=a.options.templates["templates/list-bin.html"],this.title_$.html(b.title),b.list&&(this.data=b.list),this.refresh()},Rkns.ResourceList.Bin.prototype.render=function(a){function b(a){var b=_(a).escape();return c.isempty?b:c.replace(b,"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d="",e=this,f=0;Rkns._.each(this.data,function(a){var g;if("string"==typeof a)if(/^(https?:\/\/|www)/.test(a))g={url:a};else{g={title:a.replace(/[:,]?\s?(https?:\/\/|www)[\d\w\/.&?=#%-_]+\s?/,"").trim()};var h=a.match(/(https?:\/\/|www)[\d\w\/.&?=#%-_]+/);h&&(g.url=h[0]),g.title.length>80&&(g.description=g.title,g.title=g.title.replace(/^(.{30,60})\s.+$/,"$1…"))}else g=a;var i=g.title||(g.url||"").replace(/^https?:\/\/(www\.)?/,"").replace(/^(.{40}).+$/,"$1…"),j=g.url||"",k=g.description||"",l=g.image||"";j&&!/^https?:\/\//.test(j)&&(j="http://"+j),(c.isempty||c.test(i)||c.test(k))&&(f++,d+=e.resultTemplate({url:j,title:i,htitle:b(i),image:l,description:k,hdescription:b(k),static_url:e.renkan.options.static_url}))}),e.main_$.html(d),!c.isempty&&f?this.count_$.text(f).show():this.count_$.hide(),c.isempty||f?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.ResourceList.Bin.prototype.refresh=function(){this.data&&this.render()},Rkns.Wikipedia={},Rkns.Wikipedia.Search=function(a,b){this.renkan=a,this.lang=b.lang||"en"},Rkns.Wikipedia.Search.prototype.getBgClass=function(){return"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-"+this.lang},Rkns.Wikipedia.Search.prototype.getSearchTitle=function(){var a={fr:"French",en:"English",ja:"Japanese"};return a[this.lang]?this.renkan.translate("Wikipedia in ")+this.renkan.translate(a[this.lang]):this.renkan.translate("Wikipedia")+" ["+this.lang+"]"},Rkns.Wikipedia.Search.prototype.search=function(a){this.renkan.tabs.push(new Rkns.Wikipedia.Bin(this.renkan,{lang:this.lang,search:a}))},Rkns.Wikipedia.Bin=Rkns.Utils.inherit(Rkns._BaseBin),Rkns.Wikipedia.Bin.prototype._init=function(a,b){this.renkan=a,this.search=b.search,this.resultTemplate=a.options.templates["templates/wikipedia-bin/resulttemplate.html"],this.lang=b.lang||"en",this.title_icon_$.addClass("Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-"+this.lang),this.title_$.html(this.search).addClass("Rk-Wikipedia-Title"),this.refresh()},Rkns.Wikipedia.Bin.prototype.render=function(a){function b(a){return d.replace(_(a).escape(),"$1")}var c=a||Rkns.Utils.regexpFromTextOrArray(),d=c.isempty?Rkns.Utils.regexpFromTextOrArray(this.search):c,e="",f=this,g=0;Rkns._.each(this.data.query.search,function(a){var d=a.title,h="http://"+f.lang+".wikipedia.org/wiki/"+encodeURI(d.replace(/ /g,"_")),i=Rkns.$("
                                                                ").html(a.snippet).text();(c.isempty||c.test(d)||c.test(i))&&(g++,e+=f.resultTemplate({url:h,title:d,htitle:b(d),description:i,hdescription:b(i),static_url:f.renkan.options.static_url}))}),f.main_$.html(e),!c.isempty&&g?this.count_$.text(g).show():this.count_$.hide(),c.isempty||g?this.$.show():this.$.hide(),this.renkan.resizeBins()},Rkns.Wikipedia.Bin.prototype.refresh=function(){var a=this;Rkns.$.ajax({url:"http://"+a.lang+".wikipedia.org/w/api.php?action=query&list=search&srsearch="+encodeURIComponent(this.search)+"&format=json",dataType:"jsonp",success:function(b){a.data=b,a.render()}})},define("renderer/baserepresentation",["jquery","underscore"],function(a,b){"use strict";var c=function(a,c){if("undefined"!=typeof a&&(this.renderer=a,this.renkan=a.renkan,this.project=a.renkan.project,this.options=a.renkan.options,this.model=c,this.model)){var d=this;this._changeBinding=function(){d.redraw({change:!0})},this._removeBinding=function(){a.removeRepresentation(d),b.defer(function(){a.redraw()})},this._selectBinding=function(){d.select()},this._unselectBinding=function(){d.unselect()},this.model.on("change",this._changeBinding),this.model.on("remove",this._removeBinding),this.model.on("select",this._selectBinding),this.model.on("unselect",this._unselectBinding)}};return b(c.prototype).extend({_super:function(a){return c.prototype[a].apply(this,Array.prototype.slice.call(arguments,1))},redraw:function(){},moveTo:function(){},show:function(){return"BaseRepresentation.show"},hide:function(){},select:function(){this.model&&this.model.trigger("selected")},unselect:function(){this.model&&this.model.trigger("unselected")},highlight:function(){},unhighlight:function(){},mousedown:function(){},mouseup:function(){this.model&&this.model.trigger("clicked")},destroy:function(){this.model&&(this.model.off("change",this._changeBinding),this.model.off("remove",this._removeBinding),this.model.off("select",this._selectBinding),this.model.off("unselect",this._unselectBinding))}}).value(),c}),define("requtils",[],function(a,b){"use strict";return{getUtils:function(){return window.Rkns.Utils},getRenderer:function(){return window.Rkns.Renderer}}}),define("renderer/basebutton",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({moveTo:function(a){this.sector.moveTo(a)},show:function(){this.sector.show()},hide:function(){this.sector&&this.sector.hide()},select:function(){this.sector.select()},unselect:function(a){this.sector.unselect(),(!a||a!==this.source_representation&&a.source_representation!==this.source_representation)&&this.source_representation.unselect()},destroy:function(){this.sector.destroy()}}).value(),f}),define("renderer/shapebuilder",[],function(){"use strict";var a="M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z",b={circle:{getShape:function(){return new paper.Path.Circle([0,0],1)},getImageShape:function(a,b){return new paper.Path.Circle(a,b)}},rectangle:{getShape:function(){return new paper.Path.Rectangle([-2,-2],[2,2])},getImageShape:function(a,b){return new paper.Path.Rectangle([-b,-b],[2*b,2*b])}},ellipse:{getShape:function(){return new paper.Path.Ellipse(new paper.Rectangle([-2,-1],[2,1]))},getImageShape:function(a,b){return new paper.Path.Ellipse(new paper.Rectangle([-b,-b/2],[2*b,b]))}},polygon:{getShape:function(){return new paper.Path.RegularPolygon([0,0],6,1)},getImageShape:function(a,b){return new paper.Path.RegularPolygon(a,6,b)}},diamond:{getShape:function(){var a=new paper.Path.Rectangle([-Math.SQRT2,-Math.SQRT2],[Math.SQRT2,Math.SQRT2]);return a.rotate(45),a},getImageShape:function(a,b){var c=new paper.Path.Rectangle([-b*Math.SQRT2/2,-b*Math.SQRT2/2],[b*Math.SQRT2,b*Math.SQRT2]);return c.rotate(45),c}},star:{getShape:function(){return new paper.Path.Star([0,0],8,1,.7)},getImageShape:function(a,b){return new paper.Path.Star(a,8,1*b,.7*b)}},cloud:{getShape:function(){var b=new paper.Path(a);return b},getImageShape:function(b,c){var d=new paper.Path(a);return d.scale(c),d.translate(b),d}},triangle:{getShape:function(){return new paper.Path.RegularPolygon([0,0],3,1)},getImageShape:function(a,b){var c=new paper.Path.RegularPolygon([0,0],3,1);return c.scale(b),c.translate(a),c}},svg:function(a){return{getShape:function(){return new paper.Path(a)},getImageShape:function(a,b){return new paper.Path}}}},c=function(a){return null!==a&&"undefined"!=typeof a||(a="circle"),"svg:"===a.substr(0,4)?b.svg(a.substr(4)):(a in b||(a="circle"),b[a])};return c.builders=b,c}),define("renderer/noderepr",["jquery","underscore","requtils","renderer/baserepresentation","renderer/shapebuilder"],function(a,b,c,d,e){"use strict";var f=c.getUtils(),g=f.inherit(d);return b(g.prototype).extend({_init:function(){if(this.renderer.node_layer.activate(),this.type="Node",this.buildShape(),this.hidden=!1,this.ghost=!1,this.options.show_node_circles?(this.circle.strokeWidth=this.options.node_stroke_width,this.h_ratio=1):this.h_ratio=0,this.title=a('
                                                                ').appendTo(this.renderer.labels_$),this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.NodeEditButton(this.renderer,null),new b.NodeRemoveButton(this.renderer,null),new b.NodeLinkButton(this.renderer,null),new b.NodeEnlargeButton(this.renderer,null),new b.NodeShrinkButton(this.renderer,null)],this.options.hide_nodes&&this.normal_buttons.push(new b.NodeHideButton(this.renderer,null),new b.NodeShowButton(this.renderer,null)),this.pending_delete_buttons=[new b.NodeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d$1'));var m=this.model.get("style")||{title_size:1,"title-color":"#00000"},n=m.title_size||1,o=m.title_color||this.options.node_title_color,p={"line-height":"1em"};1!==n&&(p["font-size"]=n.toFixed(1)+"em"),"#000000"!==o&&(p.color=o);var q=a("").css(p).html(l);this.title.empty().append(q);var r=this._getStrokeWidth();this.title.css({left:this.paper_coords.x,top:this.paper_coords.y+this.circle_radius*this.h_ratio+this.options.node_label_distance+.5*r,opacity:h});var s=this.model.has("style")&&this.model.get("style").color||(this.model.get("created_by")||f._USER_PLACEHOLDER(this.renkan)).get("color"),t=this.model.has("style")&&this.model.get("style").dash?this.options.default_dash_array:null;this.circle.strokeWidth=r,this.circle.strokeColor=s,this.circle.dashArray=t;var u=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(u)});var v=this.img;if(this.img=this.model.get("image"),this.img&&this.img!==v&&(this.showImage(),this.circle&&this.circle.sendToBack()),this.node_image&&!this.img&&(this.node_image.remove(),delete this.node_image),this.renderer.minimap){this.minimap_circle.fillColor=s;var w=this.renderer.toMinimapCoords(d),x=this.renderer.minimap.scale*e,y=new paper.Size([x,x]);this.minimap_circle.fitBounds(w.subtract(y),y.multiply(2))}if(!("undefined"!=typeof c&&"dontRedrawEdges"in c&&c.dontRedrawEdges)){var z=this;b.each(this.project.get("edges").filter(function(a){return a.get("to")===z.model||a.get("from")===z.model}),function(a,b,c){var d=z.renderer.getRepresentationByModel(a);d&&"undefined"!=typeof d.from_representation&&"undefined"!=typeof d.from_representation.paper_coords&&"undefined"!=typeof d.to_representation&&"undefined"!=typeof d.to_representation.paper_coords&&d.redraw()})}this.ghost?this.show(!0):this.hidden&&this.hide()},showImage:function(){var b=null;"undefined"==typeof this.renderer.image_cache[this.img]?(b=new Image,this.renderer.image_cache[this.img]=b,b.src=this.img):b=this.renderer.image_cache[this.img];var c=this;if(b.width){this.node_image&&this.node_image.remove(),this.renderer.node_layer.activate();var d=b.width,e=b.height,f=this.model.get("clip_path"),g="undefined"!=typeof f&&f,h=null,i=null,j=null;if(g){h=new paper.Path;var k=f.match(/[a-z][^a-z]+/gi)||[],l=[0,0],m=1/0,n=1/0,o=-(1/0),p=-(1/0),q=function(a,b){var c=a.slice(1).map(function(a,c){var f=parseFloat(a),g=c%2;return f=g?(f-.5)*e:(f-.5)*d,b&&(f+=l[g]),g?(n=Math.min(n,f),p=Math.max(p,f)):(m=Math.min(m,f),o=Math.max(o,f)),f});return l=c.slice(-2),c};k.forEach(function(a){var b=a.match(/([a-z]|[0-9.-]+)/gi)||[""];switch(b[0]){case"M":h.moveTo(q(b));break;case"m":h.moveTo(q(b,!0));break;case"L":h.lineTo(q(b));break;case"l":h.lineTo(q(b,!0));break;case"C":h.cubicCurveTo(q(b));break;case"c":h.cubicCurveTo(q(b,!0));break;case"Q":h.quadraticCurveTo(q(b));break;case"q":h.quadraticCurveTo(q(b,!0))}}),i=Math[this.options.node_images_fill_mode?"min":"max"](o-m,p-n)/2,j=new paper.Point((o+m)/2,(p+n)/2),this.options.show_node_circles||(this.h_ratio=(p-n)/(2*i))}else i=Math[this.options.node_images_fill_mode?"min":"max"](d,e)/2,j=new paper.Point(0,0),this.options.show_node_circles||(this.h_ratio=e/(2*i));var r=new paper.Raster(b);if(r.locked=!0,g&&(r=new paper.Group(h,r),r.opacity=.99,r.clipped=!0,h.__representation=this),this.options.clip_node_images){var s=this.shapeBuilder.getImageShape(j,i);r=new paper.Group(s,r),r.opacity=.99,r.clipped=!0,s.__representation=this}this.image_delta=j.divide(i),this.node_image=r,this.node_image.__representation=c,this.node_image.scale(this.circle_radius/i),this.node_image.position=this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius)),this.node_image.insertAbove(this.circle)}else a(b).on("load",function(){c.showImage()})},paperShift:function(a){this.options.editor_mode?this.renkan.read_only||(this.is_dragging=!0,this.paper_coords=this.paper_coords.add(a),this.redraw()):this.renderer.view.paperShift(a)},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("NodeEditor",null);a.source_representation=this,a.draw()},select:function(){clearTimeout(this.hide_timeout),this.selected=!0,this.circle.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&!this.hidden&&this.active_buttons.forEach(function(a){a.show()});var b=this.model.get("uri");b&&a(".Rk-Bin-Item").each(function(){var c=a(this);c.attr("data-uri")===b&&c.addClass("selected")}),this.options.editor_mode||this.openEditor(),this.renderer.minimap&&(this.minimap_circle.strokeWidth=this.options.minimap_highlight_weight,this.minimap_circle.strokeColor=this.options.minimap_highlight_color),this.hidden?this.show(!0):this.showNeighbors(!0),this._super("select")},hideButtons:function(){this.all_buttons.forEach(function(a){a.hide()}),delete this.buttonTimeout},unselect:function(b){if(!b||b.source_representation!==this){this.selected=!1;var c=this;this.buttons_timeout=setTimeout(function(){c.hideButtons()},200),this.circle.strokeWidth=this._getStrokeWidth(),a(".Rk-Bin-Item").removeClass("selected"),this.renderer.minimap&&(this.minimap_circle.strokeColor=void 0),this.hidden?(this.renderer.removeRepresentationsOfType("editor"),this.hide()):this.hideNeighbors(!0),this._super("unselect")}},hide_delay:function(){var a=this;this.hide_timeout=setTimeout(function(){a.hide()},1e3)},hide:function(){var a=this;this.ghost=!1,this.hidden=!0,"undefined"!=typeof this.node_image&&(this.node_image.opacity=0),this.hideButtons(),this.circle.opacity=0,this.title.css("opacity",0),this.minimap_circle.opacity=0,b.each(this.project.get("edges").filter(function(b){return b.get("to")===a.model||b.get("from")===a.model}),function(b,c,d){var e=a.renderer.getRepresentationByModel(b);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.hide()}),this.hideNeighbors(!1)},show:function(a){var c=this;this.ghost=a,this.ghost?("undefined"!=typeof this.node_image&&(this.node_image.opacity=this.options.ghost_opacity),this.circle.opacity=this.options.ghost_opacity,this.title.css("opacity",this.options.ghost_opacity),this.minimap_circle.opacity=this.options.ghost_opacity):(this.minimap_circle.opacity=1,this.hidden=!1,this.redraw()),b.each(this.project.get("edges").filter(function(a){return a.get("to")===c.model||a.get("from")===c.model}),function(a,b,d){var e=c.renderer.getRepresentationByModel(a);e&&"undefined"!=typeof e.from_representation&&"undefined"!=typeof e.from_representation.paper_coords&&"undefined"!=typeof e.to_representation&&"undefined"!=typeof e.to_representation.paper_coords&&e.show(c.ghost)})},hideNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));f&&f.ghost&&(a?f.hide_delay():f.hide())})},showNeighbors:function(a){var c=this;b.each(this.project.get("edges").filter(function(a){return a.get("from")===c.model}),function(b,d,e){var f=c.renderer.getRepresentationByModel(b.get("to"));if(f&&f.hidden&&(f.show(a),!a)){var g=c.renderer.view.hiddenNodes.indexOf(f.model.id);g!==-1&&c.renderer.view.hiddenNodes.splice(g,1)}})},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},saveCoords:function(){var a=this.renderer.toModelCoords(this.paper_coords),b={position:{x:a.x,y:a.y}};this.renderer.isEditable()&&this.model.set(b)},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){if(this.renderer.is_dragging&&this.renderer.isEditable())this.saveCoords();else if(this.hidden){var c=this.renderer.view.hiddenNodes.indexOf(this.model.id);c!==-1&&this.renderer.view.hiddenNodes.splice(c,1),this.show(!1),this.select()}else b||this.model.get("delete_scheduled")||this.openEditor(),this.model.trigger("clicked");this.renderer.click_target=null,this.renderer.is_dragging=!1,this.is_dragging=!1},destroy:function(a){this._super("destroy"),this.all_buttons.forEach(function(a){a.destroy()}),this.circle.remove(),this.title.remove(),this.renderer.minimap&&this.minimap_circle.remove(),this.node_image&&this.node_image.remove()}}).value(),g}),define("renderer/edge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){if(this.renderer.edge_layer.activate(),this.type="Edge",this.hidden=!1,this.ghost=!1,this.highlighted=!1,this.from_representation=this.renderer.getRepresentationByModel(this.model.get("from")),this.to_representation=this.renderer.getRepresentationByModel(this.model.get("to")),this.bundle=this.renderer.addToBundles(this),this.line=new paper.Path,this.line.add([0,0],[0,0],[0,0]),this.line.__representation=this,this.line.strokeWidth=this.options.edge_stroke_width,this.arrow_scale=1,this.arrow=new paper.Path,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.pivot=new paper.Point([this.options.edge_arrow_length/2,this.options.edge_arrow_width/2]),this.arrow.__representation=this,this.text=a('
                                                                ').appendTo(this.renderer.labels_$),this.arrow_angle=0,this.options.editor_mode){var b=c.getRenderer();this.normal_buttons=[new b.EdgeEditButton(this.renderer,null),new b.EdgeRemoveButton(this.renderer,null)],this.pending_delete_buttons=[new b.EdgeRevertButton(this.renderer,null)],this.all_buttons=this.normal_buttons.concat(this.pending_delete_buttons);for(var d=0;d90&&(r-=180,s=s.multiply(-1)),r<-90&&(r+=180,s=s.multiply(-1));var x=this.model.get("title")||this.renkan.translate(this.options.label_untitled_edges)||"";x=e.shortenText(x,this.options.node_label_max_length),"object"==typeof this.highlighted?this.text.html(this.highlighted.replace(b(x).escape(),'$1')):this.text.text(x);var y=this.paper_coords.add(s);this.text.css({left:y.x,top:y.y,transform:"rotate("+r+"deg)","-moz-transform":"rotate("+r+"deg)","-webkit-transform":"rotate("+r+"deg)",opacity:d}),this.text_angle=r;var z=this.paper_coords;this.all_buttons.forEach(function(a){a.moveTo(z)}),this.renderer.minimap&&(this.minimap_line.strokeColor=u,this.minimap_line.segments[0].point=this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get("position"))),this.minimap_line.segments[1].point=this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get("position"))))}},hide:function(){this.hidden=!0,this.ghost=!1,this.text.hide(),this.line.visible=!1,this.arrow.visible=!1,this.minimap_line.visible=!1},show:function(a){this.ghost=a,this.ghost?(this.text.css("opacity",.3),this.line.opacity=.3,this.arrow.opacity=.3,this.minimap_line.opacity=.3):(this.hidden=!1,this.text.css("opacity",1),this.line.opacity=1,this.arrow.opacity=1,this.minimap_line.opacity=1),this.text.show(),this.line.visible=!0,this.arrow.visible=!0,this.minimap_line.visible=!0,this.redraw()},openEditor:function(){this.renderer.removeRepresentationsOfType("editor");var a=this.renderer.addRepresentation("EdgeEditor",null);a.source_representation=this,a.draw()},select:function(){this.selected=!0,this.line.strokeWidth=this._getSelectedStrokeWidth(),this.renderer.isEditable()&&this.active_buttons.forEach(function(a){a.show()}),this.options.editor_mode||this.openEditor(),this._super("select")},unselect:function(a){a&&a.source_representation===this||(this.selected=!1,this.options.editor_mode&&this.all_buttons.forEach(function(a){a.hide()}),this.hidden&&this.renderer.removeRepresentationsOfType("editor"),this.line.strokeWidth=this._getStrokeWidth(),this._super("unselect"))},mousedown:function(a,b){b&&(this.renderer.unselectAll(),this.select())},mouseup:function(a,b){!this.renkan.read_only&&this.renderer.is_dragging?(this.from_representation.saveCoords(),this.to_representation.saveCoords(),this.from_representation.is_dragging=!1,this.to_representation.is_dragging=!1):(b||this.openEditor(),this.model.trigger("clicked")),this.renderer.click_target=null,this.renderer.is_dragging=!1},paperShift:function(a){this.options.editor_mode?this.options.read_only||(this.from_representation.paperShift(a),this.to_representation.paperShift(a)):this.renderer.paperShift(a)},highlight:function(a){var b=a||!0;this.highlighted!==b&&(this.highlighted=b,this.redraw(),this.renderer.throttledPaperDraw())},unhighlight:function(){this.highlighted&&(this.highlighted=!1,this.redraw(),this.renderer.throttledPaperDraw())},destroy:function(){this._super("destroy"),this.line.remove(),this.arrow.remove(),this.text.remove(),this.renderer.minimap&&this.minimap_line.remove(),this.all_buttons.forEach(function(a){a.destroy()});var a=this;this.bundle.edges=b.reject(this.bundle.edges,function(b){return a===b})}}).value(),f}),define("renderer/tempedge",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.edge_layer.activate(),this.type="Temp-edge",this.origin=e.OriginEnum.NONE;var a=(this.project.get("users").get(this.renkan.current_user)||e._USER_PLACEHOLDER(this.renkan)).get("color");this.line=new paper.Path,this.line.strokeColor=a,this.line.dashArray=[4,2],this.line.strokeWidth=this.options.selected_edge_stroke_width,this.line.add([0,0],[0,0]),this.line.__representation=this,this.arrow=new paper.Path,this.arrow.fillColor=a,this.arrow.add([0,0],[this.options.edge_arrow_length,this.options.edge_arrow_width/2],[0,this.options.edge_arrow_width]),this.arrow.__representation=this,this.arrow_angle=0},redraw:function(){var a=this.from_representation.paper_coords,b=this.end_pos,c=b.subtract(a).angle,d=a.add(b).divide(2);this.line.segments[0].point=a,this.line.segments[1].point=b,this.arrow.rotate(c-this.arrow_angle),this.arrow.position=d,this.arrow_angle=c},paperShift:function(a){if(!this.renderer.isEditable())return this.renderer.removeRepresentation(_this),void paper.view.draw();this.end_pos=this.end_pos.add(a);var b=paper.project.hitTest(this.end_pos);this.renderer.findTarget(b),this.redraw()},mouseup:function(a,b){var c=paper.project.hitTest(a.point),d=this.from_representation.model,f=!0;if(c&&"undefined"!=typeof c.item.__representation){var g=c.item.__representation;if("Node"===g.type.substr(0,4)){var h=g.model||g.source_representation.model;if(d!==h){var i={id:e.getUID("edge"),created_by:this.renkan.current_user,from:d,to:h,origin:this.origin};this.renderer.isEditable()&&this.project.addEdge(i)}}(d===g.model||g.source_representation&&g.source_representation.model===d)&&(f=!1,this.renderer.is_dragging=!0)}f&&(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentation(this), +paper.view.draw())},destroy:function(){this.arrow.remove(),this.line.remove()}}).value(),f}),define("renderer/baseeditor",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.renderer.buttons_layer.activate(),this.type="editor",this.editor_block=new paper.Path;var c=b.map(b.range(8),function(){return[0,0]});this.editor_block.add.apply(this.editor_block,c),this.editor_block.strokeWidth=this.options.tooltip_border_width,this.editor_block.strokeColor=this.options.tooltip_border_color,this.editor_block.opacity=this.options.tooltip_opacity,this.editor_$=a("
                                                                ").appendTo(this.renderer.editor_$).css({position:"absolute",opacity:this.options.tooltip_opacity}).hide()},destroy:function(){this.editor_block.remove(),this.editor_$.remove()}}).value(),f}),define("renderer/nodeeditor",["jquery","underscore","requtils","renderer/baseeditor","renderer/shapebuilder","ckeditor-core"],function(a,b,c,d,e,f){"use strict";var g=c.getUtils(),h=g.inherit(d);return b(h.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/nodeeditor.html"],this.readOnlyTemplate=this.options.node_editor_templates},draw:function(){var c=this.source_representation.model,d=c.get("created_by")||g._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate[c.get("type")]||this.readOnlyTemplate.default,i=this.options.static_url+"img/image-placeholder.png",j=c.get("size")||0;this.editor_$.html(h({node:{_id:c.get("_id"),has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),type:c.get("type")||"default",short_uri:g.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),image:c.get("image")||"",image_placeholder:i,color:c.has("style")&&c.get("style").color||d.get("color"),title_size:c.has("style")&&c.get("style").title_size||1,title_color:c.has("style")&&c.get("style").title_color||this.options.node_title_color,thickness:c.has("style")&&c.get("style").thickness||1,dash:c.has("style")&&c.get("style").dash?"checked":"",clip_path:c.get("clip_path")||!1,created_by_color:d.get("color"),created_by_title:d.get("title"),size:(j>0?"+":"")+j,shape:c.get("shape")||"circle"},renkan:this.renkan,options:this.options,shortenText:g.shortenText,shapes:b(e.builders).omit("svg").keys().value(),types:b(this.options.node_editor_templates).keys().value()})),this.redraw();var k=this,l=!(!this.renderer.isEditable()||!k.options.show_node_editor_description_richtext)&&f.inline("Rk-Edit-Description-"+c.get("_id"),k.options.richtext_editor_config),m=!(!this.renderer.isEditable()||!k.options.show_node_editor_title_richtext)&&f.inline("Rk-Edit-Title-"+c.get("_id"),k.options.richtext_editor_config),n=function(){k.renderer.removeRepresentation(k),paper.view.draw()};if(k.cleanEditor=function(){k.editor_$.off("keyup"),k.editor_$.find("input, textarea, select").off("change keyup paste"),k.editor_$.find(".Rk-Edit-Image-File").off("change"),k.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").off("hover"),k.editor_$.find(".Rk-Edit-Size-Btn").off("click"),k.editor_$.find(".Rk-Edit-Image-Del").off("click"),k.editor_$.find(".Rk-Edit-ColorPicker").find("li").off("hover click"),k.editor_$.find(".Rk-CloseX").off("click"),k.editor_$.find(".Rk-Edit-Goto").off("click"),k.options.show_node_editor_description_richtext&&l&&(l.focusManager.blur(!0),l.destroy()),k.options.show_node_editor_title_richtext&&m&&(m.focusManager.blur(!0),m.destroy())},this.editor_$.find(".Rk-CloseX").click(function(a){a.preventDefault(),n()}),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var o=b.debounce(function(){b.defer(function(){if(k.renderer.isEditable()){var a={};if(k.options.show_node_editor_uri&&(a.uri=k.editor_$.find(".Rk-Edit-URI").val(),k.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#")),k.options.show_node_editor_image&&(a.image=k.editor_$.find(".Rk-Edit-Image").val(),k.editor_$.find(".Rk-Edit-ImgPreview").attr("src",a.image||i)),k.options.show_node_editor_description&&(k.options.show_node_editor_description_richtext?l&&l.checkDirty()&&(a.description=l.getData(),l.resetDirty()):a.description=k.editor_$.find(".Rk-Edit-Description").val()),k.options.show_node_editor_title&&(k.options.show_node_editor_title_richtext?m&&m.checkDirty()&&(a.title=m.getData(),m.resetDirty()):a.title=k.editor_$.find(".Rk-Edit-Title").val()),k.options.show_node_editor_style){var d=k.editor_$.find(".Rk-Edit-Dash").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d})}k.options.change_shapes&&c.get("shape")!==k.editor_$.find(".Rk-Edit-Shape").val()&&(a.shape=k.editor_$.find(".Rk-Edit-Shape").val()),k.options.change_types&&c.get("type")!==k.editor_$.find(".Rk-Edit-Type").val()&&(a.type=k.editor_$.find(".Rk-Edit-Type").val()),c.set(a),k.redraw()}else n()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&n()}),this.editor_$.find("input, textarea, select").on("change keyup paste",o),k.options.show_node_editor_description&&k.options.show_node_editor_description_richtext&&l&&(l.on("change",o),l.on("blur",o)),k.options.show_node_editor_title&&k.options.show_node_editor_title_richtext&&m&&(m.on("change",o),m.on("blur",o)),k.options.allow_image_upload&&this.editor_$.find(".Rk-Edit-Image-File").change(function(){if(this.files.length){var a=this.files[0],b=new FileReader;if("image"!==a.type.substr(0,5))return void alert(k.renkan.translate("This file is not an image"));if(a.size>1024*k.options.uploaded_image_max_kb)return void alert(k.renkan.translate("Image size must be under ")+k.options.uploaded_image_max_kb+k.renkan.translate("KB"));b.onload=function(a){k.editor_$.find(".Rk-Edit-Image").val(a.target.result),o()},b.readAsDataURL(a)}}),this.editor_$.find(".Rk-Edit-Title")[0].focus();var p=k.editor_$.find(".Rk-Editor-ColorPicker-Node");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),p.show()},function(a){a.preventDefault(),p.hide()}),p.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),k.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||g._USER_PLACEHOLDER(k.renkan)).get("color"))}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),p.hide(),paper.view.draw()):n()});var q=function(a){if(k.renderer.isEditable()){var b=a+(c.get("size")||0);k.editor_$.find("#Rk-Edit-Size-Value").text((b>0?"+":"")+b),c.set("size",b),paper.view.draw()}else n()};this.editor_$.find("#Rk-Edit-Size-Down").click(function(){return q(-1),!1}),this.editor_$.find("#Rk-Edit-Size-Up").click(function(){return q(1),!1});var r=function(a){if(k.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>k.options.node_stroke_witdh_scale&&(e=k.options.node_stroke_witdh_scale),e!==d&&(k.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else n()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return r(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return r(1),!1});var s=function(a){var d=k.options.node_title_size_min,e=k.options.node_title_size_max;if(k.renderer.isEditable()){var f=c.has("style")&&c.get("style").title_size||1,g=a+f;ge&&(g=e),g!==f&&(k.editor_$.find("#Rk-Edit-Title-Size-Value").text(g.toFixed(1)),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_size:g})),paper.view.draw())}else n()},t=k.editor_$.find(".Rk-Editor-ColorPicker-Title");this.editor_$.find(".Rk-Editor-p-title-color").hover(function(a){a.preventDefault(),t.show()},function(a){a.preventDefault(),t.hide()}),t.find("li").hover(function(b){b.preventDefault(),k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault();var b=c.has("style")&&c.get("style").title_color||k.options.node_fill_color;k.editor_$.find(".Rk-Editor-p-title-color .Rk-Edit-Color").css("background",b)}).click(function(d){d.preventDefault(),k.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{title_color:a(this).attr("data-color")})),t.hide(),paper.view.draw()):n()}),this.editor_$.find("#Rk-Edit-Title-Size-Down").click(function(){var a=k.options.node_title_size_step;return s(-a),!1}),this.editor_$.find("#Rk-Edit-Title-Size-Up").click(function(){var a=k.options.node_title_size_step;return s(a),!1}),this.editor_$.find(".Rk-Edit-Image-Del").click(function(){return k.editor_$.find(".Rk-Edit-Image").val(""),o(),!1})}else if("object"==typeof this.source_representation.highlighted){var u=this.source_representation.highlighted.replace(b(c.get("title")).escape(),'$1');this.editor_$.find(".Rk-Display-Title"+(c.get("uri")?" a":"")).html(u),this.options.show_node_tooltip_description&&this.editor_$.find(".Rk-Display-Description").html(this.source_representation.highlighted.replace(b(c.get("description")).escape(),'$1'))}this.editor_$.find("img").load(function(){k.redraw()})},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;g.drawEditBox(this.options,a,this.editor_block,.75*this.source_representation.circle_radius,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()},destroy:function(){"undefined"!=typeof this.cleanEditor&&this.cleanEditor(),this.editor_block.remove(),this.editor_$.remove()}}).value(),h}),define("renderer/edgeeditor",["jquery","underscore","requtils","renderer/baseeditor"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){d.prototype._init.apply(this),this.template=this.options.templates["templates/edgeeditor.html"],this.readOnlyTemplate=this.options.templates["templates/edgeeditor_readonly.html"]},draw:function(){var c=this.source_representation.model,d=c.get("from"),f=c.get("to"),g=c.get("created_by")||e._USER_PLACEHOLDER(this.renkan),h=this.renderer.isEditable()?this.template:this.readOnlyTemplate;this.editor_$.html(h({edge:{has_creator:!!c.get("created_by"),title:c.get("title"),uri:c.get("uri"),short_uri:e.shortenText((c.get("uri")||"").replace(/^(https?:\/\/)?(www\.)?/,"").replace(/\/$/,""),40),description:c.get("description"),color:c.has("style")&&c.get("style").color||g.get("color"),dash:c.has("style")&&c.get("style").dash?"checked":"",arrow:c.has("style")&&c.get("style").arrow||!c.has("style")||"undefined"==typeof c.get("style").arrow?"checked":"",thickness:c.has("style")&&c.get("style").thickness||1,from_title:d.get("title"),to_title:f.get("title"),from_color:d.has("style")&&d.get("style").color||(d.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),to_color:f.has("style")&&f.get("style").color||(f.get("created_by")||e._USER_PLACEHOLDER(this.renkan)).get("color"),created_by_color:g.get("color"),created_by_title:g.get("title")},renkan:this.renkan,shortenText:e.shortenText,options:this.options})),this.redraw();var i=this,j=function(){i.renderer.removeRepresentation(i),i.editor_$.find(".Rk-Edit-Size-Btn").off("click"),paper.view.draw()};if(this.editor_$.find(".Rk-CloseX").click(j),this.editor_$.find(".Rk-Edit-Goto").click(function(){if(!c.get("uri"))return!1}),this.renderer.isEditable()){var k=b.debounce(function(){b.defer(function(){if(i.renderer.isEditable()){var a={title:i.editor_$.find(".Rk-Edit-Title").val()};if(i.options.show_edge_editor_uri&&(a.uri=i.editor_$.find(".Rk-Edit-URI").val()),i.options.show_node_editor_style){var d=i.editor_$.find(".Rk-Edit-Dash").is(":checked"),e=i.editor_$.find(".Rk-Edit-Arrow").is(":checked");a.style=b.assign(c.has("style")&&b.clone(c.get("style"))||{},{dash:d,arrow:e})}i.editor_$.find(".Rk-Edit-Goto").attr("href",a.uri||"#"),c.set(a),paper.view.draw()}else j()})},1e3);this.editor_$.on("keyup",function(a){27===a.keyCode&&j()}),this.editor_$.find("input").on("keyup change paste",k),this.editor_$.find(".Rk-Edit-Vocabulary").change(function(){var b=a(this),c=b.val();c&&(i.editor_$.find(".Rk-Edit-Title").val(b.find(":selected").text()),i.editor_$.find(".Rk-Edit-URI").val(c),k())}),this.editor_$.find(".Rk-Edit-Direction").click(function(){i.renderer.isEditable()?(c.set({from:c.get("to"),to:c.get("from")}),i.draw()):j()});var l=i.editor_$.find(".Rk-Editor-ColorPicker-Edge");this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover(function(a){a.preventDefault(),l.show()},function(a){a.preventDefault(),l.hide()}),l.find("li").hover(function(b){b.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",a(this).attr("data-color"))},function(a){a.preventDefault(),i.editor_$.find(".Rk-Edit-Color").css("background",c.has("style")&&c.get("style").color||(c.get("created_by")||e._USER_PLACEHOLDER(i.renkan)).get("color"))}).click(function(d){d.preventDefault(),i.renderer.isEditable()?(c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{color:a(this).attr("data-color")})),l.hide(),paper.view.draw()):j()});var m=function(a){if(i.renderer.isEditable()){var d=c.has("style")&&c.get("style").thickness||1,e=a+d;e<1?e=1:e>i.options.node_stroke_witdh_scale&&(e=i.options.node_stroke_witdh_scale),e!==d&&(i.editor_$.find("#Rk-Edit-Thickness-Value").text(e),c.set("style",b.assign(c.has("style")&&b.clone(c.get("style"))||{},{thickness:e})),paper.view.draw())}else j()};this.editor_$.find("#Rk-Edit-Thickness-Down").click(function(){return m(-1),!1}),this.editor_$.find("#Rk-Edit-Thickness-Up").click(function(){return m(1),!1})}},redraw:function(){if(this.options.popup_editor){var a=this.source_representation.paper_coords;e.drawEditBox(this.options,a,this.editor_block,5,this.editor_$,this.renderer.renkan)}this.editor_$.show(),paper.view.draw()}}).value(),f}),define("renderer/nodebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({setSectorSize:function(){var a=this.source_representation.circle_radius;a!==this.lastSectorInner&&(this.sector&&this.sector.destroy(),this.sector=this.renderer.drawSector(this,1+a,e._NODE_BUTTON_WIDTH+a,this.startAngle,this.endAngle,1,this.imageName,this.renkan.translate(this.text)),this.lastSectorInner=a)},unselect:function(){d.prototype.unselect.apply(this,Array.prototype.slice.call(arguments,1)),this.source_representation&&this.source_representation.buttons_timeout&&(clearTimeout(this.source_representation.buttons_timeout),this.source_representation.hideButtons())},select:function(){this.source_representation&&this.source_representation.buttons_timeout&&clearTimeout(this.source_representation.buttons_timeout),this.sector.select()}}).value(),f}),define("renderer/nodeeditbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-edit-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-125:-135,this.endAngle=this.options.hide_nodes?-55:-45,this.imageName="edit",this.text="Edit"},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/noderemovebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-remove-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-10:0,this.endAngle=this.options.hide_nodes?45:90,this.imageName="remove",this.text="Remove"},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove node ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeNode(this.source_representation.model)}}).value(),f}),define("renderer/nodehidebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-hide-button",this.lastSectorInner=0,this.startAngle=45,this.endAngle=90,this.imageName="hide",this.text="Hide"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.renderer.view.addHiddenNode(this.source_representation.model)}}).value(),f}),define("renderer/nodeshowbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-show-button",this.lastSectorInner=0,this.startAngle=90,this.endAngle=135,this.imageName="show",this.text="Show neighbors"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable()&&this.source_representation.showNeighbors(!1)}}).value(),f}),define("renderer/noderevertbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-revert-button",this.lastSectorInner=0,this.startAngle=-135,this.endAngle=135,this.imageName="revert",this.text="Cancel deletion"},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/nodelinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-link-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?135:90,this.endAngle=this.options.hide_nodes?190:180,this.imageName="link",this.text="Link to another node"},mousedown:function(a,b){if(this.renderer.isEditable()){var c=this.renderer.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]);this.renderer.click_target=null,this.renderer.removeRepresentationsOfType("editor"),this.renderer.addTempEdge(this.source_representation,d,e.OriginEnum.EDGE_BUTTON_CIRCLE)}}}).value(),f}),define("renderer/nodeenlargebutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-enlarge-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-55:-45,this.endAngle=this.options.hide_nodes?-10:0,this.imageName="enlarge",this.text="Enlarge"},mouseup:function(){var a=1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/nodeshrinkbutton",["jquery","underscore","requtils","renderer/nodebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Node-shrink-button",this.lastSectorInner=0,this.startAngle=this.options.hide_nodes?-170:-180,this.endAngle=this.options.hide_nodes?-125:-135,this.imageName="shrink",this.text="Shrink"},mouseup:function(){var a=-1+(this.source_representation.model.get("size")||0);this.source_representation.model.set("size",a),this.source_representation.select(),this.select(),paper.view.draw()}}).value(),f}),define("renderer/edgeeditbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-edit-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-270,-90,1,"edit",this.renkan.translate("Edit"))},mouseup:function(){this.renderer.is_dragging||this.source_representation.openEditor()}}).value(),f}),define("renderer/edgeremovebutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-remove-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-90,90,1,"remove",this.renkan.translate("Remove"))},mouseup:function(){if(this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.removeRepresentationsOfType("editor"),this.renderer.isEditable())if(this.options.element_delete_delay){var a=e.getUID("delete");this.renderer.delete_list.push({id:a,time:(new Date).valueOf()+this.options.element_delete_delay}),this.source_representation.model.set("delete_scheduled",a)}else confirm(this.renkan.translate("Do you really wish to remove edge ")+'"'+this.source_representation.model.get("title")+'"?')&&this.project.removeEdge(this.source_representation.model)}}).value(),f}),define("renderer/edgerevertbutton",["jquery","underscore","requtils","renderer/basebutton"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({_init:function(){this.type="Edge-revert-button",this.sector=this.renderer.drawSector(this,e._EDGE_BUTTON_INNER,e._EDGE_BUTTON_OUTER,-135,135,1,"revert",this.renkan.translate("Cancel deletion"))},mouseup:function(){this.renderer.click_target=null,this.renderer.is_dragging=!1,this.renderer.isEditable()&&this.source_representation.model.unset("delete_scheduled")}}).value(),f}),define("renderer/miniframe",["jquery","underscore","requtils","renderer/baserepresentation"],function(a,b,c,d){"use strict";var e=c.getUtils(),f=e.inherit(d);return b(f.prototype).extend({paperShift:function(a){this.renderer.offset=this.renderer.offset.subtract(a.divide(this.renderer.minimap.scale).multiply(this.renderer.scale)),this.renderer.redraw()},mouseup:function(a){this.renderer.click_target=null,this.renderer.is_dragging=!1}}).value(),f}),define("renderer/scene",["jquery","underscore","filesaver","requtils","renderer/miniframe","screenfull"],function(a,b,c,d,e,f){"use strict";var g=d.getUtils(),h=function(c){this.renkan=c,this.$=a(".Rk-Render"),this.representations=[],this.$.html(c.options.templates["templates/scene.html"](c)),this.onStatusChange(),this.canvas_$=this.$.find(".Rk-Canvas"),this.labels_$=this.$.find(".Rk-Labels"),c.options.popup_editor?this.editor_$=this.$.find(".Rk-Editor"):this.editor_$=a("#"+c.options.editor_panel),this.notif_$=this.$.find(".Rk-Notifications"),paper.setup(this.canvas_$[0]),this.totalScroll=0,this.mouse_down=!1,this.click_target=null,this.selected_target=null,this.edge_layer=new paper.Layer,this.node_layer=new paper.Layer,this.buttons_layer=new paper.Layer,this.delete_list=[],this.redrawActive=!1,c.options.show_minimap&&(this.minimap={background_layer:new paper.Layer,edge_layer:new paper.Layer,node_layer:new paper.Layer,node_group:new paper.Group,size:new paper.Size(c.options.minimap_width,c.options.minimap_height)},this.minimap.background_layer.activate(),this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle=new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.rectangle.fillColor=c.options.minimap_background_color,this.minimap.rectangle.strokeColor=c.options.minimap_border_color,this.minimap.rectangle.strokeWidth=4,this.minimap.offset=new paper.Point(this.minimap.size.divide(2)),this.minimap.scale=.1,this.minimap.node_layer.activate(),this.minimap.cliprectangle=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.cliprectangle),this.minimap.node_group.clipped=!0,this.minimap.miniframe=new paper.Path.Rectangle(this.minimap.topleft,this.minimap.size),this.minimap.node_group.addChild(this.minimap.miniframe),this.minimap.miniframe.fillColor="#c0c0ff",this.minimap.miniframe.opacity=.3,this.minimap.miniframe.strokeColor="#000080",this.minimap.miniframe.strokeWidth=2,this.minimap.miniframe.__representation=new e(this,null)),this.throttledPaperDraw=b(function(){paper.view.draw()}).throttle(100).value(),this.bundles=[],this.click_mode=!1;var d=this,h=!0,i=1,j=!1,k=0,l=0,m=0;this.image_cache={},this.icon_cache={},["edit","remove","hide","show","link","enlarge","shrink","revert"].forEach(function(a){var b=new Image;b.src=c.options.static_url+"img/"+a+".png",d.icon_cache[a]=b});var n=b.throttle(function(a,b){d.onMouseMove(a,b)},g._MOUSEMOVE_RATE);this.canvas_$.on({mousedown:function(a){a.preventDefault(),d.onMouseDown(a,!1)},mousemove:function(a){a.preventDefault(),n(a,!1)},mouseup:function(a){a.preventDefault(),d.onMouseUp(a,!1)},mousewheel:function(a,b){c.options.zoom_on_scroll&&(a.preventDefault(),h&&d.onScroll(a,b))},touchstart:function(a){a.preventDefault();var b=a.originalEvent.touches[0];c.options.allow_double_click&&new Date-m0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show(),this.$.find(".Rk-CurrentUser").mouseenter(function(){d.$.find(".Rk-UserList").slideDown()}),this.$.find(".Rk-Users").mouseleave(function(){d.$.find(".Rk-UserList").slideUp()}),f.enabled?(o(".Rk-FullScreen-Button","fullScreen"),document.addEventListener(f.raw.fullscreenchange,function(){setTimeout(function(){var a=d.$.width(),b=d.$.height();d.renkan.options.show_top_bar&&(b-=d.$.find(".Rk-TopBar").height()),d.renkan.options.show_bins&&this.renkan.$.find(".Rk-Bins").position().left>0&&(a-=this.renkan.$.find(".Rk-Bins").width()),paper.view.viewSize=new paper.Size([a,b]),d.resize(d.currentWidth,a,d.currentHeight,b),d.currentWidth=a,d.currentHeight=b,f.isFullscreen||(paper.view.onResize=function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)})},600)})):(this.$.find(".Rk-FullScreen-Button").addClass("disabled"),this.$.find(".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents").html(this.renkan.translate("Fullscreen not supported by your browser"))),o(".Rk-AddNode-Button","addNodeBtn"),o(".Rk-AddEdge-Button","addEdgeBtn"),o(".Rk-Save-Button","save"),o(".Rk-Open-Button","open"),o(".Rk-Export-Button","exportProject"),this.$.find(".Rk-Bookmarklet-Button").attr("href","javascript:"+g._BOOKMARKLET_CODE(c)).click(function(){return d.notif_$.text(c.translate("Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.")).fadeIn().delay(5e3).fadeOut(),!1}),this.$.find(".Rk-TopBar-Button").mouseover(function(){a(this).find(".Rk-TopBar-Tooltip").show()}).mouseout(function(){a(this).find(".Rk-TopBar-Tooltip").hide()}),o(".Rk-Fold-Bins","foldBins"),paper.view.on("resize",function(a){var b=a.size._width,c=a.size._height,e=c-a.delta.height,f=b-a.delta.width;d.resize(f,b,e,c)});var p=b.throttle(function(){d.redraw()},50);this.addRepresentations("Node",this.renkan.project.get("nodes")),this.addRepresentations("Edge",this.renkan.project.get("edges")),this.renkan.project.on("change:title",function(){d.$.find(".Rk-PadTitle").val(c.project.get("title")).prop("title",c.project.get("title"))}),this.$.find(".Rk-PadTitle").on("keyup input paste",function(){c.project.set({title:a(this).val()})});var q=b.throttle(function(){d.redrawUsers()},100);if(q(),this.renkan.project.on("change:saveStatus",function(){switch(d.renkan.project.get("saveStatus")){case 0:d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("saved");break;case 1:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("saving"),d.$.find(".Rk-Save-Button").addClass("to-save");break;case 2:d.$.find(".Rk-Save-Button").removeClass("saved"),d.$.find(".Rk-Save-Button").removeClass("to-save"),d.$.find(".Rk-Save-Button").addClass("saving")}}),this.renkan.project.on("loaded",function(){d.renkan.options.url_parameters?Backbone.history.start():d.fixSize(),d.redrawActive=!0,p()}),this.renkan.router.on("router",function(a){d.setViewParameters(a)}),this.renkan.project.on("change:loadingStatus",function(){if(d.renkan.project.get("loadingStatus")){d.$.find(".loader").addClass("run"),setTimeout(function(){d.$.find(".loader").hide(250)},3e3)}}),this.renkan.project.on("add:users remove:users",q),this.renkan.project.on("add:views remove:views",function(a){d.renkan.project.get("views").length>1?d.$.find(".Rk-ZoomSetSaved").show():d.$.find(".Rk-ZoomSetSaved").hide()}),this.renkan.project.on("add:nodes",function(a){d.addRepresentation("Node",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("add:edges",function(a){d.addRepresentation("Edge",a),d.renkan.project.get("loadingStatus")||p()}),this.renkan.project.on("change:title",function(a,b){var c=d.$.find(".Rk-PadTitle");c.is("input")?c.val()!==b&&c.val(b):c.text(b)}),c.options.size_bug_fix){var r="number"==typeof c.options.size_bug_fix?c.options.size_bug_fix:500;window.setTimeout(function(){d.fixSize()},r)}if(c.options.force_resize&&a(window).resize(function(){d.autoScale()}),c.options.show_user_list&&c.options.user_color_editable){var s=this.$.find(".Rk-Users .Rk-Edit-ColorPicker-Wrapper"),t=this.$.find(".Rk-Users .Rk-Editor-ColorPicker-User");s.hover(function(a){d.isEditable()&&(a.preventDefault(),t.show())},function(a){a.preventDefault(),t.hide()}),t.find("li").mouseenter(function(b){d.isEditable()&&(b.preventDefault(),d.$.find(".Rk-CurrentUser-Color").css("background",a(this).attr("data-color")))})}if(c.options.show_search_field){var u="";this.$.find(".Rk-GraphSearch-Field").on("keyup change paste input",function(){ +var b=a(this),e=b.val();if(e!==u)if(u=e,e.length<2)c.project.get("nodes").each(function(a){d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){d.getRepresentationByModel(a).unhighlight()});else{var f=g.regexpFromTextOrArray(e);c.project.get("nodes").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()}),c.project.get("edges").each(function(a){a.id===e||f.test(a.get("title"))||f.test(a.get("description"))?d.getRepresentationByModel(a).highlight(f):d.getRepresentationByModel(a).unhighlight()})}})}this.redraw(),window.setInterval(function(){var a=(new Date).valueOf();d.delete_list.forEach(function(b){if(a>=b.time){var d=c.project.get("nodes").findWhere({delete_scheduled:b.id});d&&project.removeNode(d),d=c.project.get("edges").findWhere({delete_scheduled:b.id}),d&&project.removeEdge(d)}}),d.delete_list=d.delete_list.filter(function(a){return c.project.get("nodes").findWhere({delete_scheduled:a.id})||c.project.get("edges").findWhere({delete_scheduled:a.id})})},500),this.minimap&&window.setInterval(function(){d.rescaleMinimap()},2e3)};return b(h.prototype).extend({fixSize:function(){"undefined"==typeof this.view&&(this.view=this.addRepresentation("View",this.renkan.project.get("views").last())),this.view.autoScale()},drawSector:function(b,c,d,e,f,g,h,i){var j=this.renkan.options,k=e*Math.PI/180,l=f*Math.PI/180,m=this.icon_cache[h],n=-Math.sin(k),o=Math.cos(k),p=Math.cos(k)*c+g*n,q=Math.sin(k)*c+g*o,r=Math.cos(k)*d+g*n,s=Math.sin(k)*d+g*o,t=-Math.sin(l),u=Math.cos(l),v=Math.cos(l)*c-g*t,w=Math.sin(l)*c-g*u,x=Math.cos(l)*d-g*t,y=Math.sin(l)*d-g*u,z=(c+d)/2,A=(k+l)/2,B=Math.cos(A)*z,C=Math.sin(A)*z,D=Math.cos(A)*c,E=Math.cos(A)*d,F=Math.sin(A)*c,G=Math.sin(A)*d,H=Math.cos(A)*(d+3),I=Math.sin(A)*(d+j.buttons_label_font_size)+j.buttons_label_font_size/2;this.buttons_layer.activate();var J=new paper.Path;J.add([p,q]),J.arcTo([D,F],[v,w]),J.lineTo([x,y]),J.arcTo([E,G],[r,s]),J.fillColor=j.buttons_background,J.opacity=.5,J.closed=!0,J.__representation=b;var K=new paper.PointText(H,I);K.characterStyle={fontSize:j.buttons_label_font_size,fillColor:j.buttons_label_color},H>2?K.paragraphStyle.justification="left":H<-2?K.paragraphStyle.justification="right":K.paragraphStyle.justification="center",K.visible=!1;var L=!1,M=new paper.Point(-200,-200),N=new paper.Group([J,K]),O=N.position,P=new paper.Point([B,C]),Q=new paper.Point(0,0);K.content=i,N.pivot=N.bounds.center,N.visible=!1,N.position=M;var R={show:function(){L=!0,N.position=Q.add(O),N.visible=!0},moveTo:function(a){Q=a,L&&(N.position=a.add(O))},hide:function(){L=!1,N.visible=!1,N.position=M},select:function(){J.opacity=.8,K.visible=!0},unselect:function(){J.opacity=.5,K.visible=!1},destroy:function(){N.remove()}},S=function(){var a=new paper.Raster(m);a.position=P.add(N.position).subtract(O),a.locked=!0,N.addChild(a)};return m.width?S():a(m).on("load",S),R},addToBundles:function(a){var c=b(this.bundles).find(function(b){return b.from===a.from_representation&&b.to===a.to_representation||b.from===a.to_representation&&b.to===a.from_representation});return"undefined"!=typeof c?c.edges.push(a):(c={from:a.from_representation,to:a.to_representation,edges:[a],getPosition:function(a){var c=a.from_representation===this.from?1:-1;return c*(b(this.edges).indexOf(a)-(this.edges.length-1)/2)}},this.bundles.push(c)),c},isEditable:function(){return this.renkan.options.editor_mode&&!this.renkan.read_only},onStatusChange:function(){var a=this.$.find(".Rk-Save-Button"),b=a.find(".Rk-TopBar-Tooltip-Contents");this.renkan.read_only?(a.removeClass("disabled Rk-Save-Online").addClass("Rk-Save-ReadOnly"),b.text(this.renkan.translate("Connection lost"))):this.renkan.options.manual_save?(a.removeClass("Rk-Save-ReadOnly Rk-Save-Online"),b.text(this.renkan.translate("Save Project"))):(a.removeClass("disabled Rk-Save-ReadOnly").addClass("Rk-Save-Online"),b.text(this.renkan.translate("Auto-save enabled"))),this.redrawUsers()},redrawMiniframe:function(){var a=this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),b=this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));this.minimap.miniframe.fitBounds(a,b)},rescaleMinimap:function(){var a=this.renkan.project.get("nodes");if(a.length>1){var b=a.map(function(a){return a.get("position").x}),c=a.map(function(a){return a.get("position").y}),d=Math.min.apply(Math,b),e=Math.min.apply(Math,c),f=Math.max.apply(Math,b),g=Math.max.apply(Math,c),h=Math.min(.8*this.view.scale*this.renkan.options.minimap_width/paper.view.bounds.width,.8*this.view.scale*this.renkan.options.minimap_height/paper.view.bounds.height,(this.renkan.options.minimap_width-2*this.renkan.options.minimap_padding)/(f-d),(this.renkan.options.minimap_height-2*this.renkan.options.minimap_padding)/(g-e));this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([(f+d)/2,(g+e)/2]).multiply(h)),this.minimap.scale=h}1===a.length&&(this.minimap.scale=.1,this.minimap.offset=this.minimap.size.divide(2).subtract(new paper.Point([a.at(0).get("position").x,a.at(0).get("position").y]).multiply(this.minimap.scale))),this.redraw()},toPaperCoords:function(a){return a.multiply(this.view.scale).add(this.view.offset)},toMinimapCoords:function(a){return a.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft)},toModelCoords:function(a){return a.subtract(this.view.offset).divide(this.view.scale)},addRepresentation:function(a,b){var c=d.getRenderer()[a],e=new c(this,b);return this.representations.push(e),e},addRepresentations:function(a,b){var c=this;b.forEach(function(b){c.addRepresentation(a,b)})},userTemplate:b.template('
                                                              • <%=name%>
                                                              • '),redrawUsers:function(){if(this.renkan.options.show_user_list){var b=[].concat((this.renkan.project.current_user_list||{}).models||[],(this.renkan.project.get("users")||{}).models||[]),c="",d=this.$.find(".Rk-Users"),e=d.find(".Rk-CurrentUser-Name"),f=d.find(".Rk-Edit-ColorPicker li"),g=d.find(".Rk-CurrentUser-Color"),h=this;e.off("click").text(this.renkan.translate("")),f.off("mouseleave click"),b.forEach(function(b){b.get("_id")===h.renkan.current_user?(e.text(b.get("title")),g.css("background",b.get("color")),h.isEditable()&&(h.renkan.options.user_name_editable&&e.click(function(){var c=a(this),d=a("").val(b.get("title")).blur(function(){b.set("title",a(this).val()),h.redrawUsers(),h.redraw()});c.empty().html(d),d.select()}),h.renkan.options.user_color_editable&&f.click(function(c){c.preventDefault(),h.isEditable()&&b.set("color",a(this).attr("data-color")),a(this).parent().hide()}).mouseleave(function(){g.css("background",b.get("color"))}))):c+=h.userTemplate({name:b.get("title"),background:b.get("color")})}),d.find(".Rk-UserList").html(c)}},removeRepresentation:function(a){a.destroy(),this.representations=b.reject(this.representations,function(b){return b===a})},getRepresentationByModel:function(a){if(a)return b.find(this.representations,function(b){return b.model===a})},removeRepresentationsOfType:function(a){var c=b.filter(this.representations,function(b){return b.type===a}),d=this;b.each(c,function(a){d.removeRepresentation(a)})},highlightModel:function(a){var b=this.getRepresentationByModel(a);b&&b.highlight()},unhighlightAll:function(a){b.each(this.representations,function(a){a.unhighlight()})},unselectAll:function(a){b.each(this.representations,function(a){a.unselect()})},redraw:function(){this.redrawActive&&(b.each(this.representations,function(a){a.redraw({dontRedrawEdges:!0})}),this.minimap&&"undefined"!=typeof this.view&&this.redrawMiniframe(),paper.view.draw())},resize:function(a,b,c,d){var e;this.minimap&&(this.minimap.topleft=paper.view.bounds.bottomRight.subtract(this.minimap.size),this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]),this.minimap.size.add([4,4])),this.minimap.cliprectangle.fitBounds(this.minimap.topleft,this.minimap.size));var f=d/c,g=b/a;e=dg._MIN_DRAG_DISTANCE&&(this.is_dragging=!0);var e=paper.project.hitTest(c);this.is_dragging?this.click_target&&"function"==typeof this.click_target.paperShift?this.click_target.paperShift(d):this.view.paperShift(d):this.findTarget(e),paper.view.draw()},onMouseDown:function(b,c){var d=this.canvas_$.offset(),e=new paper.Point([b.pageX-d.left,b.pageY-d.top]);if(this.last_point=e,this.mouse_down=!0,!this.click_target||"Temp-edge"!==this.click_target.type){this.removeRepresentationsOfType("editor"),this.is_dragging=!1;var f=paper.project.hitTest(e);if(f&&"undefined"!=typeof f.item.__representation)this.click_target=f.item.__representation,this.click_target.mousedown(b,c);else if(this.click_target=null,this.isEditable()&&this.click_mode===g._CLICKMODE_ADDNODE){var h=this.toModelCoords(e),i={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:h.x,y:h.y},origin:g.OriginEnum.NODE_BUTTON},j=this.renkan.project.addNode(i);this.getRepresentationByModel(j).openEditor()}}this.click_mode&&(this.isEditable()&&this.click_mode===g._CLICKMODE_STARTEDGE&&this.click_target&&"Node"===this.click_target.type?(this.removeRepresentationsOfType("editor"),this.addTempEdge(this.click_target,e,g.OriginEnum.EDGE_BUTTON_BAR),this.click_mode=g._CLICKMODE_ENDEDGE,this.notif_$.fadeOut(function(){a(this).html(this.renkan.translate("Click on a second node to complete the edge")).fadeIn()})):(this.notif_$.hide(),this.click_mode=!1)),paper.view.draw()},onMouseUp:function(a,b){if(this.mouse_down=!1,this.click_target){var c=this.canvas_$.offset();this.click_target.mouseup({point:new paper.Point([a.pageX-c.left,a.pageY-c.top])},b)}else this.click_target=null,this.is_dragging=!1,b&&this.unselectAll(),this.view.updateUrl();paper.view.draw()},onScroll:function(a,b){if(this.totalScroll+=b,Math.abs(this.totalScroll)>=1){var c=this.canvas_$.offset(),d=new paper.Point([a.pageX-c.left,a.pageY-c.top]).subtract(this.view.offset).multiply(Math.SQRT2-1);this.totalScroll>0?this.view.setScale(this.view.scale*Math.SQRT2,this.view.offset.subtract(d)):this.view.setScale(this.view.scale*Math.SQRT1_2,this.view.offset.add(d.divide(Math.SQRT2))),this.totalScroll=0}},onClick:function(a){if(!this.isEditable()){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);!this._open_uri_cb&&this.renkan.options.simple_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&(this._node_click_open_url=setTimeout(function(){window.open(d.item.__representation.model.get("uri"),"_blank"),this._node_click_open_url=null}.bind(this),200))}},onDoubleClick:function(a){var b=this.canvas_$.offset(),c=new paper.Point([a.pageX-b.left,a.pageY-b.top]),d=paper.project.hitTest(c);if(!this.isEditable())return void(this.renkan.options.double_click_open_url&&d&&"undefined"!=typeof d.item.__representation&&d.item.__representation.model.get("uri")&&!this._node_click_open_url&&window.open(d.item.__representation.model.get("uri"),"_blank"));if(this.isEditable()&&(!d||"undefined"==typeof d.item.__representation)){var e=this.toModelCoords(c),f={id:g.getUID("node"),created_by:this.renkan.current_user,position:{x:e.x,y:e.y},origin:g.OriginEnum.NODE_DOUBLE_CLICK},h=this.renkan.project.addNode(f);this.getRepresentationByModel(h).openEditor()}paper.view.draw()},defaultDropHandler:function(b){var c={},d="";switch(b["text/x-iri-specific-site"]){case"twitter":d=a("
                                                                ").html(b["text/x-iri-selected-html"]);var e=d.find(".tweet");c.title=this.renkan.translate("Tweet by ")+e.attr("data-name"),c.uri="http://twitter.com/"+e.attr("data-screen-name")+"/status/"+e.attr("data-tweet-id"),c.image=e.find(".avatar").attr("src"),c.description=e.find(".js-tweet-text:first").text();break;case"google":d=a("
                                                                ").html(b["text/x-iri-selected-html"]),c.title=d.find("h3:first").text().trim(),c.uri=d.find("h3 a").attr("href"),c.description=d.find(".st:first").text().trim();break;default:b["text/x-iri-source-uri"]&&(c.uri=b["text/x-iri-source-uri"])}if((b["text/plain"]||b["text/x-iri-selected-text"])&&(c.description=(b["text/plain"]||b["text/x-iri-selected-text"]).replace(/[\s\n]+/gm," ").trim()),b["text/html"]||b["text/x-iri-selected-html"]){d=a("
                                                                ").html(b["text/html"]||b["text/x-iri-selected-html"]);var f=d.find("image");f.length&&(c.image=f.attr("xlink:href"));var g=d.find("path");g.length&&(c.clipPath=g.attr("d"));var h=d.find("img");h.length&&(c.image=h[0].src);var i=d.find("a");i.length&&(c.uri=i[0].href),c.title=d.find("[title]").attr("title")||c.title,c.description=d.text().replace(/[\s\n]+/gm," ").trim()}b["text/uri-list"]&&(c.uri=b["text/uri-list"]),b["text/x-moz-url"]&&!c.title&&(c.title=(b["text/x-moz-url"].split("\n")[1]||"").trim(),c.title===c.uri&&(c.title=!1)),b["text/x-iri-source-title"]&&!c.title&&(c.title=b["text/x-iri-source-title"]),(b["text/html"]||b["text/x-iri-selected-html"])&&(d=a("
                                                                ").html(b["text/html"]||b["text/x-iri-selected-html"]),c.image=d.find("[data-image]").attr("data-image")||c.image,c.uri=d.find("[data-uri]").attr("data-uri")||c.uri,c.title=d.find("[data-title]").attr("data-title")||c.title,c.description=d.find("[data-description]").attr("data-description")||c.description,c.clipPath=d.find("[data-clip-path]").attr("data-clip-path")||c.clipPath),c.title||(c.title=this.renkan.translate("Dragged resource"));for(var j=["title","description","uri","image"],k=0;k=3){var c=b.view.split(","),d={project:this.renkan.project,offset:{x:parseFloat(c[0]),y:parseFloat(c[1])},zoom_level:parseFloat(c[2])};this.view.setScale(d.zoom_level,new paper.Point(d.offset))}"undefined"!=typeof b.view&&"autoscale"===b.view&&this.view.autoScale(),"undefined"!=typeof b.viewsNodes&&("true"===b.viewsNodes?(this.view.hiddenNodes=(this.view.params.hidden_nodes||[]).concat(),this.view.hideNodes()):this.view.showNodes(!1)),this.unhighlightAll(),"undefined"!=typeof b.node&&b.node&&this.highlightModel(this.renkan.project.get("nodes").get(b.node)),"undefined"!=typeof b.edge&&b.edge&&this.highlightModel(this.renkan.project.get("edges").get(b.edge))},validViewIndex:function(a){var b=parseInt(a),c=0;return c=b<0?this.renkan.project.get("views").length+b:b,"undefined"==typeof this.renkan.project.get("views").at(b)&&(c=0),c},foldBins:function(){var a,b=this.$.find(".Rk-Fold-Bins"),c=this.renkan.$.find(".Rk-Bins"),d=0,e=this,f=e.canvas_$.width();c.position().left<0?(d=new paper.Point([-c.width()/2,0]),c.animate({left:0},250),this.$.animate({left:300},250,function(){var a=e.$.width();paper.view.viewSize=new paper.Size([a,e.canvas_$.height()])}),a=f-c.width()0&&this.renkan.options.save_view&&this.$.find(".Rk-ZoomSetSaved").show()},redraw:function(a){},initWithParams:function(){var a=this;a.options.view_force_autoscale?this.autoScale():a.setScale(a.params.zoom_level,new paper.Point(a.params.offset)),a.options.hide_nodes&&!a.options.view_show_hiddennodes?(a.hiddenNodes=(a.params.hidden_nodes||[]).concat(),a.hideNodes()):a.showNodes(!1)},saveView:function(){var a=this,b={x:a.offset.x,y:a.offset.y};a.model=a.renkan.project.addView({zoom_level:a.scale,offset:b,hidden_nodes:a.hiddenNodes.concat()}),a.params={zoom_level:a.model.get("zoom_level"),offset:a.model.get("offset"),hidden_nodes:a.model.get("hidden_nodes")},this.$.find(".Rk-ZoomSetSaved").show(),a.updateUrl()},addHiddenNode:function(a){this.hideNode(a),this.hiddenNodes.push(a.id),this.updateUrl()},hideNode:function(a){"undefined"!=typeof this.renderer.getRepresentationByModel(a)&&this.renderer.getRepresentationByModel(a).hide()},hideNodes:function(){var a=this;this.hiddenNodes.forEach(function(b,c){var d=a.renkan.project.get("nodes").get(b);return"undefined"!=typeof d?a.hideNode(a.renkan.project.get("nodes").get(b)):void a.hiddenNodes.splice(c,1)}),paper.view.draw()},showNodes:function(a){var b=this;this.hiddenNodes.forEach(function(c){b.renderer.getRepresentationByModel(b.renkan.project.get("nodes").get(c)).show(a)}),a||(this.hiddenNodes=[]),paper.view.draw()},setScale:function(a,b){a/this.initialScale>e._MIN_SCALE&&a/this.initialScale1){var c=b.map(function(a){return a.get("position").x}),d=b.map(function(a){return a.get("position").y}),e=Math.min.apply(Math,c),f=Math.min.apply(Math,d),g=Math.max.apply(Math,c),h=Math.max.apply(Math,d),i=Math.min((paper.view.size.width-2*this.renkan.options.autoscale_padding)/(g-e),(paper.view.size.height-2*this.renkan.options.autoscale_padding)/(h-f));this.initialScale=i,"undefined"!=typeof a&&parseFloat(a.zoom_level)>0&&parseFloat(a.offset.x)>0&&parseFloat(a.offset.y)>0?this.setScale(parseFloat(a.zoom_level),new paper.Point(parseFloat(a.offset.x),parseFloat(a.offset.y))):this.setScale(i,paper.view.center.subtract(new paper.Point([(g+e)/2,(h+f)/2]).multiply(i)))}1===b.length&&this.setScale(1,paper.view.center.subtract(new paper.Point([b.at(0).get("position").x,b.at(0).get("position").y])))},paperShift:function(a){this.offset=this.offset.add(a),this.renderer.redraw()},updateUrl:function(){if(this.options.url_parameters&&this.options.update_url){var b={},c=Backbone.history.getFragment().split("?");c.length>1&&c[1].split("&").forEach(function(a){var c=a.split("=");b[c[0]]=decodeURIComponent(c[1])}),b.view=Math.round(1e3*this.offset.x)/1e3+","+Math.round(1e3*this.offset.y)/1e3+","+Math.round(1e3*this.scale)/1e3,this.renkan.project.get("views").indexOf(this.model)>-1?(b.viewIndex=this.renkan.project.get("views").indexOf(this.model),b.viewIndex===this.renkan.project.get("views").length-1&&(b.viewIndex=-1)):b.viewIndex&&delete b.viewIndex,this.renkan.router.navigate("?"+decodeURIComponent(a.param(b)),{trigger:!1,replace:!0})}},destroy:function(a){this._super("destroy"),this.showNodes(!1)}}).value(),f}),"function"==typeof require.config&&require.config({paths:{jquery:"../lib/jquery/jquery",underscore:"../lib/lodash/lodash",filesaver:"../lib/FileSaver/FileSaver",requtils:"require-utils","jquery-private":"jquery-private","ckeditor-core":"../lib/ckeditor/ckeditor",screenfull:"../lib/screenfull/screenfull-umd"},map:{"*":{jquery:"jquery-private"},"jquery-private":{jquery:"jquery"}},shim:{"ckeditor-core":{exports:"CKEDITOR"}}}),require(["renderer/baserepresentation","renderer/basebutton","renderer/noderepr","renderer/edge","renderer/tempedge","renderer/baseeditor","renderer/nodeeditor","renderer/edgeeditor","renderer/nodebutton","renderer/nodeeditbutton","renderer/noderemovebutton","renderer/nodehidebutton","renderer/nodeshowbutton","renderer/noderevertbutton","renderer/nodelinkbutton","renderer/nodeenlargebutton","renderer/nodeshrinkbutton","renderer/edgeeditbutton","renderer/edgeremovebutton","renderer/edgerevertbutton","renderer/miniframe","renderer/scene","renderer/viewrepr"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){"use strict";var x=window.Rkns;"undefined"==typeof x.Renderer&&(x.Renderer={});var y=x.Renderer;y._BaseRepresentation=a,y._BaseButton=b,y.Node=c,y.Edge=d,y.View=w,y.TempEdge=e,y._BaseEditor=f,y.NodeEditor=g,y.EdgeEditor=h,y._NodeButton=i,y.NodeEditButton=j,y.NodeRemoveButton=k,y.NodeHideButton=l,y.NodeShowButton=m,y.NodeRevertButton=n,y.NodeLinkButton=o,y.NodeEnlargeButton=p,y.NodeShrinkButton=q,y.EdgeEditButton=r,y.EdgeRemoveButton=s,y.EdgeRevertButton=t,y.MiniFrame=u,y.Scene=v,startRenkan()}),define("main-renderer",function(){}),define("jquery-private",["jquery"],function(a){"use strict";return a.noConflict(!0)}); //# sourceMappingURL=renkan.min.js.map \ No newline at end of file diff -r 50f5e8d2c839 -r cac26275af31 server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js.map --- a/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js.map Fri Sep 15 14:04:42 2017 +0200 +++ b/server/python/django2/renkanmanager/static/renkanmanager/lib/renkan/js/renkan.min.js.map Fri Sep 15 14:11:36 2017 +0200 @@ -1,1 +1,1 @@ -{"version":3,"sources":["templates.js","../../js/main.js","../../js/router.js","../../js/dataloader.js","../../js/models.js","../../js/defaults.js","../../js/i18n.js","../../js/full-json.js","../../js/save-once.js","../../js/ldtjson-bin.js","../../js/list-bin.js","../../js/wikipedia-bin.js","paper-renderer.js"],"names":["this","obj","__t","__p","__e","_","escape","print","__j","call","arguments","Array","prototype","join","options","show_edge_tooltip_color","edge","color","uri","title","show_edge_tooltip_uri","short_uri","show_edge_tooltip_nodes","renkan","translate","from_color","shortenText","from_title","to_color","to_title","show_edge_tooltip_creator","has_creator","created_by_color","created_by_title","show_edge_editor_uri","properties","length","each","ontology","label","property","show_edge_editor_style","show_edge_editor_style_color","colorPicker","show_edge_editor_style_dash","dash","show_edge_editor_style_thickness","thickness","show_edge_editor_style_arrow","arrow","show_edge_editor_direction","show_edge_editor_nodes","show_edge_editor_creator","Rkns","Utils","getFullURL","image","description","static_url","url","show_bins","show_editor","show_node_tooltip_color","node","show_node_tooltip_uri","show_node_tooltip_description","show_node_tooltip_image","show_node_tooltip_creator","_id","show_node_editor_title_richtext","show_node_title_style","title_color","title_size","toFixed","show_node_editor_uri","change_types","types","type","charAt","toUpperCase","substring","show_node_editor_description","show_node_editor_description_richtext","show_node_editor_size","size","show_node_editor_style","show_node_editor_style_color","show_node_editor_style_dash","show_node_editor_style_thickness","show_node_editor_image","image_placeholder","clip_path","allow_image_upload","show_node_editor_creator","change_shapes","shapes","shape","show_top_bar","editor_mode","title_editable","project","get","show_user_list","show_user_color","user_color_editable","home_button_url","home_button_title","show_fullscreen_button","show_addnode_button","show_addedge_button","show_export_button","show_save_button","show_open_button","show_bookmarklet","show_search_field","resize","show_zoom","save_view","hide_nodes","root","$","jQuery","pickerColors","__renkans","_BaseBin","_renkan","_opts","find","hide","addClass","appendTo","title_icon_$","_this","attr","href","html","click","destroy","slideDown","resizeBins","refresh","count_$","title_$","main_$","auto_refresh","window","setInterval","detach","Renkan","push","defaults","templates","renkanJST","node_editor_templates","template","types_templates","value","key","property_files","f","getJSON","data","concat","read_only","router","Router","Models","Project","dataloader","DataLoader","Loader","setCurrentUser","user_id","user_name","addUser","current_user","renderer","redrawUsers","container","tabs","search_engines","current_user_list","UsersList","on","pickerClass","_tmpl","map","c","Renderer","Scene","search","_select","_input","_form","_search","_key","Search","getSearchTitle","className","getBgClass","_el","setSearchEngine","submit","val","search_engine","mouseenter","mouseleave","bins","_bin","Bin","elementDropped","_mainDiv","siblings","is","slideUp","_e","_t","_models","where","_model","highlightModel","mouseout","unhighlightAll","e","dragDrop","err","preventDefault","touch","originalEvent","changedTouches","off","canvas_$","offset","w","width","h","height","pageX","left","pageY","top","onMouseMove","div","document","createElement","appendChild","cloneNode","dropData","text/html","innerHTML","onMouseDown","onMouseUp","dataTransfer","setData","lastsearch","lastval","regexpFromTextOrArray","source","tab","render","_text","i18n","language","substr","onStatusChange","listClasses","split","classes","i","_d","outerHeight","css","getUUID4","replace","r","Math","random","v","toString","OriginEnum","o","Object","freeze","NONE","NODE_BUTTON","NODE_DOUBLE_CLICK","NODE_DROP_EXT","NODE_DROP_BIN","EDGE_BUTTON_BAR","EDGE_BUTTON_CIRCLE","getUID","pad","n","Date","ID_AUTO_INCREMENT","ID_BASE","getUTCFullYear","getUTCMonth","getUTCDate","_base","_n","_uidbase","test","img","Image","src","res","inherit","_baseClass","_callbefore","_class","_arg","apply","slice","_init","_initialized","extend","replaceText","makeReplaceFunc","l","k","charsrx","txt","toLowerCase","remrx","j","remsrc","charsub","getSource","inp","removeChars","String","fromCharCode","RegExp","_textOrArray","testrx","replacerx","isempty","_replace","text","_MIN_DRAG_DISTANCE","_NODE_BUTTON_WIDTH","_EDGE_BUTTON_INNER","_EDGE_BUTTON_OUTER","_CLICKMODE_ADDNODE","_CLICKMODE_STARTEDGE","_CLICKMODE_ENDEDGE","_NODE_SIZE_STEP","LN2","_MIN_SCALE","_MAX_SCALE","_MOUSEMOVE_RATE","_DOUBLETAP_DELAY","_DOUBLETAP_DISTANCE","_USER_PLACEHOLDER","default_user_color","_BOOKMARKLET_CODE","_maxlength","drawEditBox","_options","_coords","_path","_xmargin","_selector","tooltip_width","tooltip_padding","rect","getBoundingClientRect","container_rect","bottom","overflow-x","overflow-y","max-height","_height","_isLeft","x","paper","view","center","_left","tooltip_arrow_length","_right","_top","y","tooltip_margin","max","tooltip_arrow_width","min","_bottom","segments","point","add","fillColor","Color","Gradient","tooltip_top_color","tooltip_bottom_color","increaseBrightness","hex","percent","parseInt","g","b","Backbone","routes","","index","parameters","result","forEach","part","item","decodeURIComponent","trigger","converters","from1to2","len","nodes","style","edges","schema_version","dataConverters","convert","schemaVersionFrom","getSchemaVersion","schemaVersionTo","converterName","load","set","validate","guid","RenkanModel","RelationalModel","idAttribute","constructor","id","prepare","addReference","_propName","_list","_default","_element","User","toJSON","Node","relations","HasOne","relatedModel","created_by","position","Edge","from","to","View","isArray","zoom_level","hidden_nodes","RosterUser","blacklist","HasMany","reverseRelation","includeInJSON","_props","_user","findOrCreate","addNode","_node","addEdge","_edge","addView","_view","removeNode","remove","removeEdge","_project","users","views","_item","t","version","initialize","filter","json","clone","attributes","Model","Collection","omit","site_id","model","navigator","userLanguage","popup_editor","editor_panel","manual_save","size_bug_fix","force_resize","allow_double_click","double_click_open_url","simple_click_open_url","zoom_on_scroll","element_delete_delay","autoscale_padding","view_force_autoscale","view_show_hiddennodes","default_index_view","url_parameters","update_url","user_name_editable","show_minimap","minimap_width","minimap_height","minimap_padding","minimap_background_color","minimap_border_color","minimap_highlight_color","minimap_highlight_weight","buttons_background","buttons_label_color","buttons_label_font_size","ghost_opacity","default_dash_array","show_node_circles","clip_node_images","node_images_fill_mode","node_size_base","node_stroke_width","node_stroke_max_width","selected_node_stroke_width","selected_node_stroke_max_width","node_stroke_witdh_scale","node_title_size_min","node_title_size_max","node_title_size_step","node_fill_color","highlighted_node_fill_color","node_title_color","node_label_distance","node_label_max_length","label_untitled_nodes","default","video","edge_stroke_width","edge_stroke_max_width","selected_edge_stroke_width","selected_edge_stroke_max_width","edge_stroke_witdh_scale","edge_label_distance","edge_label_max_length","edge_arrow_length","edge_arrow_width","edge_arrow_max_width","edge_gap_in_bundles","highlighted_edge_color","label_untitled_edges","tooltip_border_color","tooltip_border_width","tooltip_opacity","richtext_editor_config","toolbarGroups","name","groups","removePlugins","show_node_editor_title","uploaded_image_max_kb","fr","Edit Node","Edit Edge","Title:","URI:","Description:","From:","To:","Image URL:","Choose Image File:","Full Screen","Add Node","Add Edge","Save Project","Open Project","Auto-save enabled","Connection lost","Created by:","Zoom In","Zoom Out","Edit","Remove","Cancel deletion","Link to another node","Enlarge","Shrink","Click on the background canvas to add a node","Click on a first node to start the edge","Click on a second node to complete the edge","Wikipedia","Wikipedia in ","French","English","Japanese","Untitled project","Lignes de Temps","Loading, please wait","Edge color:","Dash:","Thickness:","Arrow:","Node color:","Choose color","Change edge direction","Do you really wish to remove node ","Do you really wish to remove edge ","This file is not an image","Image size must be under ","Size:","KB","Choose from vocabulary:","SKOS Documentation properties","has note","has example","has definition","SKOS Semantic relations","has broader","has narrower","has related","Dublin Core Metadata","has contributor","covers","created by","has date","published by","has source","has subject","Dragged resource","Search the Web","Search in Bins","Close bin","Refresh bin","(untitled)","Select contents:","Drag items from this website, drop them in Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.","Shapes available","Circle","Square","Diamond","Hexagone","Ellipse","Star","Cloud","Triangle","Polygon","Zoom Fit","Download Project","Save view","View saved view","Renkan 'Drag-to-Add' bookmarklet","(unknown user)","","Search in graph","Search in ","Show hidden nodes","Show neighbors","Hide","Fullscreen not supported by your browser","Title size:","Title color:","jsonIO","_proj","http_method","_load","loadingStatus","_data","saveStatus","_save","ajax","contentType","JSON","stringify","success","textStatus","jqXHR","_thrSave","throttle","setTimeout","changedAttributes","hasChanged","jsonIOSaveOnClick","_saveWarn","_onLeave","getdata","rx","matches","location","hash","match","beforeSend","_checkLeave","removeClass","save","hasClass","Ldt","ProjectBin","ldt_type","Resclass","console","error","tagTemplate","annotationTemplate","proj_id","project_id","ldt_platform","searchbase","highlight","convertTC","_ms","_res","_totalSeconds","abs","floor","_hours","_minutes","_seconds","_html","_projtitle","meta","count","tags","_tag","_title","htitle","encodedtitle","encodeURIComponent","annotations","_annotation","_description","content","_duration","end","begin","_img","hdescription","start","duration","mediaid","media","annotationid","show","dataType","lang","_q","ResultsBin","segmentTemplate","max_results","highlightrx","objects","_segment","abstract","_begin","start_ts","_end","iri_id","element_id","format","q","limit","ResourceList","resultTemplate","list","trim","_match","langs","en","ja","query","_result","encodeURI","snippet","define","_BaseRepresentation","_renderer","_changeBinding","redraw","change","_removeBinding","removeRepresentation","defer","_selectBinding","select","_unselectBinding","unselect","_super","_func","moveTo","unhighlight","mousedown","mouseup","getUtils","getRenderer","requtils","BaseRepresentation","_BaseButton","_pos","sector","_newTarget","source_representation","cloud_path","builders","circle","getShape","Path","getImageShape","radius","rectangle","Rectangle","ellipse","polygon","RegularPolygon","diamond","d","SQRT2","rotate","star","cloud","path","scale","triangle","svg","ShapeBuilder","NodeRepr","node_layer","activate","buildShape","hidden","ghost","strokeWidth","h_ratio","labels_$","normal_buttons","NodeEditButton","NodeRemoveButton","NodeLinkButton","NodeEnlargeButton","NodeShrinkButton","NodeHideButton","NodeShowButton","pending_delete_buttons","NodeRevertButton","all_buttons","active_buttons","last_circle_radius","minimap","minimap_circle","__representation","miniframe","node_group","addChild","_getStrokeWidth","has","_getSelectedStrokeWidth","changed","shapeBuilder","sendToBack","_model_coords","Point","_baseRadius","exp","is_dragging","paper_coords","toPaperCoords","circle_radius","setSectorSize","node_image","subtract","image_delta","multiply","old_act_btn","opacity","dashArray","selected","isEditable","highlighted","clean_title","textContent","innerText","node_style","title-color","text_size","text_color","text_style","line-height","text_node","empty","append","_strokeWidth","_color","_dash","strokeColor","_pc","lastImage","showImage","minipos","toMinimapCoords","miniradius","minisize","Size","fitBounds","dontRedrawEdges","ed","repr","getRepresentationByModel","from_representation","to_representation","_image","image_cache","clipPath","hasClipPath","_clip","baseRadius","centerPoint","instructions","lastCoords","minX","Infinity","minY","maxX","maxY","transformCoords","tabc","relative","newCoords","parseFloat","isY","instr","coords","lineTo","cubicCurveTo","quadraticCurveTo","_raster","Raster","locked","Group","clipped","_circleClip","divide","insertAbove","paperShift","_delta","openEditor","removeRepresentationsOfType","_editor","addRepresentation","draw","clearTimeout","hide_timeout","_uri","showNeighbors","hideButtons","buttons_timeout","undefined","hideNeighbors","hide_delay","delay","indexNode","hiddenNodes","indexOf","splice","textToReplace","hlvalue","throttledPaperDraw","saveCoords","toModelCoords","_event","_isTouch","unselectAll","click_target","edge_layer","bundle","addToBundles","line","arrow_scale","pivot","arrow_angle","EdgeEditButton","EdgeRemoveButton","EdgeRevertButton","minimap_line","_getArrowScale","_opacity","_arrow_scale","_p0a","_p1a","_v","_r","_u","_ortho","_group_pos","getPosition","_p0b","_p1b","_a","angle","_textdelta","_handle","visible","handleIn","handleOut","bounds","_textpos","transform","-moz-transform","-webkit-transform","text_angle","reject","TempEdge","origin","_p0","_p1","end_pos","_c","_hitResult","hitTest","findTarget","_endDrag","_target","_destmodel","_BaseEditor","buttons_layer","editor_block","_pts","range","editor_$","BaseEditor","CKEditor","NodeEditor","readOnlyTemplate","_created_by","_template","_image_placeholder","_size","keys","editorInstance","inline","editorInstanceTitle","closeEditor","cleanEditor","focusManager","blur","onFieldChange","debounce","checkDirty","getData","resetDirty","assign","keyCode","files","FileReader","alert","onload","target","readAsDataURL","focus","_picker","hover","shiftSize","_newsize","shiftThickness","_oldThickness","_newThickness","shiftTitleSize","_oldTitleSize","_newTitleSize","_pickerTitle","step","titlehtml","EdgeEditor","_from_model","_to_model","BaseButton","_NodeButton","sectorInner","lastSectorInner","drawSector","startAngle","endAngle","imageName","NodeButton","delid","delete_list","time","valueOf","confirm","addHiddenNode","unset","_off","_point","addTempEdge","MiniFrame","filesaver","Screenfull","representations","notif_$","setup","totalScroll","mouse_down","selected_target","Layer","redrawActive","background_layer","topleft","bottomRight","cliprectangle","bundles","click_mode","_allowScroll","_originalScale","_zooming","_lastTapX","_lastTapY","_lastTap","icon_cache","imgname","throttledMouseMove","mousemove","mousewheel","onScroll","touchstart","_touches","touches","pow","onDoubleClick","touchmove","_newScale","_scaleRatio","_newOffset","setScale","touchend","onClick","dblclick","dragover","dragenter","dragleave","drop","parse","bindClick","selector","fname","evt","enabled","addEventListener","raw","fullscreenchange","widthAft","heightAft","viewSize","currentWidth","currentHeight","isFullscreen","onResize","newWidth","_width","newHeight","prevHeight","delta","prevWidth","fadeIn","fadeOut","mouseover","_thRedraw","addRepresentations","prop","_thRedrawUsers","history","fixSize","_params","setViewParameters","el","_delay","autoScale","$cpwrapper","$cplist","$this","rxs","_now","findWhere","delete_scheduled","rescaleMinimap","last","_repr","_inR","_outR","_startAngle","_endAngle","_padding","_imgname","_caption","_startRads","PI","_endRads","_startdx","sin","_startdy","cos","_startXIn","_startYIn","_startXOut","_startYOut","_enddx","_enddy","_endXIn","_endYIn","_endXOut","_endYOut","_centerR","_centerRads","_centerX","_centerY","_centerXIn","_centerXOut","_centerYIn","_centerYOut","_textX","_textY","arcTo","closed","PointText","characterStyle","fontSize","paragraphStyle","justification","_visible","_restPos","_grp","_imgdelta","_currentPos","_edgeRepr","_bundle","_er","_dir","savebtn","tip","redrawMiniframe","bottomright","_xx","_yy","_minx","_miny","_maxx","_maxy","_scale","at","_type","RendererType","_collection","userTemplate","allUsers","models","ulistHtml","$userpanel","$name","$cpitems","$colorsquare","$input","parent","background","_representation","_representations","_ratio","ratioH","ratioW","resizeZoom","_from","_origin","_tmpEdge","last_point","updateUrl","_scrolldelta","SQRT1_2","_open_uri_cb","_node_click_open_url","open","bind","defaultDropHandler","newNode","tweetdiv","_svgimgs","_svgpaths","_imgs","_as","fields","drop_enhancer","jsondata","drop_handler","_nodedata","fullScreen","toggle","addNodeBtn","addEdgeBtn","exportProject","projectJSON","projectId","fileNameToSaveAs","space_id","objId","idsMap","projectJSONStr","blob","Blob","isEmptyObject","validViewIndex","viewIndex","viewParams","params","viewsNodes","hideNodes","showNodes","_index","validIndex","foldBins","sizeAft","foldBinsButton","sizeBef","animate","ViewRepr","initialScale","initWithParams","saveView","hideNode","_offset","zoomOut","zoomIn","deltaW","deltaH","force_view","getFragment","round","navigate","param","require","config","paths","jquery","underscore","jquery-private","ckeditor-core","screenfull","*","shim","exports","startRenkan","jq","noConflict"],"mappings":"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","file":"renkan.min.js","sourcesContent":["this[\"renkanJST\"] = this[\"renkanJST\"] || {};\n\nthis[\"renkanJST\"][\"templates/colorpicker.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                              • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor_readonly.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                                                \\n ×\\n ';\n if (options.show_edge_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (edge.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n__e(edge.title) +\n'\\n ';\n if (edge.uri) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n

                                                                \\n';\n if (options.show_edge_tooltip_uri && edge.uri) { ;\n__p += '\\n

                                                                \\n ' +\n__e( edge.short_uri ) +\n'\\n

                                                                \\n';\n } ;\n__p += '\\n

                                                                ' +\n((__t = (edge.description)) == null ? '' : __t) +\n'

                                                                \\n';\n if (options.show_edge_tooltip_nodes) { ;\n__p += '\\n

                                                                \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                                                \\n

                                                                \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                                                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_tooltip_creator && edge.has_creator) { ;\n__p += '\\n

                                                                \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                                                \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                                                \\n ×' +\n__e(renkan.translate(\"Edit Edge\")) +\n'\\n

                                                                \\n

                                                                \\n \\n \\n

                                                                \\n';\n if (options.show_edge_editor_uri) { ;\n__p += '\\n

                                                                \\n \\n \\n \\n

                                                                \\n ';\n if (options.properties.length) { ;\n__p += '\\n

                                                                \\n \\n \\n

                                                                \\n';\n } } ;\n__p += '\\n';\n if (options.show_edge_editor_style) { ;\n__p += '\\n
                                                                \\n ';\n if (options.show_edge_editor_style_color) { ;\n__p += '\\n
                                                                \\n ' +\n__e(renkan.translate(\"Edge color:\")) +\n'\\n
                                                                \\n ;\">\\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Edge') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                                                \\n
                                                                \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_dash) { ;\n__p += '\\n
                                                                \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                                                \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_thickness) { ;\n__p += '\\n
                                                                \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e( edge.thickness ) +\n'\\n +\\n
                                                                \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_arrow) { ;\n__p += '\\n
                                                                \\n ' +\n__e(renkan.translate(\"Arrow:\")) +\n'\\n \\n
                                                                \\n ';\n } ;\n__p += '\\n
                                                                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_direction) { ;\n__p += '\\n

                                                                \\n ' +\n__e( renkan.translate(\"Change edge direction\") ) +\n'\\n

                                                                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_nodes) { ;\n__p += '\\n

                                                                \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                                                \\n

                                                                \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n %-edge.to_color%>;\">\\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                                                \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_creator && edge.has_creator) { ;\n__p += '\\n

                                                                \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n ;\">\\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                                                \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/annotationtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                              • \\n\\n \\n

                                                                ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                                                \\n

                                                                ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                \\n

                                                                Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                                                \\n
                                                                \\n
                                                              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/segmenttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                              • \\n\\n \\n

                                                                ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                                                \\n

                                                                ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                \\n

                                                                Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                                                \\n
                                                                \\n
                                                              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/tagtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                              • \\n\\n \\n

                                                                ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                                                \\n
                                                                \\n
                                                              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/list-bin.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
                                                              • \\n';\n } ;\n__p += '\\n

                                                                \\n ';\n if (url) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n ';\n if (url) { ;\n__p += '';\n } ;\n__p += '\\n

                                                                \\n ';\n if (description) { ;\n__p += '\\n

                                                                ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                \\n ';\n } ;\n__p += '\\n ';\n if (image) { ;\n__p += '\\n
                                                                \\n ';\n } ;\n__p += '\\n
                                                              • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/main.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_bins) { ;\n__p += '\\n
                                                                \\n
                                                                \\n

                                                                ' +\n__e( translate(\"Select contents:\")) +\n'

                                                                \\n
                                                                \\n \\n
                                                                \\n
                                                                \\n
                                                                  \\n
                                                                  \\n \\n
                                                                  \\n
                                                                  \\n \\n \\n
                                                                  \\n
                                                                    \\n
                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_editor) { ;\n__p += '\\n
                                                                    \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                                                    \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n

                                                                    \\n ' +\n__e(node.short_uri) +\n'\\n

                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_tooltip_description) { ;\n__p += '\\n

                                                                    ' +\n((__t = (node.description)) == null ? '' : __t) +\n'

                                                                    \\n';\n } ;\n__p += ' ';\n if (node.image && options.show_node_tooltip_image) { ;\n__p += '\\n \\n';\n } ;\n__p += ' ';\n if (node.has_creator && options.show_node_tooltip_creator) { ;\n__p += '\\n

                                                                    \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                                                    \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor_video.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                                                    \\n ×\\n ';\n if (options.show_node_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                                                    \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n //TODO: change class to id ;\n__p += '\\n

                                                                    \\n ×' +\n__e(renkan.translate(\"Edit Node\")) +\n'\\n

                                                                    \\n

                                                                    \\n \\n ';\n if (options.show_node_editor_title_richtext) { ;\n__p += '\\n

                                                                    ' +\n((__t = (node.title)) == null ? '' : __t) +\n'
                                                                    \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                                                    \\n';\n if (options.show_node_title_style) { ;\n__p += '\\n
                                                                    \\n
                                                                    \\n ' +\n__e(renkan.translate(\"Title color:\")) +\n'\\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Title') )) == null ? '' : __t) +\n'\\n
                                                                    \\n
                                                                    \\n ' +\n__e(renkan.translate(\"Title size:\")) +\n'\\n -\\n ' +\n__e(node.title_size.toFixed(1)) +\n'\\n +\\n
                                                                    \\n
                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_uri) { ;\n__p += '\\n

                                                                    \\n \\n \\n \\n

                                                                    \\n';\n } ;\n__p += ' ';\n if (options.change_types) { ;\n__p += '\\n

                                                                    \\n \\n \\n

                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_description) { ;\n__p += '\\n

                                                                    \\n \\n ';\n if (options.show_node_editor_description_richtext) { ;\n__p += '\\n

                                                                    ' +\n((__t = (node.description)) == null ? '' : __t) +\n'
                                                                    \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_size) { ;\n__p += '\\n

                                                                    \\n ' +\n__e(renkan.translate(\"Size:\")) +\n'\\n -\\n ' +\n__e(node.size) +\n'\\n +\\n

                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_style) { ;\n__p += '\\n
                                                                    \\n ';\n if (options.show_node_editor_style_color) { ;\n__p += '\\n
                                                                    \\n \\n ' +\n__e(renkan.translate(\"Node color:\")) +\n'\\n
                                                                    \\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Node') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                                                    \\n
                                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_dash) { ;\n__p += '\\n
                                                                    \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                                                    \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_thickness) { ;\n__p += '\\n
                                                                    \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e(node.thickness) +\n'\\n +\\n
                                                                    \\n ';\n } ;\n__p += '\\n
                                                                    \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_image) { ;\n__p += '\\n
                                                                    \\n
                                                                    \\n \\n ';\n if (node.clip_path) { ;\n__p += '\\n \\n \\n \\n ';\n };\n__p += '\\n
                                                                    \\n
                                                                    \\n

                                                                    \\n \\n

                                                                    \\n \\n \\n
                                                                    \\n

                                                                    \\n';\n if (options.allow_image_upload) { ;\n__p += '\\n

                                                                    \\n \\n \\n

                                                                    \\n';\n };\n\n } ;\n__p += ' ';\n if (options.show_node_editor_creator && node.has_creator) { ;\n__p += '\\n

                                                                    \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                                                    \\n';\n } ;\n__p += ' ';\n if (options.change_shapes) { ;\n__p += '\\n

                                                                    \\n \\n \\n

                                                                    \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/scene.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_top_bar) { ;\n__p += '\\n
                                                                    \\n
                                                                    \\n ';\n if (!options.editor_mode || !options.title_editable) { ;\n__p += '\\n

                                                                    \\n ' +\n__e( project.get(\"title\") || translate(\"Untitled project\")) +\n'\\n

                                                                    \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (options.show_user_list) { ;\n__p += '\\n
                                                                    \\n
                                                                    \\n ';\n if (options.show_user_color) { ;\n__p += '\\n
                                                                    \\n \\n ';\n if (options.user_color_editable) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (options.user_color_editable) { print(colorPicker('Rk-Editor-ColorPicker-User')) } ;\n__p += '\\n
                                                                    \\n ';\n } ;\n__p += '\\n <unknown user>\\n
                                                                    \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.home_button_url) {;\n__p += '\\n
                                                                      \\n \\n
                                                                      \\n
                                                                      \\n ' +\n__e( translate(options.home_button_title) ) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_fullscreen_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Full Screen\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.editor_mode) { ;\n__p += '\\n ';\n if (options.show_addnode_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Add Node\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_addedge_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Add Edge\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_save_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_open_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Open Project\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_bookmarklet) { ;\n__p += '\\n
                                                                      \\n \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Renkan \\'Drag-to-Add\\' bookmarklet\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n } else { ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n }; ;\n__p += '\\n ';\n if (options.show_search_field) { ;\n__p += '\\n
                                                                      \\n \\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n
                                                                      \\n';\n } ;\n__p += '\\n
                                                                      \\n
                                                                      \\n
                                                                      \\n ';\n if (options.editor_mode && options.save_view) { ;\n__p += '\\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.save_view) { ;\n__p += '\\n
                                                                      \\n ';\n if (options.hide_nodes) { ;\n__p += '\\n \\t \\n ';\n } ;\n__p += ' \\n ';\n } ;\n__p += '\\n
                                                                      \\n ';\n } ;\n__p += '\\n \\n\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/search.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                    • ' +\n((__t = ( title )) == null ? '' : __t) +\n'
                                                                    • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/wikipedia-bin/resulttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                    • \\n\\n \\n

                                                                      \\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n

                                                                      \\n

                                                                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                      \\n
                                                                    • \\n';\n\n}\nreturn __p\n};","/* Declaring the Renkan Namespace Rkns and Default values */\n\n(function(root) {\n\n \"use strict\";\n\n if (typeof root.Rkns !== \"object\") {\n root.Rkns = {};\n }\n\n var Rkns = root.Rkns;\n var $ = Rkns.$ = root.jQuery;\n var _ = Rkns._ = root._;\n\n Rkns.pickerColors = [\"#8f1919\", \"#a80000\", \"#d82626\", \"#ff0000\", \"#e87c7c\", \"#ff6565\", \"#f7d3d3\", \"#fecccc\",\n \"#8f5419\", \"#a85400\", \"#d87f26\", \"#ff7f00\", \"#e8b27c\", \"#ffb265\", \"#f7e5d3\", \"#fee5cc\",\n \"#8f8f19\", \"#a8a800\", \"#d8d826\", \"#feff00\", \"#e8e87c\", \"#feff65\", \"#f7f7d3\", \"#fefecc\",\n \"#198f19\", \"#00a800\", \"#26d826\", \"#00ff00\", \"#7ce87c\", \"#65ff65\", \"#d3f7d3\", \"#ccfecc\",\n \"#198f8f\", \"#00a8a8\", \"#26d8d8\", \"#00feff\", \"#7ce8e8\", \"#65feff\", \"#d3f7f7\", \"#ccfefe\",\n \"#19198f\", \"#0000a8\", \"#2626d8\", \"#0000ff\", \"#7c7ce8\", \"#6565ff\", \"#d3d3f7\", \"#ccccfe\",\n \"#8f198f\", \"#a800a8\", \"#d826d8\", \"#ff00fe\", \"#e87ce8\", \"#ff65fe\", \"#f7d3f7\", \"#feccfe\",\n \"#000000\", \"#242424\", \"#484848\", \"#6d6d6d\", \"#919191\", \"#b6b6b6\", \"#dadada\", \"#ffffff\"\n ];\n\n Rkns.__renkans = [];\n\n var _BaseBin = Rkns._BaseBin = function(_renkan, _opts) {\n if (typeof _renkan !== \"undefined\") {\n this.renkan = _renkan;\n this.renkan.$.find(\".Rk-Bin-Main\").hide();\n this.$ = Rkns.$('
                                                                    • ')\n .addClass(\"Rk-Bin\")\n .appendTo(_renkan.$.find(\".Rk-Bin-List\"));\n this.title_icon_$ = Rkns.$('')\n .addClass(\"Rk-Bin-Title-Icon\")\n .appendTo(this.$);\n\n var _this = this;\n\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Close bin\")\n })\n .addClass(\"Rk-Bin-Close\")\n .html('×')\n .appendTo(this.$)\n .click(function() {\n _this.destroy();\n if (!_renkan.$.find(\".Rk-Bin-Main:visible\").length) {\n _renkan.$.find(\".Rk-Bin-Main:last\").slideDown();\n }\n _renkan.resizeBins();\n return false;\n });\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Refresh bin\")\n })\n .addClass(\"Rk-Bin-Refresh\")\n .appendTo(this.$)\n .click(function() {\n _this.refresh();\n return false;\n });\n this.count_$ = Rkns.$('
                                                                      ')\n .addClass(\"Rk-Bin-Count\")\n .appendTo(this.$);\n this.title_$ = Rkns.$('

                                                                      ')\n .addClass(\"Rk-Bin-Title\")\n .appendTo(this.$);\n this.main_$ = Rkns.$('
                                                                      ')\n .addClass(\"Rk-Bin-Main\")\n .appendTo(this.$)\n .html('

                                                                      ' + _renkan.translate(\"Loading, please wait\") + '

                                                                      ');\n this.title_$.html(_opts.title || '(new bin)');\n this.renkan.resizeBins();\n\n if (_opts.auto_refresh) {\n window.setInterval(function() {\n _this.refresh();\n }, _opts.auto_refresh);\n }\n }\n };\n\n _BaseBin.prototype.destroy = function() {\n this.$.detach();\n this.renkan.resizeBins();\n };\n\n /* Point of entry */\n\n var Renkan = Rkns.Renkan = function(_opts) {\n var _this = this;\n\n Rkns.__renkans.push(this);\n\n this.options = _.defaults(_opts, Rkns.defaults, {\n templates: _.defaults(_opts.templates, renkanJST) || renkanJST,\n node_editor_templates: _.defaults(_opts.node_editor_templates, Rkns.defaults.node_editor_templates)\n });\n this.template = this.options.templates['templates/main.html'];\n\n var types_templates = {};\n _.each(this.options.node_editor_templates, function(value, key) {\n types_templates[key] = _this.options.templates[value];\n delete _this.options.templates[value];\n });\n this.options.node_editor_templates = types_templates;\n\n _.each(this.options.property_files, function(f) {\n Rkns.$.getJSON(f, function(data) {\n _this.options.properties = _this.options.properties.concat(data);\n });\n });\n\n this.read_only = this.options.read_only || !this.options.editor_mode;\n\n this.router = new Rkns.Router();\n\n this.project = new Rkns.Models.Project();\n this.dataloader = new Rkns.DataLoader.Loader(this.project, this.options);\n\n this.setCurrentUser = function(user_id, user_name) {\n this.project.addUser({\n _id: user_id,\n title: user_name\n });\n this.current_user = user_id;\n this.renderer.redrawUsers();\n };\n\n if (typeof this.options.user_id !== \"undefined\") {\n this.current_user = this.options.user_id;\n }\n this.$ = Rkns.$(\"#\" + this.options.container);\n this.$\n .addClass(\"Rk-Main\")\n .html(this.template(this));\n\n this.tabs = [];\n this.search_engines = [];\n\n this.current_user_list = new Rkns.Models.UsersList();\n\n this.current_user_list.on(\"add remove\", function() {\n if (this.renderer) {\n this.renderer.redrawUsers();\n }\n });\n\n this.colorPicker = function(pickerClass) {\n var _tmpl = _this.options.templates['templates/colorpicker.html'];\n return '
                                                                        ' + Rkns.pickerColors.map(function(c) {\n return _tmpl({\n c: c\n });\n }).join(\"\") + '
                                                                      ';\n };\n\n if (this.options.show_editor) {\n this.renderer = new Rkns.Renderer.Scene(this);\n }\n\n if (!this.options.search.length) {\n this.$.find(\".Rk-Web-Search-Form\").detach();\n } else {\n var _tmpl = _this.options.templates['templates/search.html'],\n _select = this.$.find(\".Rk-Search-List\"),\n _input = this.$.find(\".Rk-Web-Search-Input\"),\n _form = this.$.find(\".Rk-Web-Search-Form\");\n _.each(this.options.search, function(_search, _key) {\n if (Rkns[_search.type] && Rkns[_search.type].Search) {\n _this.search_engines.push(new Rkns[_search.type].Search(_this, _search));\n }\n });\n _select.html(\n _(this.search_engines).map(function(_search, _key) {\n return _tmpl({\n key: _key,\n title: _search.getSearchTitle(),\n className: _search.getBgClass()\n });\n }).join(\"\")\n );\n _select.find(\"li\").click(function() {\n var _el = Rkns.$(this);\n _this.setSearchEngine(_el.attr(\"data-key\"));\n _form.submit();\n });\n _form.submit(function() {\n if (_input.val()) {\n var _search = _this.search_engine;\n _search.search(_input.val());\n }\n return false;\n });\n this.$.find(\".Rk-Search-Current\").mouseenter(\n function() {\n _select.slideDown();\n }\n );\n this.$.find(\".Rk-Search-Select\").mouseleave(\n function() {\n _select.hide();\n }\n );\n this.setSearchEngine(0);\n }\n _.each(this.options.bins, function(_bin) {\n if (Rkns[_bin.type] && Rkns[_bin.type].Bin) {\n _this.tabs.push(new Rkns[_bin.type].Bin(_this, _bin));\n }\n });\n\n var elementDropped = false;\n\n this.$.find(\".Rk-Bins\")\n .on(\"click\", \".Rk-Bin-Title,.Rk-Bin-Title-Icon\", function() {\n var _mainDiv = Rkns.$(this).siblings(\".Rk-Bin-Main\");\n if (_mainDiv.is(\":hidden\")) {\n _this.$.find(\".Rk-Bin-Main\").slideUp();\n _mainDiv.slideDown();\n }\n });\n\n if (this.options.show_editor) {\n\n this.$.find(\".Rk-Bins\").on(\"mouseover\", \".Rk-Bin-Item\", function(_e) {\n var _t = Rkns.$(this);\n if (_t && $(_t).attr(\"data-uri\")) {\n var _models = _this.project.get(\"nodes\").where({\n uri: $(_t).attr(\"data-uri\")\n });\n _.each(_models, function(_model) {\n _this.renderer.highlightModel(_model);\n });\n }\n }).mouseout(function() {\n _this.renderer.unhighlightAll();\n }).on(\"mousemove\", \".Rk-Bin-Item\", function(e) {\n try {\n this.dragDrop();\n } catch (err) {}\n }).on(\"touchstart\", \".Rk-Bin-Item\", function(e) {\n elementDropped = false;\n }).on(\"touchmove\", \".Rk-Bin-Item\", function(e) {\n e.preventDefault();\n var touch = e.originalEvent.changedTouches[0],\n off = _this.renderer.canvas_$.offset(),\n w = _this.renderer.canvas_$.width(),\n h = _this.renderer.canvas_$.height();\n if (touch.pageX >= off.left && touch.pageX < (off.left + w) && touch.pageY >= off.top && touch.pageY < (off.top + h)) {\n if (elementDropped) {\n _this.renderer.onMouseMove(touch, true);\n } else {\n elementDropped = true;\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n _this.renderer.dropData({\n \"text/html\": div.innerHTML\n }, touch);\n _this.renderer.onMouseDown(touch, true);\n }\n }\n }).on(\"touchend\", \".Rk-Bin-Item\", function(e) {\n if (elementDropped) {\n _this.renderer.onMouseUp(e.originalEvent.changedTouches[0], true);\n }\n elementDropped = false;\n }).on(\"dragstart\", \".Rk-Bin-Item\", function(e) {\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n try {\n e.originalEvent.dataTransfer.setData(\"text/html\", div.innerHTML);\n } catch (err) {\n e.originalEvent.dataTransfer.setData(\"text\", div.innerHTML);\n }\n });\n\n }\n\n Rkns.$(window).resize(function() {\n _this.resizeBins();\n });\n\n var lastsearch = false,\n lastval = '';\n\n this.$.find(\".Rk-Bins-Search-Input\").on(\"change keyup paste input\", function() {\n var val = Rkns.$(this).val();\n if (val === lastval) {\n return;\n }\n var search = Rkns.Utils.regexpFromTextOrArray(val.length > 1 ? val : null);\n if (search.source === lastsearch) {\n return;\n }\n lastsearch = search.source;\n _.each(_this.tabs, function(tab) {\n tab.render(search);\n });\n\n });\n this.$.find(\".Rk-Bins-Search-Form\").submit(function() {\n return false;\n });\n };\n\n Renkan.prototype.translate = function(_text) {\n if (Rkns.i18n[this.options.language] && Rkns.i18n[this.options.language][_text]) {\n return Rkns.i18n[this.options.language][_text];\n }\n if (this.options.language.length > 2 && Rkns.i18n[this.options.language.substr(0, 2)] && Rkns.i18n[this.options.language.substr(0, 2)][_text]) {\n return Rkns.i18n[this.options.language.substr(0, 2)][_text];\n }\n return _text;\n };\n\n Renkan.prototype.onStatusChange = function() {\n this.renderer.onStatusChange();\n };\n\n Renkan.prototype.setSearchEngine = function(_key) {\n this.search_engine = this.search_engines[_key];\n this.$.find(\".Rk-Search-Current\").attr(\"class\", \"Rk-Search-Current \" + this.search_engine.getBgClass());\n var listClasses = this.search_engine.getBgClass().split(\" \");\n var classes = \"\";\n for (var i = 0; i < listClasses.length; i++) {\n classes += \".\" + listClasses[i];\n }\n this.$.find(\".Rk-Web-Search-Input.Rk-Search-Input\").attr(\"placeholder\", this.translate(\"Search in \") + this.$.find(\".Rk-Search-List \" + classes).html());\n };\n\n Renkan.prototype.resizeBins = function() {\n var _d = +this.$.find(\".Rk-Bins-Head\").outerHeight();\n this.$.find(\".Rk-Bin-Title:visible\").each(function() {\n _d += Rkns.$(this).outerHeight();\n });\n this.$.find(\".Rk-Bin-Main\").css({\n height: this.$.find(\".Rk-Bins\").height() - _d\n });\n };\n\n /* Utility functions */\n var getUUID4 = function() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n Rkns.Utils = {\n\n OriginEnum: (function(o) { return (Object.freeze && Object.freeze(o)) || o; }) ({\n NONE: 0,\n NODE_BUTTON: 1,\n NODE_DOUBLE_CLICK: 2,\n NODE_DROP_EXT: 3,\n NODE_DROP_BIN: 4,\n EDGE_BUTTON_BAR: 256,\n EDGE_BUTTON_CIRCLE: 512\n }),\n\n getUUID4: getUUID4,\n getUID: (function() {\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n var _d = new Date(),\n ID_AUTO_INCREMENT = 0,\n ID_BASE = _d.getUTCFullYear() + '-' +\n pad(_d.getUTCMonth() + 1) + '-' +\n pad(_d.getUTCDate()) + '-' +\n getUUID4();\n return function(_base) {\n var _n = (++ID_AUTO_INCREMENT).toString(16),\n _uidbase = (typeof _base === \"undefined\" ? \"\" : _base + \"-\");\n while (_n.length < 4) {\n _n = '0' + _n;\n }\n return _uidbase + ID_BASE + '-' + _n;\n };\n })(),\n getFullURL: function(url) {\n\n if (typeof(url) === 'undefined' || url == null) {\n return \"\";\n }\n if (/https?:\\/\\//.test(url)) {\n return url;\n }\n var img = new Image();\n img.src = url;\n var res = img.src;\n img.src = null;\n return res;\n\n },\n inherit: function(_baseClass, _callbefore) {\n\n var _class = function(_arg) {\n if (typeof _callbefore === \"function\") {\n _callbefore.apply(this, Array.prototype.slice.call(arguments, 0));\n }\n _baseClass.apply(this, Array.prototype.slice.call(arguments, 0));\n if (typeof this._init === \"function\" && !this._initialized) {\n this._init.apply(this, Array.prototype.slice.call(arguments, 0));\n this._initialized = true;\n }\n };\n _.extend(_class.prototype, _baseClass.prototype);\n\n return _class;\n\n },\n regexpFromTextOrArray: (function() {\n var charsub = [\n '[aáàâä]',\n '[cç]',\n '[eéèêë]',\n '[iíìîï]',\n '[oóòôö]',\n '[uùûü]'\n ],\n removeChars = [\n String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \"【\", \"】\", \"、\", \"・\", \"‥\", \"。\", \"「\", \"」\", \"『\", \"』\", \"〜\", \":\", \"!\", \"?\", \" \",\n \",\", \" \", \";\", \"(\", \")\", \".\", \"*\", \"+\", \"\\\\\", \"?\", \"|\", \"{\", \"}\", \"[\", \"]\", \"^\", \"#\", \"/\"\n ],\n remsrc = \"[\\\\\" + removeChars.join(\"\\\\\") + \"]\",\n remrx = new RegExp(remsrc, \"gm\"),\n charsrx = _.map(charsub, function(c) {\n return new RegExp(c);\n });\n\n function replaceText(_text) {\n var txt = _text.toLowerCase().replace(remrx, \"\"),\n src = \"\";\n\n function makeReplaceFunc(l) {\n return function(k, v) {\n l = l.replace(charsrx[k], v);\n };\n }\n for (var j = 0; j < txt.length; j++) {\n if (j) {\n src += remsrc + \"*\";\n }\n var l = txt[j];\n _.each(charsub, makeReplaceFunc(l));\n src += l;\n }\n return src;\n }\n\n function getSource(inp) {\n switch (typeof inp) {\n case \"string\":\n return replaceText(inp);\n case \"object\":\n var src = '';\n _.each(inp, function(v) {\n var res = getSource(v);\n if (res) {\n if (src) {\n src += '|';\n }\n src += res;\n }\n });\n return src;\n }\n return '';\n }\n\n return function(_textOrArray) {\n var source = getSource(_textOrArray);\n if (source) {\n var testrx = new RegExp(source, \"im\"),\n replacerx = new RegExp('(' + source + ')', \"igm\");\n return {\n isempty: false,\n source: source,\n test: function(_t) {\n return testrx.test(_t);\n },\n replace: function(_text, _replace) {\n return _text.replace(replacerx, _replace);\n }\n };\n } else {\n return {\n isempty: true,\n source: '',\n test: function() {\n return true;\n },\n replace: function(_text) {\n return text;\n }\n };\n }\n };\n })(),\n /* The minimum distance (in pixels) the mouse has to move to consider an element was dragged */\n _MIN_DRAG_DISTANCE: 2,\n /* Distance between the inner and outer radius of buttons that appear when hovering on a node */\n _NODE_BUTTON_WIDTH: 40,\n\n _EDGE_BUTTON_INNER: 2,\n _EDGE_BUTTON_OUTER: 40,\n /* Constants used to know if a specific action is to be performed when clicking on the canvas */\n _CLICKMODE_ADDNODE: 1,\n _CLICKMODE_STARTEDGE: 2,\n _CLICKMODE_ENDEDGE: 4,\n /* Node size step: Used to calculate the size change when clicking the +/- buttons */\n _NODE_SIZE_STEP: Math.LN2 / 4,\n _MIN_SCALE: 1 / 20,\n _MAX_SCALE: 20,\n _MOUSEMOVE_RATE: 80,\n _DOUBLETAP_DELAY: 800,\n /* Maximum distance in pixels (squared, to reduce calculations)\n * between two taps when double-tapping on a touch terminal */\n _DOUBLETAP_DISTANCE: 20 * 20,\n /* A placeholder so a default colour is displayed when a node has a null value for its user property */\n _USER_PLACEHOLDER: function(_renkan) {\n return {\n color: _renkan.options.default_user_color,\n title: _renkan.translate(\"(unknown user)\"),\n get: function(attr) {\n return this[attr] || false;\n }\n };\n },\n /* The code for the \"Drag and Add Bookmarklet\", slightly minified and with whitespaces removed, though\n * it doesn't seem that it's still a requirement in newer browsers (i.e. the ones compatibles with canvas drawing)\n */\n _BOOKMARKLET_CODE: function(_renkan) {\n return \"(function(a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r){a=document;b=a.body;c=a.location.href;j='draggable';m='text/x-iri-';d=a.createElement('div');d.innerHTML='\" +\n _renkan.translate(\"Drag items from this website, drop them in Renkan\").replace(/ /g, \"_\") +\n \"

                                                                      '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\\\/\\\\/[^\\\\/]*twitter\\\\.com\\\\//,s:'.tweet',n:'twitter'},{r:/https?:\\\\/\\\\/[^\\\\/]*google\\\\.[^\\\\/]+\\\\//,s:'.g',n:'google'},{r:/https?:\\\\/\\\\/[^\\\\/]*lemonde\\\\.fr\\\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();\";\n },\n /* Shortens text to the required length then adds ellipsis */\n shortenText: function(_text, _maxlength) {\n return (_text.length > _maxlength ? (_text.substr(0, _maxlength) + '…') : _text);\n },\n /* Drawing an edit box with an arrow and positioning the edit box according to the position of the node/edge being edited\n * Called by Rkns.Renderer.NodeEditor and Rkns.Renderer.EdgeEditor */\n drawEditBox: function(_options, _coords, _path, _xmargin, _selector, _renkan) {\n _selector.css({\n width: (_options.tooltip_width - 2 * _options.tooltip_padding)\n });\n \n var rect = _selector[0].getBoundingClientRect();\n var container_rect = _renkan.$[0].getBoundingClientRect();\n\n if(rect.bottom > (container_rect.bottom - 2 * _options.tooltip_padding - 10)) {\n _selector.css({\n 'overflow-x': 'hidden',\n 'overflow-y': 'scroll',\n 'max-height':(container_rect.bottom - 2 * _options.tooltip_padding - 5 - rect.top) + 'px'\n });\n }\n\n var _height = _selector.outerHeight() + 2 * _options.tooltip_padding + 5,\n _isLeft = (_coords.x < paper.view.center.x ? 1 : -1),\n _left = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length),\n _right = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length + _options.tooltip_width),\n _top = _coords.y - _height / 2;\n if (_top + _height > (paper.view.size.height - _options.tooltip_margin)) {\n _top = Math.max(paper.view.size.height - _options.tooltip_margin, _coords.y + _options.tooltip_arrow_width / 2) - _height;\n }\n if (_top < _options.tooltip_margin) {\n _top = Math.min(_options.tooltip_margin, _coords.y - _options.tooltip_arrow_width / 2);\n }\n var _bottom = _top + _height;\n /* jshint laxbreak:true */\n _path.segments[0].point = _path.segments[7].point = _coords.add([_isLeft * _xmargin, 0]);\n _path.segments[1].point.x = _path.segments[2].point.x = _path.segments[5].point.x = _path.segments[6].point.x = _left;\n _path.segments[3].point.x = _path.segments[4].point.x = _right;\n _path.segments[2].point.y = _path.segments[3].point.y = _top;\n _path.segments[4].point.y = _path.segments[5].point.y = _bottom;\n _path.segments[1].point.y = _coords.y - _options.tooltip_arrow_width / 2;\n _path.segments[6].point.y = _coords.y + _options.tooltip_arrow_width / 2;\n _path.fillColor = new paper.Color(new paper.Gradient([_options.tooltip_top_color, _options.tooltip_bottom_color]), [0, _top], [0, _bottom]);\n\n _selector.css({\n left: (_options.tooltip_padding + Math.min(_left, _right)),\n top: (_options.tooltip_padding + _top)\n });\n \n return _path;\n },\n // from http://stackoverflow.com/a/6444043\n increaseBrightness: function (hex, percent){\n // strip the leading # if it's there\n hex = hex.replace(/^\\s*#|\\s*$/g, '');\n\n // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`\n if(hex.length === 3){\n hex = hex.replace(/(.)/g, '$1$1');\n }\n\n var r = parseInt(hex.substr(0, 2), 16),\n g = parseInt(hex.substr(2, 2), 16),\n b = parseInt(hex.substr(4, 2), 16);\n\n return '#' +\n ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);\n }\n };\n})(window);\n\n/* END main.js */\n","(function(root) {\n \"use strict\";\n \n var Backbone = root.Backbone;\n \n var Router = root.Rkns.Router = Backbone.Router.extend({\n routes: {\n '': 'index'\n },\n \n index: function (parameters) {\n \n var result = {};\n if (parameters !== null){\n parameters.split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n this.trigger('router', result); \n } \n });\n\n})(window);","(function(root) {\n\n \"use strict\";\n\n var DataLoader = root.Rkns.DataLoader = {\n converters: {\n from1to2: function(data) {\n\n var i, len;\n if(typeof data.nodes !== 'undefined') {\n for(i=0, len=data.nodes.length; i 1 ? options.offset[1]\n : options.offset[0];\n }\n else if (options.offset.x != null) {\n offset.x = options.offset.x;\n offset.y = options.offset.y;\n }\n options.offset = offset;\n }\n return options;\n },\n toJSON : function() {\n return {\n _id : this.get('_id'),\n zoom_level : this.get('zoom_level'),\n offset : this.get('offset'),\n title : this.get('title'),\n description : this.get('description'),\n created_by : this.get('created_by') ? this.get('created_by')\n .get('_id') : null,\n hidden_nodes: this.get('hidden_nodes')\n // Don't need project id\n };\n }\n });\n\n // PROJECT\n var Project = Models.Project = RenkanModel.extend({\n schema_version : '2',\n type : 'project',\n blacklist : [ 'saveStatus', 'loadingStatus'],\n relations : [ {\n type : Backbone.HasMany,\n key : 'users',\n relatedModel : User,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'nodes',\n relatedModel : Node,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'edges',\n relatedModel : Edge,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'views',\n relatedModel : View,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n } ],\n addUser : function(_props, _options) {\n _props.project = this;\n var _user = User.findOrCreate(_props);\n this.get('users').push(_user, _options);\n return _user;\n },\n addNode : function(_props, _options) {\n _props.project = this;\n var _node = Node.findOrCreate(_props);\n this.get('nodes').push(_node, _options);\n return _node;\n },\n addEdge : function(_props, _options) {\n _props.project = this;\n var _edge = Edge.findOrCreate(_props);\n this.get('edges').push(_edge, _options);\n return _edge;\n },\n addView : function(_props, _options) {\n _props.project = this;\n // TODO: check if need to replace with create only\n var _view = View.findOrCreate(_props);\n // TODO: Should we remember only one view?\n this.get('views').push(_view, _options);\n return _view;\n },\n removeNode : function(_model) {\n this.get('nodes').remove(_model);\n },\n removeEdge : function(_model) {\n this.get('edges').remove(_model);\n },\n validate : function(options) {\n var _project = this;\n _.each(\n [].concat(options.users, options.nodes, options.edges,options.views),\n function(_item) {\n if (_item) {\n _item.project = _project;\n }\n }\n );\n },\n getSchemaVersion : function(data) {\n var t = data;\n if(typeof(t) === 'undefined') {\n t = this;\n }\n var version = t.schema_version;\n if(!version) {\n return 1;\n }\n else {\n return version;\n }\n },\n // Add event handler to remove edges when a node is removed\n initialize : function() {\n var _this = this;\n this.on('remove:nodes', function(_node) {\n _this.get('edges').remove(\n _this.get('edges').filter(\n function(_edge) {\n return _edge.get('from') === _node ||\n _edge.get('to') === _node;\n }));\n });\n },\n toJSON : function() {\n var json = _.clone(this.attributes);\n for ( var attr in json) {\n if ((json[attr] instanceof Backbone.Model) ||\n (json[attr] instanceof Backbone.Collection) ||\n (json[attr] instanceof RenkanModel)) {\n json[attr] = json[attr].toJSON();\n }\n }\n return _.omit(json, this.blacklist);\n }\n });\n\n var RosterUser = Models.RosterUser = Backbone.Model\n .extend({\n type : 'roster_user',\n idAttribute : '_id',\n\n constructor : function(options) {\n\n if (typeof options !== 'undefined') {\n options._id = options._id ||\n options.id ||\n Models.getUID(this);\n options.title = options.title || '(untitled ' + this.type + ')';\n options.description = options.description || '';\n options.uri = options.uri || '';\n options.project = options.project || null;\n options.site_id = options.site_id || 0;\n\n if (typeof this.prepare === 'function') {\n options = this.prepare(options);\n }\n }\n Backbone.Model.prototype.constructor.call(this, options);\n },\n\n validate : function() {\n if (!this.type) {\n return 'object has no type';\n }\n },\n\n prepare : function(options) {\n options.color = options.color || '#666666';\n return options;\n },\n\n toJSON : function() {\n return {\n _id : this.get('_id'),\n title : this.get('title'),\n uri : this.get('uri'),\n description : this.get('description'),\n color : this.get('color'),\n project : (this.get('project') != null) ? this.get(\n 'project').get('id') : null,\n site_id : this.get('site_id')\n };\n }\n });\n\n var UsersList = Models.UsersList = Backbone.Collection.extend({\n model : RosterUser\n });\n\n})(window);\n","Rkns.defaults = {\n\n language: (navigator.language || navigator.userLanguage || \"en\"),\n /* GUI Language */\n container: \"renkan\",\n /* GUI Container DOM element ID */\n search: [],\n /* List of Search Engines */\n bins: [],\n /* List of Bins */\n static_url: \"\",\n /* URL for static resources */\n popup_editor: true,\n /* show the node editor as a popup inside the renkan view */\n editor_panel: 'editor-panel',\n /* GUI continer DOM element ID of the editor panel */\n show_bins: true,\n /* Show bins in left column */\n properties: [],\n /* Semantic properties for edges */\n show_editor: true,\n /* Show the graph editor... Setting this to \"false\" only shows the bins part ! */\n read_only: false,\n /* Allows editing of renkan without changing the rest of the GUI. Can be switched on/off on the fly to block/enable editing */\n editor_mode: true,\n /* Switch for Publish/Edit GUI. If editor_mode is false, read_only will be true. */\n manual_save: false,\n /* In snapshot mode, clicking on the floppy will save a snapshot. Otherwise, it will show the connection status */\n show_top_bar: true,\n /* Show the top bar, (title, buttons, users) */\n default_user_color: \"#303030\",\n size_bug_fix: false,\n /* Resize the canvas after load (fixes a bug on iPad and FF Mac) */\n force_resize: false,\n allow_double_click: true,\n /* Allows Double Click to create a node on an empty background */\n double_click_open_url: true,\n /* In read_only mode open node uri in new window with a double click */\n simple_click_open_url: false,\n /* In read_only mode open node uri in new window with a simple click (do not disable the double click) */\n zoom_on_scroll: true,\n /* Allows to use the scrollwheel to zoom */\n element_delete_delay: 0,\n /* Delay between clicking on the bin on an element and really deleting it\n Set to 0 for delete confirm */\n autoscale_padding: 50,\n resize: true,\n\n /* zoom options */\n show_zoom: true,\n /* show zoom buttons */\n save_view: true,\n /* show buttons to save view */\n view_force_autoscale: true,\n /* Force autoscale when the Renkan is loaded */\n view_show_hiddennodes: true,\n /* Show all the node when the Renkan is loaded */\n default_index_view: -1,\n\n /* URL parsing */\n url_parameters: true,\n /* accept or not hash parameters in the url */\n update_url: true,\n /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */\n /* Considered as false if url_parameters is false */\n\n\n /* TOP BAR BUTTONS */\n show_search_field: true,\n show_user_list: true,\n /* show the user list */\n user_name_editable: true,\n /* allow the edition of the user name */\n user_color_editable: true,\n /* allow the edition of the user color */\n title_editable: true,\n /* allow the edition of the renkan title */\n show_user_color: true,\n /* show user colors in the list */\n show_save_button: true,\n show_export_button: true,\n show_open_button: false,\n show_addnode_button: true,\n show_addedge_button: true,\n show_bookmarklet: true,\n show_fullscreen_button: true,\n home_button_url: false,\n home_button_title: \"Home\",\n\n /* MINI-MAP OPTIONS */\n\n show_minimap: true,\n /* Show a small map at the bottom right */\n minimap_width: 160,\n minimap_height: 120,\n minimap_padding: 20,\n minimap_background_color: \"#ffffff\",\n minimap_border_color: \"#cccccc\",\n minimap_highlight_color: \"#ffff00\",\n minimap_highlight_weight: 5,\n\n\n /* EDGE/NODE COMMON OPTIONS */\n\n buttons_background: \"#202020\",\n buttons_label_color: \"#c000c0\",\n buttons_label_font_size: 9,\n\n ghost_opacity : 0.3,\n /* opacity when the hidden element is revealed */\n default_dash_array : [4, 5],\n /* dash line genometry */\n\n /* NODE DISPLAY OPTIONS */\n\n show_node_circles: true,\n /* Show circles for nodes */\n clip_node_images: true,\n /* Constraint node images to circles */\n node_images_fill_mode: false,\n /* Set to false for \"letterboxing\" (height/width of node adapted to show full image)\n Set to true for \"crop\" (adapted to fill circle) */\n node_size_base: 25,\n node_stroke_width: 2,\n node_stroke_max_width: 12,\n selected_node_stroke_width: 4,\n selected_node_stroke_max_width: 24,\n node_stroke_witdh_scale: 5,\n node_title_size_min: 0,\n /* minimum relative size for node title (in graph) */\n node_title_size_max: 5,\n /* maximum relative size for node title (in graph) */\n node_title_size_step: 0.1,\n /* step for relative size for node title (in graph) */\n node_fill_color: \"#ffffff\",\n /* default color to fill node background */\n highlighted_node_fill_color: \"#ffff00\",\n /* default color to fill highlighted node background */\n node_title_color: \"#000000\",\n /* default title color */\n node_label_distance: 5,\n /* Vertical distance between node and label */\n node_label_max_length: 60,\n /* Maximum displayed text length */\n label_untitled_nodes: \"(untitled)\",\n /* Label to display on untitled nodes */\n hide_nodes: true,\n /* allow hide/show nodes */\n change_shapes: true,\n /* Change shapes enabled */\n change_types: true,\n /* Change type enabled */\n\n /* NODE EDITOR TEMPLATE*/\n\n node_editor_templates: {\n \"default\": \"templates/nodeeditor_readonly.html\",\n \"video\": \"templates/nodeeditor_video.html\"\n },\n\n /* EDGE DISPLAY OPTIONS */\n\n edge_stroke_width: 2,\n edge_stroke_max_width: 12,\n selected_edge_stroke_width: 4,\n selected_edge_stroke_max_width: 24,\n edge_stroke_witdh_scale: 5,\n\n edge_label_distance: 0,\n edge_label_max_length: 20,\n edge_arrow_length: 18,\n edge_arrow_width: 12,\n edge_arrow_max_width: 32,\n edge_gap_in_bundles: 12,\n highlighted_edge_color: \"#ffff00\",\n label_untitled_edges: \"\",\n\n /* CONTEXTUAL DISPLAY (TOOLTIP OR EDITOR) OPTIONS */\n\n tooltip_width: 275,\n tooltip_padding: 10,\n tooltip_margin: 15,\n tooltip_arrow_length : 20,\n tooltip_arrow_width : 40,\n tooltip_top_color: \"#f0f0f0\",\n tooltip_bottom_color: \"#d0d0d0\",\n tooltip_border_color: \"#808080\",\n tooltip_border_width: 1,\n tooltip_opacity: 0.8,\n\n richtext_editor_config: {\n toolbarGroups: [\n { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n { name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n '/',\n\t { name: 'styles'},\n ],\n removePlugins : 'colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates',\n },\n\n /* NODE EDITOR OPTIONS */\n\n show_node_title_style: true,\n show_node_editor_uri: true,\n show_node_editor_title: true,\n show_node_editor_title_richtext: true,\n show_node_editor_description: true,\n show_node_editor_description_richtext: true,\n show_node_editor_size: true,\n show_node_editor_style: true, // show node title style editor\n show_node_editor_style_color: true,\n show_node_editor_style_dash: true,\n show_node_editor_style_thickness: true,\n show_node_editor_image: true,\n show_node_editor_creator: true,\n allow_image_upload: true,\n uploaded_image_max_kb: 500,\n\n\n /* NODE TOOLTIP OPTIONS */\n\n show_node_tooltip_uri: true,\n show_node_tooltip_description: true,\n show_node_tooltip_color: true,\n show_node_tooltip_image: true,\n show_node_tooltip_creator: true,\n\n /* EDGE EDITOR OPTIONS */\n\n show_edge_editor_uri: true,\n show_edge_editor_style: true,\n show_edge_editor_style_color: true,\n show_edge_editor_style_dash: true,\n show_edge_editor_style_thickness: true,\n show_edge_editor_style_arrow: true,\n show_edge_editor_direction: true,\n show_edge_editor_nodes: true,\n show_edge_editor_creator: true,\n\n /* EDGE TOOLTIP OPTIONS */\n\n show_edge_tooltip_uri: true,\n show_edge_tooltip_color: true,\n show_edge_tooltip_nodes: true,\n show_edge_tooltip_creator: true,\n\n};\n","Rkns.i18n = {\n fr: {\n \"Edit Node\": \"Édition d’un nœud\",\n \"Edit Edge\": \"Édition d’un lien\",\n \"Title:\": \"Titre :\",\n \"URI:\": \"URI :\",\n \"Description:\": \"Description :\",\n \"From:\": \"De :\",\n \"To:\": \"Vers :\",\n \"Image\": \"Image\",\n \"Image URL:\": \"URL d'Image\",\n \"Choose Image File:\": \"Choisir un fichier image\",\n \"Full Screen\": \"Mode plein écran\",\n \"Add Node\": \"Ajouter un nœud\",\n \"Add Edge\": \"Ajouter un lien\",\n \"Save Project\": \"Enregistrer le projet\",\n \"Open Project\": \"Ouvrir un projet\",\n \"Auto-save enabled\": \"Enregistrement automatique activé\",\n \"Connection lost\": \"Connexion perdue\",\n \"Created by:\": \"Créé par :\",\n \"Zoom In\": \"Agrandir l’échelle\",\n \"Zoom Out\": \"Rapetisser l’échelle\",\n \"Edit\": \"Éditer\",\n \"Remove\": \"Supprimer\",\n \"Cancel deletion\": \"Annuler la suppression\",\n \"Link to another node\": \"Créer un lien\",\n \"Enlarge\": \"Agrandir\",\n \"Shrink\": \"Rétrécir\",\n \"Click on the background canvas to add a node\": \"Cliquer sur le fond du graphe pour rajouter un nœud\",\n \"Click on a first node to start the edge\": \"Cliquer sur un premier nœud pour commencer le lien\",\n \"Click on a second node to complete the edge\": \"Cliquer sur un second nœud pour terminer le lien\",\n \"Wikipedia\": \"Wikipédia\",\n \"Wikipedia in \": \"Wikipédia en \",\n \"French\": \"Français\",\n \"English\": \"Anglais\",\n \"Japanese\": \"Japonais\",\n \"Untitled project\": \"Projet sans titre\",\n \"Lignes de Temps\": \"Lignes de Temps\",\n \"Loading, please wait\": \"Chargement en cours, merci de patienter\",\n \"Edge color:\": \"Couleur :\",\n \"Dash:\": \"Point. :\",\n \"Thickness:\": \"Epaisseur :\",\n \"Arrow:\": \"Flèche :\",\n \"Node color:\": \"Couleur :\",\n \"Choose color\": \"Choisir une couleur\",\n \"Change edge direction\": \"Changer le sens du lien\",\n \"Do you really wish to remove node \": \"Voulez-vous réellement supprimer le nœud \",\n \"Do you really wish to remove edge \": \"Voulez-vous réellement supprimer le lien \",\n \"This file is not an image\": \"Ce fichier n'est pas une image\",\n \"Image size must be under \": \"L'image doit peser moins de \",\n \"Size:\": \"Taille :\",\n \"KB\": \"ko\",\n \"Choose from vocabulary:\": \"Choisir dans un vocabulaire :\",\n \"SKOS Documentation properties\": \"SKOS: Propriétés documentaires\",\n \"has note\": \"a pour note\",\n \"has example\": \"a pour exemple\",\n \"has definition\": \"a pour définition\",\n \"SKOS Semantic relations\": \"SKOS: Relations sémantiques\",\n \"has broader\": \"a pour concept plus large\",\n \"has narrower\": \"a pour concept plus étroit\",\n \"has related\": \"a pour concept apparenté\",\n \"Dublin Core Metadata\": \"Métadonnées Dublin Core\",\n \"has contributor\": \"a pour contributeur\",\n \"covers\": \"couvre\",\n \"created by\": \"créé par\",\n \"has date\": \"a pour date\",\n \"published by\": \"édité par\",\n \"has source\": \"a pour source\",\n \"has subject\": \"a pour sujet\",\n \"Dragged resource\": \"Ressource glisée-déposée\",\n \"Search the Web\": \"Rechercher en ligne\",\n \"Search in Bins\": \"Rechercher dans les chutiers\",\n \"Close bin\": \"Fermer le chutier\",\n \"Refresh bin\": \"Rafraîchir le chutier\",\n \"(untitled)\": \"(sans titre)\",\n \"Select contents:\": \"Sélectionner des contenus :\",\n \"Drag items from this website, drop them in Renkan\": \"Glissez des éléments de ce site web vers Renkan\",\n \"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\": \"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan\",\n \"Shapes available\": \"Formes disponibles\",\n \"Circle\": \"Cercle\",\n \"Square\": \"Carré\",\n \"Diamond\": \"Losange\",\n \"Hexagone\": \"Hexagone\",\n \"Ellipse\": \"Ellipse\",\n \"Star\": \"Étoile\",\n \"Cloud\": \"Nuage\",\n \"Triangle\": \"Triangle\",\n \"Polygon\": \"Polygone\",\n \"Zoom Fit\": \"Ajuster le Zoom\",\n \"Download Project\": \"Télécharger le projet\",\n \"Save view\": \"Sauver la vue\",\n \"View saved view\": \"Restaurer la Vue\",\n \"Renkan \\'Drag-to-Add\\' bookmarklet\": \"Renkan \\'Deplacer-Pour-Ajouter\\' Signet\",\n \"(unknown user)\":\"(non authentifié)\",\n \"\":\"\",\n \"Search in graph\":\"Rechercher dans carte\",\n \"Search in \" : \"Chercher dans \",\n \"Show hidden nodes\": \"Montrer les noeuds cachés\",\n \"Show neighbors\": \"Montrer les voisins\",\n \"Hide\": \"Cacher\",\n \"Fullscreen not supported by your browser\": \"Le plein écran n'est pas supporté par votre navigateur\",\n \"Title size:\": \"Taille :\",\n \"Title color:\": \"Couleur :\",\n }\n};\n","/* Saves the Full JSON at each modification */\n\nRkns.jsonIO = function(_renkan, _opts) {\n var _proj = _renkan.project;\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'PUT';\n }\n var _load = function() {\n _proj.set({\n loadingStatus : true\n });\n Rkns.$.getJSON(_opts.url, function(_data) {\n _renkan.dataloader.load(_data);\n \n _proj.set({\n loadingStatus : false\n });\n _proj.set({\n saveStatus : 0\n });\n });\n };\n var _save = function() {\n _proj.set({\n saveStatus : 2\n });\n var _data = _proj.toJSON();\n if (!_renkan.read_only) {\n Rkns.$.ajax({\n type : _opts.http_method,\n url : _opts.url,\n contentType : \"application/json\",\n data : JSON.stringify(_data),\n success : function(data, textStatus, jqXHR) {\n _proj.set({\n saveStatus : 0\n });\n }\n });\n }\n\n };\n var _thrSave = Rkns._.throttle(function() {\n setTimeout(_save, 100);\n }, 1000);\n \n //TODO: Rearrange to avoid the 2 firts PUT due to a change in the project model\n // Take car of setting up the listener correctly to listen the save action on the view\n _proj.on(\"add:nodes add:edges add:users add:views\", function(_model) {\n _model.on(\"change remove\", function(_model) {\n _thrSave();\n });\n _thrSave();\n });\n _proj.on(\"change\", function() {\n if (!(_proj.changedAttributes.length === 1 && _proj\n .hasChanged('saveStatus'))) {\n _thrSave();\n }\n });\n\n _load();\n};\n","/* Saves the Full JSON once */\n\nRkns.jsonIOSaveOnClick = function(_renkan, _opts) {\n var _proj = _renkan.project,\n _saveWarn = false,\n _onLeave = function() {\n return \"Project not saved\";\n };\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'POST';\n }\n var _load = function() {\n var getdata = {},\n rx = /id=([^&#?=]+)/,\n matches = document.location.hash.match(rx);\n if (matches) {\n getdata.id = matches[1];\n }\n Rkns.$.ajax({\n url: _opts.url,\n data: getdata,\n beforeSend: function(){\n \t_proj.set({loadingStatus:true});\n },\n success: function(_data) {\n _renkan.dataloader.load(_data);\n _proj.set({loadingStatus:false});\n _proj.set({saveStatus:0});\n }\n });\n };\n var _save = function() {\n _proj.set(\"saved_at\", new Date());\n var _data = _proj.toJSON();\n Rkns.$.ajax({\n type: _opts.http_method,\n url: _opts.url,\n contentType: \"application/json\",\n data: JSON.stringify(_data),\n beforeSend: function(){\n \t_proj.set({saveStatus:2});\n },\n success: function(data, textStatus, jqXHR) {\n $(window).off(\"beforeunload\", _onLeave);\n _saveWarn = false;\n _proj.set({saveStatus:0});\n //document.location.hash = \"#id=\" + data.id;\n //$(\".Rk-Notifications\").text(\"Saved as \"+document.location.href).fadeIn().delay(2000).fadeOut();\n }\n });\n };\n var _checkLeave = function() {\n \t_proj.set({saveStatus:1});\n\n var title = _proj.get(\"title\");\n if (title && _proj.get(\"nodes\").length) {\n $(\".Rk-Save-Button\").removeClass(\"disabled\");\n } else {\n $(\".Rk-Save-Button\").addClass(\"disabled\");\n }\n if (title) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#333333\");\n }\n if (!_saveWarn) {\n _saveWarn = true;\n $(window).on(\"beforeunload\", _onLeave);\n }\n };\n _load();\n _proj.on(\"add:nodes add:edges add:users change\", function(_model) {\n\t _model.on(\"change remove\", function(_model) {\n\t \tif(!(_model.changedAttributes.length === 1 && _model.hasChanged('saveStatus'))) {\n\t \t\t_checkLeave();\n\t \t}\n\t });\n\t\tif(!(_proj.changedAttributes.length === 1 && _proj.hasChanged('saveStatus'))) {\n\t\t _checkLeave();\n \t}\n });\n _renkan.renderer.save = function() {\n if ($(\".Rk-Save-Button\").hasClass(\"disabled\")) {\n if (!_proj.get(\"title\")) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#ff0000\");\n }\n } else {\n _save();\n }\n };\n};\n","(function(Rkns) {\n\"use strict\";\n\nvar _ = Rkns._;\n\nvar Ldt = Rkns.Ldt = {};\n\nvar Bin = Ldt.Bin = function(_renkan, _opts) {\n if (_opts.ldt_type) {\n var Resclass = Ldt[_opts.ldt_type+\"Bin\"];\n if (Resclass) {\n return new Resclass(_renkan, _opts);\n }\n }\n console.error(\"No such LDT Bin Type\");\n};\n\nvar ProjectBin = Ldt.ProjectBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nProjectBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.tagTemplate = _renkan.options.templates['templates/ldtjson-bin/tagtemplate.html'];\n this.annotationTemplate = _renkan.options.templates['templates/ldtjson-bin/annotationtemplate.html'];\n this.proj_id = _opts.project_id;\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.title_$.html(_opts.title);\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nProjectBin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '
                                                                    • Tags

                                                                    • ',\n _projtitle = this.data.meta[\"dc:title\"],\n _this = this,\n count = 0;\n _this.title_$.text('LDT Project: \"' + _projtitle + '\"');\n _.map(_this.data.tags,function(_tag) {\n var _title = _tag.meta[\"dc:title\"];\n if (!search.isempty && !search.test(_title)) {\n return;\n }\n count++;\n _html += _this.tagTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n encodedtitle : encodeURIComponent(_title),\n static_url: _this.renkan.options.static_url\n });\n });\n _html += '
                                                                    • Annotations

                                                                    • ';\n _.map(_this.data.annotations,function(_annotation) {\n var _description = _annotation.content.description,\n _title = _annotation.content.title.replace(_description,\"\");\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _annotation.end - _annotation.begin,\n _img = (\n (_annotation.content && _annotation.content.img && _annotation.content.img.src) ?\n _annotation.content.img.src :\n ( _duration ? _this.renkan.options.static_url+\"img/ldt-segment.png\" : _this.renkan.options.static_url+\"img/ldt-point.png\" )\n );\n _html += _this.annotationTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_annotation.begin),\n end: convertTC(_annotation.end),\n duration: convertTC(_duration),\n mediaid: _annotation.media,\n annotationid: _annotation.id,\n image: _img,\n static_url: _this.renkan.options.static_url\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nProjectBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/ldt/cljson/id/' + this.proj_id,\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\nvar Search = Ldt.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nSearch.prototype.getBgClass = function() {\n return \"Rk-Ldt-Icon\";\n};\n\nSearch.prototype.getSearchTitle = function() {\n return this.renkan.translate(\"Lignes de Temps\");\n};\n\nSearch.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new ResultsBin(this.renkan, {\n search: _q\n })\n );\n};\n\nvar ResultsBin = Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nResultsBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.segmentTemplate = _renkan.options.templates['templates/ldtjson-bin/segmenttemplate.html'];\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.max_results = _opts.max_results || 50;\n this.search = _opts.search;\n this.title_$.html('Lignes de Temps: \"' + _opts.search + '\"');\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nResultsBin.prototype.render = function(searchbase) {\n if (!this.data) {\n return;\n }\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '',\n _this = this,\n count = 0;\n _.each(this.data.objects,function(_segment) {\n var _description = _segment.abstract,\n _title = _segment.title;\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _segment.duration,\n _begin = _segment.start_ts,\n _end = + _segment.duration + _begin,\n _img = (\n _duration ?\n _this.renkan.options.static_url + \"img/ldt-segment.png\" :\n _this.renkan.options.static_url + \"img/ldt-point.png\"\n );\n _html += _this.segmentTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_begin),\n end: convertTC(_end),\n duration: convertTC(_duration),\n mediaid: _segment.iri_id,\n //projectid: _segment.project_id,\n //cuttingid: _segment.cutting_id,\n annotationid: _segment.element_id,\n image: _img\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nResultsBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',\n data: {\n format: \"jsonp\",\n q: this.search,\n limit: this.max_results\n },\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\n})(window.Rkns);\n","Rkns.ResourceList = {};\n\nRkns.ResourceList.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.ResourceList.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.resultTemplate = _renkan.options.templates['templates/list-bin.html'];\n this.title_$.html(_opts.title);\n if (_opts.list) {\n this.data = _opts.list;\n }\n this.refresh();\n};\n\nRkns.ResourceList.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data,function(_item) {\n var _element;\n if (typeof _item === \"string\") {\n if (/^(https?:\\/\\/|www)/.test(_item)) {\n _element = { url: _item };\n } else {\n _element = { title: _item.replace(/[:,]?\\s?(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+\\s?/,'').trim() };\n var _match = _item.match(/(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+/);\n if (_match) {\n _element.url = _match[0];\n }\n if (_element.title.length > 80) {\n _element.description = _element.title;\n _element.title = _element.title.replace(/^(.{30,60})\\s.+$/,'$1…');\n }\n }\n } else {\n _element = _item;\n }\n var title = _element.title || (_element.url || \"\").replace(/^https?:\\/\\/(www\\.)?/,'').replace(/^(.{40}).+$/,'$1…'),\n url = _element.url || \"\",\n description = _element.description || \"\",\n image = _element.image || \"\";\n if (url && !/^https?:\\/\\//.test(url)) {\n url = 'http://' + url;\n }\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n image: image,\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.ResourceList.Bin.prototype.refresh = function() {\n if (this.data) {\n this.render();\n }\n};\n","Rkns.Wikipedia = {\n};\n\nRkns.Wikipedia.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nRkns.Wikipedia.Search.prototype.getBgClass = function() {\n return \"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-\" + this.lang;\n};\n\nRkns.Wikipedia.Search.prototype.getSearchTitle = function() {\n var langs = {\n \"fr\": \"French\",\n \"en\": \"English\",\n \"ja\": \"Japanese\"\n };\n if (langs[this.lang]) {\n return this.renkan.translate(\"Wikipedia in \") + this.renkan.translate(langs[this.lang]);\n } else {\n return this.renkan.translate(\"Wikipedia\") + \" [\" + this.lang + \"]\";\n }\n};\n\nRkns.Wikipedia.Search.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new Rkns.Wikipedia.Bin(this.renkan, {\n lang: this.lang,\n search: _q\n })\n );\n};\n\nRkns.Wikipedia.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.Wikipedia.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.search = _opts.search;\n this.resultTemplate = _renkan.options.templates['templates/wikipedia-bin/resulttemplate.html'];\n this.lang = _opts.lang || \"en\";\n this.title_icon_$.addClass('Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-' + this.lang);\n this.title_$.html(this.search).addClass(\"Rk-Wikipedia-Title\");\n this.refresh();\n};\n\nRkns.Wikipedia.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data.query.search, function(_result) {\n var title = _result.title,\n url = \"http://\" + _this.lang + \".wikipedia.org/wiki/\" + encodeURI(title.replace(/ /g,\"_\")),\n description = Rkns.$('
                                                                      ').html(_result.snippet).text();\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.Wikipedia.Bin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: \"http://\" + _this.lang + \".wikipedia.org/w/api.php?action=query&list=search&srsearch=\" + encodeURIComponent(this.search) + \"&format=json\",\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n","\ndefine('renderer/baserepresentation',['jquery', 'underscore'], function ($, _) {\n 'use strict';\n\n /* Rkns.Renderer._BaseRepresentation Class */\n\n /* In Renkan, a \"Representation\" is a sort of ViewModel (in the MVVM paradigm) and bridges the gap between\n * models (written with Backbone.js) and the view (written with Paper.js)\n * Renkan's representations all inherit from Rkns.Renderer._BaseRepresentation '*/\n\n var _BaseRepresentation = function(_renderer, _model) {\n if (typeof _renderer !== \"undefined\") {\n this.renderer = _renderer;\n this.renkan = _renderer.renkan;\n this.project = _renderer.renkan.project;\n this.options = _renderer.renkan.options;\n this.model = _model;\n if (this.model) {\n var _this = this;\n this._changeBinding = function() {\n _this.redraw({change: true});\n };\n this._removeBinding = function() {\n _renderer.removeRepresentation(_this);\n _.defer(function() {\n _renderer.redraw();\n });\n };\n this._selectBinding = function() {\n _this.select();\n };\n this._unselectBinding = function() {\n _this.unselect();\n };\n this.model.on(\"change\", this._changeBinding );\n this.model.on(\"remove\", this._removeBinding );\n this.model.on(\"select\", this._selectBinding );\n this.model.on(\"unselect\", this._unselectBinding );\n }\n }\n };\n\n /* Rkns.Renderer._BaseRepresentation Methods */\n\n _(_BaseRepresentation.prototype).extend({\n _super: function(_func) {\n return _BaseRepresentation.prototype[_func].apply(this, Array.prototype.slice.call(arguments, 1));\n },\n redraw: function() {},\n moveTo: function() {},\n show: function() { return \"BaseRepresentation.show\"; },\n hide: function() {},\n select: function() {\n if (this.model) {\n this.model.trigger(\"selected\");\n }\n },\n unselect: function() {\n if (this.model) {\n this.model.trigger(\"unselected\");\n }\n },\n highlight: function() {},\n unhighlight: function() {},\n mousedown: function() {},\n mouseup: function() {\n if (this.model) {\n this.model.trigger(\"clicked\");\n }\n },\n destroy: function() {\n if (this.model) {\n this.model.off(\"change\", this._changeBinding );\n this.model.off(\"remove\", this._removeBinding );\n this.model.off(\"select\", this._selectBinding );\n this.model.off(\"unselect\", this._unselectBinding );\n }\n }\n }).value();\n\n /* End of Rkns.Renderer._BaseRepresentation Class */\n\n return _BaseRepresentation;\n\n});\n\ndefine('requtils',[], function ($, _) {\n 'use strict';\n return {\n getUtils: function(){\n return window.Rkns.Utils;\n },\n getRenderer: function(){\n return window.Rkns.Renderer;\n }\n };\n\n});\n\n\ndefine('renderer/basebutton',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer._BaseButton Class */\n\n /* BaseButton is extended by contextual buttons that appear when hovering on nodes and edges */\n\n var _BaseButton = Utils.inherit(BaseRepresentation);\n\n _(_BaseButton.prototype).extend({\n moveTo: function(_pos) {\n this.sector.moveTo(_pos);\n },\n show: function() {\n this.sector.show();\n },\n hide: function() {\n if (this.sector){\n this.sector.hide();\n }\n },\n select: function() {\n this.sector.select();\n },\n unselect: function(_newTarget) {\n this.sector.unselect();\n if (!_newTarget || (_newTarget !== this.source_representation && _newTarget.source_representation !== this.source_representation)) {\n this.source_representation.unselect();\n }\n },\n destroy: function() {\n this.sector.destroy();\n }\n }).value();\n\n return _BaseButton;\n\n});\n\n\ndefine('renderer/shapebuilder',[], function () {\n 'use strict';\n\n var cloud_path = \"M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z\";\n /* ShapeBuilder Begin */\n\n var builders = {\n \"circle\":{\n getShape: function() {\n return new paper.Path.Circle([0, 0], 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Circle(center, radius);\n }\n },\n \"rectangle\":{\n getShape: function() {\n return new paper.Path.Rectangle([-2, -2], [2, 2]);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Rectangle([-radius, -radius], [radius*2, radius*2]);\n }\n },\n \"ellipse\":{\n getShape: function() {\n return new paper.Path.Ellipse(new paper.Rectangle([-2, -1], [2, 1]));\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Ellipse(new paper.Rectangle([-radius, -radius/2], [radius*2, radius]));\n }\n },\n \"polygon\":{\n getShape: function() {\n return new paper.Path.RegularPolygon([0, 0], 6, 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.RegularPolygon(center, 6, radius);\n }\n },\n \"diamond\":{\n getShape: function() {\n var d = new paper.Path.Rectangle([-Math.SQRT2, -Math.SQRT2], [Math.SQRT2, Math.SQRT2]);\n d.rotate(45);\n return d;\n },\n getImageShape: function(center, radius) {\n var d = new paper.Path.Rectangle([-radius*Math.SQRT2/2, -radius*Math.SQRT2/2], [radius*Math.SQRT2, radius*Math.SQRT2]);\n d.rotate(45);\n return d;\n }\n },\n \"star\":{\n getShape: function() {\n return new paper.Path.Star([0, 0], 8, 1, 0.7);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Star(center, 8, radius*1, radius*0.7);\n }\n },\n \"cloud\": {\n getShape: function() {\n var path = new paper.Path(cloud_path);\n return path;\n\n },\n getImageShape: function(center, radius) {\n var path = new paper.Path(cloud_path);\n path.scale(radius);\n path.translate(center);\n return path;\n }\n },\n \"triangle\": {\n getShape: function() {\n return new paper.Path.RegularPolygon([0,0], 3, 1);\n },\n getImageShape: function(center, radius) {\n var shape = new paper.Path.RegularPolygon([0,0], 3, 1);\n shape.scale(radius);\n shape.translate(center);\n return shape;\n }\n },\n \"svg\": function(path){\n return {\n getShape: function() {\n return new paper.Path(path);\n },\n getImageShape: function(center, radius) {\n // No calcul for the moment\n return new paper.Path();\n }\n };\n }\n };\n\n var ShapeBuilder = function (shape){\n if(shape === null || typeof shape === \"undefined\"){\n shape = \"circle\";\n }\n if(shape.substr(0,4)===\"svg:\"){\n return builders.svg(shape.substr(4));\n }\n if(!(shape in builders)){\n shape = \"circle\";\n }\n return builders[shape];\n };\n\n ShapeBuilder.builders = builders;\n\n return ShapeBuilder;\n\n});\n\ndefine('renderer/noderepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.Node Class */\n\n /* The representation for the node : A circle, with an image inside and a text label underneath.\n * The circle and the image are drawn on canvas and managed by Paper.js.\n * The text label is an HTML node, managed by jQuery. */\n\n //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);\n var NodeRepr = Utils.inherit(BaseRepresentation);\n\n _(NodeRepr.prototype).extend({\n _init: function() {\n this.renderer.node_layer.activate();\n this.type = \"Node\";\n this.buildShape();\n this.hidden = false;\n this.ghost= false;\n if (this.options.show_node_circles) {\n this.circle.strokeWidth = this.options.node_stroke_width;\n this.h_ratio = 1;\n } else {\n this.h_ratio = 0;\n }\n this.title = $('
                                                                      ').appendTo(this.renderer.labels_$);\n\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.NodeEditButton(this.renderer, null),\n new Renderer.NodeRemoveButton(this.renderer, null),\n new Renderer.NodeLinkButton(this.renderer, null),\n new Renderer.NodeEnlargeButton(this.renderer, null),\n new Renderer.NodeShrinkButton(this.renderer, null)\n ];\n if (this.options.hide_nodes){\n this.normal_buttons.push(\n new Renderer.NodeHideButton(this.renderer, null),\n new Renderer.NodeShowButton(this.renderer, null)\n );\n }\n this.pending_delete_buttons = [\n new Renderer.NodeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n this.last_circle_radius = 1;\n\n if (this.renderer.minimap) {\n this.renderer.minimap.node_layer.activate();\n this.minimap_circle = new paper.Path.Circle([0, 0], 1);\n this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;\n this.renderer.minimap.node_group.addChild(this.minimap_circle);\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.node_stroke_width + (thickness-1) * (this.options.node_stroke_max_width - this.options.node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_node_stroke_width + (thickness-1) * (this.options.selected_node_stroke_max_width - this.options.selected_node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n buildShape: function(){\n if( 'shape' in this.model.changed ) {\n delete this.img;\n }\n if(this.circle){\n this.circle.remove();\n delete this.circle;\n }\n // \"circle\" \"rectangle\" \"ellipse\" \"polygon\" \"star\" \"diamond\"\n this.shapeBuilder = new ShapeBuilder(this.model.get(\"shape\"));\n this.circle = this.shapeBuilder.getShape();\n this.circle.__representation = this;\n this.circle.sendToBack();\n this.last_circle_radius = 1;\n },\n redraw: function(options) {\n if( 'shape' in this.model.changed && 'change' in options && options.change ) {\n //if( 'shape' in this.model.changed ) {\n this.buildShape();\n }\n var _model_coords = new paper.Point(this.model.get(\"position\")),\n _baseRadius = this.options.node_size_base * Math.exp((this.model.get(\"size\") || 0) * Utils._NODE_SIZE_STEP);\n if (!this.is_dragging || !this.paper_coords) {\n this.paper_coords = this.renderer.toPaperCoords(_model_coords);\n }\n this.circle_radius = _baseRadius * this.renderer.view.scale;\n if (this.last_circle_radius !== this.circle_radius) {\n this.all_buttons.forEach(function(b) {\n b.setSectorSize();\n });\n this.circle.scale(this.circle_radius / this.last_circle_radius);\n if (this.node_image) {\n this.node_image.scale(this.circle_radius / this.last_circle_radius);\n }\n }\n this.circle.position = this.paper_coords;\n if (this.node_image) {\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n }\n this.last_circle_radius = this.circle_radius;\n\n var old_act_btn = this.active_buttons;\n\n var opacity = 1;\n if (this.model.get(\"delete_scheduled\")) {\n opacity = 0.5;\n this.active_buttons = this.pending_delete_buttons;\n this.circle.dashArray = [2,2];\n } else {\n opacity = 1;\n this.active_buttons = this.normal_buttons;\n this.circle.dashArray = null;\n }\n if (this.selected && this.renderer.isEditable() && !this.ghost) {\n if (old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n }\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n if (this.node_image) {\n this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);\n }\n\n this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;\n\n this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;\n\n\n //strip html from title\n var html = this.model.get(\"title\");\n var div = document.createElement(\"div\");\n div.innerHTML = html;\n var clean_title = div.textContent || div.innerText || \"\";\n\n var _text = clean_title || this.renkan.translate(this.options.label_untitled_nodes) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n\n //_formatedText = _text;\n\n\n if (typeof this.highlighted === \"object\") {\n _text = this.highlighted.replace(_(_text).escape(),'$1');\n }\n\n //TODO: default text node color\n var node_style = (this.model.get(\"style\") || {'title_size': 1, 'title-color': '#00000' });\n var text_size = node_style.title_size || 1;\n var text_color = node_style.title_color || this.options.node_title_color;\n\n var text_style = {\n 'line-height': \"1em\"\n };\n\n if(text_size !== 1) {\n text_style['font-size'] = text_size.toFixed(1)+\"em\";\n }\n //TODO: compare with default value\n if(text_color !== \"#000000\") {\n text_style.color = text_color;\n }\n\n var text_node = $(\"\").css(text_style).html(_text);\n\n this.title.empty().append(text_node);\n\n var _strokeWidth = this._getStrokeWidth();\n this.title.css({\n left: this.paper_coords.x,\n top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance + 0.5*_strokeWidth,\n opacity: opacity\n });\n var _color = (this.model.has(\"style\") && this.model.get(\"style\").color) || (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null;\n this.circle.strokeWidth = _strokeWidth;\n this.circle.strokeColor = _color;\n this.circle.dashArray = _dash;\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n var lastImage = this.img;\n this.img = this.model.get(\"image\");\n if (this.img && this.img !== lastImage) {\n this.showImage();\n if(this.circle) {\n this.circle.sendToBack();\n }\n }\n if (this.node_image && !this.img) {\n this.node_image.remove();\n delete this.node_image;\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.fillColor = _color;\n var minipos = this.renderer.toMinimapCoords(_model_coords),\n miniradius = this.renderer.minimap.scale * _baseRadius,\n minisize = new paper.Size([miniradius, miniradius]);\n this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));\n }\n\n if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.redraw();\n }\n }\n );\n }\n if (this.ghost){\n this.show(true);\n } else {\n if (this.hidden) { this.hide(); }\n }\n },\n showImage: function() {\n var _image = null;\n if (typeof this.renderer.image_cache[this.img] === \"undefined\") {\n _image = new Image();\n this.renderer.image_cache[this.img] = _image;\n _image.src = this.img;\n } else {\n _image = this.renderer.image_cache[this.img];\n }\n var _this = this;\n if (_image.width) {\n\n if (this.node_image) {\n this.node_image.remove();\n }\n this.renderer.node_layer.activate();\n var width = _image.width,\n height = _image.height,\n clipPath = this.model.get(\"clip_path\"),\n hasClipPath = (typeof clipPath !== \"undefined\" && clipPath),\n _clip = null,\n baseRadius = null,\n centerPoint = null;\n\n if (hasClipPath) {\n _clip = new paper.Path();\n var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],\n lastCoords = [0,0],\n minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n var transformCoords = function(tabc, relative) {\n var newCoords = tabc.slice(1).map(function(v, k) {\n var res = parseFloat(v),\n isY = k % 2;\n if (isY) {\n res = ( res - 0.5 ) * height;\n } else {\n res = ( res - 0.5 ) * width;\n }\n if (relative) {\n res += lastCoords[isY];\n }\n if (isY) {\n minY = Math.min(minY, res);\n maxY = Math.max(maxY, res);\n } else {\n minX = Math.min(minX, res);\n maxX = Math.max(maxX, res);\n }\n return res;\n });\n lastCoords = newCoords.slice(-2);\n return newCoords;\n };\n\n instructions.forEach(function(instr) {\n var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [\"\"];\n switch(coords[0]) {\n case \"M\":\n _clip.moveTo(transformCoords(coords));\n break;\n case \"m\":\n _clip.moveTo(transformCoords(coords, true));\n break;\n case \"L\":\n _clip.lineTo(transformCoords(coords));\n break;\n case \"l\":\n _clip.lineTo(transformCoords(coords, true));\n break;\n case \"C\":\n _clip.cubicCurveTo(transformCoords(coords));\n break;\n case \"c\":\n _clip.cubicCurveTo(transformCoords(coords, true));\n break;\n case \"Q\":\n _clip.quadraticCurveTo(transformCoords(coords));\n break;\n case \"q\":\n _clip.quadraticCurveTo(transformCoords(coords, true));\n break;\n }\n });\n\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](maxX - minX, maxY - minY) / 2;\n centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);\n if (!this.options.show_node_circles) {\n this.h_ratio = (maxY - minY) / (2 * baseRadius);\n }\n } else {\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](width, height) / 2;\n centerPoint = new paper.Point(0,0);\n if (!this.options.show_node_circles) {\n this.h_ratio = height / (2 * baseRadius);\n }\n }\n var _raster = new paper.Raster(_image);\n _raster.locked = true; // Disable mouse events on icon\n if (hasClipPath) {\n _raster = new paper.Group(_clip, _raster);\n _raster.opacity = 0.99;\n /* This is a workaround to allow clipping at group level\n * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).\n */\n _raster.clipped = true;\n _clip.__representation = this;\n }\n if (this.options.clip_node_images) {\n var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);\n _raster = new paper.Group(_circleClip, _raster);\n _raster.opacity = 0.99;\n _raster.clipped = true;\n _circleClip.__representation = this;\n }\n this.image_delta = centerPoint.divide(baseRadius);\n this.node_image = _raster;\n this.node_image.__representation = _this;\n this.node_image.scale(this.circle_radius / baseRadius);\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n this.node_image.insertAbove(this.circle);\n } else {\n $(_image).on(\"load\", function() {\n _this.showImage();\n });\n }\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.renkan.read_only) {\n this.is_dragging = true;\n this.paper_coords = this.paper_coords.add(_delta);\n this.redraw();\n }\n } else {\n this.renderer.view.paperShift(_delta);\n }\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"NodeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n clearTimeout(this.hide_timeout);\n this.selected = true;\n this.circle.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable() && !this.hidden) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n var _uri = this.model.get(\"uri\");\n if (_uri) {\n $('.Rk-Bin-Item').each(function() {\n var _el = $(this);\n if (_el.attr(\"data-uri\") === _uri) {\n _el.addClass(\"selected\");\n }\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;\n this.minimap_circle.strokeColor = this.options.minimap_highlight_color;\n }\n //if the node is hidden and the mouse hover it, it appears as a ghost\n if (this.hidden) {\n this.show(true);\n }\n else {\n this.showNeighbors(true);\n }\n this._super(\"select\");\n },\n hideButtons: function() {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n delete(this.buttonTimeout);\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n var _this = this;\n this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);\n this.circle.strokeWidth = this._getStrokeWidth();\n $('.Rk-Bin-Item').removeClass(\"selected\");\n if (this.renderer.minimap) {\n this.minimap_circle.strokeColor = undefined;\n }\n //when the mouse don't hover the node anymore, we hide it\n if (this.hidden) {\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.hide();\n }\n else {\n this.hideNeighbors(true);\n }\n this._super(\"unselect\");\n }\n },\n hide_delay: function(){\n var _this = this;\n this.hide_timeout = setTimeout(function(){\n _this.hide();\n }, 1000);\n },\n hide: function(){\n var _this = this;\n this.ghost = false;\n this.hidden = true;\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = 0;\n }\n this.hideButtons();\n this.circle.opacity = 0;\n this.title.css('opacity', 0);\n this.minimap_circle.opacity = 0;\n\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.hide();\n }\n }\n );\n this.hideNeighbors(false);\n },\n show: function(ghost){\n var _this = this;\n this.ghost = ghost;\n if (this.ghost){\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = this.options.ghost_opacity;\n }\n this.circle.opacity = this.options.ghost_opacity;\n this.title.css('opacity', this.options.ghost_opacity);\n this.minimap_circle.opacity = this.options.ghost_opacity;\n } else {\n this.minimap_circle.opacity = 1;\n this.hidden = false;\n this.redraw();\n }\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.show(_this.ghost);\n }\n }\n );\n },\n hideNeighbors: function(delay){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.ghost) {\n if (delay){ repr.hide_delay(); } else {repr.hide(); }\n }\n }\n );\n },\n showNeighbors: function(ghost){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.hidden) {\n repr.show(ghost);\n if (!ghost){\n var indexNode = _this.renderer.view.hiddenNodes.indexOf(repr.model.id);\n if (indexNode !== -1){\n _this.renderer.view.hiddenNodes.splice(indexNode, 1);\n }\n }\n }\n }\n );\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n saveCoords: function() {\n var _coords = this.renderer.toModelCoords(this.paper_coords),\n _data = {\n position: {\n x: _coords.x,\n y: _coords.y\n }\n };\n if (this.renderer.isEditable()) {\n this.model.set(_data);\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (this.renderer.is_dragging && this.renderer.isEditable()) {\n this.saveCoords();\n } else {\n if (this.hidden) {\n var index = this.renderer.view.hiddenNodes.indexOf(this.model.id);\n if (index !== -1){\n this.renderer.view.hiddenNodes.splice(index, 1);\n }\n this.show(false);\n this.select();\n } else {\n if (!_isTouch && !this.model.get(\"delete_scheduled\")) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.is_dragging = false;\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n this.circle.remove();\n this.title.remove();\n if (this.renderer.minimap) {\n this.minimap_circle.remove();\n }\n if (this.node_image) {\n this.node_image.remove();\n }\n }\n }).value();\n\n return NodeRepr;\n\n});\n\n\ndefine('renderer/edge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Edge Class Begin */\n\n //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);\n var Edge = Utils.inherit(BaseRepresentation);\n\n _(Edge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Edge\";\n this.hidden = false;\n this.ghost = false;\n this.highlighted = false;\n this.from_representation = this.renderer.getRepresentationByModel(this.model.get(\"from\"));\n this.to_representation = this.renderer.getRepresentationByModel(this.model.get(\"to\"));\n this.bundle = this.renderer.addToBundles(this);\n this.line = new paper.Path();\n this.line.add([0,0],[0,0],[0,0]);\n this.line.__representation = this;\n this.line.strokeWidth = this.options.edge_stroke_width;\n this.arrow_scale = 1;\n this.arrow = new paper.Path();\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);\n this.arrow.__representation = this;\n this.text = $('
                                                                      ').appendTo(this.renderer.labels_$);\n this.arrow_angle = 0;\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.EdgeEditButton(this.renderer, null),\n new Renderer.EdgeRemoveButton(this.renderer, null)\n ];\n this.pending_delete_buttons = [\n new Renderer.EdgeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n\n if (this.renderer.minimap) {\n this.renderer.minimap.edge_layer.activate();\n this.minimap_line = new paper.Path();\n this.minimap_line.add([0,0],[0,0]);\n this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;\n this.minimap_line.strokeWidth = 1;\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getArrowScale: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);\n },\n redraw: function() {\n var from = this.model.get(\"from\"),\n to = this.model.get(\"to\");\n if (!from || !to || (this.hidden && !this.ghost)) {\n return;\n }\n this.from_representation = this.renderer.getRepresentationByModel(from);\n this.to_representation = this.renderer.getRepresentationByModel(to);\n if (typeof this.from_representation === \"undefined\" || typeof this.to_representation === \"undefined\" ||\n (this.from_representation.hidden && !this.from_representation.ghost) ||\n (this.to_representation.hidden && !this.to_representation.ghost)) {\n this.hide();\n return;\n }\n var _strokeWidth = this._getStrokeWidth(),\n _arrow_scale = this._getArrowScale(),\n _p0a = this.from_representation.paper_coords,\n _p1a = this.to_representation.paper_coords,\n _v = _p1a.subtract(_p0a),\n _r = _v.length,\n _u = _v.divide(_r),\n _ortho = new paper.Point([- _u.y, _u.x]),\n _group_pos = this.bundle.getPosition(this),\n _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),\n _p0b = _p0a.add(_delta), /* Adding a 4 px difference */\n _p1b = _p1a.add(_delta), /* to differentiate bundled links */\n _a = _v.angle,\n _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),\n _handle = _v.divide(3),\n _color = (this.highlighted && this.options.highlighted_edge_color) ||\n (this.model.has(\"style\") && this.model.get(\"style\").color) ||\n (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null,\n _opacity;\n\n if (this.model.get(\"delete_scheduled\") || this.from_representation.model.get(\"delete_scheduled\") || this.to_representation.model.get(\"delete_scheduled\")) {\n _opacity = 0.5;\n this.line.dashArray = [2, 2];\n } else {\n _opacity = this.ghost ? this.options.ghost_opacity : 1;\n this.line.dashArray = null;\n }\n\n var old_act_btn = this.active_buttons;\n\n this.arrow.visible =\n (this.model.has(\"style\") && this.model.get(\"style\").arrow) ||\n !this.model.has(\"style\") ||\n typeof this.model.get(\"style\").arrow === 'undefined';\n\n this.active_buttons = this.model.get(\"delete_scheduled\") ? this.pending_delete_buttons : this.normal_buttons;\n\n if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n this.paper_coords = _p0b.add(_p1b).divide(2);\n this.line.strokeWidth = _strokeWidth;\n this.line.strokeColor = _color;\n this.line.dashArray = _dash;\n this.line.opacity = _opacity;\n this.line.segments[0].point = _p0a;\n this.line.segments[1].point = this.paper_coords;\n this.line.segments[1].handleIn = _handle.multiply(-1);\n this.line.segments[1].handleOut = _handle;\n this.line.segments[2].point = _p1a;\n this.arrow.scale(_arrow_scale / this.arrow_scale);\n this.arrow_scale = _arrow_scale;\n this.arrow.fillColor = _color;\n this.arrow.opacity = _opacity;\n this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);\n this.arrow.position = this.paper_coords;\n\n this.arrow_angle = _a;\n if (_a > 90) {\n _a -= 180;\n _textdelta = _textdelta.multiply(-1);\n }\n if (_a < -90) {\n _a += 180;\n _textdelta = _textdelta.multiply(-1);\n }\n var _text = this.model.get(\"title\") || this.renkan.translate(this.options.label_untitled_edges) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n if (typeof this.highlighted === \"object\") {\n this.text.html(this.highlighted.replace(_(_text).escape(),'$1'));\n } else {\n this.text.text(_text);\n }\n var _textpos = this.paper_coords.add(_textdelta);\n this.text.css({\n left: _textpos.x,\n top: _textpos.y,\n transform: \"rotate(\" + _a + \"deg)\",\n \"-moz-transform\": \"rotate(\" + _a + \"deg)\",\n \"-webkit-transform\": \"rotate(\" + _a + \"deg)\",\n opacity: _opacity\n });\n this.text_angle = _a;\n\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n\n if (this.renderer.minimap) {\n this.minimap_line.strokeColor = _color;\n this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get(\"position\")));\n this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get(\"position\")));\n }\n },\n hide: function(){\n this.hidden = true;\n this.ghost = false;\n\n this.text.hide();\n this.line.visible = false;\n this.arrow.visible = false;\n this.minimap_line.visible = false;\n },\n show: function(ghost){\n this.ghost = ghost;\n if (this.ghost) {\n this.text.css('opacity', 0.3);\n this.line.opacity = 0.3;\n this.arrow.opacity = 0.3;\n this.minimap_line.opacity = 0.3;\n } else {\n this.hidden = false;\n\n this.text.css('opacity', 1);\n this.line.opacity = 1;\n this.arrow.opacity = 1;\n this.minimap_line.opacity = 1;\n }\n this.text.show();\n this.line.visible = true;\n this.arrow.visible = true;\n this.minimap_line.visible = true;\n this.redraw();\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"EdgeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n this.selected = true;\n this.line.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable()) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n this._super(\"select\");\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n if (this.options.editor_mode) {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n }\n if (this.hidden){\n this.renderer.removeRepresentationsOfType(\"editor\");\n }\n this.line.strokeWidth = this._getStrokeWidth();\n this._super(\"unselect\");\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (!this.renkan.read_only && this.renderer.is_dragging) {\n this.from_representation.saveCoords();\n this.to_representation.saveCoords();\n this.from_representation.is_dragging = false;\n this.to_representation.is_dragging = false;\n } else {\n if (!_isTouch) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.options.read_only) {\n this.from_representation.paperShift(_delta);\n this.to_representation.paperShift(_delta);\n }\n } else {\n this.renderer.paperShift(_delta);\n }\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n destroy: function() {\n this._super(\"destroy\");\n this.line.remove();\n this.arrow.remove();\n this.text.remove();\n if (this.renderer.minimap) {\n this.minimap_line.remove();\n }\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n var _this = this;\n this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {\n return _this === _edge;\n });\n }\n }).value();\n\n return Edge;\n\n});\n\n\n\ndefine('renderer/tempedge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* TempEdge Class Begin */\n\n //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);\n var TempEdge = Utils.inherit(BaseRepresentation);\n\n _(TempEdge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Temp-edge\";\n this.origin = Utils.OriginEnum.NONE;\n\n var _color = (this.project.get(\"users\").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\");\n this.line = new paper.Path();\n this.line.strokeColor = _color;\n this.line.dashArray = [4, 2];\n this.line.strokeWidth = this.options.selected_edge_stroke_width;\n this.line.add([0,0],[0,0]);\n this.line.__representation = this;\n this.arrow = new paper.Path();\n this.arrow.fillColor = _color;\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.__representation = this;\n this.arrow_angle = 0;\n },\n redraw: function() {\n var _p0 = this.from_representation.paper_coords,\n _p1 = this.end_pos,\n _a = _p1.subtract(_p0).angle,\n _c = _p0.add(_p1).divide(2);\n this.line.segments[0].point = _p0;\n this.line.segments[1].point = _p1;\n this.arrow.rotate(_a - this.arrow_angle);\n this.arrow.position = _c;\n this.arrow_angle = _a;\n },\n paperShift: function(_delta) {\n if (!this.renderer.isEditable()) {\n this.renderer.removeRepresentation(_this);\n paper.view.draw();\n return;\n }\n this.end_pos = this.end_pos.add(_delta);\n var _hitResult = paper.project.hitTest(this.end_pos);\n this.renderer.findTarget(_hitResult);\n this.redraw();\n },\n mouseup: function(_event, _isTouch) {\n var _hitResult = paper.project.hitTest(_event.point),\n _model = this.from_representation.model,\n _endDrag = true;\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _target = _hitResult.item.__representation;\n if (_target.type.substr(0,4) === \"Node\") {\n var _destmodel = _target.model || _target.source_representation.model;\n if (_model !== _destmodel) {\n var _data = {\n id: Utils.getUID('edge'),\n created_by: this.renkan.current_user,\n from: _model,\n to: _destmodel,\n origin: this.origin\n };\n if (this.renderer.isEditable()) {\n this.project.addEdge(_data);\n }\n }\n }\n\n if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {\n _endDrag = false;\n this.renderer.is_dragging = true;\n }\n }\n if (_endDrag) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentation(this);\n paper.view.draw();\n }\n },\n destroy: function() {\n this.arrow.remove();\n this.line.remove();\n }\n }).value();\n\n /* TempEdge Class End */\n\n return TempEdge;\n\n});\n\n\ndefine('renderer/baseeditor',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _BaseEditor Begin */\n //var _BaseEditor = Renderer._BaseEditor = Utils.inherit(Renderer._BaseRepresentation);\n var _BaseEditor = Utils.inherit(BaseRepresentation);\n\n _(_BaseEditor.prototype).extend({\n _init: function() {\n this.renderer.buttons_layer.activate();\n this.type = \"editor\";\n this.editor_block = new paper.Path();\n var _pts = _.map(_.range(8), function() {return [0,0];});\n this.editor_block.add.apply(this.editor_block, _pts);\n this.editor_block.strokeWidth = this.options.tooltip_border_width;\n this.editor_block.strokeColor = this.options.tooltip_border_color;\n this.editor_block.opacity = this.options.tooltip_opacity;\n this.editor_$ = $('
                                                                      ')\n .appendTo(this.renderer.editor_$)\n .css({\n position: \"absolute\",\n opacity: this.options.tooltip_opacity\n })\n .hide();\n },\n destroy: function() {\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* _BaseEditor End */\n\n return _BaseEditor;\n\n});\n\n\ndefine('renderer/nodeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor', 'renderer/shapebuilder', 'ckeditor-core'], function ($, _, requtils, BaseEditor, ShapeBuilder, CKEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditor Begin */\n //var NodeEditor = Renderer.NodeEditor = Utils.inherit(Renderer._BaseEditor);\n var NodeEditor = Utils.inherit(BaseEditor);\n\n _(NodeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/nodeeditor.html'];\n //fusionner avec this.options.node_editor_templates\n this.readOnlyTemplate = this.options.node_editor_templates;\n },\n draw: function() {\n var _model = this.source_representation.model,\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate[_model.get(\"type\")] || this.readOnlyTemplate[\"default\"]),\n _image_placeholder = this.options.static_url + \"img/image-placeholder.png\",\n _size = (_model.get(\"size\") || 0);\n this.editor_$\n .html(_template({\n node: {\n _id: _model.get(\"_id\"),\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n type: _model.get(\"type\") || \"default\",\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n image: _model.get(\"image\") || \"\",\n image_placeholder: _image_placeholder,\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n title_size: (_model.has(\"style\") && _model.get(\"style\").title_size) || 1,\n title_color: (_model.has(\"style\") && _model.get(\"style\").title_color) || this.options.node_title_color,\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n clip_path: _model.get(\"clip_path\") || false,\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\"),\n size: (_size > 0 ? \"+\" : \"\") + _size,\n shape: _model.get(\"shape\") || \"circle\"\n },\n renkan: this.renkan,\n options: this.options,\n shortenText: Utils.shortenText,\n shapes : _(ShapeBuilder.builders).omit('svg').keys().value(),\n types : _(this.options.node_editor_templates).keys().value(),\n }));\n this.redraw();\n var _this = this,\n editorInstance = (this.renderer.isEditable() && _this.options.show_node_editor_description_richtext) ?\n CKEditor.inline(\"Rk-Edit-Description-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n editorInstanceTitle = (this.renderer.isEditable() && _this.options.show_node_editor_title_richtext) ?\n CKEditor.inline(\"Rk-Edit-Title-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n paper.view.draw();\n };\n\n _this.cleanEditor = function() {\n _this.editor_$.off(\"keyup\");\n _this.editor_$.find(\"input, textarea, select\").off(\"change keyup paste\");\n _this.editor_$.find(\".Rk-Edit-Image-File\").off('change');\n _this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").off('hover');\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n _this.editor_$.find(\".Rk-Edit-Image-Del\").off('click');\n _this.editor_$.find(\".Rk-Edit-ColorPicker\").find(\"li\").off('hover click');\n _this.editor_$.find(\".Rk-CloseX\").off('click');\n _this.editor_$.find(\".Rk-Edit-Goto\").off('click');\n\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance) {\n editorInstance.focusManager.blur(true);\n editorInstance.destroy();\n }\n }\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle) {\n editorInstanceTitle.focusManager.blur(true);\n editorInstanceTitle.destroy();\n }\n }\n };\n\n this.editor_$.find(\".Rk-CloseX\").click(function (e) {\n e.preventDefault();\n closeEditor();\n });\n\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {};\n if (_this.options.show_node_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n }\n if (_this.options.show_node_editor_image) {\n _data.image = _this.editor_$.find(\".Rk-Edit-Image\").val();\n _this.editor_$.find(\".Rk-Edit-ImgPreview\").attr(\"src\", _data.image || _image_placeholder);\n }\n if (_this.options.show_node_editor_description) {\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance &&\n editorInstance.checkDirty()) {\n _data.description = editorInstance.getData();\n editorInstance.resetDirty();\n }\n }\n else {\n _data.description = _this.editor_$.find(\".Rk-Edit-Description\").val();\n }\n }\n if (_this.options.show_node_editor_title) {\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle &&\n editorInstanceTitle.checkDirty()) {\n _data.title = editorInstanceTitle.getData();\n editorInstanceTitle.resetDirty();\n }\n }\n else {\n _data.title = _this.editor_$.find(\".Rk-Edit-Title\").val();\n }\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash});\n }\n if (_this.options.change_shapes) {\n if(_model.get(\"shape\")!==_this.editor_$.find(\".Rk-Edit-Shape\").val()){\n _data.shape = _this.editor_$.find(\".Rk-Edit-Shape\").val();\n }\n }\n if (_this.options.change_types) {\n if(_model.get(\"type\")!==_this.editor_$.find(\".Rk-Edit-Type\").val()){\n _data.type = _this.editor_$.find(\".Rk-Edit-Type\").val();\n }\n }\n _model.set(_data);\n _this.redraw();\n } else {\n closeEditor();\n }\n });\n }, 1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input, textarea, select\").on(\"change keyup paste\", onFieldChange);\n if( _this.options.show_node_editor_description &&\n _this.options.show_node_editor_description_richtext &&\n editorInstance)\n {\n editorInstance.on(\"change\", onFieldChange);\n editorInstance.on(\"blur\", onFieldChange);\n }\n\n if( _this.options.show_node_editor_title &&\n _this.options.show_node_editor_title_richtext &&\n editorInstanceTitle)\n {\n editorInstanceTitle.on(\"change\", onFieldChange);\n editorInstanceTitle.on(\"blur\", onFieldChange);\n }\n\n if(_this.options.allow_image_upload) {\n this.editor_$.find(\".Rk-Edit-Image-File\").change(function() {\n if (this.files.length) {\n var f = this.files[0],\n fr = new FileReader();\n if (f.type.substr(0,5) !== \"image\") {\n alert(_this.renkan.translate(\"This file is not an image\"));\n return;\n }\n if (f.size > (_this.options.uploaded_image_max_kb * 1024)) {\n alert(_this.renkan.translate(\"Image size must be under \") + _this.options.uploaded_image_max_kb + _this.renkan.translate(\"KB\"));\n return;\n }\n fr.onload = function(e) {\n _this.editor_$.find(\".Rk-Edit-Image\").val(e.target.result);\n onFieldChange();\n };\n fr.readAsDataURL(f);\n }\n });\n }\n this.editor_$.find(\".Rk-Edit-Title\")[0].focus();\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Node\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color) || (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n var shiftSize = function(n) {\n if (_this.renderer.isEditable()) {\n var _newsize = n+(_model.get(\"size\") || 0);\n _this.editor_$.find(\"#Rk-Edit-Size-Value\").text((_newsize > 0 ? \"+\" : \"\") + _newsize);\n _model.set(\"size\", _newsize);\n paper.view.draw();\n } else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Size-Down\").click(function() {\n shiftSize(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Size-Up\").click(function() {\n shiftSize(1);\n return false;\n });\n\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n\n var shiftTitleSize = function(n) {\n var min = _this.options.node_title_size_min;\n var max = _this.options.node_title_size_max;\n if (_this.renderer.isEditable()) {\n var _oldTitleSize = ((_model.has('style') && _model.get('style').title_size) || 1),\n _newTitleSize = n + _oldTitleSize;\n if(_newTitleSize < min ) {\n _newTitleSize = min;\n }\n else if (_newTitleSize > max) {\n _newTitleSize = max;\n }\n if (_newTitleSize !== _oldTitleSize) {\n _this.editor_$.find(\"#Rk-Edit-Title-Size-Value\").text(_newTitleSize.toFixed(1));\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_size: _newTitleSize}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n\n var _pickerTitle = _this.editor_$.find(\".Rk-Editor-ColorPicker-Title\");\n\n this.editor_$.find(\".Rk-Editor-p-title-color\").hover(\n function(_e) {\n _e.preventDefault();\n _pickerTitle.show();\n },\n function(_e) {\n _e.preventDefault();\n _pickerTitle.hide();\n }\n );\n\n _pickerTitle.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n var title_color = (_model.has(\"style\") && _model.get(\"style\").title_color) || _this.options.node_fill_color;\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", title_color);\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_color: $(this).attr(\"data-color\")}));\n _pickerTitle.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n\n this.editor_$.find(\"#Rk-Edit-Title-Size-Down\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(-step);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Title-Size-Up\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(step);\n return false;\n });\n\n this.editor_$.find(\".Rk-Edit-Image-Del\").click(function() {\n _this.editor_$.find(\".Rk-Edit-Image\").val('');\n onFieldChange();\n return false;\n });\n } else {\n if (typeof this.source_representation.highlighted === \"object\") {\n var titlehtml = this.source_representation.highlighted.replace(_(_model.get(\"title\")).escape(),'$1');\n this.editor_$.find(\".Rk-Display-Title\" + (_model.get(\"uri\") ? \" a\" : \"\")).html(titlehtml);\n if (this.options.show_node_tooltip_description) {\n this.editor_$.find(\".Rk-Display-Description\").html(this.source_representation.highlighted.replace(_(_model.get(\"description\")).escape(),'$1'));\n }\n }\n }\n this.editor_$.find(\"img\").load(function() {\n _this.redraw();\n });\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, this.source_representation.circle_radius * 0.75, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n },\n destroy: function() {\n if(typeof this.cleanEditor !== 'undefined') {\n this.cleanEditor();\n }\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* NodeEditor End */\n\n return NodeEditor;\n\n});\n\n\ndefine('renderer/edgeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor'], function ($, _, requtils, BaseEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditor Begin */\n\n //var EdgeEditor = Renderer.EdgeEditor = Utils.inherit(Renderer._BaseEditor);\n var EdgeEditor = Utils.inherit(BaseEditor);\n\n _(EdgeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/edgeeditor.html'];\n this.readOnlyTemplate = this.options.templates['templates/edgeeditor_readonly.html'];\n },\n draw: function() {\n var _model = this.source_representation.model,\n _from_model = _model.get(\"from\"),\n _to_model = _model.get(\"to\"),\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate);\n this.editor_$\n .html(_template({\n edge: {\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n arrow: (_model.has(\"style\") && _model.get(\"style\").arrow) || !_model.has(\"style\") || (typeof _model.get(\"style\").arrow === 'undefined') ? \"checked\" : \"\",\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n from_title: _from_model.get(\"title\"),\n to_title: _to_model.get(\"title\"),\n from_color: (_from_model.has(\"style\") && _from_model.get(\"style\").color) || (_from_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n to_color: (_to_model.has(\"style\") && _to_model.get(\"style\").color) || (_to_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\")\n },\n renkan: this.renkan,\n shortenText: Utils.shortenText,\n options: this.options\n }));\n this.redraw();\n var _this = this,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n paper.view.draw();\n };\n this.editor_$.find(\".Rk-CloseX\").click(closeEditor);\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {\n title: _this.editor_$.find(\".Rk-Edit-Title\").val()\n };\n if (_this.options.show_edge_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked'),\n arrow = _this.editor_$.find(\".Rk-Edit-Arrow\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash, arrow: arrow});\n }\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n _model.set(_data);\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n },1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input\").on(\"keyup change paste\", onFieldChange);\n\n this.editor_$.find(\".Rk-Edit-Vocabulary\").change(function() {\n var e = $(this),\n v = e.val();\n if (v) {\n _this.editor_$.find(\".Rk-Edit-Title\").val(e.find(\":selected\").text());\n _this.editor_$.find(\".Rk-Edit-URI\").val(v);\n onFieldChange();\n }\n });\n this.editor_$.find(\".Rk-Edit-Direction\").click(function() {\n if (_this.renderer.isEditable()) {\n _model.set({\n from: _model.get(\"to\"),\n to: _model.get(\"from\")\n });\n _this.draw();\n } else {\n closeEditor();\n }\n });\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Edge\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color)|| (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n }\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, 5, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n }\n }).value();\n\n /* EdgeEditor End */\n\n return EdgeEditor;\n\n});\n\n\ndefine('renderer/nodebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _NodeButton Begin */\n\n //var _NodeButton = Renderer._NodeButton = Utils.inherit(Renderer._BaseButton);\n var _NodeButton = Utils.inherit(BaseButton);\n\n _(_NodeButton.prototype).extend({\n setSectorSize: function() {\n var sectorInner = this.source_representation.circle_radius;\n if (sectorInner !== this.lastSectorInner) {\n if (this.sector) {\n this.sector.destroy();\n }\n this.sector = this.renderer.drawSector(\n this, 1 + sectorInner,\n Utils._NODE_BUTTON_WIDTH + sectorInner,\n this.startAngle,\n this.endAngle,\n 1,\n this.imageName,\n this.renkan.translate(this.text)\n );\n this.lastSectorInner = sectorInner;\n }\n },\n unselect: function() {\n BaseButton.prototype.unselect.apply(this, Array.prototype.slice.call(arguments, 1));\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n this.source_representation.hideButtons();\n }\n },\n select: function() {\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n }\n this.sector.select();\n },\n }).value();\n\n\n /* _NodeButton End */\n\n return _NodeButton;\n\n});\n\n\ndefine('renderer/nodeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditButton Begin */\n\n //var NodeEditButton = Renderer.NodeEditButton = Utils.inherit(Renderer._NodeButton);\n var NodeEditButton = Utils.inherit(NodeButton);\n\n _(NodeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Node-edit-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -125 : -135;\n this.endAngle = this.options.hide_nodes ? -55 : -45;\n this.imageName = \"edit\";\n this.text = \"Edit\";\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* NodeEditButton End */\n\n return NodeEditButton;\n\n});\n\n\ndefine('renderer/noderemovebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeRemoveButton = Utils.inherit(NodeButton);\n\n _(NodeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Node-remove-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -10 : 0;\n this.endAngle = this.options.hide_nodes ? 45 : 90;\n this.imageName = \"remove\";\n this.text = \"Remove\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove node ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeNode(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeRemoveButton;\n\n});\n\n\ndefine('renderer/nodehidebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeHideButton = Utils.inherit(NodeButton);\n\n _(NodeHideButton.prototype).extend({\n _init: function() {\n this.type = \"Node-hide-button\";\n this.lastSectorInner = 0;\n this.startAngle = 45;\n this.endAngle = 90;\n this.imageName = \"hide\";\n this.text = \"Hide\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.renderer.view.addHiddenNode(this.source_representation.model);\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeHideButton;\n\n});\n\n\ndefine('renderer/nodeshowbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeShowButton = Utils.inherit(NodeButton);\n\n _(NodeShowButton.prototype).extend({\n _init: function() {\n this.type = \"Node-show-button\";\n this.lastSectorInner = 0;\n this.startAngle = 90;\n this.endAngle = 135;\n this.imageName = \"show\";\n this.text = \"Show neighbors\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.source_representation.showNeighbors(false);\n }\n }\n }).value();\n\n /* NodeShowButton End */\n\n return NodeShowButton;\n\n});\n\n\ndefine('renderer/noderevertbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRevertButton Begin */\n\n //var NodeRevertButton = Renderer.NodeRevertButton = Utils.inherit(Renderer._NodeButton);\n var NodeRevertButton = Utils.inherit(NodeButton);\n\n _(NodeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Node-revert-button\";\n this.lastSectorInner = 0;\n this.startAngle = -135;\n this.endAngle = 135;\n this.imageName = \"revert\";\n this.text = \"Cancel deletion\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* NodeRevertButton End */\n\n return NodeRevertButton;\n\n});\n\n\ndefine('renderer/nodelinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeLinkButton Begin */\n\n //var NodeLinkButton = Renderer.NodeLinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeLinkButton = Utils.inherit(NodeButton);\n\n _(NodeLinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-link-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? 135 : 90;\n this.endAngle = this.options.hide_nodes ? 190 : 180;\n this.imageName = \"link\";\n this.text = \"Link to another node\";\n },\n mousedown: function(_event, _isTouch) {\n if (this.renderer.isEditable()) {\n var _off = this.renderer.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.renderer.click_target = null;\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.renderer.addTempEdge(this.source_representation, _point, Utils.OriginEnum.EDGE_BUTTON_CIRCLE);\n }\n }\n }).value();\n\n /* NodeLinkButton End */\n\n return NodeLinkButton;\n\n});\n\n\n\ndefine('renderer/nodeenlargebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEnlargeButton Begin */\n\n //var NodeEnlargeButton = Renderer.NodeEnlargeButton = Utils.inherit(Renderer._NodeButton);\n var NodeEnlargeButton = Utils.inherit(NodeButton);\n\n _(NodeEnlargeButton.prototype).extend({\n _init: function() {\n this.type = \"Node-enlarge-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -55 : -45;\n this.endAngle = this.options.hide_nodes ? -10 : 0;\n this.imageName = \"enlarge\";\n this.text = \"Enlarge\";\n },\n mouseup: function() {\n var _newsize = 1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeEnlargeButton End */\n\n return NodeEnlargeButton;\n\n});\n\n\ndefine('renderer/nodeshrinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeShrinkButton Begin */\n\n //var NodeShrinkButton = Renderer.NodeShrinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeShrinkButton = Utils.inherit(NodeButton);\n\n _(NodeShrinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-shrink-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -170 : -180;\n this.endAngle = this.options.hide_nodes ? -125 : -135;\n this.imageName = \"shrink\";\n this.text = \"Shrink\";\n },\n mouseup: function() {\n var _newsize = -1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeShrinkButton End */\n\n return NodeShrinkButton;\n\n});\n\n\ndefine('renderer/edgeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditButton Begin */\n\n //var EdgeEditButton = Renderer.EdgeEditButton = Utils.inherit(Renderer._BaseButton);\n var EdgeEditButton = Utils.inherit(BaseButton);\n\n _(EdgeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-edit-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -270, -90, 1, \"edit\", this.renkan.translate(\"Edit\"));\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* EdgeEditButton End */\n\n return EdgeEditButton;\n\n});\n\n\ndefine('renderer/edgeremovebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRemoveButton Begin */\n\n //var EdgeRemoveButton = Renderer.EdgeRemoveButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRemoveButton = Utils.inherit(BaseButton);\n\n _(EdgeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-remove-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -90, 90, 1, \"remove\", this.renkan.translate(\"Remove\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove edge ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeEdge(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* EdgeRemoveButton End */\n\n return EdgeRemoveButton;\n\n});\n\n\ndefine('renderer/edgerevertbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRevertButton Begin */\n\n //var EdgeRevertButton = Renderer.EdgeRevertButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRevertButton = Utils.inherit(BaseButton);\n\n _(EdgeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-revert-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -135, 135, 1, \"revert\", this.renkan.translate(\"Cancel deletion\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* EdgeRevertButton End */\n\n return EdgeRevertButton;\n\n});\n\n\ndefine('renderer/miniframe',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* MiniFrame Begin */\n\n //var MiniFrame = Renderer.MiniFrame = Utils.inherit(Renderer._BaseRepresentation);\n var MiniFrame = Utils.inherit(BaseRepresentation);\n\n _(MiniFrame.prototype).extend({\n paperShift: function(_delta) {\n this.renderer.offset = this.renderer.offset.subtract(_delta.divide(this.renderer.minimap.scale).multiply(this.renderer.scale));\n this.renderer.redraw();\n },\n mouseup: function(_delta) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n }\n }).value();\n\n\n /* MiniFrame End */\n\n return MiniFrame;\n\n});\n\n\ndefine('renderer/scene',['jquery', 'underscore', 'filesaver', 'requtils', 'renderer/miniframe', 'screenfull'], function ($, _, filesaver, requtils, MiniFrame, Screenfull) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Scene Begin */\n\n var Scene = function(_renkan) {\n this.renkan = _renkan;\n this.$ = $(\".Rk-Render\");\n this.representations = [];\n this.$.html(_renkan.options.templates['templates/scene.html'](_renkan));\n this.onStatusChange();\n this.canvas_$ = this.$.find(\".Rk-Canvas\");\n this.labels_$ = this.$.find(\".Rk-Labels\");\n if (!_renkan.options.popup_editor){\n this.editor_$ = $(\"#\" + _renkan.options.editor_panel);\n }else{\n this.editor_$ = this.$.find(\".Rk-Editor\");\n }\n this.notif_$ = this.$.find(\".Rk-Notifications\");\n paper.setup(this.canvas_$[0]);\n this.totalScroll = 0;\n this.mouse_down = false;\n this.click_target = null;\n this.selected_target = null;\n this.edge_layer = new paper.Layer();\n this.node_layer = new paper.Layer();\n this.buttons_layer = new paper.Layer();\n this.delete_list = [];\n this.redrawActive = false;\n\n if (_renkan.options.show_minimap) {\n this.minimap = {\n background_layer: new paper.Layer(),\n edge_layer: new paper.Layer(),\n node_layer: new paper.Layer(),\n node_group: new paper.Group(),\n size: new paper.Size( _renkan.options.minimap_width, _renkan.options.minimap_height )\n };\n\n this.minimap.background_layer.activate();\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle = new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.rectangle.fillColor = _renkan.options.minimap_background_color;\n this.minimap.rectangle.strokeColor = _renkan.options.minimap_border_color;\n this.minimap.rectangle.strokeWidth = 4;\n this.minimap.offset = new paper.Point(this.minimap.size.divide(2));\n this.minimap.scale = 0.1;\n\n this.minimap.node_layer.activate();\n this.minimap.cliprectangle = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.cliprectangle);\n this.minimap.node_group.clipped = true;\n this.minimap.miniframe = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.miniframe);\n this.minimap.miniframe.fillColor = '#c0c0ff';\n this.minimap.miniframe.opacity = 0.3;\n this.minimap.miniframe.strokeColor = '#000080';\n this.minimap.miniframe.strokeWidth = 2;\n this.minimap.miniframe.__representation = new MiniFrame(this, null);\n }\n\n this.throttledPaperDraw = _(function() {\n paper.view.draw();\n }).throttle(100).value();\n\n this.bundles = [];\n this.click_mode = false;\n\n var _this = this,\n _allowScroll = true,\n _originalScale = 1,\n _zooming = false,\n _lastTapX = 0,\n _lastTapY = 0,\n _lastTap = 0;\n\n this.image_cache = {};\n this.icon_cache = {};\n\n ['edit', 'remove', 'hide', 'show', 'link', 'enlarge', 'shrink', 'revert' ].forEach(function(imgname) {\n var img = new Image();\n img.src = _renkan.options.static_url + 'img/' + imgname + '.png';\n _this.icon_cache[imgname] = img;\n });\n\n var throttledMouseMove = _.throttle(function(_event, _isTouch) {\n _this.onMouseMove(_event, _isTouch);\n }, Utils._MOUSEMOVE_RATE);\n\n this.canvas_$.on({\n mousedown: function(_event) {\n _event.preventDefault();\n _this.onMouseDown(_event, false);\n },\n mousemove: function(_event) {\n _event.preventDefault();\n throttledMouseMove(_event, false);\n },\n mouseup: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event, false);\n },\n mousewheel: function(_event, _delta) {\n if(_renkan.options.zoom_on_scroll) {\n _event.preventDefault();\n if (_allowScroll) {\n _this.onScroll(_event, _delta);\n }\n }\n },\n touchstart: function(_event) {\n _event.preventDefault();\n var _touches = _event.originalEvent.touches[0];\n if (\n _renkan.options.allow_double_click &&\n new Date() - _lastTap < Utils._DOUBLETAP_DELAY &&\n ( Math.pow(_lastTapX - _touches.pageX, 2) + Math.pow(_lastTapY - _touches.pageY, 2) < Utils._DOUBLETAP_DISTANCE )\n ) {\n _lastTap = 0;\n _this.onDoubleClick(_touches);\n } else {\n _lastTap = new Date();\n _lastTapX = _touches.pageX;\n _lastTapY = _touches.pageY;\n _originalScale = _this.view.scale;\n _zooming = false;\n _this.onMouseDown(_touches, true);\n }\n },\n touchmove: function(_event) {\n _event.preventDefault();\n _lastTap = 0;\n if (_event.originalEvent.touches.length === 1) {\n _this.onMouseMove(_event.originalEvent.touches[0], true);\n } else {\n if (!_zooming) {\n _this.onMouseUp(_event.originalEvent.touches[0], true);\n _this.click_target = null;\n _this.is_dragging = false;\n _zooming = true;\n }\n if (_event.originalEvent.scale === \"undefined\") {\n return;\n }\n var _newScale = _event.originalEvent.scale * _originalScale,\n _scaleRatio = _newScale / _this.view.scale,\n _newOffset = new paper.Point([\n _this.canvas_$.width(),\n _this.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - _scaleRatio ) ).add(_this.view.offset.multiply( _scaleRatio ));\n _this.view.setScale(_newScale, _newOffset);\n }\n },\n touchend: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event.originalEvent.changedTouches[0], true);\n },\n click: function(_event) {\n _event.preventDefault();\n _this.onClick(_event);\n },\n dblclick: function(_event) {\n _event.preventDefault();\n if (_renkan.options.allow_double_click) {\n _this.onDoubleClick(_event);\n }\n },\n mouseleave: function(_event) {\n _event.preventDefault();\n //_this.onMouseUp(_event, false);\n _this.click_target = null;\n _this.is_dragging = false;\n },\n dragover: function(_event) {\n _event.preventDefault();\n },\n dragenter: function(_event) {\n _event.preventDefault();\n _allowScroll = false;\n },\n dragleave: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n },\n drop: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n var res = {};\n _.each(_event.originalEvent.dataTransfer.types, function(t) {\n try {\n res[t] = _event.originalEvent.dataTransfer.getData(t);\n } catch(e) {}\n });\n var text = _event.originalEvent.dataTransfer.getData(\"Text\");\n if (typeof text === \"string\") {\n switch(text[0]) {\n case \"{\":\n case \"[\":\n try {\n var data = JSON.parse(text);\n _.extend(res,data);\n }\n catch(e) {\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n break;\n case \"<\":\n if (!res[\"text/html\"]) {\n res[\"text/html\"] = text;\n }\n break;\n default:\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n }\n var url = _event.originalEvent.dataTransfer.getData(\"URL\");\n if (url && !res[\"text/uri-list\"]) {\n res[\"text/uri-list\"] = url;\n }\n _this.dropData(res, _event.originalEvent);\n }\n });\n\n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n\n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n this.$.find(\".Rk-CurrentUser\").mouseenter(\n function() { _this.$.find(\".Rk-UserList\").slideDown(); }\n );\n this.$.find(\".Rk-Users\").mouseleave(\n function() { _this.$.find(\".Rk-UserList\").slideUp(); }\n );\n\n if (Screenfull.enabled){\n bindClick(\".Rk-FullScreen-Button\", \"fullScreen\");\n\n document.addEventListener(Screenfull.raw.fullscreenchange, function () {\n //the listener occur too randomly and sometimes before the fullscreen is fully set up\n //so we add 500 delay\n setTimeout(function(){\n var widthAft = _this.$.width();\n var heightAft = _this.$.height();\n\n if (_this.renkan.options.show_top_bar) {\n heightAft -= _this.$.find(\".Rk-TopBar\").height();\n }\n if (_this.renkan.options.show_bins && (this.renkan.$.find(\".Rk-Bins\").position().left > 0)) {\n widthAft -= this.renkan.$.find(\".Rk-Bins\").width();\n }\n\n paper.view.viewSize = new paper.Size([widthAft, heightAft]);\n _this.resize(_this.currentWidth, widthAft, _this.currentHeight, heightAft);\n\n _this.currentWidth = widthAft;\n _this.currentHeight = heightAft;\n\n if (!Screenfull.isFullscreen) {\n paper.view.onResize = function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n };\n }\n }, 600);\n });\n } else {\n this.$.find(\".Rk-FullScreen-Button\").addClass(\"disabled\");\n this.$.find(\".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents\").html(this.renkan.translate(\"Fullscreen not supported by your browser\"));\n }\n\n bindClick(\".Rk-AddNode-Button\", \"addNodeBtn\");\n bindClick(\".Rk-AddEdge-Button\", \"addEdgeBtn\");\n bindClick(\".Rk-Save-Button\", \"save\");\n bindClick(\".Rk-Open-Button\", \"open\");\n bindClick(\".Rk-Export-Button\", \"exportProject\");\n this.$.find(\".Rk-Bookmarklet-Button\")\n /*jshint scripturl:true */\n .attr(\"href\",\"javascript:\" + Utils._BOOKMARKLET_CODE(_renkan))\n .click(function(){\n _this.notif_$\n .text(_renkan.translate(\"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\"))\n .fadeIn()\n .delay(5000)\n .fadeOut();\n return false;\n });\n this.$.find(\".Rk-TopBar-Button\").mouseover(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").show();\n }).mouseout(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").hide();\n });\n bindClick(\".Rk-Fold-Bins\", \"foldBins\");\n\n paper.view.on(\"resize\", function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n });\n\n var _thRedraw = _.throttle(function() {\n _this.redraw();\n },50);\n\n this.addRepresentations(\"Node\", this.renkan.project.get(\"nodes\"));\n this.addRepresentations(\"Edge\", this.renkan.project.get(\"edges\"));\n this.renkan.project.on(\"change:title\", function() {\n _this.$.find(\".Rk-PadTitle\").val(_renkan.project.get(\"title\")).prop('title', _renkan.project.get(\"title\"));\n });\n\n this.$.find(\".Rk-PadTitle\").on(\"keyup input paste\", function() {\n _renkan.project.set({\"title\": $(this).val()});\n });\n\n var _thRedrawUsers = _.throttle(function() {\n _this.redrawUsers();\n }, 100);\n\n _thRedrawUsers();\n\n // register model events\n this.renkan.project.on(\"change:saveStatus\", function(){\n switch (_this.renkan.project.get(\"saveStatus\")) {\n case 0: //clean\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saved\");\n break;\n case 1: //dirty\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"to-save\");\n break;\n case 2: //saving\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saving\");\n break;\n }\n });\n\n this.renkan.project.on(\"loaded\", function(){\n if (_this.renkan.options.url_parameters){\n Backbone.history.start();\n } else {\n _this.fixSize();\n }\n _this.redrawActive = true;\n _thRedraw();\n });\n\n //register router events\n this.renkan.router.on(\"router\", function(_params){\n _this.setViewParameters(_params);\n });\n\n this.renkan.project.on(\"change:loadingStatus\", function(){\n if (_this.renkan.project.get(\"loadingStatus\")){\n var animate = _this.$.find(\".loader\").addClass(\"run\");\n var timer = setTimeout(function(){\n _this.$.find(\".loader\").hide(250);\n }, 3000);\n }\n });\n\n this.renkan.project.on(\"add:users remove:users\", _thRedrawUsers);\n\n this.renkan.project.on(\"add:views remove:views\", function(_node) {\n if(_this.renkan.project.get('views').length > 1) {\n _this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n else {\n _this.$.find(\".Rk-ZoomSetSaved\").hide();\n }\n });\n\n this.renkan.project.on(\"add:nodes\", function(_node) {\n _this.addRepresentation(\"Node\", _node);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"add:edges\", function(_edge) {\n _this.addRepresentation(\"Edge\", _edge);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"change:title\", function(_model, _title) {\n var el = _this.$.find(\".Rk-PadTitle\");\n if (el.is(\"input\")) {\n if (el.val() !== _title) {\n el.val(_title);\n }\n } else {\n el.text(_title);\n }\n });\n\n if (_renkan.options.size_bug_fix) {\n var _delay = (\n typeof _renkan.options.size_bug_fix === \"number\" ?\n _renkan.options.size_bug_fix\n : 500\n );\n window.setTimeout(\n function() {\n _this.fixSize();\n },\n _delay\n );\n }\n\n if (_renkan.options.force_resize) {\n $(window).resize(function() {\n _this.autoScale();\n });\n }\n\n if (_renkan.options.show_user_list && _renkan.options.user_color_editable) {\n var $cpwrapper = this.$.find(\".Rk-Users .Rk-Edit-ColorPicker-Wrapper\"),\n $cplist = this.$.find(\".Rk-Users .Rk-Editor-ColorPicker-User\");\n\n $cpwrapper.hover(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n $cplist.show();\n }\n },\n function(_e) {\n _e.preventDefault();\n $cplist.hide();\n }\n );\n\n $cplist.find(\"li\").mouseenter(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n _this.$.find(\".Rk-CurrentUser-Color\").css(\"background\", $(this).attr(\"data-color\"));\n }\n }\n );\n }\n\n if (_renkan.options.show_search_field) {\n\n var lastval = '';\n\n this.$.find(\".Rk-GraphSearch-Field\").on(\"keyup change paste input\", function() {\n var $this = $(this),\n val = $this.val();\n if (val === lastval) {\n return;\n }\n lastval = val;\n if (val.length < 2) {\n _renkan.project.get(\"nodes\").each(function(n) {\n _this.getRepresentationByModel(n).unhighlight();\n });\n _renkan.project.get(\"edges\").each(function(e) {\n _this.getRepresentationByModel(e).unhighlight();\n });\n } else {\n var rxs = Utils.regexpFromTextOrArray(val);\n _renkan.project.get(\"nodes\").each(function(n) {\n if (n.id === val || rxs.test(n.get(\"title\")) || rxs.test(n.get(\"description\"))) {\n _this.getRepresentationByModel(n).highlight(rxs);\n } else {\n _this.getRepresentationByModel(n).unhighlight();\n }\n });\n _renkan.project.get(\"edges\").each(function(e) {\n if (e.id === val || rxs.test(e.get(\"title\")) || rxs.test(e.get(\"description\"))) {\n _this.getRepresentationByModel(e).highlight(rxs);\n } else {\n _this.getRepresentationByModel(e).unhighlight();\n }\n });\n\n }\n });\n }\n\n this.redraw();\n\n window.setInterval(function() {\n var _now = new Date().valueOf();\n _this.delete_list.forEach(function(d) {\n if (_now >= d.time) {\n var el = _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeNode(el);\n }\n el = _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeEdge(el);\n }\n }\n });\n _this.delete_list = _this.delete_list.filter(function(d) {\n return _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id}) || _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n });\n }, 500);\n\n if (this.minimap) {\n window.setInterval(function() {\n _this.rescaleMinimap();\n }, 2000);\n }\n\n };\n\n _(Scene.prototype).extend({\n fixSize: function() {\n if(typeof this.view === 'undefined') {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").last());\n }\n this.view.autoScale();\n },\n drawSector: function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgname, _caption) {\n var _options = this.renkan.options,\n _startRads = _startAngle * Math.PI / 180,\n _endRads = _endAngle * Math.PI / 180,\n _img = this.icon_cache[_imgname],\n _startdx = - Math.sin(_startRads),\n _startdy = Math.cos(_startRads),\n _startXIn = Math.cos(_startRads) * _inR + _padding * _startdx,\n _startYIn = Math.sin(_startRads) * _inR + _padding * _startdy,\n _startXOut = Math.cos(_startRads) * _outR + _padding * _startdx,\n _startYOut = Math.sin(_startRads) * _outR + _padding * _startdy,\n _enddx = - Math.sin(_endRads),\n _enddy = Math.cos(_endRads),\n _endXIn = Math.cos(_endRads) * _inR - _padding * _enddx,\n _endYIn = Math.sin(_endRads) * _inR - _padding * _enddy,\n _endXOut = Math.cos(_endRads) * _outR - _padding * _enddx,\n _endYOut = Math.sin(_endRads) * _outR - _padding * _enddy,\n _centerR = (_inR + _outR) / 2,\n _centerRads = (_startRads + _endRads) / 2,\n _centerX = Math.cos(_centerRads) * _centerR,\n _centerY = Math.sin(_centerRads) * _centerR,\n _centerXIn = Math.cos(_centerRads) * _inR,\n _centerXOut = Math.cos(_centerRads) * _outR,\n _centerYIn = Math.sin(_centerRads) * _inR,\n _centerYOut = Math.sin(_centerRads) * _outR,\n _textX = Math.cos(_centerRads) * (_outR + 3),\n _textY = Math.sin(_centerRads) * (_outR + _options.buttons_label_font_size) + _options.buttons_label_font_size / 2;\n this.buttons_layer.activate();\n var _path = new paper.Path();\n _path.add([_startXIn, _startYIn]);\n _path.arcTo([_centerXIn, _centerYIn], [_endXIn, _endYIn]);\n _path.lineTo([_endXOut, _endYOut]);\n _path.arcTo([_centerXOut, _centerYOut], [_startXOut, _startYOut]);\n _path.fillColor = _options.buttons_background;\n _path.opacity = 0.5;\n _path.closed = true;\n _path.__representation = _repr;\n var _text = new paper.PointText(_textX,_textY);\n _text.characterStyle = {\n fontSize: _options.buttons_label_font_size,\n fillColor: _options.buttons_label_color\n };\n if (_textX > 2) {\n _text.paragraphStyle.justification = 'left';\n } else if (_textX < -2) {\n _text.paragraphStyle.justification = 'right';\n } else {\n _text.paragraphStyle.justification = 'center';\n }\n _text.visible = false;\n var _visible = false,\n _restPos = new paper.Point(-200, -200),\n _grp = new paper.Group([_path, _text]),\n //_grp = new paper.Group([_path]),\n _delta = _grp.position,\n _imgdelta = new paper.Point([_centerX, _centerY]),\n _currentPos = new paper.Point(0,0);\n _text.content = _caption;\n // set group pivot to not depend on text visibility that changes the group bounding box.\n _grp.pivot = _grp.bounds.center;\n _grp.visible = false;\n _grp.position = _restPos;\n var _res = {\n show: function() {\n _visible = true;\n _grp.position = _currentPos.add(_delta);\n _grp.visible = true;\n },\n moveTo: function(_point) {\n _currentPos = _point;\n if (_visible) {\n _grp.position = _point.add(_delta);\n }\n },\n hide: function() {\n _visible = false;\n _grp.visible = false;\n _grp.position = _restPos;\n },\n select: function() {\n _path.opacity = 0.8;\n _text.visible = true;\n },\n unselect: function() {\n _path.opacity = 0.5;\n _text.visible = false;\n },\n destroy: function() {\n _grp.remove();\n }\n };\n var showImage = function() {\n var _raster = new paper.Raster(_img);\n _raster.position = _imgdelta.add(_grp.position).subtract(_delta);\n _raster.locked = true; // Disable mouse events on icon\n _grp.addChild(_raster);\n };\n if (_img.width) {\n showImage();\n } else {\n $(_img).on(\"load\",showImage);\n }\n\n return _res;\n },\n addToBundles: function(_edgeRepr) {\n var _bundle = _(this.bundles).find(function(_bundle) {\n return (\n ( _bundle.from === _edgeRepr.from_representation && _bundle.to === _edgeRepr.to_representation ) ||\n ( _bundle.from === _edgeRepr.to_representation && _bundle.to === _edgeRepr.from_representation )\n );\n });\n if (typeof _bundle !== \"undefined\") {\n _bundle.edges.push(_edgeRepr);\n } else {\n _bundle = {\n from: _edgeRepr.from_representation,\n to: _edgeRepr.to_representation,\n edges: [ _edgeRepr ],\n getPosition: function(_er) {\n var _dir = (_er.from_representation === this.from) ? 1 : -1;\n return _dir * ( _(this.edges).indexOf(_er) - (this.edges.length - 1) / 2 );\n }\n };\n this.bundles.push(_bundle);\n }\n return _bundle;\n },\n isEditable: function() {\n return (this.renkan.options.editor_mode && !this.renkan.read_only);\n },\n onStatusChange: function() {\n var savebtn = this.$.find(\".Rk-Save-Button\"),\n tip = savebtn.find(\".Rk-TopBar-Tooltip-Contents\");\n if (this.renkan.read_only) {\n savebtn.removeClass(\"disabled Rk-Save-Online\").addClass(\"Rk-Save-ReadOnly\");\n tip.text(this.renkan.translate(\"Connection lost\"));\n } else {\n if (this.renkan.options.manual_save) {\n savebtn.removeClass(\"Rk-Save-ReadOnly Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Save Project\"));\n } else {\n savebtn.removeClass(\"disabled Rk-Save-ReadOnly\").addClass(\"Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Auto-save enabled\"));\n }\n }\n this.redrawUsers();\n },\n redrawMiniframe: function() {\n var topleft = this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),\n bottomright = this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));\n this.minimap.miniframe.fitBounds(topleft, bottomright);\n },\n rescaleMinimap: function() {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min(\n this.view.scale * 0.8 * this.renkan.options.minimap_width / paper.view.bounds.width,\n this.view.scale * 0.8 * this.renkan.options.minimap_height / paper.view.bounds.height,\n ( this.renkan.options.minimap_width - 2 * this.renkan.options.minimap_padding ) / (_maxx - _minx),\n ( this.renkan.options.minimap_height - 2 * this.renkan.options.minimap_padding ) / (_maxy - _miny)\n );\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale));\n this.minimap.scale = _scale;\n }\n if (nodes.length === 1) {\n this.minimap.scale = 0.1;\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y]).multiply(this.minimap.scale));\n }\n this.redraw();\n },\n toPaperCoords: function(_point) {\n return _point.multiply(this.view.scale).add(this.view.offset);\n },\n toMinimapCoords: function(_point) {\n return _point.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft);\n },\n toModelCoords: function(_point) {\n return _point.subtract(this.view.offset).divide(this.view.scale);\n },\n addRepresentation: function(_type, _model) {\n var RendererType = requtils.getRenderer()[_type];\n var _repr = new RendererType(this, _model);\n this.representations.push(_repr);\n return _repr;\n },\n addRepresentations: function(_type, _collection) {\n var _this = this;\n _collection.forEach(function(_model) {\n _this.addRepresentation(_type, _model);\n });\n },\n userTemplate: _.template(\n '
                                                                    • ;\"><%=name%>
                                                                    • '\n ),\n redrawUsers: function() {\n if (!this.renkan.options.show_user_list) {\n return;\n }\n var allUsers = [].concat((this.renkan.project.current_user_list || {}).models || [], (this.renkan.project.get(\"users\") || {}).models || []),\n ulistHtml = '',\n $userpanel = this.$.find(\".Rk-Users\"),\n $name = $userpanel.find(\".Rk-CurrentUser-Name\"),\n $cpitems = $userpanel.find(\".Rk-Edit-ColorPicker li\"),\n $colorsquare = $userpanel.find(\".Rk-CurrentUser-Color\"),\n _this = this;\n $name.off(\"click\").text(this.renkan.translate(\"\"));\n $cpitems.off(\"mouseleave click\");\n allUsers.forEach(function(_user) {\n if (_user.get(\"_id\") === _this.renkan.current_user) {\n $name.text(_user.get(\"title\"));\n $colorsquare.css(\"background\", _user.get(\"color\"));\n if (_this.isEditable()) {\n\n if (_this.renkan.options.user_name_editable) {\n $name.click(function() {\n var $this = $(this),\n $input = $('').val(_user.get(\"title\")).blur(function() {\n _user.set(\"title\", $(this).val());\n _this.redrawUsers();\n _this.redraw();\n });\n $this.empty().html($input);\n $input.select();\n });\n }\n\n if (_this.renkan.options.user_color_editable) {\n $cpitems.click(\n function(_e) {\n _e.preventDefault();\n if (_this.isEditable()) {\n _user.set(\"color\", $(this).attr(\"data-color\"));\n }\n $(this).parent().hide();\n }\n ).mouseleave(function() {\n $colorsquare.css(\"background\", _user.get(\"color\"));\n });\n }\n }\n\n } else {\n ulistHtml += _this.userTemplate({\n name: _user.get(\"title\"),\n background: _user.get(\"color\")\n });\n }\n });\n $userpanel.find(\".Rk-UserList\").html(ulistHtml);\n },\n removeRepresentation: function(_representation) {\n _representation.destroy();\n this.representations = _.reject(this.representations,\n function(_repr) {\n return _repr === _representation;\n }\n );\n },\n getRepresentationByModel: function(_model) {\n if (!_model) {\n return undefined;\n }\n return _.find(this.representations, function(_repr) {\n return _repr.model === _model;\n });\n },\n removeRepresentationsOfType: function(_type) {\n var _representations = _.filter(this.representations,function(_repr) {\n return _repr.type === _type;\n }),\n _this = this;\n _.each(_representations, function(_repr) {\n _this.removeRepresentation(_repr);\n });\n },\n highlightModel: function(_model) {\n var _repr = this.getRepresentationByModel(_model);\n if (_repr) {\n _repr.highlight();\n }\n },\n unhighlightAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unhighlight();\n });\n },\n unselectAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unselect();\n });\n },\n redraw: function() {\n var _this = this;\n if(! this.redrawActive ) {\n return;\n }\n _.each(this.representations, function(_representation) {\n _representation.redraw({ dontRedrawEdges:true });\n });\n if (this.minimap && typeof this.view !== 'undefined') {\n this.redrawMiniframe();\n }\n paper.view.draw();\n },\n resize: function(prevWidth, newWidth, prevHeight, newHeight){\n var _ratio;\n\n if (this.minimap) {\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.cliprectangle.fitBounds(this.minimap.topleft, this.minimap.size);\n }\n\n var ratioH = newHeight/prevHeight,\n ratioW = newWidth/prevWidth;\n if (newHeight < newWidth) {\n _ratio = ratioH;\n } else {\n _ratio = ratioW;\n }\n this.view.resizeZoom(newWidth - prevWidth, newHeight - prevHeight, _ratio);\n\n this.redraw();\n },\n addTempEdge: function(_from, _point, _origin) {\n var _tmpEdge = this.addRepresentation(\"TempEdge\",null);\n _tmpEdge.end_pos = _point;\n _tmpEdge.from_representation = _from;\n _tmpEdge.origin = _origin;\n _tmpEdge.redraw();\n this.click_target = _tmpEdge;\n },\n findTarget: function(_hitResult) {\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _newTarget = _hitResult.item.__representation;\n if (this.selected_target !== _hitResult.item.__representation) {\n if (this.selected_target) {\n this.selected_target.unselect(_newTarget);\n }\n _newTarget.select(this.selected_target);\n this.selected_target = _newTarget;\n }\n } else {\n if (this.selected_target) {\n this.selected_target.unselect();\n }\n this.selected_target = null;\n }\n },\n onMouseMove: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _delta = _point.subtract(this.last_point);\n this.last_point = _point;\n if (!this.is_dragging && this.mouse_down && _delta.length > Utils._MIN_DRAG_DISTANCE) {\n this.is_dragging = true;\n }\n var _hitResult = paper.project.hitTest(_point);\n if (this.is_dragging) {\n if (this.click_target && typeof this.click_target.paperShift === \"function\") {\n this.click_target.paperShift(_delta);\n } else {\n this.view.paperShift(_delta);\n }\n } else {\n this.findTarget(_hitResult);\n }\n paper.view.draw();\n },\n onMouseDown: function(_event, _isTouch) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.last_point = _point;\n this.mouse_down = true;\n if (!this.click_target || this.click_target.type !== \"Temp-edge\") {\n this.removeRepresentationsOfType(\"editor\");\n this.is_dragging = false;\n var _hitResult = paper.project.hitTest(_point);\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n this.click_target = _hitResult.item.__representation;\n this.click_target.mousedown(_event, _isTouch);\n } else {\n this.click_target = null;\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_ADDNODE) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_BUTTON\n };\n var _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n }\n }\n if (this.click_mode) {\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === \"Node\") {\n this.removeRepresentationsOfType(\"editor\");\n this.addTempEdge(this.click_target, _point, Utils.OriginEnum.EDGE_BUTTON_BAR);\n this.click_mode = Utils._CLICKMODE_ENDEDGE;\n this.notif_$.fadeOut(function() {\n $(this).html(this.renkan.translate(\"Click on a second node to complete the edge\")).fadeIn();\n });\n } else {\n this.notif_$.hide();\n this.click_mode = false;\n }\n }\n paper.view.draw();\n },\n onMouseUp: function(_event, _isTouch) {\n this.mouse_down = false;\n if (this.click_target) {\n var _off = this.canvas_$.offset();\n this.click_target.mouseup(\n {\n point: new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ])\n },\n _isTouch\n );\n } else {\n this.click_target = null;\n this.is_dragging = false;\n if (_isTouch) {\n this.unselectAll();\n }\n this.view.updateUrl();\n }\n paper.view.draw();\n },\n onScroll: function(_event, _scrolldelta) {\n this.totalScroll += _scrolldelta;\n if (Math.abs(this.totalScroll) >= 1) {\n var _off = this.canvas_$.offset(),\n _delta = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]).subtract(this.view.offset).multiply( Math.SQRT2 - 1 );\n if (this.totalScroll > 0) {\n this.view.setScale( this.view.scale * Math.SQRT2, this.view.offset.subtract(_delta) );\n } else {\n this.view.setScale( this.view.scale * Math.SQRT1_2, this.view.offset.add(_delta.divide(Math.SQRT2)));\n }\n this.totalScroll = 0;\n }\n },\n onClick: function(_event) {\n if (!this.isEditable()) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n if(!this._open_uri_cb &&\n this.renkan.options.simple_click_open_url && \n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n this._node_click_open_url = setTimeout(function() {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n this._node_click_open_url = null;\n }.bind(this), 200);\n }\n }\n },\n onDoubleClick: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n\n if (!this.isEditable()) {\n if (this.renkan.options.double_click_open_url &&\n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n }\n return;\n }\n if (this.isEditable() && (!_hitResult || typeof _hitResult.item.__representation === \"undefined\")) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_DOUBLE_CLICK\n },\n _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n paper.view.draw();\n },\n defaultDropHandler: function(_data) {\n var newNode = {};\n var snippet = \"\";\n switch(_data[\"text/x-iri-specific-site\"]) {\n case \"twitter\":\n snippet = $('
                                                                      ').html(_data[\"text/x-iri-selected-html\"]);\n var tweetdiv = snippet.find(\".tweet\");\n newNode.title = this.renkan.translate(\"Tweet by \") + tweetdiv.attr(\"data-name\");\n newNode.uri = \"http://twitter.com/\" + tweetdiv.attr(\"data-screen-name\") + \"/status/\" + tweetdiv.attr(\"data-tweet-id\");\n newNode.image = tweetdiv.find(\".avatar\").attr(\"src\");\n newNode.description = tweetdiv.find(\".js-tweet-text:first\").text();\n break;\n case \"google\":\n snippet = $('
                                                                      ').html(_data[\"text/x-iri-selected-html\"]);\n newNode.title = snippet.find(\"h3:first\").text().trim();\n newNode.uri = snippet.find(\"h3 a\").attr(\"href\");\n newNode.description = snippet.find(\".st:first\").text().trim();\n break;\n default:\n if (_data[\"text/x-iri-source-uri\"]) {\n newNode.uri = _data[\"text/x-iri-source-uri\"];\n }\n }\n if (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]) {\n newNode.description = (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]).replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                                                      ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n var _svgimgs = snippet.find(\"image\");\n if (_svgimgs.length) {\n newNode.image = _svgimgs.attr(\"xlink:href\");\n }\n var _svgpaths = snippet.find(\"path\");\n if (_svgpaths.length) {\n newNode.clipPath = _svgpaths.attr(\"d\");\n }\n var _imgs = snippet.find(\"img\");\n if (_imgs.length) {\n newNode.image = _imgs[0].src;\n }\n var _as = snippet.find(\"a\");\n if (_as.length) {\n newNode.uri = _as[0].href;\n }\n newNode.title = snippet.find(\"[title]\").attr(\"title\") || newNode.title;\n newNode.description = snippet.text().replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/uri-list\"]) {\n newNode.uri = _data[\"text/uri-list\"];\n }\n if (_data[\"text/x-moz-url\"] && !newNode.title) {\n newNode.title = (_data[\"text/x-moz-url\"].split(\"\\n\")[1] || \"\").trim();\n if (newNode.title === newNode.uri) {\n newNode.title = false;\n }\n }\n if (_data[\"text/x-iri-source-title\"] && !newNode.title) {\n newNode.title = _data[\"text/x-iri-source-title\"];\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                                                      ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n newNode.image = snippet.find(\"[data-image]\").attr(\"data-image\") || newNode.image;\n newNode.uri = snippet.find(\"[data-uri]\").attr(\"data-uri\") || newNode.uri;\n newNode.title = snippet.find(\"[data-title]\").attr(\"data-title\") || newNode.title;\n newNode.description = snippet.find(\"[data-description]\").attr(\"data-description\") || newNode.description;\n newNode.clipPath = snippet.find(\"[data-clip-path]\").attr(\"data-clip-path\") || newNode.clipPath;\n }\n\n if (!newNode.title) {\n newNode.title = this.renkan.translate(\"Dragged resource\");\n }\n var fields = [\"title\", \"description\", \"uri\", \"image\"];\n for (var i = 0; i < fields.length; i++) {\n var f = fields[i];\n if (_data[\"text/x-iri-\" + f] || _data[f]) {\n newNode[f] = _data[\"text/x-iri-\" + f] || _data[f];\n }\n if (newNode[f] === \"none\" || newNode[f] === \"null\") {\n newNode[f] = undefined;\n }\n }\n\n if(typeof this.renkan.options.drop_enhancer === \"function\"){\n newNode = this.renkan.options.drop_enhancer(newNode, _data);\n }\n\n return newNode;\n\n },\n dropData: function(_data, _event) {\n if (!this.isEditable()) {\n return;\n }\n if (_data[\"text/json\"] || _data[\"application/json\"]) {\n try {\n var jsondata = JSON.parse(_data[\"text/json\"] || _data[\"application/json\"]);\n _.extend(_data,jsondata);\n }\n catch(e) {}\n }\n\n var newNode = (typeof this.renkan.options.drop_handler === \"undefined\")?this.defaultDropHandler(_data):this.renkan.options.drop_handler(_data);\n\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _coords = this.toModelCoords(_point),\n _nodedata = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n uri: newNode.uri || \"\",\n title: newNode.title || \"\",\n description: newNode.description || \"\",\n image: newNode.image || \"\",\n color: newNode.color || undefined,\n clip_path: newNode.clipPath || undefined,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n //TODO: Determine if it comes from bin or ext\n origin: Utils.OriginEnum.NODE_DROP_EXT\n };\n var _node = this.renkan.project.addNode(_nodedata),\n _repr = this.getRepresentationByModel(_node);\n if (_event.type === \"drop\") {\n _repr.openEditor();\n }\n },\n fullScreen: function() {\n this.currentWidth = this.$.width();\n this.currentHeight = this.$.height();\n\n var _el = this.renkan.$[0];\n paper.view.off(\"resize\");\n Screenfull.toggle(_el);\n },\n addNodeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_ADDNODE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_ADDNODE;\n this.notif_$.text(this.renkan.translate(\"Click on the background canvas to add a node\")).fadeIn();\n }\n return false;\n },\n addEdgeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_STARTEDGE || this.click_mode === Utils._CLICKMODE_ENDEDGE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_STARTEDGE;\n this.notif_$.text(this.renkan.translate(\"Click on a first node to start the edge\")).fadeIn();\n }\n return false;\n },\n exportProject: function() {\n var projectJSON = this.renkan.project.toJSON(),\n downloadLink = document.createElement(\"a\"),\n projectId = projectJSON.id,\n fileNameToSaveAs = projectId + \".json\";\n\n // clean ids\n delete projectJSON.id;\n delete projectJSON._id;\n delete projectJSON.space_id;\n\n var objId,\n idsMap = {},\n hiddenNodes;\n\n _.each(projectJSON.nodes, function(e,i,l) {\n objId = e.id || e._id;\n delete e._id;\n delete e.id;\n idsMap[objId] = e['@id'] = Utils.getUUID4();\n });\n _.each(projectJSON.edges, function(e,i,l) {\n delete e._id;\n delete e.id;\n e.to = idsMap[e.to];\n e.from = idsMap[e.from];\n });\n _.each(projectJSON.views, function(e,i,l) {\n delete e._id;\n delete e.id;\n\n if(e.hidden_nodes) {\n hiddenNodes = e.hidden_nodes;\n e.hidden_nodes = [];\n _.each(hiddenNodes, function(h,j) {\n e.hidden_nodes.push(idsMap[h]);\n });\n }\n });\n projectJSON.users = [];\n\n var projectJSONStr = JSON.stringify(projectJSON, null, 2);\n var blob = new Blob([projectJSONStr], {type: \"application/json;charset=utf-8\"});\n filesaver(blob,fileNameToSaveAs);\n\n },\n setViewParameters: function(_params){\n this.removeRepresentationsOfType(\"View\");\n if ($.isEmptyObject(_params)){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n return;\n }\n if (typeof _params.viewIndex !== 'undefined'){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(_params.viewIndex)));\n } else {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n }\n if (typeof _params.view !== 'undefined' && _params.view.split(\",\").length >= 3){\n var viewParams = _params.view.split(\",\");\n var params = {\n \"project\": this.renkan.project,\n \"offset\": {\n \"x\": parseFloat(viewParams[0]),\n \"y\": parseFloat(viewParams[1])\n },\n \"zoom_level\": parseFloat(viewParams[2])\n };\n this.view.setScale(params.zoom_level, new paper.Point(params.offset));\n }\n //if view parameters = autoscale we apply a zoom fit on the view.\n if ((typeof _params.view !== 'undefined' && _params.view === \"autoscale\")){\n this.view.autoScale();\n }\n //if viewsNodes = false we show all the node by default.\n if (typeof _params.viewsNodes !== 'undefined'){\n if (_params.viewsNodes === \"true\"){\n this.view.hiddenNodes = (this.view.params.hidden_nodes || []).concat();\n this.view.hideNodes();\n } else {\n this.view.showNodes(false);\n }\n }\n //other parameters must go after because most of them depends on a view that must be initialize before\n this.unhighlightAll();\n if (typeof _params.node !== 'undefined' && _params.node){\n this.highlightModel(this.renkan.project.get(\"nodes\").get(_params.node));\n }\n if (typeof _params.edge !== 'undefined' && _params.edge){\n this.highlightModel(this.renkan.project.get(\"edges\").get(_params.edge));\n }\n\n },\n validViewIndex: function(index){\n //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist\n var _index = parseInt(index);\n var validIndex = 0;\n if (_index < 0){\n validIndex = this.renkan.project.get(\"views\").length + _index;\n } else {\n validIndex = _index;\n }\n if (typeof this.renkan.project.get(\"views\").at(_index) === 'undefined'){\n validIndex = 0;\n }\n return validIndex;\n },\n foldBins: function() {\n var foldBinsButton = this.$.find(\".Rk-Fold-Bins\"),\n bins = this.renkan.$.find(\".Rk-Bins\"),\n _delta = 0;\n var _this = this,\n sizeBef = _this.canvas_$.width(),\n sizeAft;\n if (bins.position().left < 0) {\n _delta= new paper.Point([-bins.width()/2, 0]);\n bins.animate({left: 0},250);\n this.$.animate({left: 300},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n if ((sizeBef - bins.width()) < bins.height()){\n sizeAft = sizeBef;\n } else {\n sizeAft = sizeBef - bins.width();\n }\n foldBinsButton.html(\"«\");\n } else {\n _delta= new paper.Point([bins.width()/2, 0]);\n bins.animate({left: -300},250);\n this.$.animate({left: 0},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n sizeAft = sizeBef+300;\n foldBinsButton.html(\"»\");\n }\n this.view.paperShift(_delta);\n },\n save: function() { },\n open: function() { }\n }).value();\n\n /* Scene End */\n\n return Scene;\n\n});\n\ndefine('renderer/viewrepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.View Class */\n\n /* The representation for the view. */\n\n var ViewRepr = Utils.inherit(BaseRepresentation);\n\n _(ViewRepr.prototype).extend({\n _init: function() {\n var _this = this;\n this.$ = $(\".Rk-Render\");\n this.type = \"View\";\n this.hiddenNodes = [];\n this.scale = 1;\n this.initialScale = 1;\n this.offset = paper.view.center;\n this.params = {};\n \n if (this.model){\n this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n }\n \n this.initWithParams();\n \n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n \n bindClick(\".Rk-ZoomOut\", \"zoomOut\");\n bindClick(\".Rk-ZoomIn\", \"zoomIn\");\n bindClick(\".Rk-ZoomFit\", \"autoScale\");\n bindClick(\".Rk-ZoomSave\", \"saveView\");\n \n this.$.find(\".Rk-ZoomSetSaved\").click( function() {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));\n _this.showNodes(false);\n if (_this.options.hide_nodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n }\n _this.updateUrl();\n });\n \n this.$.find(\".Rk-ShowHiddenNodes\").mouseenter( function() {\n _this.showNodes(true);\n _this.$.find(\".Rk-ShowHiddenNodes\").mouseleave( function() {\n _this.hideNodes();\n });\n });\n this.$.find(\".Rk-ShowHiddenNodes\").click( function() {\n _this.showNodes(false);\n _this.$.find(\".Rk-ShowHiddenNodes\").off( \"mouseleave\" ); \n });\n \n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n },\n redraw: function(options) {\n //console.log(\"view : \", this.model.toJSON());\n },\n initWithParams: function(){\n var _this = this;\n \n if (_this.options.view_force_autoscale){\n this.autoScale();\n } else {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); \n }\n \n if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n } else {\n _this.showNodes(false);\n }\n },\n saveView: function(){\n var _this = this;\n \n var offset = {\n \"x\": _this.offset.x,\n \"y\": _this.offset.y\n };\n \n _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );\n _this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n \n this.$.find(\".Rk-ZoomSetSaved\").show();\n \n _this.updateUrl();\n },\n addHiddenNode: function(_model){\n this.hideNode(_model);\n this.hiddenNodes.push(_model.id);\n this.updateUrl();\n },\n hideNode: function(_model){\n if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){\n this.renderer.getRepresentationByModel(_model).hide();\n }\n },\n hideNodes: function(){\n var _this = this;\n this.hiddenNodes.forEach(function(_id, index){\n var node = _this.renkan.project.get(\"nodes\").get(_id);\n if (typeof node !== 'undefined'){\n return _this.hideNode(_this.renkan.project.get(\"nodes\").get(_id));\n }else{\n _this.hiddenNodes.splice(index, 1);\n }\n });\n paper.view.draw();\n },\n showNodes: function(ghost){\n var _this = this;\n this.hiddenNodes.forEach(function(_id){\n _this.renderer.getRepresentationByModel(_this.renkan.project.get(\"nodes\").get(_id)).show(ghost);\n });\n if (!ghost){\n this.hiddenNodes = [];\n }\n paper.view.draw();\n },\n setScale: function(_newScale, _offset) {\n if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {\n this.scale = _newScale;\n if (_offset) {\n this.offset = _offset;\n }\n this.renderer.redraw();\n this.updateUrl();\n }\n },\n zoomOut: function() {\n var _newScale = this.scale * Math.SQRT1_2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));\n this.setScale( _newScale, _offset );\n },\n zoomIn: function() {\n var _newScale = this.scale * Math.SQRT2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));\n this.setScale( _newScale, _offset );\n },\n resizeZoom: function(deltaW, deltaH, _ratio) {\n var _newScale = this.scale * _ratio;\n var _offset = new paper.Point([\n (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),\n (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )\n ]);\n this.setScale( _newScale, _offset );\n },\n autoScale: function(force_view) {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny));\n this.initialScale = _scale;\n // Override calculated scale if asked\n if((typeof force_view !== \"undefined\") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){\n this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));\n }\n else{\n this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));\n }\n }\n if (nodes.length === 1) {\n this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y])));\n }\n },\n paperShift: function(_delta) {\n this.offset = this.offset.add(_delta);\n this.renderer.redraw();\n },\n updateUrl: function(){\n if(this.options.url_parameters && this.options.update_url){\n var result = {};\n var parameters = Backbone.history.getFragment().split('?');\n if (parameters.length > 1){\n parameters[1].split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000;\n\n if (this.renkan.project.get(\"views\").indexOf(this.model) > -1){\n result.viewIndex = this.renkan.project.get(\"views\").indexOf(this.model);\n if (result.viewIndex === this.renkan.project.get(\"views\").length - 1){\n result.viewIndex = -1;\n }\n } else {\n if (result.viewIndex){\n delete result.viewIndex;\n }\n }\n this.renkan.router.navigate(\"?\" + decodeURIComponent($.param(result)), {trigger: false, replace: true});\n }\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.showNodes(false);\n }\n }).value();\n\n return ViewRepr;\n\n});\n\n\n//Load modules and use them\nif( typeof require.config === \"function\" ) {\n require.config({\n paths: {\n 'jquery':'../lib/jquery/jquery',\n 'underscore':'../lib/lodash/lodash',\n 'filesaver' :'../lib/FileSaver/FileSaver',\n 'requtils':'require-utils',\n 'jquery-private':'jquery-private',\n 'ckeditor-core':'../lib/ckeditor/ckeditor',\n 'screenfull':'../lib/screenfull/screenfull-umd'\n },\n // JQuery config. cf: http://requirejs.org/docs/jquery.html#noconflictmap\n map: {\n '*': { 'jquery': 'jquery-private' },\n 'jquery-private': { 'jquery': 'jquery' }\n },\n shim: {\n 'ckeditor-core': {\n exports: 'CKEDITOR',\n }\n }\n });\n}\n\nrequire(['renderer/baserepresentation',\n 'renderer/basebutton',\n 'renderer/noderepr',\n 'renderer/edge',\n 'renderer/tempedge',\n 'renderer/baseeditor',\n 'renderer/nodeeditor',\n 'renderer/edgeeditor',\n 'renderer/nodebutton',\n 'renderer/nodeeditbutton',\n 'renderer/noderemovebutton',\n 'renderer/nodehidebutton',\n 'renderer/nodeshowbutton',\n 'renderer/noderevertbutton',\n 'renderer/nodelinkbutton',\n 'renderer/nodeenlargebutton',\n 'renderer/nodeshrinkbutton',\n 'renderer/edgeeditbutton',\n 'renderer/edgeremovebutton',\n 'renderer/edgerevertbutton',\n 'renderer/miniframe',\n 'renderer/scene',\n 'renderer/viewrepr'\n ], function(BaseRepresentation, BaseButton, NodeRepr, Edge, TempEdge, BaseEditor, NodeEditor, EdgeEditor, NodeButton, NodeEditButton, NodeRemoveButton, NodeHideButton, NodeShowButton, NodeRevertButton, NodeLinkButton, NodeEnlargeButton, NodeShrinkButton, EdgeEditButton, EdgeRemoveButton, EdgeRevertButton, MiniFrame, Scene, ViewRepr){\n\n 'use strict';\n\n var Rkns = window.Rkns;\n\n if(typeof Rkns.Renderer === \"undefined\"){\n Rkns.Renderer = {};\n }\n var Renderer = Rkns.Renderer;\n\n Renderer._BaseRepresentation = BaseRepresentation;\n Renderer._BaseButton = BaseButton;\n Renderer.Node = NodeRepr;\n Renderer.Edge = Edge;\n Renderer.View = ViewRepr;\n Renderer.TempEdge = TempEdge;\n Renderer._BaseEditor = BaseEditor;\n Renderer.NodeEditor = NodeEditor;\n Renderer.EdgeEditor = EdgeEditor;\n Renderer._NodeButton = NodeButton;\n Renderer.NodeEditButton = NodeEditButton;\n Renderer.NodeRemoveButton = NodeRemoveButton;\n Renderer.NodeHideButton = NodeHideButton;\n Renderer.NodeShowButton = NodeShowButton;\n Renderer.NodeRevertButton = NodeRevertButton;\n Renderer.NodeLinkButton = NodeLinkButton;\n Renderer.NodeEnlargeButton = NodeEnlargeButton;\n Renderer.NodeShrinkButton = NodeShrinkButton;\n Renderer.EdgeEditButton = EdgeEditButton;\n Renderer.EdgeRemoveButton = EdgeRemoveButton;\n Renderer.EdgeRevertButton = EdgeRevertButton;\n Renderer.MiniFrame = MiniFrame;\n Renderer.Scene = Scene;\n\n startRenkan();\n});\n\ndefine(\"main-renderer\", function(){});\n\n// Module o use with jquery to handle no conflict. cf: http://requirejs.org/docs/jquery.html#noconflictmap\ndefine('jquery-private',['jquery'], function (jq) {\n 'use strict';\n return jq.noConflict( true );\n});\n\n"]} \ No newline at end of file +{"version":3,"sources":["templates.js","../../js/main.js","../../js/router.js","../../js/dataloader.js","../../js/models.js","../../js/defaults.js","../../js/i18n.js","../../js/full-json.js","../../js/save-once.js","../../js/ldtjson-bin.js","../../js/list-bin.js","../../js/wikipedia-bin.js","paper-renderer.js"],"names":["this","obj","__t","__p","__e","_","escape","print","__j","call","arguments","Array","prototype","join","options","show_edge_tooltip_color","edge","color","uri","title","show_edge_tooltip_uri","short_uri","show_edge_tooltip_nodes","renkan","translate","from_color","shortenText","from_title","to_color","to_title","show_edge_tooltip_creator","has_creator","created_by_color","created_by_title","show_edge_editor_uri","properties","length","each","ontology","label","property","show_edge_editor_style","show_edge_editor_style_color","colorPicker","show_edge_editor_style_dash","dash","show_edge_editor_style_thickness","thickness","show_edge_editor_style_arrow","arrow","show_edge_editor_direction","show_edge_editor_nodes","show_edge_editor_creator","Rkns","Utils","getFullURL","image","description","static_url","url","show_bins","show_editor","show_node_tooltip_color","node","show_node_tooltip_uri","show_node_tooltip_description","show_node_tooltip_image","show_node_tooltip_creator","_id","get_youtube_id","regExp","match","get_vimeo_id","get_dailymotion_id","undefined","get_facebook_id","encodeURIComponent","video_id","show_node_editor_title_richtext","show_node_title_style","title_color","title_size","toFixed","show_node_editor_uri","change_types","types","type","charAt","toUpperCase","substring","show_node_editor_description","show_node_editor_description_richtext","show_node_editor_size","size","show_node_editor_style","show_node_editor_style_color","show_node_editor_style_dash","show_node_editor_style_thickness","show_node_editor_image","image_placeholder","clip_path","allow_image_upload","show_node_editor_creator","change_shapes","shapes","shape","show_top_bar","editor_mode","title_editable","project","get","show_user_list","show_user_color","user_color_editable","home_button_url","home_button_title","show_fullscreen_button","show_addnode_button","show_addedge_button","show_export_button","show_save_button","show_open_button","show_bookmarklet","show_search_field","resize","show_zoom","save_view","hide_nodes","root","$","jQuery","pickerColors","__renkans","_BaseBin","_renkan","_opts","find","hide","addClass","appendTo","title_icon_$","_this","attr","href","html","click","destroy","slideDown","resizeBins","refresh","count_$","title_$","main_$","auto_refresh","window","setInterval","detach","Renkan","push","defaults","templates","renkanJST","node_editor_templates","template","types_templates","value","key","property_files","f","getJSON","data","concat","read_only","router","Router","Models","Project","dataloader","DataLoader","Loader","setCurrentUser","user_id","user_name","addUser","current_user","renderer","redrawUsers","container","tabs","search_engines","current_user_list","UsersList","on","pickerClass","_tmpl","map","c","Renderer","Scene","search","_select","_input","_form","_search","_key","Search","getSearchTitle","className","getBgClass","_el","setSearchEngine","submit","val","search_engine","mouseenter","mouseleave","bins","_bin","Bin","elementDropped","_mainDiv","siblings","is","slideUp","_e","_t","_models","where","_model","highlightModel","mouseout","unhighlightAll","e","dragDrop","err","preventDefault","touch","originalEvent","changedTouches","off","canvas_$","offset","w","width","h","height","pageX","left","pageY","top","onMouseMove","div","document","createElement","appendChild","cloneNode","dropData","text/html","innerHTML","onMouseDown","onMouseUp","dataTransfer","setData","lastsearch","lastval","regexpFromTextOrArray","source","tab","render","_text","i18n","language","substr","onStatusChange","listClasses","split","classes","i","_d","outerHeight","css","getUUID4","replace","r","Math","random","v","toString","OriginEnum","o","Object","freeze","NONE","NODE_BUTTON","NODE_DOUBLE_CLICK","NODE_DROP_EXT","NODE_DROP_BIN","EDGE_BUTTON_BAR","EDGE_BUTTON_CIRCLE","getUID","pad","n","Date","ID_AUTO_INCREMENT","ID_BASE","getUTCFullYear","getUTCMonth","getUTCDate","_base","_n","_uidbase","test","img","Image","src","res","inherit","_baseClass","_callbefore","_class","_arg","apply","slice","_init","_initialized","extend","replaceText","makeReplaceFunc","l","k","charsrx","txt","toLowerCase","remrx","j","remsrc","charsub","getSource","inp","removeChars","String","fromCharCode","RegExp","_textOrArray","testrx","replacerx","isempty","_replace","text","_MIN_DRAG_DISTANCE","_NODE_BUTTON_WIDTH","_EDGE_BUTTON_INNER","_EDGE_BUTTON_OUTER","_CLICKMODE_ADDNODE","_CLICKMODE_STARTEDGE","_CLICKMODE_ENDEDGE","_NODE_SIZE_STEP","LN2","_MIN_SCALE","_MAX_SCALE","_MOUSEMOVE_RATE","_DOUBLETAP_DELAY","_DOUBLETAP_DISTANCE","_USER_PLACEHOLDER","default_user_color","_BOOKMARKLET_CODE","_maxlength","drawEditBox","_options","_coords","_path","_xmargin","_selector","tooltip_width","tooltip_padding","rect","getBoundingClientRect","container_rect","bottom","overflow-x","overflow-y","max-height","_height","_isLeft","x","paper","view","center","_left","tooltip_arrow_length","_right","_top","y","tooltip_margin","max","tooltip_arrow_width","min","_bottom","segments","point","add","fillColor","Color","Gradient","tooltip_top_color","tooltip_bottom_color","increaseBrightness","hex","percent","parseInt","g","b","Backbone","routes","","index","parameters","result","forEach","part","item","decodeURIComponent","trigger","converters","from1to2","len","nodes","style","edges","schema_version","dataConverters","convert","schemaVersionFrom","getSchemaVersion","schemaVersionTo","converterName","load","set","validate","guid","RenkanModel","RelationalModel","idAttribute","constructor","id","prepare","addReference","_propName","_list","_default","_element","User","toJSON","Node","relations","HasOne","relatedModel","created_by","position","Edge","from","to","View","isArray","zoom_level","hidden_nodes","RosterUser","blacklist","HasMany","reverseRelation","includeInJSON","_props","_user","findOrCreate","addNode","_node","addEdge","_edge","addView","_view","removeNode","remove","removeEdge","_project","users","views","_item","t","version","initialize","filter","json","clone","attributes","Model","Collection","omit","site_id","model","navigator","userLanguage","popup_editor","editor_panel","manual_save","size_bug_fix","force_resize","allow_double_click","double_click_open_url","simple_click_open_url","zoom_on_scroll","element_delete_delay","autoscale_padding","view_force_autoscale","view_show_hiddennodes","default_index_view","url_parameters","update_url","user_name_editable","show_minimap","minimap_width","minimap_height","minimap_padding","minimap_background_color","minimap_border_color","minimap_highlight_color","minimap_highlight_weight","buttons_background","buttons_label_color","buttons_label_font_size","ghost_opacity","default_dash_array","show_node_circles","clip_node_images","node_images_fill_mode","node_size_base","node_stroke_width","node_stroke_max_width","selected_node_stroke_width","selected_node_stroke_max_width","node_stroke_witdh_scale","node_title_size_min","node_title_size_max","node_title_size_step","node_fill_color","highlighted_node_fill_color","node_title_color","node_label_distance","node_label_max_length","label_untitled_nodes","default","video","edge_stroke_width","edge_stroke_max_width","selected_edge_stroke_width","selected_edge_stroke_max_width","edge_stroke_witdh_scale","edge_label_distance","edge_label_max_length","edge_arrow_length","edge_arrow_width","edge_arrow_max_width","edge_gap_in_bundles","highlighted_edge_color","label_untitled_edges","tooltip_border_color","tooltip_border_width","tooltip_opacity","richtext_editor_config","toolbarGroups","name","groups","removePlugins","show_node_editor_title","uploaded_image_max_kb","fr","Edit Node","Edit Edge","Title:","URI:","Description:","From:","To:","Image URL:","Choose Image File:","Full Screen","Add Node","Add Edge","Save Project","Open Project","Auto-save enabled","Connection lost","Created by:","Zoom In","Zoom Out","Edit","Remove","Cancel deletion","Link to another node","Enlarge","Shrink","Click on the background canvas to add a node","Click on a first node to start the edge","Click on a second node to complete the edge","Wikipedia","Wikipedia in ","French","English","Japanese","Untitled project","Lignes de Temps","Loading, please wait","Edge color:","Dash:","Thickness:","Arrow:","Node color:","Choose color","Change edge direction","Do you really wish to remove node ","Do you really wish to remove edge ","This file is not an image","Image size must be under ","Size:","KB","Choose from vocabulary:","SKOS Documentation properties","has note","has example","has definition","SKOS Semantic relations","has broader","has narrower","has related","Dublin Core Metadata","has contributor","covers","created by","has date","published by","has source","has subject","Dragged resource","Search the Web","Search in Bins","Close bin","Refresh bin","(untitled)","Select contents:","Drag items from this website, drop them in Renkan","Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.","Shapes available","Circle","Square","Diamond","Hexagone","Ellipse","Star","Cloud","Triangle","Polygon","Zoom Fit","Download Project","Save view","View saved view","Renkan 'Drag-to-Add' bookmarklet","(unknown user)","","Search in graph","Search in ","Show hidden nodes","Show neighbors","Hide","Fullscreen not supported by your browser","Title size:","Title color:","Video link","jsonIO","_proj","http_method","_load","loadingStatus","_data","saveStatus","_save","ajax","contentType","JSON","stringify","success","textStatus","jqXHR","_thrSave","throttle","setTimeout","changedAttributes","hasChanged","jsonIOSaveOnClick","_saveWarn","_onLeave","getdata","rx","matches","location","hash","beforeSend","_checkLeave","removeClass","save","hasClass","Ldt","ProjectBin","ldt_type","Resclass","console","error","tagTemplate","annotationTemplate","proj_id","project_id","ldt_platform","searchbase","highlight","convertTC","_ms","_res","_totalSeconds","abs","floor","_hours","_minutes","_seconds","_html","_projtitle","meta","count","tags","_tag","_title","htitle","encodedtitle","annotations","_annotation","_description","content","_duration","end","begin","_img","hdescription","start","duration","mediaid","media","annotationid","show","dataType","lang","_q","ResultsBin","segmentTemplate","max_results","highlightrx","objects","_segment","abstract","_begin","start_ts","_end","iri_id","element_id","format","q","limit","ResourceList","resultTemplate","list","trim","_match","langs","en","ja","query","_result","encodeURI","snippet","define","_BaseRepresentation","_renderer","_changeBinding","redraw","change","_removeBinding","removeRepresentation","defer","_selectBinding","select","_unselectBinding","unselect","_super","_func","moveTo","unhighlight","mousedown","mouseup","getUtils","getRenderer","requtils","BaseRepresentation","_BaseButton","_pos","sector","_newTarget","source_representation","cloud_path","builders","circle","getShape","Path","getImageShape","radius","rectangle","Rectangle","ellipse","polygon","RegularPolygon","diamond","d","SQRT2","rotate","star","cloud","path","scale","triangle","svg","ShapeBuilder","NodeRepr","node_layer","activate","buildShape","hidden","ghost","strokeWidth","h_ratio","labels_$","normal_buttons","NodeEditButton","NodeRemoveButton","NodeLinkButton","NodeEnlargeButton","NodeShrinkButton","NodeHideButton","NodeShowButton","pending_delete_buttons","NodeRevertButton","all_buttons","active_buttons","last_circle_radius","minimap","minimap_circle","__representation","miniframe","node_group","addChild","_getStrokeWidth","has","_getSelectedStrokeWidth","changed","shapeBuilder","sendToBack","_model_coords","Point","_baseRadius","exp","is_dragging","paper_coords","toPaperCoords","circle_radius","setSectorSize","node_image","subtract","image_delta","multiply","old_act_btn","opacity","dashArray","selected","isEditable","highlighted","clean_title","textContent","innerText","node_style","title-color","text_size","text_color","text_style","line-height","text_node","empty","append","_strokeWidth","_color","_dash","strokeColor","_pc","lastImage","showImage","minipos","toMinimapCoords","miniradius","minisize","Size","fitBounds","dontRedrawEdges","ed","repr","getRepresentationByModel","from_representation","to_representation","_image","image_cache","clipPath","hasClipPath","_clip","baseRadius","centerPoint","instructions","lastCoords","minX","Infinity","minY","maxX","maxY","transformCoords","tabc","relative","newCoords","parseFloat","isY","instr","coords","lineTo","cubicCurveTo","quadraticCurveTo","_raster","Raster","locked","Group","clipped","_circleClip","divide","insertAbove","paperShift","_delta","openEditor","removeRepresentationsOfType","_editor","addRepresentation","draw","clearTimeout","hide_timeout","_uri","showNeighbors","hideButtons","buttons_timeout","hideNeighbors","hide_delay","delay","indexNode","hiddenNodes","indexOf","splice","textToReplace","hlvalue","throttledPaperDraw","saveCoords","toModelCoords","_event","_isTouch","unselectAll","click_target","edge_layer","bundle","addToBundles","line","arrow_scale","pivot","arrow_angle","EdgeEditButton","EdgeRemoveButton","EdgeRevertButton","minimap_line","_getArrowScale","_opacity","_arrow_scale","_p0a","_p1a","_v","_r","_u","_ortho","_group_pos","getPosition","_p0b","_p1b","_a","angle","_textdelta","_handle","visible","handleIn","handleOut","bounds","_textpos","transform","-moz-transform","-webkit-transform","text_angle","reject","TempEdge","origin","_p0","_p1","end_pos","_c","_hitResult","hitTest","findTarget","_endDrag","_target","_destmodel","_BaseEditor","buttons_layer","editor_block","_pts","range","editor_$","BaseEditor","CKEditor","NodeEditor","readOnlyTemplate","_created_by","_template","_image_placeholder","_size","keys","editorInstance","inline","editorInstanceTitle","closeEditor","cleanEditor","focusManager","blur","onFieldChange","debounce","checkDirty","getData","resetDirty","assign","keyCode","files","FileReader","alert","onload","target","readAsDataURL","focus","_picker","hover","shiftSize","_newsize","shiftThickness","_oldThickness","_newThickness","shiftTitleSize","_oldTitleSize","_newTitleSize","_pickerTitle","step","titlehtml","EdgeEditor","_from_model","_to_model","BaseButton","_NodeButton","sectorInner","lastSectorInner","drawSector","startAngle","endAngle","imageName","NodeButton","delid","delete_list","time","valueOf","confirm","addHiddenNode","unset","_off","_point","addTempEdge","MiniFrame","filesaver","Screenfull","representations","notif_$","setup","totalScroll","mouse_down","selected_target","Layer","redrawActive","background_layer","topleft","bottomRight","cliprectangle","bundles","click_mode","_allowScroll","_originalScale","_zooming","_lastTapX","_lastTapY","_lastTap","icon_cache","imgname","throttledMouseMove","mousemove","mousewheel","onScroll","touchstart","_touches","touches","pow","onDoubleClick","touchmove","_newScale","_scaleRatio","_newOffset","setScale","touchend","onClick","dblclick","dragover","dragenter","dragleave","drop","parse","bindClick","selector","fname","evt","enabled","addEventListener","raw","fullscreenchange","widthAft","heightAft","viewSize","currentWidth","currentHeight","isFullscreen","onResize","newWidth","_width","newHeight","prevHeight","delta","prevWidth","fadeIn","fadeOut","mouseover","_thRedraw","addRepresentations","prop","_thRedrawUsers","history","fixSize","_params","setViewParameters","el","_delay","autoScale","$cpwrapper","$cplist","$this","rxs","_now","findWhere","delete_scheduled","rescaleMinimap","last","_repr","_inR","_outR","_startAngle","_endAngle","_padding","_imgname","_caption","_startRads","PI","_endRads","_startdx","sin","_startdy","cos","_startXIn","_startYIn","_startXOut","_startYOut","_enddx","_enddy","_endXIn","_endYIn","_endXOut","_endYOut","_centerR","_centerRads","_centerX","_centerY","_centerXIn","_centerXOut","_centerYIn","_centerYOut","_textX","_textY","arcTo","closed","PointText","characterStyle","fontSize","paragraphStyle","justification","_visible","_restPos","_grp","_imgdelta","_currentPos","_edgeRepr","_bundle","_er","_dir","savebtn","tip","redrawMiniframe","bottomright","_xx","_yy","_minx","_miny","_maxx","_maxy","_scale","at","_type","RendererType","_collection","userTemplate","allUsers","models","ulistHtml","$userpanel","$name","$cpitems","$colorsquare","$input","parent","background","_representation","_representations","_ratio","ratioH","ratioW","resizeZoom","_from","_origin","_tmpEdge","last_point","updateUrl","_scrolldelta","SQRT1_2","_open_uri_cb","_node_click_open_url","open","bind","defaultDropHandler","newNode","tweetdiv","_svgimgs","_svgpaths","_imgs","_as","fields","drop_enhancer","jsondata","drop_handler","_nodedata","fullScreen","toggle","addNodeBtn","addEdgeBtn","exportProject","projectJSON","projectId","fileNameToSaveAs","space_id","objId","idsMap","projectJSONStr","blob","Blob","isEmptyObject","validViewIndex","viewIndex","viewParams","params","viewsNodes","hideNodes","showNodes","_index","validIndex","foldBins","sizeAft","foldBinsButton","sizeBef","animate","ViewRepr","initialScale","initWithParams","saveView","hideNode","_offset","zoomOut","zoomIn","deltaW","deltaH","force_view","getFragment","round","navigate","param","require","config","paths","jquery","underscore","jquery-private","ckeditor-core","screenfull","*","shim","exports","startRenkan","jq","noConflict"],"mappings":"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","file":"renkan.min.js","sourcesContent":["this[\"renkanJST\"] = this[\"renkanJST\"] || {};\n\nthis[\"renkanJST\"][\"templates/colorpicker.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                    • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor_readonly.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                                                      \\n ×\\n ';\n if (options.show_edge_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (edge.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n__e(edge.title) +\n'\\n ';\n if (edge.uri) { ;\n__p += ' ';\n } ;\n__p += '\\n \\n

                                                                      \\n';\n if (options.show_edge_tooltip_uri && edge.uri) { ;\n__p += '\\n

                                                                      \\n ' +\n__e( edge.short_uri ) +\n'\\n

                                                                      \\n';\n } ;\n__p += '\\n

                                                                      ' +\n((__t = (edge.description)) == null ? '' : __t) +\n'

                                                                      \\n';\n if (options.show_edge_tooltip_nodes) { ;\n__p += '\\n

                                                                      \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                                                      \\n

                                                                      \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                                                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_tooltip_creator && edge.has_creator) { ;\n__p += '\\n

                                                                      \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                                                      \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/edgeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '

                                                                      \\n ×' +\n__e(renkan.translate(\"Edit Edge\")) +\n'\\n

                                                                      \\n

                                                                      \\n \\n \\n

                                                                      \\n';\n if (options.show_edge_editor_uri) { ;\n__p += '\\n

                                                                      \\n \\n \\n \\n

                                                                      \\n ';\n if (options.properties.length) { ;\n__p += '\\n

                                                                      \\n \\n \\n

                                                                      \\n';\n } } ;\n__p += '\\n';\n if (options.show_edge_editor_style) { ;\n__p += '\\n
                                                                      \\n ';\n if (options.show_edge_editor_style_color) { ;\n__p += '\\n
                                                                      \\n ' +\n__e(renkan.translate(\"Edge color:\")) +\n'\\n
                                                                      \\n ;\">\\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Edge') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                                                      \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_dash) { ;\n__p += '\\n
                                                                      \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_thickness) { ;\n__p += '\\n
                                                                      \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e( edge.thickness ) +\n'\\n +\\n
                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (options.show_edge_editor_style_arrow) { ;\n__p += '\\n
                                                                      \\n ' +\n__e(renkan.translate(\"Arrow:\")) +\n'\\n \\n
                                                                      \\n ';\n } ;\n__p += '\\n
                                                                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_direction) { ;\n__p += '\\n

                                                                      \\n ' +\n__e( renkan.translate(\"Change edge direction\") ) +\n'\\n

                                                                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_nodes) { ;\n__p += '\\n

                                                                      \\n ' +\n__e(renkan.translate(\"From:\")) +\n'\\n \\n ' +\n__e( shortenText(edge.from_title, 25) ) +\n'\\n

                                                                      \\n

                                                                      \\n ' +\n__e(renkan.translate(\"To:\")) +\n'\\n %-edge.to_color%>;\">\\n ' +\n__e( shortenText(edge.to_title, 25) ) +\n'\\n

                                                                      \\n';\n } ;\n__p += '\\n';\n if (options.show_edge_editor_creator && edge.has_creator) { ;\n__p += '\\n

                                                                      \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n ;\">\\n ' +\n__e( shortenText(edge.created_by_title, 25) ) +\n'\\n

                                                                      \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/annotationtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                    • \\n\\n \\n

                                                                      ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                                                      \\n

                                                                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                      \\n

                                                                      Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                                                      \\n
                                                                      \\n
                                                                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/segmenttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                    • \\n\\n \\n

                                                                      ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                                                      \\n

                                                                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                      \\n

                                                                      Start: ' +\n((__t = (start)) == null ? '' : __t) +\n', End: ' +\n((__t = (end)) == null ? '' : __t) +\n', Duration: ' +\n((__t = (duration)) == null ? '' : __t) +\n'

                                                                      \\n
                                                                      \\n
                                                                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/ldtjson-bin/tagtemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                    • \\n\\n \\n

                                                                      ' +\n((__t = (htitle)) == null ? '' : __t) +\n'

                                                                      \\n
                                                                      \\n
                                                                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/list-bin.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n__p += '
                                                                    • \\n';\n } ;\n__p += '\\n

                                                                      \\n ';\n if (url) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n ';\n if (url) { ;\n__p += '';\n } ;\n__p += '\\n

                                                                      \\n ';\n if (description) { ;\n__p += '\\n

                                                                      ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                      \\n ';\n } ;\n__p += '\\n ';\n if (image) { ;\n__p += '\\n
                                                                      \\n ';\n } ;\n__p += '\\n
                                                                    • \\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/main.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_bins) { ;\n__p += '\\n
                                                                      \\n
                                                                      \\n

                                                                      ' +\n__e( translate(\"Select contents:\")) +\n'

                                                                      \\n
                                                                      \\n \\n
                                                                      \\n
                                                                      \\n
                                                                        \\n
                                                                        \\n \\n
                                                                        \\n
                                                                        \\n \\n \\n
                                                                        \\n
                                                                          \\n
                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_editor) { ;\n__p += '\\n
                                                                          \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                                                          \\n';\n if (node.uri && options.show_node_tooltip_uri) { ;\n__p += '\\n

                                                                          \\n ' +\n__e(node.short_uri) +\n'\\n

                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_tooltip_description) { ;\n__p += '\\n

                                                                          ' +\n((__t = (node.description)) == null ? '' : __t) +\n'

                                                                          \\n';\n } ;\n__p += ' ';\n if (node.image && options.show_node_tooltip_image) { ;\n__p += '\\n \\n';\n } ;\n__p += ' ';\n if (node.has_creator && options.show_node_tooltip_creator) { ;\n__p += '\\n

                                                                          \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                                                          \\n';\n } ;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor_video.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n\nfunction get_youtube_id(url) {\n var regExp = /^.*(youtu\\.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/;\n var match = url.match(regExp);\n if (match && match[2].length == 11) {\n return match[2];\n } else {\n return false;\n }\n}\n\nfunction get_vimeo_id(url) {\n var regExp = /https?:\\/\\/(www\\.)?vimeo.com\\/(\\d+)($|\\/)/;\n \n var match = url.match(regExp);\n \n if (match){\n return match[2];\n } else {\n return false;\n }\n}\n\nfunction get_dailymotion_id(url) {\n var regExp = /^(?:(?:http|https):\\/\\/)?(?:www.)?(dailymotion\\.com|dai\\.ly)\\/((video\\/([^_]+))|(hub\\/([^_]+)|([^\\/_]+)))$/;\n\n var match = url.match(regExp);\n\n if (match) {\n if(match[4] !== undefined) {\n return match[4];\n }\n return match[2];\n }\n return false;\n}\n\nfunction get_facebook_id(url) {\n var regExp = /^https?:\\/\\/www\\.facebook\\.com\\/(?:video\\.php\\?v=\\d+|.*?\\/videos\\/\\d+)\\/?$/;\n \n var match = url.match(regExp);\n\n if (match) {\n return encodeURIComponent(url);\n }\n return false;\n}\n\n;\n__p += '\\n

                                                                          \\n ×\\n ';\n if (options.show_node_tooltip_color) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (node.uri) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ' +\n((__t = (node.title)) == null ? '' : __t) +\n'\\n ';\n if (node.uri) { ;\n__p += '';\n } ;\n__p += '\\n \\n

                                                                          \\n';\n if (node.uri && options.show_node_tooltip_uri) {\n var video_id = false;\n if(video_id = get_youtube_id(node.uri)) { ;\n__p += '\\n \\n

                                                                          ' +\n__e(renkan.translate(\"Link\")) +\n'

                                                                          \\n ';\n }\n else if(video_id = get_vimeo_id(node.uri)) { ;\n__p += '\\n \\n

                                                                          ' +\n__e(renkan.translate(\"Link\")) +\n'

                                                                          \\n ';\n }\n else if(video_id = get_dailymotion_id(node.uri)) { ;\n__p += '\\n \\n

                                                                          ' +\n__e(renkan.translate(\"Link\")) +\n'

                                                                          \\n ';\n }\n else if(video_id = get_facebook_id(node.uri)) { ;\n__p += '\\n \\n

                                                                          ' +\n__e(renkan.translate(\"Video link\")) +\n'

                                                                          \\n ';\n }\n else { ;\n__p += ' \\n \\n ';\n }\n }\n;\n__p += '\\n ' +\n__e(renkan.translate(\"Link to the node\")) +\n'\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/nodeeditor.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n //TODO: change class to id ;\n__p += '\\n

                                                                          \\n ×' +\n__e(renkan.translate(\"Edit Node\")) +\n'\\n

                                                                          \\n

                                                                          \\n \\n ';\n if (options.show_node_editor_title_richtext) { ;\n__p += '\\n

                                                                          ' +\n((__t = (node.title)) == null ? '' : __t) +\n'
                                                                          \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                                                          \\n';\n if (options.show_node_title_style) { ;\n__p += '\\n
                                                                          \\n
                                                                          \\n ' +\n__e(renkan.translate(\"Title color:\")) +\n'\\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Title') )) == null ? '' : __t) +\n'\\n
                                                                          \\n
                                                                          \\n ' +\n__e(renkan.translate(\"Title size:\")) +\n'\\n -\\n ' +\n__e(node.title_size.toFixed(1)) +\n'\\n +\\n
                                                                          \\n
                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_uri) { ;\n__p += '\\n

                                                                          \\n \\n \\n \\n

                                                                          \\n';\n } ;\n__p += ' ';\n if (options.change_types) { ;\n__p += '\\n

                                                                          \\n \\n \\n

                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_description) { ;\n__p += '\\n

                                                                          \\n \\n ';\n if (options.show_node_editor_description_richtext) { ;\n__p += '\\n

                                                                          ' +\n((__t = (node.description)) == null ? '' : __t) +\n'
                                                                          \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n

                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_size) { ;\n__p += '\\n

                                                                          \\n ' +\n__e(renkan.translate(\"Size:\")) +\n'\\n -\\n ' +\n__e(node.size) +\n'\\n +\\n

                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_style) { ;\n__p += '\\n
                                                                          \\n ';\n if (options.show_node_editor_style_color) { ;\n__p += '\\n
                                                                          \\n \\n ' +\n__e(renkan.translate(\"Node color:\")) +\n'\\n
                                                                          \\n \\n \\n \\n ' +\n((__t = ( renkan.colorPicker('Rk-Editor-ColorPicker-Node') )) == null ? '' : __t) +\n'\\n ' +\n__e( renkan.translate(\"Choose color\") ) +\n'\\n
                                                                          \\n
                                                                          \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_dash) { ;\n__p += '\\n
                                                                          \\n ' +\n__e(renkan.translate(\"Dash:\")) +\n'\\n \\n
                                                                          \\n ';\n } ;\n__p += '\\n ';\n if (options.show_node_editor_style_thickness) { ;\n__p += '\\n
                                                                          \\n ' +\n__e(renkan.translate(\"Thickness:\")) +\n'\\n -\\n ' +\n__e(node.thickness) +\n'\\n +\\n
                                                                          \\n ';\n } ;\n__p += '\\n
                                                                          \\n';\n } ;\n__p += ' ';\n if (options.show_node_editor_image) { ;\n__p += '\\n
                                                                          \\n
                                                                          \\n \\n ';\n if (node.clip_path) { ;\n__p += '\\n \\n \\n \\n ';\n };\n__p += '\\n
                                                                          \\n
                                                                          \\n

                                                                          \\n \\n

                                                                          \\n \\n \\n
                                                                          \\n

                                                                          \\n';\n if (options.allow_image_upload) { ;\n__p += '\\n

                                                                          \\n \\n \\n

                                                                          \\n';\n };\n\n } ;\n__p += ' ';\n if (options.show_node_editor_creator && node.has_creator) { ;\n__p += '\\n

                                                                          \\n ' +\n__e(renkan.translate(\"Created by:\")) +\n'\\n \\n ' +\n__e( shortenText(node.created_by_title, 25) ) +\n'\\n

                                                                          \\n';\n } ;\n__p += ' ';\n if (options.change_shapes) { ;\n__p += '\\n

                                                                          \\n \\n \\n

                                                                          \\n';\n } ;\n__p += '\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/scene.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\nwith (obj) {\n\n if (options.show_top_bar) { ;\n__p += '\\n
                                                                          \\n
                                                                          \\n ';\n if (!options.editor_mode || !options.title_editable) { ;\n__p += '\\n

                                                                          \\n ' +\n__e( project.get(\"title\") || translate(\"Untitled project\")) +\n'\\n

                                                                          \\n ';\n } else { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n ';\n if (options.show_user_list) { ;\n__p += '\\n
                                                                          \\n
                                                                          \\n ';\n if (options.show_user_color) { ;\n__p += '\\n
                                                                          \\n \\n ';\n if (options.user_color_editable) { ;\n__p += '\\n \\n ';\n } ;\n__p += '\\n \\n ';\n if (options.user_color_editable) { print(colorPicker('Rk-Editor-ColorPicker-User')) } ;\n__p += '\\n
                                                                          \\n ';\n } ;\n__p += '\\n <unknown user>\\n
                                                                          \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.home_button_url) {;\n__p += '\\n
                                                                            \\n \\n
                                                                            \\n
                                                                            \\n ' +\n__e( translate(options.home_button_title) ) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_fullscreen_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Full Screen\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.editor_mode) { ;\n__p += '\\n ';\n if (options.show_addnode_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Add Node\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_addedge_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Add Edge\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_save_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_open_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Open Project\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.show_bookmarklet) { ;\n__p += '\\n
                                                                            \\n \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Renkan \\'Drag-to-Add\\' bookmarklet\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n } else { ;\n__p += '\\n ';\n if (options.show_export_button) { ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ' +\n__e(translate(\"Download Project\")) +\n'\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n }; ;\n__p += '\\n ';\n if (options.show_search_field) { ;\n__p += '\\n
                                                                            \\n \\n
                                                                            \\n
                                                                            \\n ';\n } ;\n__p += '\\n
                                                                            \\n';\n } ;\n__p += '\\n
                                                                            \\n
                                                                            \\n
                                                                            \\n ';\n if (options.editor_mode && options.save_view) { ;\n__p += '\\n
                                                                            \\n ';\n } ;\n__p += '\\n ';\n if (options.save_view) { ;\n__p += '\\n
                                                                            \\n ';\n if (options.hide_nodes) { ;\n__p += '\\n \\t \\n ';\n } ;\n__p += ' \\n ';\n } ;\n__p += '\\n
                                                                            \\n ';\n } ;\n__p += '\\n \\n\\n';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/search.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                          • ' +\n((__t = ( title )) == null ? '' : __t) +\n'
                                                                          • ';\n\n}\nreturn __p\n};\n\nthis[\"renkanJST\"][\"templates/wikipedia-bin/resulttemplate.html\"] = function(obj) {\nobj || (obj = {});\nvar __t, __p = '', __e = _.escape;\nwith (obj) {\n__p += '
                                                                          • \\n\\n \\n

                                                                            \\n ' +\n((__t = (htitle)) == null ? '' : __t) +\n'\\n

                                                                            \\n

                                                                            ' +\n((__t = (hdescription)) == null ? '' : __t) +\n'

                                                                            \\n
                                                                          • \\n';\n\n}\nreturn __p\n};","/* Declaring the Renkan Namespace Rkns and Default values */\n\n(function(root) {\n\n \"use strict\";\n\n if (typeof root.Rkns !== \"object\") {\n root.Rkns = {};\n }\n\n var Rkns = root.Rkns;\n var $ = Rkns.$ = root.jQuery;\n var _ = Rkns._ = root._;\n\n Rkns.pickerColors = [\"#8f1919\", \"#a80000\", \"#d82626\", \"#ff0000\", \"#e87c7c\", \"#ff6565\", \"#f7d3d3\", \"#fecccc\",\n \"#8f5419\", \"#a85400\", \"#d87f26\", \"#ff7f00\", \"#e8b27c\", \"#ffb265\", \"#f7e5d3\", \"#fee5cc\",\n \"#8f8f19\", \"#a8a800\", \"#d8d826\", \"#feff00\", \"#e8e87c\", \"#feff65\", \"#f7f7d3\", \"#fefecc\",\n \"#198f19\", \"#00a800\", \"#26d826\", \"#00ff00\", \"#7ce87c\", \"#65ff65\", \"#d3f7d3\", \"#ccfecc\",\n \"#198f8f\", \"#00a8a8\", \"#26d8d8\", \"#00feff\", \"#7ce8e8\", \"#65feff\", \"#d3f7f7\", \"#ccfefe\",\n \"#19198f\", \"#0000a8\", \"#2626d8\", \"#0000ff\", \"#7c7ce8\", \"#6565ff\", \"#d3d3f7\", \"#ccccfe\",\n \"#8f198f\", \"#a800a8\", \"#d826d8\", \"#ff00fe\", \"#e87ce8\", \"#ff65fe\", \"#f7d3f7\", \"#feccfe\",\n \"#000000\", \"#242424\", \"#484848\", \"#6d6d6d\", \"#919191\", \"#b6b6b6\", \"#dadada\", \"#ffffff\"\n ];\n\n Rkns.__renkans = [];\n\n var _BaseBin = Rkns._BaseBin = function(_renkan, _opts) {\n if (typeof _renkan !== \"undefined\") {\n this.renkan = _renkan;\n this.renkan.$.find(\".Rk-Bin-Main\").hide();\n this.$ = Rkns.$('
                                                                          • ')\n .addClass(\"Rk-Bin\")\n .appendTo(_renkan.$.find(\".Rk-Bin-List\"));\n this.title_icon_$ = Rkns.$('')\n .addClass(\"Rk-Bin-Title-Icon\")\n .appendTo(this.$);\n\n var _this = this;\n\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Close bin\")\n })\n .addClass(\"Rk-Bin-Close\")\n .html('×')\n .appendTo(this.$)\n .click(function() {\n _this.destroy();\n if (!_renkan.$.find(\".Rk-Bin-Main:visible\").length) {\n _renkan.$.find(\".Rk-Bin-Main:last\").slideDown();\n }\n _renkan.resizeBins();\n return false;\n });\n Rkns.$('')\n .attr({\n href: \"#\",\n title: _renkan.translate(\"Refresh bin\")\n })\n .addClass(\"Rk-Bin-Refresh\")\n .appendTo(this.$)\n .click(function() {\n _this.refresh();\n return false;\n });\n this.count_$ = Rkns.$('
                                                                            ')\n .addClass(\"Rk-Bin-Count\")\n .appendTo(this.$);\n this.title_$ = Rkns.$('

                                                                            ')\n .addClass(\"Rk-Bin-Title\")\n .appendTo(this.$);\n this.main_$ = Rkns.$('
                                                                            ')\n .addClass(\"Rk-Bin-Main\")\n .appendTo(this.$)\n .html('

                                                                            ' + _renkan.translate(\"Loading, please wait\") + '

                                                                            ');\n this.title_$.html(_opts.title || '(new bin)');\n this.renkan.resizeBins();\n\n if (_opts.auto_refresh) {\n window.setInterval(function() {\n _this.refresh();\n }, _opts.auto_refresh);\n }\n }\n };\n\n _BaseBin.prototype.destroy = function() {\n this.$.detach();\n this.renkan.resizeBins();\n };\n\n /* Point of entry */\n\n var Renkan = Rkns.Renkan = function(_opts) {\n var _this = this;\n\n Rkns.__renkans.push(this);\n\n this.options = _.defaults(_opts, Rkns.defaults, {\n templates: _.defaults(_opts.templates, renkanJST) || renkanJST,\n node_editor_templates: _.defaults(_opts.node_editor_templates, Rkns.defaults.node_editor_templates)\n });\n this.template = this.options.templates['templates/main.html'];\n\n var types_templates = {};\n _.each(this.options.node_editor_templates, function(value, key) {\n types_templates[key] = _this.options.templates[value];\n delete _this.options.templates[value];\n });\n this.options.node_editor_templates = types_templates;\n\n _.each(this.options.property_files, function(f) {\n Rkns.$.getJSON(f, function(data) {\n _this.options.properties = _this.options.properties.concat(data);\n });\n });\n\n this.read_only = this.options.read_only || !this.options.editor_mode;\n\n this.router = new Rkns.Router();\n\n this.project = new Rkns.Models.Project();\n this.dataloader = new Rkns.DataLoader.Loader(this.project, this.options);\n\n this.setCurrentUser = function(user_id, user_name) {\n this.project.addUser({\n _id: user_id,\n title: user_name\n });\n this.current_user = user_id;\n this.renderer.redrawUsers();\n };\n\n if (typeof this.options.user_id !== \"undefined\") {\n this.current_user = this.options.user_id;\n }\n this.$ = Rkns.$(\"#\" + this.options.container);\n this.$\n .addClass(\"Rk-Main\")\n .html(this.template(this));\n\n this.tabs = [];\n this.search_engines = [];\n\n this.current_user_list = new Rkns.Models.UsersList();\n\n this.current_user_list.on(\"add remove\", function() {\n if (this.renderer) {\n this.renderer.redrawUsers();\n }\n });\n\n this.colorPicker = function(pickerClass) {\n var _tmpl = _this.options.templates['templates/colorpicker.html'];\n return '
                                                                              ' + Rkns.pickerColors.map(function(c) {\n return _tmpl({\n c: c\n });\n }).join(\"\") + '
                                                                            ';\n };\n\n if (this.options.show_editor) {\n this.renderer = new Rkns.Renderer.Scene(this);\n }\n\n if (!this.options.search.length) {\n this.$.find(\".Rk-Web-Search-Form\").detach();\n } else {\n var _tmpl = _this.options.templates['templates/search.html'],\n _select = this.$.find(\".Rk-Search-List\"),\n _input = this.$.find(\".Rk-Web-Search-Input\"),\n _form = this.$.find(\".Rk-Web-Search-Form\");\n _.each(this.options.search, function(_search, _key) {\n if (Rkns[_search.type] && Rkns[_search.type].Search) {\n _this.search_engines.push(new Rkns[_search.type].Search(_this, _search));\n }\n });\n _select.html(\n _(this.search_engines).map(function(_search, _key) {\n return _tmpl({\n key: _key,\n title: _search.getSearchTitle(),\n className: _search.getBgClass()\n });\n }).join(\"\")\n );\n _select.find(\"li\").click(function() {\n var _el = Rkns.$(this);\n _this.setSearchEngine(_el.attr(\"data-key\"));\n _form.submit();\n });\n _form.submit(function() {\n if (_input.val()) {\n var _search = _this.search_engine;\n _search.search(_input.val());\n }\n return false;\n });\n this.$.find(\".Rk-Search-Current\").mouseenter(\n function() {\n _select.slideDown();\n }\n );\n this.$.find(\".Rk-Search-Select\").mouseleave(\n function() {\n _select.hide();\n }\n );\n this.setSearchEngine(0);\n }\n _.each(this.options.bins, function(_bin) {\n if (Rkns[_bin.type] && Rkns[_bin.type].Bin) {\n _this.tabs.push(new Rkns[_bin.type].Bin(_this, _bin));\n }\n });\n\n var elementDropped = false;\n\n this.$.find(\".Rk-Bins\")\n .on(\"click\", \".Rk-Bin-Title,.Rk-Bin-Title-Icon\", function() {\n var _mainDiv = Rkns.$(this).siblings(\".Rk-Bin-Main\");\n if (_mainDiv.is(\":hidden\")) {\n _this.$.find(\".Rk-Bin-Main\").slideUp();\n _mainDiv.slideDown();\n }\n });\n\n if (this.options.show_editor) {\n\n this.$.find(\".Rk-Bins\").on(\"mouseover\", \".Rk-Bin-Item\", function(_e) {\n var _t = Rkns.$(this);\n if (_t && $(_t).attr(\"data-uri\")) {\n var _models = _this.project.get(\"nodes\").where({\n uri: $(_t).attr(\"data-uri\")\n });\n _.each(_models, function(_model) {\n _this.renderer.highlightModel(_model);\n });\n }\n }).mouseout(function() {\n _this.renderer.unhighlightAll();\n }).on(\"mousemove\", \".Rk-Bin-Item\", function(e) {\n try {\n this.dragDrop();\n } catch (err) {}\n }).on(\"touchstart\", \".Rk-Bin-Item\", function(e) {\n elementDropped = false;\n }).on(\"touchmove\", \".Rk-Bin-Item\", function(e) {\n e.preventDefault();\n var touch = e.originalEvent.changedTouches[0],\n off = _this.renderer.canvas_$.offset(),\n w = _this.renderer.canvas_$.width(),\n h = _this.renderer.canvas_$.height();\n if (touch.pageX >= off.left && touch.pageX < (off.left + w) && touch.pageY >= off.top && touch.pageY < (off.top + h)) {\n if (elementDropped) {\n _this.renderer.onMouseMove(touch, true);\n } else {\n elementDropped = true;\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n _this.renderer.dropData({\n \"text/html\": div.innerHTML\n }, touch);\n _this.renderer.onMouseDown(touch, true);\n }\n }\n }).on(\"touchend\", \".Rk-Bin-Item\", function(e) {\n if (elementDropped) {\n _this.renderer.onMouseUp(e.originalEvent.changedTouches[0], true);\n }\n elementDropped = false;\n }).on(\"dragstart\", \".Rk-Bin-Item\", function(e) {\n var div = document.createElement('div');\n div.appendChild(this.cloneNode(true));\n try {\n e.originalEvent.dataTransfer.setData(\"text/html\", div.innerHTML);\n } catch (err) {\n e.originalEvent.dataTransfer.setData(\"text\", div.innerHTML);\n }\n });\n\n }\n\n Rkns.$(window).resize(function() {\n _this.resizeBins();\n });\n\n var lastsearch = false,\n lastval = '';\n\n this.$.find(\".Rk-Bins-Search-Input\").on(\"change keyup paste input\", function() {\n var val = Rkns.$(this).val();\n if (val === lastval) {\n return;\n }\n var search = Rkns.Utils.regexpFromTextOrArray(val.length > 1 ? val : null);\n if (search.source === lastsearch) {\n return;\n }\n lastsearch = search.source;\n _.each(_this.tabs, function(tab) {\n tab.render(search);\n });\n\n });\n this.$.find(\".Rk-Bins-Search-Form\").submit(function() {\n return false;\n });\n };\n\n Renkan.prototype.translate = function(_text) {\n if (Rkns.i18n[this.options.language] && Rkns.i18n[this.options.language][_text]) {\n return Rkns.i18n[this.options.language][_text];\n }\n if (this.options.language.length > 2 && Rkns.i18n[this.options.language.substr(0, 2)] && Rkns.i18n[this.options.language.substr(0, 2)][_text]) {\n return Rkns.i18n[this.options.language.substr(0, 2)][_text];\n }\n return _text;\n };\n\n Renkan.prototype.onStatusChange = function() {\n this.renderer.onStatusChange();\n };\n\n Renkan.prototype.setSearchEngine = function(_key) {\n this.search_engine = this.search_engines[_key];\n this.$.find(\".Rk-Search-Current\").attr(\"class\", \"Rk-Search-Current \" + this.search_engine.getBgClass());\n var listClasses = this.search_engine.getBgClass().split(\" \");\n var classes = \"\";\n for (var i = 0; i < listClasses.length; i++) {\n classes += \".\" + listClasses[i];\n }\n this.$.find(\".Rk-Web-Search-Input.Rk-Search-Input\").attr(\"placeholder\", this.translate(\"Search in \") + this.$.find(\".Rk-Search-List \" + classes).html());\n };\n\n Renkan.prototype.resizeBins = function() {\n var _d = +this.$.find(\".Rk-Bins-Head\").outerHeight();\n this.$.find(\".Rk-Bin-Title:visible\").each(function() {\n _d += Rkns.$(this).outerHeight();\n });\n this.$.find(\".Rk-Bin-Main\").css({\n height: this.$.find(\".Rk-Bins\").height() - _d\n });\n };\n\n /* Utility functions */\n var getUUID4 = function() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n\n Rkns.Utils = {\n\n OriginEnum: (function(o) { return (Object.freeze && Object.freeze(o)) || o; }) ({\n NONE: 0,\n NODE_BUTTON: 1,\n NODE_DOUBLE_CLICK: 2,\n NODE_DROP_EXT: 3,\n NODE_DROP_BIN: 4,\n EDGE_BUTTON_BAR: 256,\n EDGE_BUTTON_CIRCLE: 512\n }),\n\n getUUID4: getUUID4,\n getUID: (function() {\n function pad(n) {\n return n < 10 ? '0' + n : n;\n }\n var _d = new Date(),\n ID_AUTO_INCREMENT = 0,\n ID_BASE = _d.getUTCFullYear() + '-' +\n pad(_d.getUTCMonth() + 1) + '-' +\n pad(_d.getUTCDate()) + '-' +\n getUUID4();\n return function(_base) {\n var _n = (++ID_AUTO_INCREMENT).toString(16),\n _uidbase = (typeof _base === \"undefined\" ? \"\" : _base + \"-\");\n while (_n.length < 4) {\n _n = '0' + _n;\n }\n return _uidbase + ID_BASE + '-' + _n;\n };\n })(),\n getFullURL: function(url) {\n\n if (typeof(url) === 'undefined' || url == null) {\n return \"\";\n }\n if (/https?:\\/\\//.test(url)) {\n return url;\n }\n var img = new Image();\n img.src = url;\n var res = img.src;\n img.src = null;\n return res;\n\n },\n inherit: function(_baseClass, _callbefore) {\n\n var _class = function(_arg) {\n if (typeof _callbefore === \"function\") {\n _callbefore.apply(this, Array.prototype.slice.call(arguments, 0));\n }\n _baseClass.apply(this, Array.prototype.slice.call(arguments, 0));\n if (typeof this._init === \"function\" && !this._initialized) {\n this._init.apply(this, Array.prototype.slice.call(arguments, 0));\n this._initialized = true;\n }\n };\n _.extend(_class.prototype, _baseClass.prototype);\n\n return _class;\n\n },\n regexpFromTextOrArray: (function() {\n var charsub = [\n '[aáàâä]',\n '[cç]',\n '[eéèêë]',\n '[iíìîï]',\n '[oóòôö]',\n '[uùûü]'\n ],\n removeChars = [\n String.fromCharCode(768), String.fromCharCode(769), String.fromCharCode(770), String.fromCharCode(771), String.fromCharCode(807),\n \"{\", \"}\", \"(\", \")\", \"[\", \"]\", \"【\", \"】\", \"、\", \"・\", \"‥\", \"。\", \"「\", \"」\", \"『\", \"』\", \"〜\", \":\", \"!\", \"?\", \" \",\n \",\", \" \", \";\", \"(\", \")\", \".\", \"*\", \"+\", \"\\\\\", \"?\", \"|\", \"{\", \"}\", \"[\", \"]\", \"^\", \"#\", \"/\"\n ],\n remsrc = \"[\\\\\" + removeChars.join(\"\\\\\") + \"]\",\n remrx = new RegExp(remsrc, \"gm\"),\n charsrx = _.map(charsub, function(c) {\n return new RegExp(c);\n });\n\n function replaceText(_text) {\n var txt = _text.toLowerCase().replace(remrx, \"\"),\n src = \"\";\n\n function makeReplaceFunc(l) {\n return function(k, v) {\n l = l.replace(charsrx[k], v);\n };\n }\n for (var j = 0; j < txt.length; j++) {\n if (j) {\n src += remsrc + \"*\";\n }\n var l = txt[j];\n _.each(charsub, makeReplaceFunc(l));\n src += l;\n }\n return src;\n }\n\n function getSource(inp) {\n switch (typeof inp) {\n case \"string\":\n return replaceText(inp);\n case \"object\":\n var src = '';\n _.each(inp, function(v) {\n var res = getSource(v);\n if (res) {\n if (src) {\n src += '|';\n }\n src += res;\n }\n });\n return src;\n }\n return '';\n }\n\n return function(_textOrArray) {\n var source = getSource(_textOrArray);\n if (source) {\n var testrx = new RegExp(source, \"im\"),\n replacerx = new RegExp('(' + source + ')', \"igm\");\n return {\n isempty: false,\n source: source,\n test: function(_t) {\n return testrx.test(_t);\n },\n replace: function(_text, _replace) {\n return _text.replace(replacerx, _replace);\n }\n };\n } else {\n return {\n isempty: true,\n source: '',\n test: function() {\n return true;\n },\n replace: function(_text) {\n return text;\n }\n };\n }\n };\n })(),\n /* The minimum distance (in pixels) the mouse has to move to consider an element was dragged */\n _MIN_DRAG_DISTANCE: 2,\n /* Distance between the inner and outer radius of buttons that appear when hovering on a node */\n _NODE_BUTTON_WIDTH: 40,\n\n _EDGE_BUTTON_INNER: 2,\n _EDGE_BUTTON_OUTER: 40,\n /* Constants used to know if a specific action is to be performed when clicking on the canvas */\n _CLICKMODE_ADDNODE: 1,\n _CLICKMODE_STARTEDGE: 2,\n _CLICKMODE_ENDEDGE: 4,\n /* Node size step: Used to calculate the size change when clicking the +/- buttons */\n _NODE_SIZE_STEP: Math.LN2 / 4,\n _MIN_SCALE: 1 / 20,\n _MAX_SCALE: 20,\n _MOUSEMOVE_RATE: 80,\n _DOUBLETAP_DELAY: 800,\n /* Maximum distance in pixels (squared, to reduce calculations)\n * between two taps when double-tapping on a touch terminal */\n _DOUBLETAP_DISTANCE: 20 * 20,\n /* A placeholder so a default colour is displayed when a node has a null value for its user property */\n _USER_PLACEHOLDER: function(_renkan) {\n return {\n color: _renkan.options.default_user_color,\n title: _renkan.translate(\"(unknown user)\"),\n get: function(attr) {\n return this[attr] || false;\n }\n };\n },\n /* The code for the \"Drag and Add Bookmarklet\", slightly minified and with whitespaces removed, though\n * it doesn't seem that it's still a requirement in newer browsers (i.e. the ones compatibles with canvas drawing)\n */\n _BOOKMARKLET_CODE: function(_renkan) {\n return \"(function(a,b,c,d,e,f,h,i,j,k,l,m,n,o,p,q,r){a=document;b=a.body;c=a.location.href;j='draggable';m='text/x-iri-';d=a.createElement('div');d.innerHTML='\" +\n _renkan.translate(\"Drag items from this website, drop them in Renkan\").replace(/ /g, \"_\") +\n \"

                                                                            '.replace(/_/g,String.fromCharCode(32));b.appendChild(d);e=[{r:/https?:\\\\/\\\\/[^\\\\/]*twitter\\\\.com\\\\//,s:'.tweet',n:'twitter'},{r:/https?:\\\\/\\\\/[^\\\\/]*google\\\\.[^\\\\/]+\\\\//,s:'.g',n:'google'},{r:/https?:\\\\/\\\\/[^\\\\/]*lemonde\\\\.fr\\\\//,s:'[data-vr-contentbox]',n:'lemonde'}];f=false;e.forEach(function(g){if(g.r.test(c)){f=g;}});if(f){h=function(){Array.prototype.forEach.call(a.querySelectorAll(f.s),function(i){i[j]=true;k=i.style;k.borderWidth='2px';k.borderColor='#909';k.borderStyle='solid';k.backgroundColor='rgba(200,0,180,.1)';})};window.setInterval(h,500);h();};a.addEventListener('dragstart',function(k){l=k.dataTransfer;l.setData(m+'source-uri',c);l.setData(m+'source-title',a.title);n=k.target;if(f){o=n;while(!o.attributes[j]){o=o.parentNode;if(o==b){break;}}}if(f&&o.attributes[j]){p=o.cloneNode(true);l.setData(m+'specific-site',f.n)}else{q=a.getSelection();if(q.type==='Range'||!q.type){p=q.getRangeAt(0).cloneContents();}else{p=n.cloneNode();}}r=a.createElement('div');r.appendChild(p);l.setData('text/x-iri-selected-text',r.textContent.trim());l.setData('text/x-iri-selected-html',r.innerHTML);},false);})();\";\n },\n /* Shortens text to the required length then adds ellipsis */\n shortenText: function(_text, _maxlength) {\n return (_text.length > _maxlength ? (_text.substr(0, _maxlength) + '…') : _text);\n },\n /* Drawing an edit box with an arrow and positioning the edit box according to the position of the node/edge being edited\n * Called by Rkns.Renderer.NodeEditor and Rkns.Renderer.EdgeEditor */\n drawEditBox: function(_options, _coords, _path, _xmargin, _selector, _renkan) {\n _selector.css({\n width: (_options.tooltip_width - 2 * _options.tooltip_padding)\n });\n \n var rect = _selector[0].getBoundingClientRect();\n var container_rect = _renkan.$[0].getBoundingClientRect();\n\n if(rect.bottom > (container_rect.bottom - 2 * _options.tooltip_padding - 10)) {\n _selector.css({\n 'overflow-x': 'hidden',\n 'overflow-y': 'scroll',\n 'max-height':(container_rect.bottom - 2 * _options.tooltip_padding - 5 - rect.top) + 'px'\n });\n }\n\n var _height = _selector.outerHeight() + 2 * _options.tooltip_padding + 5,\n _isLeft = (_coords.x < paper.view.center.x ? 1 : -1),\n _left = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length),\n _right = _coords.x + _isLeft * (_xmargin + _options.tooltip_arrow_length + _options.tooltip_width),\n _top = _coords.y - _height / 2;\n if (_top + _height > (paper.view.size.height - _options.tooltip_margin)) {\n _top = Math.max(paper.view.size.height - _options.tooltip_margin, _coords.y + _options.tooltip_arrow_width / 2) - _height;\n }\n if (_top < _options.tooltip_margin) {\n _top = Math.min(_options.tooltip_margin, _coords.y - _options.tooltip_arrow_width / 2);\n }\n var _bottom = _top + _height;\n /* jshint laxbreak:true */\n _path.segments[0].point = _path.segments[7].point = _coords.add([_isLeft * _xmargin, 0]);\n _path.segments[1].point.x = _path.segments[2].point.x = _path.segments[5].point.x = _path.segments[6].point.x = _left;\n _path.segments[3].point.x = _path.segments[4].point.x = _right;\n _path.segments[2].point.y = _path.segments[3].point.y = _top;\n _path.segments[4].point.y = _path.segments[5].point.y = _bottom;\n _path.segments[1].point.y = _coords.y - _options.tooltip_arrow_width / 2;\n _path.segments[6].point.y = _coords.y + _options.tooltip_arrow_width / 2;\n _path.fillColor = new paper.Color(new paper.Gradient([_options.tooltip_top_color, _options.tooltip_bottom_color]), [0, _top], [0, _bottom]);\n\n _selector.css({\n left: (_options.tooltip_padding + Math.min(_left, _right)),\n top: (_options.tooltip_padding + _top)\n });\n \n return _path;\n },\n // from http://stackoverflow.com/a/6444043\n increaseBrightness: function (hex, percent){\n // strip the leading # if it's there\n hex = hex.replace(/^\\s*#|\\s*$/g, '');\n\n // convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`\n if(hex.length === 3){\n hex = hex.replace(/(.)/g, '$1$1');\n }\n\n var r = parseInt(hex.substr(0, 2), 16),\n g = parseInt(hex.substr(2, 2), 16),\n b = parseInt(hex.substr(4, 2), 16);\n\n return '#' +\n ((0|(1<<8) + r + (256 - r) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + g + (256 - g) * percent / 100).toString(16)).substr(1) +\n ((0|(1<<8) + b + (256 - b) * percent / 100).toString(16)).substr(1);\n }\n };\n})(window);\n\n/* END main.js */\n","(function(root) {\n \"use strict\";\n \n var Backbone = root.Backbone;\n \n var Router = root.Rkns.Router = Backbone.Router.extend({\n routes: {\n '': 'index'\n },\n \n index: function (parameters) {\n \n var result = {};\n if (parameters !== null){\n parameters.split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n this.trigger('router', result); \n } \n });\n\n})(window);","(function(root) {\n\n \"use strict\";\n\n var DataLoader = root.Rkns.DataLoader = {\n converters: {\n from1to2: function(data) {\n\n var i, len;\n if(typeof data.nodes !== 'undefined') {\n for(i=0, len=data.nodes.length; i 1 ? options.offset[1]\n : options.offset[0];\n }\n else if (options.offset.x != null) {\n offset.x = options.offset.x;\n offset.y = options.offset.y;\n }\n options.offset = offset;\n }\n return options;\n },\n toJSON : function() {\n return {\n _id : this.get('_id'),\n zoom_level : this.get('zoom_level'),\n offset : this.get('offset'),\n title : this.get('title'),\n description : this.get('description'),\n created_by : this.get('created_by') ? this.get('created_by')\n .get('_id') : null,\n hidden_nodes: this.get('hidden_nodes')\n // Don't need project id\n };\n }\n });\n\n // PROJECT\n var Project = Models.Project = RenkanModel.extend({\n schema_version : '2',\n type : 'project',\n blacklist : [ 'saveStatus', 'loadingStatus'],\n relations : [ {\n type : Backbone.HasMany,\n key : 'users',\n relatedModel : User,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'nodes',\n relatedModel : Node,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'edges',\n relatedModel : Edge,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n }, {\n type : Backbone.HasMany,\n key : 'views',\n relatedModel : View,\n reverseRelation : {\n key : 'project',\n includeInJSON : '_id'\n }\n } ],\n addUser : function(_props, _options) {\n _props.project = this;\n var _user = User.findOrCreate(_props);\n this.get('users').push(_user, _options);\n return _user;\n },\n addNode : function(_props, _options) {\n _props.project = this;\n var _node = Node.findOrCreate(_props);\n this.get('nodes').push(_node, _options);\n return _node;\n },\n addEdge : function(_props, _options) {\n _props.project = this;\n var _edge = Edge.findOrCreate(_props);\n this.get('edges').push(_edge, _options);\n return _edge;\n },\n addView : function(_props, _options) {\n _props.project = this;\n // TODO: check if need to replace with create only\n var _view = View.findOrCreate(_props);\n // TODO: Should we remember only one view?\n this.get('views').push(_view, _options);\n return _view;\n },\n removeNode : function(_model) {\n this.get('nodes').remove(_model);\n },\n removeEdge : function(_model) {\n this.get('edges').remove(_model);\n },\n validate : function(options) {\n var _project = this;\n _.each(\n [].concat(options.users, options.nodes, options.edges,options.views),\n function(_item) {\n if (_item) {\n _item.project = _project;\n }\n }\n );\n },\n getSchemaVersion : function(data) {\n var t = data;\n if(typeof(t) === 'undefined') {\n t = this;\n }\n var version = t.schema_version;\n if(!version) {\n return 1;\n }\n else {\n return version;\n }\n },\n // Add event handler to remove edges when a node is removed\n initialize : function() {\n var _this = this;\n this.on('remove:nodes', function(_node) {\n _this.get('edges').remove(\n _this.get('edges').filter(\n function(_edge) {\n return _edge.get('from') === _node ||\n _edge.get('to') === _node;\n }));\n });\n },\n toJSON : function() {\n var json = _.clone(this.attributes);\n for ( var attr in json) {\n if ((json[attr] instanceof Backbone.Model) ||\n (json[attr] instanceof Backbone.Collection) ||\n (json[attr] instanceof RenkanModel)) {\n json[attr] = json[attr].toJSON();\n }\n }\n return _.omit(json, this.blacklist);\n }\n });\n\n var RosterUser = Models.RosterUser = Backbone.Model\n .extend({\n type : 'roster_user',\n idAttribute : '_id',\n\n constructor : function(options) {\n\n if (typeof options !== 'undefined') {\n options._id = options._id ||\n options.id ||\n Models.getUID(this);\n options.title = options.title || '(untitled ' + this.type + ')';\n options.description = options.description || '';\n options.uri = options.uri || '';\n options.project = options.project || null;\n options.site_id = options.site_id || 0;\n\n if (typeof this.prepare === 'function') {\n options = this.prepare(options);\n }\n }\n Backbone.Model.prototype.constructor.call(this, options);\n },\n\n validate : function() {\n if (!this.type) {\n return 'object has no type';\n }\n },\n\n prepare : function(options) {\n options.color = options.color || '#666666';\n return options;\n },\n\n toJSON : function() {\n return {\n _id : this.get('_id'),\n title : this.get('title'),\n uri : this.get('uri'),\n description : this.get('description'),\n color : this.get('color'),\n project : (this.get('project') != null) ? this.get(\n 'project').get('id') : null,\n site_id : this.get('site_id')\n };\n }\n });\n\n var UsersList = Models.UsersList = Backbone.Collection.extend({\n model : RosterUser\n });\n\n})(window);\n","Rkns.defaults = {\n\n language: (navigator.language || navigator.userLanguage || \"en\"),\n /* GUI Language */\n container: \"renkan\",\n /* GUI Container DOM element ID */\n search: [],\n /* List of Search Engines */\n bins: [],\n /* List of Bins */\n static_url: \"\",\n /* URL for static resources */\n popup_editor: true,\n /* show the node editor as a popup inside the renkan view */\n editor_panel: 'editor-panel',\n /* GUI continer DOM element ID of the editor panel */\n show_bins: true,\n /* Show bins in left column */\n properties: [],\n /* Semantic properties for edges */\n show_editor: true,\n /* Show the graph editor... Setting this to \"false\" only shows the bins part ! */\n read_only: false,\n /* Allows editing of renkan without changing the rest of the GUI. Can be switched on/off on the fly to block/enable editing */\n editor_mode: true,\n /* Switch for Publish/Edit GUI. If editor_mode is false, read_only will be true. */\n manual_save: false,\n /* In snapshot mode, clicking on the floppy will save a snapshot. Otherwise, it will show the connection status */\n show_top_bar: true,\n /* Show the top bar, (title, buttons, users) */\n default_user_color: \"#303030\",\n size_bug_fix: false,\n /* Resize the canvas after load (fixes a bug on iPad and FF Mac) */\n force_resize: false,\n allow_double_click: true,\n /* Allows Double Click to create a node on an empty background */\n double_click_open_url: true,\n /* In read_only mode open node uri in new window with a double click */\n simple_click_open_url: false,\n /* In read_only mode open node uri in new window with a simple click (do not disable the double click) */\n zoom_on_scroll: true,\n /* Allows to use the scrollwheel to zoom */\n element_delete_delay: 0,\n /* Delay between clicking on the bin on an element and really deleting it\n Set to 0 for delete confirm */\n autoscale_padding: 50,\n resize: true,\n\n /* zoom options */\n show_zoom: true,\n /* show zoom buttons */\n save_view: true,\n /* show buttons to save view */\n view_force_autoscale: true,\n /* Force autoscale when the Renkan is loaded */\n view_show_hiddennodes: true,\n /* Show all the node when the Renkan is loaded */\n default_index_view: -1,\n\n /* URL parsing */\n url_parameters: true,\n /* accept or not hash parameters in the url */\n update_url: true,\n /* update the url each time the paper shift or on zoom in/out, with the serialized view (offset and scale) */\n /* Considered as false if url_parameters is false */\n\n\n /* TOP BAR BUTTONS */\n show_search_field: true,\n show_user_list: true,\n /* show the user list */\n user_name_editable: true,\n /* allow the edition of the user name */\n user_color_editable: true,\n /* allow the edition of the user color */\n title_editable: true,\n /* allow the edition of the renkan title */\n show_user_color: true,\n /* show user colors in the list */\n show_save_button: true,\n show_export_button: true,\n show_open_button: false,\n show_addnode_button: true,\n show_addedge_button: true,\n show_bookmarklet: true,\n show_fullscreen_button: true,\n home_button_url: false,\n home_button_title: \"Home\",\n\n /* MINI-MAP OPTIONS */\n\n show_minimap: true,\n /* Show a small map at the bottom right */\n minimap_width: 160,\n minimap_height: 120,\n minimap_padding: 20,\n minimap_background_color: \"#ffffff\",\n minimap_border_color: \"#cccccc\",\n minimap_highlight_color: \"#ffff00\",\n minimap_highlight_weight: 5,\n\n\n /* EDGE/NODE COMMON OPTIONS */\n\n buttons_background: \"#202020\",\n buttons_label_color: \"#c000c0\",\n buttons_label_font_size: 9,\n\n ghost_opacity : 0.3,\n /* opacity when the hidden element is revealed */\n default_dash_array : [4, 5],\n /* dash line genometry */\n\n /* NODE DISPLAY OPTIONS */\n\n show_node_circles: true,\n /* Show circles for nodes */\n clip_node_images: true,\n /* Constraint node images to circles */\n node_images_fill_mode: false,\n /* Set to false for \"letterboxing\" (height/width of node adapted to show full image)\n Set to true for \"crop\" (adapted to fill circle) */\n node_size_base: 25,\n node_stroke_width: 2,\n node_stroke_max_width: 12,\n selected_node_stroke_width: 4,\n selected_node_stroke_max_width: 24,\n node_stroke_witdh_scale: 5,\n node_title_size_min: 0,\n /* minimum relative size for node title (in graph) */\n node_title_size_max: 5,\n /* maximum relative size for node title (in graph) */\n node_title_size_step: 0.1,\n /* step for relative size for node title (in graph) */\n node_fill_color: \"#ffffff\",\n /* default color to fill node background */\n highlighted_node_fill_color: \"#ffff00\",\n /* default color to fill highlighted node background */\n node_title_color: \"#000000\",\n /* default title color */\n node_label_distance: 5,\n /* Vertical distance between node and label */\n node_label_max_length: 60,\n /* Maximum displayed text length */\n label_untitled_nodes: \"(untitled)\",\n /* Label to display on untitled nodes */\n hide_nodes: true,\n /* allow hide/show nodes */\n change_shapes: true,\n /* Change shapes enabled */\n change_types: true,\n /* Change type enabled */\n\n /* NODE EDITOR TEMPLATE*/\n\n node_editor_templates: {\n \"default\": \"templates/nodeeditor_readonly.html\",\n \"video\": \"templates/nodeeditor_video.html\"\n },\n\n /* EDGE DISPLAY OPTIONS */\n\n edge_stroke_width: 2,\n edge_stroke_max_width: 12,\n selected_edge_stroke_width: 4,\n selected_edge_stroke_max_width: 24,\n edge_stroke_witdh_scale: 5,\n\n edge_label_distance: 0,\n edge_label_max_length: 20,\n edge_arrow_length: 18,\n edge_arrow_width: 12,\n edge_arrow_max_width: 32,\n edge_gap_in_bundles: 12,\n highlighted_edge_color: \"#ffff00\",\n label_untitled_edges: \"\",\n\n /* CONTEXTUAL DISPLAY (TOOLTIP OR EDITOR) OPTIONS */\n\n tooltip_width: 275,\n tooltip_padding: 10,\n tooltip_margin: 15,\n tooltip_arrow_length : 20,\n tooltip_arrow_width : 40,\n tooltip_top_color: \"#f0f0f0\",\n tooltip_bottom_color: \"#d0d0d0\",\n tooltip_border_color: \"#808080\",\n tooltip_border_width: 1,\n tooltip_opacity: 0.8,\n\n richtext_editor_config: {\n toolbarGroups: [\n { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n { name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n '/',\n\t { name: 'styles'},\n ],\n removePlugins : 'colorbutton,find,flash,font,forms,iframe,image,newpage,smiley,specialchar,stylescombo,templates',\n },\n\n /* NODE EDITOR OPTIONS */\n\n show_node_title_style: true,\n show_node_editor_uri: true,\n show_node_editor_title: true,\n show_node_editor_title_richtext: true,\n show_node_editor_description: true,\n show_node_editor_description_richtext: true,\n show_node_editor_size: true,\n show_node_editor_style: true, // show node title style editor\n show_node_editor_style_color: true,\n show_node_editor_style_dash: true,\n show_node_editor_style_thickness: true,\n show_node_editor_image: true,\n show_node_editor_creator: true,\n allow_image_upload: true,\n uploaded_image_max_kb: 500,\n\n\n /* NODE TOOLTIP OPTIONS */\n\n show_node_tooltip_uri: true,\n show_node_tooltip_description: true,\n show_node_tooltip_color: true,\n show_node_tooltip_image: true,\n show_node_tooltip_creator: true,\n\n /* EDGE EDITOR OPTIONS */\n\n show_edge_editor_uri: true,\n show_edge_editor_style: true,\n show_edge_editor_style_color: true,\n show_edge_editor_style_dash: true,\n show_edge_editor_style_thickness: true,\n show_edge_editor_style_arrow: true,\n show_edge_editor_direction: true,\n show_edge_editor_nodes: true,\n show_edge_editor_creator: true,\n\n /* EDGE TOOLTIP OPTIONS */\n\n show_edge_tooltip_uri: true,\n show_edge_tooltip_color: true,\n show_edge_tooltip_nodes: true,\n show_edge_tooltip_creator: true,\n\n};\n","Rkns.i18n = {\n fr: {\n \"Edit Node\": \"Édition d’un nœud\",\n \"Edit Edge\": \"Édition d’un lien\",\n \"Title:\": \"Titre :\",\n \"URI:\": \"URI :\",\n \"Description:\": \"Description :\",\n \"From:\": \"De :\",\n \"To:\": \"Vers :\",\n \"Image\": \"Image\",\n \"Image URL:\": \"URL d'Image\",\n \"Choose Image File:\": \"Choisir un fichier image\",\n \"Full Screen\": \"Mode plein écran\",\n \"Add Node\": \"Ajouter un nœud\",\n \"Add Edge\": \"Ajouter un lien\",\n \"Save Project\": \"Enregistrer le projet\",\n \"Open Project\": \"Ouvrir un projet\",\n \"Auto-save enabled\": \"Enregistrement automatique activé\",\n \"Connection lost\": \"Connexion perdue\",\n \"Created by:\": \"Créé par :\",\n \"Zoom In\": \"Agrandir l’échelle\",\n \"Zoom Out\": \"Rapetisser l’échelle\",\n \"Edit\": \"Éditer\",\n \"Remove\": \"Supprimer\",\n \"Cancel deletion\": \"Annuler la suppression\",\n \"Link to another node\": \"Créer un lien\",\n \"Enlarge\": \"Agrandir\",\n \"Shrink\": \"Rétrécir\",\n \"Click on the background canvas to add a node\": \"Cliquer sur le fond du graphe pour rajouter un nœud\",\n \"Click on a first node to start the edge\": \"Cliquer sur un premier nœud pour commencer le lien\",\n \"Click on a second node to complete the edge\": \"Cliquer sur un second nœud pour terminer le lien\",\n \"Wikipedia\": \"Wikipédia\",\n \"Wikipedia in \": \"Wikipédia en \",\n \"French\": \"Français\",\n \"English\": \"Anglais\",\n \"Japanese\": \"Japonais\",\n \"Untitled project\": \"Projet sans titre\",\n \"Lignes de Temps\": \"Lignes de Temps\",\n \"Loading, please wait\": \"Chargement en cours, merci de patienter\",\n \"Edge color:\": \"Couleur :\",\n \"Dash:\": \"Point. :\",\n \"Thickness:\": \"Epaisseur :\",\n \"Arrow:\": \"Flèche :\",\n \"Node color:\": \"Couleur :\",\n \"Choose color\": \"Choisir une couleur\",\n \"Change edge direction\": \"Changer le sens du lien\",\n \"Do you really wish to remove node \": \"Voulez-vous réellement supprimer le nœud \",\n \"Do you really wish to remove edge \": \"Voulez-vous réellement supprimer le lien \",\n \"This file is not an image\": \"Ce fichier n'est pas une image\",\n \"Image size must be under \": \"L'image doit peser moins de \",\n \"Size:\": \"Taille :\",\n \"KB\": \"ko\",\n \"Choose from vocabulary:\": \"Choisir dans un vocabulaire :\",\n \"SKOS Documentation properties\": \"SKOS: Propriétés documentaires\",\n \"has note\": \"a pour note\",\n \"has example\": \"a pour exemple\",\n \"has definition\": \"a pour définition\",\n \"SKOS Semantic relations\": \"SKOS: Relations sémantiques\",\n \"has broader\": \"a pour concept plus large\",\n \"has narrower\": \"a pour concept plus étroit\",\n \"has related\": \"a pour concept apparenté\",\n \"Dublin Core Metadata\": \"Métadonnées Dublin Core\",\n \"has contributor\": \"a pour contributeur\",\n \"covers\": \"couvre\",\n \"created by\": \"créé par\",\n \"has date\": \"a pour date\",\n \"published by\": \"édité par\",\n \"has source\": \"a pour source\",\n \"has subject\": \"a pour sujet\",\n \"Dragged resource\": \"Ressource glisée-déposée\",\n \"Search the Web\": \"Rechercher en ligne\",\n \"Search in Bins\": \"Rechercher dans les chutiers\",\n \"Close bin\": \"Fermer le chutier\",\n \"Refresh bin\": \"Rafraîchir le chutier\",\n \"(untitled)\": \"(sans titre)\",\n \"Select contents:\": \"Sélectionner des contenus :\",\n \"Drag items from this website, drop them in Renkan\": \"Glissez des éléments de ce site web vers Renkan\",\n \"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\": \"Glissez ce bouton vers votre barre de favoris. Ensuite, depuis un site tiers, cliquez dessus pour activer 'Drag-to-Add' puis glissez des éléments de ce site vers Renkan\",\n \"Shapes available\": \"Formes disponibles\",\n \"Circle\": \"Cercle\",\n \"Square\": \"Carré\",\n \"Diamond\": \"Losange\",\n \"Hexagone\": \"Hexagone\",\n \"Ellipse\": \"Ellipse\",\n \"Star\": \"Étoile\",\n \"Cloud\": \"Nuage\",\n \"Triangle\": \"Triangle\",\n \"Polygon\": \"Polygone\",\n \"Zoom Fit\": \"Ajuster le Zoom\",\n \"Download Project\": \"Télécharger le projet\",\n \"Save view\": \"Sauver la vue\",\n \"View saved view\": \"Restaurer la Vue\",\n \"Renkan \\'Drag-to-Add\\' bookmarklet\": \"Renkan \\'Deplacer-Pour-Ajouter\\' Signet\",\n \"(unknown user)\":\"(non authentifié)\",\n \"\":\"\",\n \"Search in graph\":\"Rechercher dans carte\",\n \"Search in \" : \"Chercher dans \",\n \"Show hidden nodes\": \"Montrer les noeuds cachés\",\n \"Show neighbors\": \"Montrer les voisins\",\n \"Hide\": \"Cacher\",\n \"Fullscreen not supported by your browser\": \"Le plein écran n'est pas supporté par votre navigateur\",\n \"Title size:\": \"Taille :\",\n \"Title color:\": \"Couleur :\",\n \"Video link\": \"Lien vidéo\"\n }\n};\n","/* Saves the Full JSON at each modification */\n\nRkns.jsonIO = function(_renkan, _opts) {\n var _proj = _renkan.project;\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'PUT';\n }\n var _load = function() {\n _proj.set({\n loadingStatus : true\n });\n Rkns.$.getJSON(_opts.url, function(_data) {\n _renkan.dataloader.load(_data);\n \n _proj.set({\n loadingStatus : false\n });\n _proj.set({\n saveStatus : 0\n });\n });\n };\n var _save = function() {\n _proj.set({\n saveStatus : 2\n });\n var _data = _proj.toJSON();\n if (!_renkan.read_only) {\n Rkns.$.ajax({\n type : _opts.http_method,\n url : _opts.url,\n contentType : \"application/json\",\n data : JSON.stringify(_data),\n success : function(data, textStatus, jqXHR) {\n _proj.set({\n saveStatus : 0\n });\n }\n });\n }\n\n };\n var _thrSave = Rkns._.throttle(function() {\n setTimeout(_save, 100);\n }, 1000);\n \n //TODO: Rearrange to avoid the 2 firts PUT due to a change in the project model\n // Take car of setting up the listener correctly to listen the save action on the view\n _proj.on(\"add:nodes add:edges add:users add:views\", function(_model) {\n _model.on(\"change remove\", function(_model) {\n _thrSave();\n });\n _thrSave();\n });\n _proj.on(\"change\", function() {\n if (!(_proj.changedAttributes.length === 1 && _proj\n .hasChanged('saveStatus'))) {\n _thrSave();\n }\n });\n\n _load();\n};\n","/* Saves the Full JSON once */\n\nRkns.jsonIOSaveOnClick = function(_renkan, _opts) {\n var _proj = _renkan.project,\n _saveWarn = false,\n _onLeave = function() {\n return \"Project not saved\";\n };\n if (typeof _opts.http_method === \"undefined\") {\n _opts.http_method = 'POST';\n }\n var _load = function() {\n var getdata = {},\n rx = /id=([^&#?=]+)/,\n matches = document.location.hash.match(rx);\n if (matches) {\n getdata.id = matches[1];\n }\n Rkns.$.ajax({\n url: _opts.url,\n data: getdata,\n beforeSend: function(){\n \t_proj.set({loadingStatus:true});\n },\n success: function(_data) {\n _renkan.dataloader.load(_data);\n _proj.set({loadingStatus:false});\n _proj.set({saveStatus:0});\n }\n });\n };\n var _save = function() {\n _proj.set(\"saved_at\", new Date());\n var _data = _proj.toJSON();\n Rkns.$.ajax({\n type: _opts.http_method,\n url: _opts.url,\n contentType: \"application/json\",\n data: JSON.stringify(_data),\n beforeSend: function(){\n \t_proj.set({saveStatus:2});\n },\n success: function(data, textStatus, jqXHR) {\n $(window).off(\"beforeunload\", _onLeave);\n _saveWarn = false;\n _proj.set({saveStatus:0});\n //document.location.hash = \"#id=\" + data.id;\n //$(\".Rk-Notifications\").text(\"Saved as \"+document.location.href).fadeIn().delay(2000).fadeOut();\n }\n });\n };\n var _checkLeave = function() {\n \t_proj.set({saveStatus:1});\n\n var title = _proj.get(\"title\");\n if (title && _proj.get(\"nodes\").length) {\n $(\".Rk-Save-Button\").removeClass(\"disabled\");\n } else {\n $(\".Rk-Save-Button\").addClass(\"disabled\");\n }\n if (title) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#333333\");\n }\n if (!_saveWarn) {\n _saveWarn = true;\n $(window).on(\"beforeunload\", _onLeave);\n }\n };\n _load();\n _proj.on(\"add:nodes add:edges add:users change\", function(_model) {\n\t _model.on(\"change remove\", function(_model) {\n\t \tif(!(_model.changedAttributes.length === 1 && _model.hasChanged('saveStatus'))) {\n\t \t\t_checkLeave();\n\t \t}\n\t });\n\t\tif(!(_proj.changedAttributes.length === 1 && _proj.hasChanged('saveStatus'))) {\n\t\t _checkLeave();\n \t}\n });\n _renkan.renderer.save = function() {\n if ($(\".Rk-Save-Button\").hasClass(\"disabled\")) {\n if (!_proj.get(\"title\")) {\n $(\".Rk-PadTitle\").css(\"border-color\",\"#ff0000\");\n }\n } else {\n _save();\n }\n };\n};\n","(function(Rkns) {\n\"use strict\";\n\nvar _ = Rkns._;\n\nvar Ldt = Rkns.Ldt = {};\n\nvar Bin = Ldt.Bin = function(_renkan, _opts) {\n if (_opts.ldt_type) {\n var Resclass = Ldt[_opts.ldt_type+\"Bin\"];\n if (Resclass) {\n return new Resclass(_renkan, _opts);\n }\n }\n console.error(\"No such LDT Bin Type\");\n};\n\nvar ProjectBin = Ldt.ProjectBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nProjectBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.tagTemplate = _renkan.options.templates['templates/ldtjson-bin/tagtemplate.html'];\n this.annotationTemplate = _renkan.options.templates['templates/ldtjson-bin/annotationtemplate.html'];\n this.proj_id = _opts.project_id;\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.title_$.html(_opts.title);\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nProjectBin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '
                                                                          • Tags

                                                                          • ',\n _projtitle = this.data.meta[\"dc:title\"],\n _this = this,\n count = 0;\n _this.title_$.text('LDT Project: \"' + _projtitle + '\"');\n _.map(_this.data.tags,function(_tag) {\n var _title = _tag.meta[\"dc:title\"];\n if (!search.isempty && !search.test(_title)) {\n return;\n }\n count++;\n _html += _this.tagTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n encodedtitle : encodeURIComponent(_title),\n static_url: _this.renkan.options.static_url\n });\n });\n _html += '
                                                                          • Annotations

                                                                          • ';\n _.map(_this.data.annotations,function(_annotation) {\n var _description = _annotation.content.description,\n _title = _annotation.content.title.replace(_description,\"\");\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _annotation.end - _annotation.begin,\n _img = (\n (_annotation.content && _annotation.content.img && _annotation.content.img.src) ?\n _annotation.content.img.src :\n ( _duration ? _this.renkan.options.static_url+\"img/ldt-segment.png\" : _this.renkan.options.static_url+\"img/ldt-point.png\" )\n );\n _html += _this.annotationTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_annotation.begin),\n end: convertTC(_annotation.end),\n duration: convertTC(_duration),\n mediaid: _annotation.media,\n annotationid: _annotation.id,\n image: _img,\n static_url: _this.renkan.options.static_url\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nProjectBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/ldt/cljson/id/' + this.proj_id,\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\nvar Search = Ldt.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nSearch.prototype.getBgClass = function() {\n return \"Rk-Ldt-Icon\";\n};\n\nSearch.prototype.getSearchTitle = function() {\n return this.renkan.translate(\"Lignes de Temps\");\n};\n\nSearch.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new ResultsBin(this.renkan, {\n search: _q\n })\n );\n};\n\nvar ResultsBin = Ldt.ResultsBin = Rkns.Utils.inherit(Rkns._BaseBin);\n\n\nResultsBin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.segmentTemplate = _renkan.options.templates['templates/ldtjson-bin/segmenttemplate.html'];\n this.ldt_platform = _opts.ldt_platform || \"http://ldt.iri.centrepompidou.fr/\";\n this.max_results = _opts.max_results || 50;\n this.search = _opts.search;\n this.title_$.html('Lignes de Temps: \"' + _opts.search + '\"');\n this.title_icon_$.addClass('Rk-Ldt-Title-Icon');\n this.refresh();\n};\n\nResultsBin.prototype.render = function(searchbase) {\n if (!this.data) {\n return;\n }\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n function convertTC(_ms) {\n function pad(_n) {\n var _res = _n.toString();\n while (_res.length < 2) {\n _res = '0' + _res;\n }\n return _res;\n }\n var _totalSeconds = Math.abs(Math.floor(_ms/1000)),\n _hours = Math.floor(_totalSeconds / 3600),\n _minutes = (Math.floor(_totalSeconds / 60) % 60),\n _seconds = _totalSeconds % 60,\n _res = '';\n if (_hours) {\n _res += pad(_hours) + ':';\n }\n _res += pad(_minutes) + ':' + pad(_seconds);\n return _res;\n }\n\n var _html = '',\n _this = this,\n count = 0;\n _.each(this.data.objects,function(_segment) {\n var _description = _segment.abstract,\n _title = _segment.title;\n if (!search.isempty && !search.test(_title) && !search.test(_description)) {\n return;\n }\n count++;\n var _duration = _segment.duration,\n _begin = _segment.start_ts,\n _end = + _segment.duration + _begin,\n _img = (\n _duration ?\n _this.renkan.options.static_url + \"img/ldt-segment.png\" :\n _this.renkan.options.static_url + \"img/ldt-point.png\"\n );\n _html += _this.segmentTemplate({\n ldt_platform: _this.ldt_platform,\n title: _title,\n htitle: highlight(_title),\n description: _description,\n hdescription: highlight(_description),\n start: convertTC(_begin),\n end: convertTC(_end),\n duration: convertTC(_duration),\n mediaid: _segment.iri_id,\n //projectid: _segment.project_id,\n //cuttingid: _segment.cutting_id,\n annotationid: _segment.element_id,\n image: _img\n });\n });\n\n this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nResultsBin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: this.ldt_platform + 'ldtplatform/api/ldt/1.0/segments/search/',\n data: {\n format: \"jsonp\",\n q: this.search,\n limit: this.max_results\n },\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n\n})(window.Rkns);\n","Rkns.ResourceList = {};\n\nRkns.ResourceList.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.ResourceList.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.resultTemplate = _renkan.options.templates['templates/list-bin.html'];\n this.title_$.html(_opts.title);\n if (_opts.list) {\n this.data = _opts.list;\n }\n this.refresh();\n};\n\nRkns.ResourceList.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n function highlight(_text) {\n var _e = _(_text).escape();\n return search.isempty ? _e : search.replace(_e, \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data,function(_item) {\n var _element;\n if (typeof _item === \"string\") {\n if (/^(https?:\\/\\/|www)/.test(_item)) {\n _element = { url: _item };\n } else {\n _element = { title: _item.replace(/[:,]?\\s?(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+\\s?/,'').trim() };\n var _match = _item.match(/(https?:\\/\\/|www)[\\d\\w\\/.&?=#%-_]+/);\n if (_match) {\n _element.url = _match[0];\n }\n if (_element.title.length > 80) {\n _element.description = _element.title;\n _element.title = _element.title.replace(/^(.{30,60})\\s.+$/,'$1…');\n }\n }\n } else {\n _element = _item;\n }\n var title = _element.title || (_element.url || \"\").replace(/^https?:\\/\\/(www\\.)?/,'').replace(/^(.{40}).+$/,'$1…'),\n url = _element.url || \"\",\n description = _element.description || \"\",\n image = _element.image || \"\";\n if (url && !/^https?:\\/\\//.test(url)) {\n url = 'http://' + url;\n }\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n image: image,\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.ResourceList.Bin.prototype.refresh = function() {\n if (this.data) {\n this.render();\n }\n};\n","Rkns.Wikipedia = {\n};\n\nRkns.Wikipedia.Search = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.lang = _opts.lang || \"en\";\n};\n\nRkns.Wikipedia.Search.prototype.getBgClass = function() {\n return \"Rk-Wikipedia-Search-Icon Rk-Wikipedia-Lang-\" + this.lang;\n};\n\nRkns.Wikipedia.Search.prototype.getSearchTitle = function() {\n var langs = {\n \"fr\": \"French\",\n \"en\": \"English\",\n \"ja\": \"Japanese\"\n };\n if (langs[this.lang]) {\n return this.renkan.translate(\"Wikipedia in \") + this.renkan.translate(langs[this.lang]);\n } else {\n return this.renkan.translate(\"Wikipedia\") + \" [\" + this.lang + \"]\";\n }\n};\n\nRkns.Wikipedia.Search.prototype.search = function(_q) {\n this.renkan.tabs.push(\n new Rkns.Wikipedia.Bin(this.renkan, {\n lang: this.lang,\n search: _q\n })\n );\n};\n\nRkns.Wikipedia.Bin = Rkns.Utils.inherit(Rkns._BaseBin);\n\nRkns.Wikipedia.Bin.prototype._init = function(_renkan, _opts) {\n this.renkan = _renkan;\n this.search = _opts.search;\n this.resultTemplate = _renkan.options.templates['templates/wikipedia-bin/resulttemplate.html'];\n this.lang = _opts.lang || \"en\";\n this.title_icon_$.addClass('Rk-Wikipedia-Title-Icon Rk-Wikipedia-Lang-' + this.lang);\n this.title_$.html(this.search).addClass(\"Rk-Wikipedia-Title\");\n this.refresh();\n};\n\nRkns.Wikipedia.Bin.prototype.render = function(searchbase) {\n var search = searchbase || Rkns.Utils.regexpFromTextOrArray();\n var highlightrx = (search.isempty ? Rkns.Utils.regexpFromTextOrArray(this.search) : search);\n function highlight(_text) {\n return highlightrx.replace(_(_text).escape(), \"$1\");\n }\n var _html = \"\",\n _this = this,\n count = 0;\n Rkns._.each(this.data.query.search, function(_result) {\n var title = _result.title,\n url = \"http://\" + _this.lang + \".wikipedia.org/wiki/\" + encodeURI(title.replace(/ /g,\"_\")),\n description = Rkns.$('
                                                                            ').html(_result.snippet).text();\n if (!search.isempty && !search.test(title) && !search.test(description)) {\n return;\n }\n count++;\n _html += _this.resultTemplate({\n url: url,\n title: title,\n htitle: highlight(title),\n description: description,\n hdescription: highlight(description),\n static_url: _this.renkan.options.static_url\n });\n });\n _this.main_$.html(_html);\n if (!search.isempty && count) {\n this.count_$.text(count).show();\n } else {\n this.count_$.hide();\n }\n if (!search.isempty && !count) {\n this.$.hide();\n } else {\n this.$.show();\n }\n this.renkan.resizeBins();\n};\n\nRkns.Wikipedia.Bin.prototype.refresh = function() {\n var _this = this;\n Rkns.$.ajax({\n url: \"http://\" + _this.lang + \".wikipedia.org/w/api.php?action=query&list=search&srsearch=\" + encodeURIComponent(this.search) + \"&format=json\",\n dataType: \"jsonp\",\n success: function(_data) {\n _this.data = _data;\n _this.render();\n }\n });\n};\n","\ndefine('renderer/baserepresentation',['jquery', 'underscore'], function ($, _) {\n 'use strict';\n\n /* Rkns.Renderer._BaseRepresentation Class */\n\n /* In Renkan, a \"Representation\" is a sort of ViewModel (in the MVVM paradigm) and bridges the gap between\n * models (written with Backbone.js) and the view (written with Paper.js)\n * Renkan's representations all inherit from Rkns.Renderer._BaseRepresentation '*/\n\n var _BaseRepresentation = function(_renderer, _model) {\n if (typeof _renderer !== \"undefined\") {\n this.renderer = _renderer;\n this.renkan = _renderer.renkan;\n this.project = _renderer.renkan.project;\n this.options = _renderer.renkan.options;\n this.model = _model;\n if (this.model) {\n var _this = this;\n this._changeBinding = function() {\n _this.redraw({change: true});\n };\n this._removeBinding = function() {\n _renderer.removeRepresentation(_this);\n _.defer(function() {\n _renderer.redraw();\n });\n };\n this._selectBinding = function() {\n _this.select();\n };\n this._unselectBinding = function() {\n _this.unselect();\n };\n this.model.on(\"change\", this._changeBinding );\n this.model.on(\"remove\", this._removeBinding );\n this.model.on(\"select\", this._selectBinding );\n this.model.on(\"unselect\", this._unselectBinding );\n }\n }\n };\n\n /* Rkns.Renderer._BaseRepresentation Methods */\n\n _(_BaseRepresentation.prototype).extend({\n _super: function(_func) {\n return _BaseRepresentation.prototype[_func].apply(this, Array.prototype.slice.call(arguments, 1));\n },\n redraw: function() {},\n moveTo: function() {},\n show: function() { return \"BaseRepresentation.show\"; },\n hide: function() {},\n select: function() {\n if (this.model) {\n this.model.trigger(\"selected\");\n }\n },\n unselect: function() {\n if (this.model) {\n this.model.trigger(\"unselected\");\n }\n },\n highlight: function() {},\n unhighlight: function() {},\n mousedown: function() {},\n mouseup: function() {\n if (this.model) {\n this.model.trigger(\"clicked\");\n }\n },\n destroy: function() {\n if (this.model) {\n this.model.off(\"change\", this._changeBinding );\n this.model.off(\"remove\", this._removeBinding );\n this.model.off(\"select\", this._selectBinding );\n this.model.off(\"unselect\", this._unselectBinding );\n }\n }\n }).value();\n\n /* End of Rkns.Renderer._BaseRepresentation Class */\n\n return _BaseRepresentation;\n\n});\n\ndefine('requtils',[], function ($, _) {\n 'use strict';\n return {\n getUtils: function(){\n return window.Rkns.Utils;\n },\n getRenderer: function(){\n return window.Rkns.Renderer;\n }\n };\n\n});\n\n\ndefine('renderer/basebutton',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer._BaseButton Class */\n\n /* BaseButton is extended by contextual buttons that appear when hovering on nodes and edges */\n\n var _BaseButton = Utils.inherit(BaseRepresentation);\n\n _(_BaseButton.prototype).extend({\n moveTo: function(_pos) {\n this.sector.moveTo(_pos);\n },\n show: function() {\n this.sector.show();\n },\n hide: function() {\n if (this.sector){\n this.sector.hide();\n }\n },\n select: function() {\n this.sector.select();\n },\n unselect: function(_newTarget) {\n this.sector.unselect();\n if (!_newTarget || (_newTarget !== this.source_representation && _newTarget.source_representation !== this.source_representation)) {\n this.source_representation.unselect();\n }\n },\n destroy: function() {\n this.sector.destroy();\n }\n }).value();\n\n return _BaseButton;\n\n});\n\n\ndefine('renderer/shapebuilder',[], function () {\n 'use strict';\n\n var cloud_path = \"M0,0c-0.1218516546,-0.0336420601 -0.2451649928,0.0048580836 -0.3302944641,0.0884969975c-0.0444763883,-0.0550844815 -0.1047003238,-0.0975985034 -0.1769360893,-0.1175406746c-0.1859066673,-0.0513257002 -0.3774236254,0.0626045858 -0.4272374613,0.2541588105c-0.0036603877,0.0140753132 -0.0046241235,0.028229722 -0.0065872453,0.042307536c-0.1674179627,-0.0179317735 -0.3276106855,0.0900599386 -0.3725537463,0.2628868425c-0.0445325077,0.1712456429 0.0395025693,0.3463497959 0.1905420475,0.4183458793c-0.0082101538,0.0183442886 -0.0158652506,0.0372432828 -0.0211098452,0.0574080693c-0.0498130336,0.1915540431 0.0608692569,0.3884647499 0.2467762814,0.4397904033c0.0910577256,0.0251434257 0.1830791813,0.0103792696 0.2594677475,-0.0334472349c0.042100113,0.0928009202 0.1205930075,0.1674914182 0.2240666796,0.1960572479c0.1476344161,0.0407610407 0.297446165,-0.0238077445 0.3783262342,-0.1475652419c0.0327623278,0.0238981846 0.0691792333,0.0436665447 0.1102008706,0.0549940004c0.1859065794,0.0513256592 0.3770116432,-0.0627203154 0.4268255671,-0.2542745401c0.0250490557,-0.0963230532 0.0095494076,-0.1938010889 -0.0356681889,-0.2736906101c0.0447507424,-0.0439678867 0.0797796014,-0.0996624318 0.0969425462,-0.1656617192c0.0498137481,-0.1915564561 -0.0608688118,-0.3884669813 -0.2467755669,-0.4397928163c-0.0195699622,-0.0054005426 -0.0391731675,-0.0084429542 -0.0586916488,-0.0102888295c0.0115683912,-0.1682147574 -0.0933564223,-0.3269222408 -0.2572937178,-0.3721841203z\";\n /* ShapeBuilder Begin */\n\n var builders = {\n \"circle\":{\n getShape: function() {\n return new paper.Path.Circle([0, 0], 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Circle(center, radius);\n }\n },\n \"rectangle\":{\n getShape: function() {\n return new paper.Path.Rectangle([-2, -2], [2, 2]);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Rectangle([-radius, -radius], [radius*2, radius*2]);\n }\n },\n \"ellipse\":{\n getShape: function() {\n return new paper.Path.Ellipse(new paper.Rectangle([-2, -1], [2, 1]));\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Ellipse(new paper.Rectangle([-radius, -radius/2], [radius*2, radius]));\n }\n },\n \"polygon\":{\n getShape: function() {\n return new paper.Path.RegularPolygon([0, 0], 6, 1);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.RegularPolygon(center, 6, radius);\n }\n },\n \"diamond\":{\n getShape: function() {\n var d = new paper.Path.Rectangle([-Math.SQRT2, -Math.SQRT2], [Math.SQRT2, Math.SQRT2]);\n d.rotate(45);\n return d;\n },\n getImageShape: function(center, radius) {\n var d = new paper.Path.Rectangle([-radius*Math.SQRT2/2, -radius*Math.SQRT2/2], [radius*Math.SQRT2, radius*Math.SQRT2]);\n d.rotate(45);\n return d;\n }\n },\n \"star\":{\n getShape: function() {\n return new paper.Path.Star([0, 0], 8, 1, 0.7);\n },\n getImageShape: function(center, radius) {\n return new paper.Path.Star(center, 8, radius*1, radius*0.7);\n }\n },\n \"cloud\": {\n getShape: function() {\n var path = new paper.Path(cloud_path);\n return path;\n\n },\n getImageShape: function(center, radius) {\n var path = new paper.Path(cloud_path);\n path.scale(radius);\n path.translate(center);\n return path;\n }\n },\n \"triangle\": {\n getShape: function() {\n return new paper.Path.RegularPolygon([0,0], 3, 1);\n },\n getImageShape: function(center, radius) {\n var shape = new paper.Path.RegularPolygon([0,0], 3, 1);\n shape.scale(radius);\n shape.translate(center);\n return shape;\n }\n },\n \"svg\": function(path){\n return {\n getShape: function() {\n return new paper.Path(path);\n },\n getImageShape: function(center, radius) {\n // No calcul for the moment\n return new paper.Path();\n }\n };\n }\n };\n\n var ShapeBuilder = function (shape){\n if(shape === null || typeof shape === \"undefined\"){\n shape = \"circle\";\n }\n if(shape.substr(0,4)===\"svg:\"){\n return builders.svg(shape.substr(4));\n }\n if(!(shape in builders)){\n shape = \"circle\";\n }\n return builders[shape];\n };\n\n ShapeBuilder.builders = builders;\n\n return ShapeBuilder;\n\n});\n\ndefine('renderer/noderepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation', 'renderer/shapebuilder'], function ($, _, requtils, BaseRepresentation, ShapeBuilder) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.Node Class */\n\n /* The representation for the node : A circle, with an image inside and a text label underneath.\n * The circle and the image are drawn on canvas and managed by Paper.js.\n * The text label is an HTML node, managed by jQuery. */\n\n //var NodeRepr = Renderer.Node = Utils.inherit(Renderer._BaseRepresentation);\n var NodeRepr = Utils.inherit(BaseRepresentation);\n\n _(NodeRepr.prototype).extend({\n _init: function() {\n this.renderer.node_layer.activate();\n this.type = \"Node\";\n this.buildShape();\n this.hidden = false;\n this.ghost= false;\n if (this.options.show_node_circles) {\n this.circle.strokeWidth = this.options.node_stroke_width;\n this.h_ratio = 1;\n } else {\n this.h_ratio = 0;\n }\n this.title = $('
                                                                            ').appendTo(this.renderer.labels_$);\n\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.NodeEditButton(this.renderer, null),\n new Renderer.NodeRemoveButton(this.renderer, null),\n new Renderer.NodeLinkButton(this.renderer, null),\n new Renderer.NodeEnlargeButton(this.renderer, null),\n new Renderer.NodeShrinkButton(this.renderer, null)\n ];\n if (this.options.hide_nodes){\n this.normal_buttons.push(\n new Renderer.NodeHideButton(this.renderer, null),\n new Renderer.NodeShowButton(this.renderer, null)\n );\n }\n this.pending_delete_buttons = [\n new Renderer.NodeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n this.last_circle_radius = 1;\n\n if (this.renderer.minimap) {\n this.renderer.minimap.node_layer.activate();\n this.minimap_circle = new paper.Path.Circle([0, 0], 1);\n this.minimap_circle.__representation = this.renderer.minimap.miniframe.__representation;\n this.renderer.minimap.node_group.addChild(this.minimap_circle);\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.node_stroke_width + (thickness-1) * (this.options.node_stroke_max_width - this.options.node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_node_stroke_width + (thickness-1) * (this.options.selected_node_stroke_max_width - this.options.selected_node_stroke_width) / (this.options.node_stroke_witdh_scale-1);\n },\n buildShape: function(){\n if( 'shape' in this.model.changed ) {\n delete this.img;\n }\n if(this.circle){\n this.circle.remove();\n delete this.circle;\n }\n // \"circle\" \"rectangle\" \"ellipse\" \"polygon\" \"star\" \"diamond\"\n this.shapeBuilder = new ShapeBuilder(this.model.get(\"shape\"));\n this.circle = this.shapeBuilder.getShape();\n this.circle.__representation = this;\n this.circle.sendToBack();\n this.last_circle_radius = 1;\n },\n redraw: function(options) {\n if( 'shape' in this.model.changed && 'change' in options && options.change ) {\n //if( 'shape' in this.model.changed ) {\n this.buildShape();\n }\n var _model_coords = new paper.Point(this.model.get(\"position\")),\n _baseRadius = this.options.node_size_base * Math.exp((this.model.get(\"size\") || 0) * Utils._NODE_SIZE_STEP);\n if (!this.is_dragging || !this.paper_coords) {\n this.paper_coords = this.renderer.toPaperCoords(_model_coords);\n }\n this.circle_radius = _baseRadius * this.renderer.view.scale;\n if (this.last_circle_radius !== this.circle_radius) {\n this.all_buttons.forEach(function(b) {\n b.setSectorSize();\n });\n this.circle.scale(this.circle_radius / this.last_circle_radius);\n if (this.node_image) {\n this.node_image.scale(this.circle_radius / this.last_circle_radius);\n }\n }\n this.circle.position = this.paper_coords;\n if (this.node_image) {\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n }\n this.last_circle_radius = this.circle_radius;\n\n var old_act_btn = this.active_buttons;\n\n var opacity = 1;\n if (this.model.get(\"delete_scheduled\")) {\n opacity = 0.5;\n this.active_buttons = this.pending_delete_buttons;\n this.circle.dashArray = [2,2];\n } else {\n opacity = 1;\n this.active_buttons = this.normal_buttons;\n this.circle.dashArray = null;\n }\n if (this.selected && this.renderer.isEditable() && !this.ghost) {\n if (old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n }\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n if (this.node_image) {\n this.node_image.opacity = this.highlighted ? opacity * 0.5 : (opacity - 0.01);\n }\n\n this.circle.fillColor = this.highlighted ? this.options.highlighted_node_fill_color : this.options.node_fill_color;\n\n this.circle.opacity = this.options.show_node_circles ? opacity : 0.01;\n\n\n //strip html from title\n var html = this.model.get(\"title\");\n var div = document.createElement(\"div\");\n div.innerHTML = html;\n var clean_title = div.textContent || div.innerText || \"\";\n\n var _text = clean_title || this.renkan.translate(this.options.label_untitled_nodes) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n\n //_formatedText = _text;\n\n\n if (typeof this.highlighted === \"object\") {\n _text = this.highlighted.replace(_(_text).escape(),'$1');\n }\n\n //TODO: default text node color\n var node_style = (this.model.get(\"style\") || {'title_size': 1, 'title-color': '#00000' });\n var text_size = node_style.title_size || 1;\n var text_color = node_style.title_color || this.options.node_title_color;\n\n var text_style = {\n 'line-height': \"1em\"\n };\n\n if(text_size !== 1) {\n text_style['font-size'] = text_size.toFixed(1)+\"em\";\n }\n //TODO: compare with default value\n if(text_color !== \"#000000\") {\n text_style.color = text_color;\n }\n\n var text_node = $(\"\").css(text_style).html(_text);\n\n this.title.empty().append(text_node);\n\n var _strokeWidth = this._getStrokeWidth();\n this.title.css({\n left: this.paper_coords.x,\n top: this.paper_coords.y + this.circle_radius * this.h_ratio + this.options.node_label_distance + 0.5*_strokeWidth,\n opacity: opacity\n });\n var _color = (this.model.has(\"style\") && this.model.get(\"style\").color) || (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null;\n this.circle.strokeWidth = _strokeWidth;\n this.circle.strokeColor = _color;\n this.circle.dashArray = _dash;\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n var lastImage = this.img;\n this.img = this.model.get(\"image\");\n if (this.img && this.img !== lastImage) {\n this.showImage();\n if(this.circle) {\n this.circle.sendToBack();\n }\n }\n if (this.node_image && !this.img) {\n this.node_image.remove();\n delete this.node_image;\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.fillColor = _color;\n var minipos = this.renderer.toMinimapCoords(_model_coords),\n miniradius = this.renderer.minimap.scale * _baseRadius,\n minisize = new paper.Size([miniradius, miniradius]);\n this.minimap_circle.fitBounds(minipos.subtract(minisize), minisize.multiply(2));\n }\n\n if (typeof options === 'undefined' || !('dontRedrawEdges' in options) || !options.dontRedrawEdges) {\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.redraw();\n }\n }\n );\n }\n if (this.ghost){\n this.show(true);\n } else {\n if (this.hidden) { this.hide(); }\n }\n },\n showImage: function() {\n var _image = null;\n if (typeof this.renderer.image_cache[this.img] === \"undefined\") {\n _image = new Image();\n this.renderer.image_cache[this.img] = _image;\n _image.src = this.img;\n } else {\n _image = this.renderer.image_cache[this.img];\n }\n var _this = this;\n if (_image.width) {\n\n if (this.node_image) {\n this.node_image.remove();\n }\n this.renderer.node_layer.activate();\n var width = _image.width,\n height = _image.height,\n clipPath = this.model.get(\"clip_path\"),\n hasClipPath = (typeof clipPath !== \"undefined\" && clipPath),\n _clip = null,\n baseRadius = null,\n centerPoint = null;\n\n if (hasClipPath) {\n _clip = new paper.Path();\n var instructions = clipPath.match(/[a-z][^a-z]+/gi) || [],\n lastCoords = [0,0],\n minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n\n var transformCoords = function(tabc, relative) {\n var newCoords = tabc.slice(1).map(function(v, k) {\n var res = parseFloat(v),\n isY = k % 2;\n if (isY) {\n res = ( res - 0.5 ) * height;\n } else {\n res = ( res - 0.5 ) * width;\n }\n if (relative) {\n res += lastCoords[isY];\n }\n if (isY) {\n minY = Math.min(minY, res);\n maxY = Math.max(maxY, res);\n } else {\n minX = Math.min(minX, res);\n maxX = Math.max(maxX, res);\n }\n return res;\n });\n lastCoords = newCoords.slice(-2);\n return newCoords;\n };\n\n instructions.forEach(function(instr) {\n var coords = instr.match(/([a-z]|[0-9.-]+)/ig) || [\"\"];\n switch(coords[0]) {\n case \"M\":\n _clip.moveTo(transformCoords(coords));\n break;\n case \"m\":\n _clip.moveTo(transformCoords(coords, true));\n break;\n case \"L\":\n _clip.lineTo(transformCoords(coords));\n break;\n case \"l\":\n _clip.lineTo(transformCoords(coords, true));\n break;\n case \"C\":\n _clip.cubicCurveTo(transformCoords(coords));\n break;\n case \"c\":\n _clip.cubicCurveTo(transformCoords(coords, true));\n break;\n case \"Q\":\n _clip.quadraticCurveTo(transformCoords(coords));\n break;\n case \"q\":\n _clip.quadraticCurveTo(transformCoords(coords, true));\n break;\n }\n });\n\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](maxX - minX, maxY - minY) / 2;\n centerPoint = new paper.Point((maxX + minX) / 2, (maxY + minY) / 2);\n if (!this.options.show_node_circles) {\n this.h_ratio = (maxY - minY) / (2 * baseRadius);\n }\n } else {\n baseRadius = Math[this.options.node_images_fill_mode ? \"min\" : \"max\"](width, height) / 2;\n centerPoint = new paper.Point(0,0);\n if (!this.options.show_node_circles) {\n this.h_ratio = height / (2 * baseRadius);\n }\n }\n var _raster = new paper.Raster(_image);\n _raster.locked = true; // Disable mouse events on icon\n if (hasClipPath) {\n _raster = new paper.Group(_clip, _raster);\n _raster.opacity = 0.99;\n /* This is a workaround to allow clipping at group level\n * If opacity was set to 1, paper.js would merge all clipping groups in one (known bug).\n */\n _raster.clipped = true;\n _clip.__representation = this;\n }\n if (this.options.clip_node_images) {\n var _circleClip = this.shapeBuilder.getImageShape(centerPoint, baseRadius);\n _raster = new paper.Group(_circleClip, _raster);\n _raster.opacity = 0.99;\n _raster.clipped = true;\n _circleClip.__representation = this;\n }\n this.image_delta = centerPoint.divide(baseRadius);\n this.node_image = _raster;\n this.node_image.__representation = _this;\n this.node_image.scale(this.circle_radius / baseRadius);\n this.node_image.position = this.paper_coords.subtract(this.image_delta.multiply(this.circle_radius));\n this.node_image.insertAbove(this.circle);\n } else {\n $(_image).on(\"load\", function() {\n _this.showImage();\n });\n }\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.renkan.read_only) {\n this.is_dragging = true;\n this.paper_coords = this.paper_coords.add(_delta);\n this.redraw();\n }\n } else {\n this.renderer.view.paperShift(_delta);\n }\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"NodeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n clearTimeout(this.hide_timeout);\n this.selected = true;\n this.circle.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable() && !this.hidden) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n var _uri = this.model.get(\"uri\");\n if (_uri) {\n $('.Rk-Bin-Item').each(function() {\n var _el = $(this);\n if (_el.attr(\"data-uri\") === _uri) {\n _el.addClass(\"selected\");\n }\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n\n if (this.renderer.minimap) {\n this.minimap_circle.strokeWidth = this.options.minimap_highlight_weight;\n this.minimap_circle.strokeColor = this.options.minimap_highlight_color;\n }\n //if the node is hidden and the mouse hover it, it appears as a ghost\n if (this.hidden) {\n this.show(true);\n }\n else {\n this.showNeighbors(true);\n }\n this._super(\"select\");\n },\n hideButtons: function() {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n delete(this.buttonTimeout);\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n var _this = this;\n this.buttons_timeout = setTimeout(function() { _this.hideButtons(); }, 200);\n this.circle.strokeWidth = this._getStrokeWidth();\n $('.Rk-Bin-Item').removeClass(\"selected\");\n if (this.renderer.minimap) {\n this.minimap_circle.strokeColor = undefined;\n }\n //when the mouse don't hover the node anymore, we hide it\n if (this.hidden) {\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.hide();\n }\n else {\n this.hideNeighbors(true);\n }\n this._super(\"unselect\");\n }\n },\n hide_delay: function(){\n var _this = this;\n this.hide_timeout = setTimeout(function(){\n _this.hide();\n }, 1000);\n },\n hide: function(){\n var _this = this;\n this.ghost = false;\n this.hidden = true;\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = 0;\n }\n this.hideButtons();\n this.circle.opacity = 0;\n this.title.css('opacity', 0);\n this.minimap_circle.opacity = 0;\n\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.hide();\n }\n }\n );\n this.hideNeighbors(false);\n },\n show: function(ghost){\n var _this = this;\n this.ghost = ghost;\n if (this.ghost){\n if (typeof this.node_image !== 'undefined'){\n this.node_image.opacity = this.options.ghost_opacity;\n }\n this.circle.opacity = this.options.ghost_opacity;\n this.title.css('opacity', this.options.ghost_opacity);\n this.minimap_circle.opacity = this.options.ghost_opacity;\n } else {\n this.minimap_circle.opacity = 1;\n this.hidden = false;\n this.redraw();\n }\n\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return ((ed.get(\"to\") === _this.model) || (ed.get(\"from\") === _this.model));\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge);\n if (repr && typeof repr.from_representation !== \"undefined\" && typeof repr.from_representation.paper_coords !== \"undefined\" && typeof repr.to_representation !== \"undefined\" && typeof repr.to_representation.paper_coords !== \"undefined\") {\n repr.show(_this.ghost);\n }\n }\n );\n },\n hideNeighbors: function(delay){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.ghost) {\n if (delay){ repr.hide_delay(); } else {repr.hide(); }\n }\n }\n );\n },\n showNeighbors: function(ghost){\n var _this = this;\n _.each(\n this.project.get(\"edges\").filter(\n function (ed) {\n return (ed.get(\"from\") === _this.model);\n }\n ),\n function(edge, index, list) {\n var repr = _this.renderer.getRepresentationByModel(edge.get(\"to\"));\n if (repr && repr.hidden) {\n repr.show(ghost);\n if (!ghost){\n var indexNode = _this.renderer.view.hiddenNodes.indexOf(repr.model.id);\n if (indexNode !== -1){\n _this.renderer.view.hiddenNodes.splice(indexNode, 1);\n }\n }\n }\n }\n );\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n saveCoords: function() {\n var _coords = this.renderer.toModelCoords(this.paper_coords),\n _data = {\n position: {\n x: _coords.x,\n y: _coords.y\n }\n };\n if (this.renderer.isEditable()) {\n this.model.set(_data);\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (this.renderer.is_dragging && this.renderer.isEditable()) {\n this.saveCoords();\n } else {\n if (this.hidden) {\n var index = this.renderer.view.hiddenNodes.indexOf(this.model.id);\n if (index !== -1){\n this.renderer.view.hiddenNodes.splice(index, 1);\n }\n this.show(false);\n this.select();\n } else {\n if (!_isTouch && !this.model.get(\"delete_scheduled\")) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.is_dragging = false;\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n this.circle.remove();\n this.title.remove();\n if (this.renderer.minimap) {\n this.minimap_circle.remove();\n }\n if (this.node_image) {\n this.node_image.remove();\n }\n }\n }).value();\n\n return NodeRepr;\n\n});\n\n\ndefine('renderer/edge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Edge Class Begin */\n\n //var Edge = Renderer.Edge = Utils.inherit(Renderer._BaseRepresentation);\n var Edge = Utils.inherit(BaseRepresentation);\n\n _(Edge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Edge\";\n this.hidden = false;\n this.ghost = false;\n this.highlighted = false;\n this.from_representation = this.renderer.getRepresentationByModel(this.model.get(\"from\"));\n this.to_representation = this.renderer.getRepresentationByModel(this.model.get(\"to\"));\n this.bundle = this.renderer.addToBundles(this);\n this.line = new paper.Path();\n this.line.add([0,0],[0,0],[0,0]);\n this.line.__representation = this;\n this.line.strokeWidth = this.options.edge_stroke_width;\n this.arrow_scale = 1;\n this.arrow = new paper.Path();\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.pivot = new paper.Point([ this.options.edge_arrow_length / 2, this.options.edge_arrow_width / 2 ]);\n this.arrow.__representation = this;\n this.text = $('
                                                                            ').appendTo(this.renderer.labels_$);\n this.arrow_angle = 0;\n if (this.options.editor_mode) {\n var Renderer = requtils.getRenderer();\n this.normal_buttons = [\n new Renderer.EdgeEditButton(this.renderer, null),\n new Renderer.EdgeRemoveButton(this.renderer, null)\n ];\n this.pending_delete_buttons = [\n new Renderer.EdgeRevertButton(this.renderer, null)\n ];\n this.all_buttons = this.normal_buttons.concat(this.pending_delete_buttons);\n for (var i = 0; i < this.all_buttons.length; i++) {\n this.all_buttons[i].source_representation = this;\n }\n this.active_buttons = [];\n } else {\n this.active_buttons = this.all_buttons = [];\n }\n\n if (this.renderer.minimap) {\n this.renderer.minimap.edge_layer.activate();\n this.minimap_line = new paper.Path();\n this.minimap_line.add([0,0],[0,0]);\n this.minimap_line.__representation = this.renderer.minimap.miniframe.__representation;\n this.minimap_line.strokeWidth = 1;\n }\n },\n _getStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.edge_stroke_width + (thickness-1) * (this.options.edge_stroke_max_width - this.options.edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getSelectedStrokeWidth: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return this.options.selected_edge_stroke_width + (thickness-1) * (this.options.selected_edge_stroke_max_width - this.options.selected_edge_stroke_width) / (this.options.edge_stroke_witdh_scale-1);\n },\n _getArrowScale: function() {\n var thickness = (this.model.has('style') && this.model.get('style').thickness) || 1;\n return 1 + (thickness-1) * ((this.options.edge_arrow_max_width / this.options.edge_arrow_width) - 1) / (this.options.edge_stroke_witdh_scale-1);\n },\n redraw: function() {\n var from = this.model.get(\"from\"),\n to = this.model.get(\"to\");\n if (!from || !to || (this.hidden && !this.ghost)) {\n return;\n }\n this.from_representation = this.renderer.getRepresentationByModel(from);\n this.to_representation = this.renderer.getRepresentationByModel(to);\n if (typeof this.from_representation === \"undefined\" || typeof this.to_representation === \"undefined\" ||\n (this.from_representation.hidden && !this.from_representation.ghost) ||\n (this.to_representation.hidden && !this.to_representation.ghost)) {\n this.hide();\n return;\n }\n var _strokeWidth = this._getStrokeWidth(),\n _arrow_scale = this._getArrowScale(),\n _p0a = this.from_representation.paper_coords,\n _p1a = this.to_representation.paper_coords,\n _v = _p1a.subtract(_p0a),\n _r = _v.length,\n _u = _v.divide(_r),\n _ortho = new paper.Point([- _u.y, _u.x]),\n _group_pos = this.bundle.getPosition(this),\n _delta = _ortho.multiply( this.options.edge_gap_in_bundles * _group_pos ),\n _p0b = _p0a.add(_delta), /* Adding a 4 px difference */\n _p1b = _p1a.add(_delta), /* to differentiate bundled links */\n _a = _v.angle,\n _textdelta = _ortho.multiply(this.options.edge_label_distance + 0.5 * _arrow_scale * this.options.edge_arrow_width),\n _handle = _v.divide(3),\n _color = (this.highlighted && this.options.highlighted_edge_color) ||\n (this.model.has(\"style\") && this.model.get(\"style\").color) ||\n (this.model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n _dash = (this.model.has(\"style\") && this.model.get(\"style\").dash) ? this.options.default_dash_array : null,\n _opacity;\n\n if (this.model.get(\"delete_scheduled\") || this.from_representation.model.get(\"delete_scheduled\") || this.to_representation.model.get(\"delete_scheduled\")) {\n _opacity = 0.5;\n this.line.dashArray = [2, 2];\n } else {\n _opacity = this.ghost ? this.options.ghost_opacity : 1;\n this.line.dashArray = null;\n }\n\n var old_act_btn = this.active_buttons;\n\n this.arrow.visible =\n (this.model.has(\"style\") && this.model.get(\"style\").arrow) ||\n !this.model.has(\"style\") ||\n typeof this.model.get(\"style\").arrow === 'undefined';\n\n this.active_buttons = this.model.get(\"delete_scheduled\") ? this.pending_delete_buttons : this.normal_buttons;\n\n if (this.selected && this.renderer.isEditable() && old_act_btn !== this.active_buttons) {\n old_act_btn.forEach(function(b) {\n b.hide();\n });\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n\n this.paper_coords = _p0b.add(_p1b).divide(2);\n this.line.strokeWidth = _strokeWidth;\n this.line.strokeColor = _color;\n this.line.dashArray = _dash;\n this.line.opacity = _opacity;\n this.line.segments[0].point = _p0a;\n this.line.segments[1].point = this.paper_coords;\n this.line.segments[1].handleIn = _handle.multiply(-1);\n this.line.segments[1].handleOut = _handle;\n this.line.segments[2].point = _p1a;\n this.arrow.scale(_arrow_scale / this.arrow_scale);\n this.arrow_scale = _arrow_scale;\n this.arrow.fillColor = _color;\n this.arrow.opacity = _opacity;\n this.arrow.rotate(_a - this.arrow_angle, this.arrow.bounds.center);\n this.arrow.position = this.paper_coords;\n\n this.arrow_angle = _a;\n if (_a > 90) {\n _a -= 180;\n _textdelta = _textdelta.multiply(-1);\n }\n if (_a < -90) {\n _a += 180;\n _textdelta = _textdelta.multiply(-1);\n }\n var _text = this.model.get(\"title\") || this.renkan.translate(this.options.label_untitled_edges) || \"\";\n _text = Utils.shortenText(_text, this.options.node_label_max_length);\n if (typeof this.highlighted === \"object\") {\n this.text.html(this.highlighted.replace(_(_text).escape(),'$1'));\n } else {\n this.text.text(_text);\n }\n var _textpos = this.paper_coords.add(_textdelta);\n this.text.css({\n left: _textpos.x,\n top: _textpos.y,\n transform: \"rotate(\" + _a + \"deg)\",\n \"-moz-transform\": \"rotate(\" + _a + \"deg)\",\n \"-webkit-transform\": \"rotate(\" + _a + \"deg)\",\n opacity: _opacity\n });\n this.text_angle = _a;\n\n var _pc = this.paper_coords;\n this.all_buttons.forEach(function(b) {\n b.moveTo(_pc);\n });\n\n if (this.renderer.minimap) {\n this.minimap_line.strokeColor = _color;\n this.minimap_line.segments[0].point = this.renderer.toMinimapCoords(new paper.Point(this.from_representation.model.get(\"position\")));\n this.minimap_line.segments[1].point = this.renderer.toMinimapCoords(new paper.Point(this.to_representation.model.get(\"position\")));\n }\n },\n hide: function(){\n this.hidden = true;\n this.ghost = false;\n\n this.text.hide();\n this.line.visible = false;\n this.arrow.visible = false;\n this.minimap_line.visible = false;\n },\n show: function(ghost){\n this.ghost = ghost;\n if (this.ghost) {\n this.text.css('opacity', 0.3);\n this.line.opacity = 0.3;\n this.arrow.opacity = 0.3;\n this.minimap_line.opacity = 0.3;\n } else {\n this.hidden = false;\n\n this.text.css('opacity', 1);\n this.line.opacity = 1;\n this.arrow.opacity = 1;\n this.minimap_line.opacity = 1;\n }\n this.text.show();\n this.line.visible = true;\n this.arrow.visible = true;\n this.minimap_line.visible = true;\n this.redraw();\n },\n openEditor: function() {\n this.renderer.removeRepresentationsOfType(\"editor\");\n var _editor = this.renderer.addRepresentation(\"EdgeEditor\",null);\n _editor.source_representation = this;\n _editor.draw();\n },\n select: function() {\n this.selected = true;\n this.line.strokeWidth = this._getSelectedStrokeWidth();\n if (this.renderer.isEditable()) {\n this.active_buttons.forEach(function(b) {\n b.show();\n });\n }\n if (!this.options.editor_mode) {\n this.openEditor();\n }\n this._super(\"select\");\n },\n unselect: function(_newTarget) {\n if (!_newTarget || _newTarget.source_representation !== this) {\n this.selected = false;\n if (this.options.editor_mode) {\n this.all_buttons.forEach(function(b) {\n b.hide();\n });\n }\n if (this.hidden){\n this.renderer.removeRepresentationsOfType(\"editor\");\n }\n this.line.strokeWidth = this._getStrokeWidth();\n this._super(\"unselect\");\n }\n },\n mousedown: function(_event, _isTouch) {\n if (_isTouch) {\n this.renderer.unselectAll();\n this.select();\n }\n },\n mouseup: function(_event, _isTouch) {\n if (!this.renkan.read_only && this.renderer.is_dragging) {\n this.from_representation.saveCoords();\n this.to_representation.saveCoords();\n this.from_representation.is_dragging = false;\n this.to_representation.is_dragging = false;\n } else {\n if (!_isTouch) {\n this.openEditor();\n }\n this.model.trigger(\"clicked\");\n }\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n },\n paperShift: function(_delta) {\n if (this.options.editor_mode) {\n if (!this.options.read_only) {\n this.from_representation.paperShift(_delta);\n this.to_representation.paperShift(_delta);\n }\n } else {\n this.renderer.paperShift(_delta);\n }\n },\n highlight: function(textToReplace) {\n var hlvalue = textToReplace || true;\n if (this.highlighted === hlvalue) {\n return;\n }\n this.highlighted = hlvalue;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n unhighlight: function() {\n if (!this.highlighted) {\n return;\n }\n this.highlighted = false;\n this.redraw();\n this.renderer.throttledPaperDraw();\n },\n destroy: function() {\n this._super(\"destroy\");\n this.line.remove();\n this.arrow.remove();\n this.text.remove();\n if (this.renderer.minimap) {\n this.minimap_line.remove();\n }\n this.all_buttons.forEach(function(b) {\n b.destroy();\n });\n var _this = this;\n this.bundle.edges = _.reject(this.bundle.edges, function(_edge) {\n return _this === _edge;\n });\n }\n }).value();\n\n return Edge;\n\n});\n\n\n\ndefine('renderer/tempedge',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* TempEdge Class Begin */\n\n //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);\n var TempEdge = Utils.inherit(BaseRepresentation);\n\n _(TempEdge.prototype).extend({\n _init: function() {\n this.renderer.edge_layer.activate();\n this.type = \"Temp-edge\";\n this.origin = Utils.OriginEnum.NONE;\n\n var _color = (this.project.get(\"users\").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\");\n this.line = new paper.Path();\n this.line.strokeColor = _color;\n this.line.dashArray = [4, 2];\n this.line.strokeWidth = this.options.selected_edge_stroke_width;\n this.line.add([0,0],[0,0]);\n this.line.__representation = this;\n this.arrow = new paper.Path();\n this.arrow.fillColor = _color;\n this.arrow.add(\n [ 0, 0 ],\n [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],\n [ 0, this.options.edge_arrow_width ]\n );\n this.arrow.__representation = this;\n this.arrow_angle = 0;\n },\n redraw: function() {\n var _p0 = this.from_representation.paper_coords,\n _p1 = this.end_pos,\n _a = _p1.subtract(_p0).angle,\n _c = _p0.add(_p1).divide(2);\n this.line.segments[0].point = _p0;\n this.line.segments[1].point = _p1;\n this.arrow.rotate(_a - this.arrow_angle);\n this.arrow.position = _c;\n this.arrow_angle = _a;\n },\n paperShift: function(_delta) {\n if (!this.renderer.isEditable()) {\n this.renderer.removeRepresentation(_this);\n paper.view.draw();\n return;\n }\n this.end_pos = this.end_pos.add(_delta);\n var _hitResult = paper.project.hitTest(this.end_pos);\n this.renderer.findTarget(_hitResult);\n this.redraw();\n },\n mouseup: function(_event, _isTouch) {\n var _hitResult = paper.project.hitTest(_event.point),\n _model = this.from_representation.model,\n _endDrag = true;\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _target = _hitResult.item.__representation;\n if (_target.type.substr(0,4) === \"Node\") {\n var _destmodel = _target.model || _target.source_representation.model;\n if (_model !== _destmodel) {\n var _data = {\n id: Utils.getUID('edge'),\n created_by: this.renkan.current_user,\n from: _model,\n to: _destmodel,\n origin: this.origin\n };\n if (this.renderer.isEditable()) {\n this.project.addEdge(_data);\n }\n }\n }\n\n if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {\n _endDrag = false;\n this.renderer.is_dragging = true;\n }\n }\n if (_endDrag) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentation(this);\n paper.view.draw();\n }\n },\n destroy: function() {\n this.arrow.remove();\n this.line.remove();\n }\n }).value();\n\n /* TempEdge Class End */\n\n return TempEdge;\n\n});\n\n\ndefine('renderer/baseeditor',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _BaseEditor Begin */\n //var _BaseEditor = Renderer._BaseEditor = Utils.inherit(Renderer._BaseRepresentation);\n var _BaseEditor = Utils.inherit(BaseRepresentation);\n\n _(_BaseEditor.prototype).extend({\n _init: function() {\n this.renderer.buttons_layer.activate();\n this.type = \"editor\";\n this.editor_block = new paper.Path();\n var _pts = _.map(_.range(8), function() {return [0,0];});\n this.editor_block.add.apply(this.editor_block, _pts);\n this.editor_block.strokeWidth = this.options.tooltip_border_width;\n this.editor_block.strokeColor = this.options.tooltip_border_color;\n this.editor_block.opacity = this.options.tooltip_opacity;\n this.editor_$ = $('
                                                                            ')\n .appendTo(this.renderer.editor_$)\n .css({\n position: \"absolute\",\n opacity: this.options.tooltip_opacity\n })\n .hide();\n },\n destroy: function() {\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* _BaseEditor End */\n\n return _BaseEditor;\n\n});\n\n\ndefine('renderer/nodeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor', 'renderer/shapebuilder', 'ckeditor-core'], function ($, _, requtils, BaseEditor, ShapeBuilder, CKEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditor Begin */\n //var NodeEditor = Renderer.NodeEditor = Utils.inherit(Renderer._BaseEditor);\n var NodeEditor = Utils.inherit(BaseEditor);\n\n _(NodeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/nodeeditor.html'];\n //fusionner avec this.options.node_editor_templates\n this.readOnlyTemplate = this.options.node_editor_templates;\n },\n draw: function() {\n var _model = this.source_representation.model,\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate[_model.get(\"type\")] || this.readOnlyTemplate[\"default\"]),\n _image_placeholder = this.options.static_url + \"img/image-placeholder.png\",\n _size = (_model.get(\"size\") || 0);\n this.editor_$\n .html(_template({\n node: {\n _id: _model.get(\"_id\"),\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n type: _model.get(\"type\") || \"default\",\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n image: _model.get(\"image\") || \"\",\n image_placeholder: _image_placeholder,\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n title_size: (_model.has(\"style\") && _model.get(\"style\").title_size) || 1,\n title_color: (_model.has(\"style\") && _model.get(\"style\").title_color) || this.options.node_title_color,\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n clip_path: _model.get(\"clip_path\") || false,\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\"),\n size: (_size > 0 ? \"+\" : \"\") + _size,\n shape: _model.get(\"shape\") || \"circle\"\n },\n renkan: this.renkan,\n options: this.options,\n shortenText: Utils.shortenText,\n shapes : _(ShapeBuilder.builders).omit('svg').keys().value(),\n types : _(this.options.node_editor_templates).keys().value(),\n }));\n this.redraw();\n var _this = this,\n editorInstance = (this.renderer.isEditable() && _this.options.show_node_editor_description_richtext) ?\n CKEditor.inline(\"Rk-Edit-Description-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n editorInstanceTitle = (this.renderer.isEditable() && _this.options.show_node_editor_title_richtext) ?\n CKEditor.inline(\"Rk-Edit-Title-\"+_model.get(\"_id\"), _this.options.richtext_editor_config) :\n false,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n paper.view.draw();\n };\n\n _this.cleanEditor = function() {\n _this.editor_$.off(\"keyup\");\n _this.editor_$.find(\"input, textarea, select\").off(\"change keyup paste\");\n _this.editor_$.find(\".Rk-Edit-Image-File\").off('change');\n _this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").off('hover');\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n _this.editor_$.find(\".Rk-Edit-Image-Del\").off('click');\n _this.editor_$.find(\".Rk-Edit-ColorPicker\").find(\"li\").off('hover click');\n _this.editor_$.find(\".Rk-CloseX\").off('click');\n _this.editor_$.find(\".Rk-Edit-Goto\").off('click');\n\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance) {\n editorInstance.focusManager.blur(true);\n editorInstance.destroy();\n }\n }\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle) {\n editorInstanceTitle.focusManager.blur(true);\n editorInstanceTitle.destroy();\n }\n }\n };\n\n this.editor_$.find(\".Rk-CloseX\").click(function (e) {\n e.preventDefault();\n closeEditor();\n });\n\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {};\n if (_this.options.show_node_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n }\n if (_this.options.show_node_editor_image) {\n _data.image = _this.editor_$.find(\".Rk-Edit-Image\").val();\n _this.editor_$.find(\".Rk-Edit-ImgPreview\").attr(\"src\", _data.image || _image_placeholder);\n }\n if (_this.options.show_node_editor_description) {\n if(_this.options.show_node_editor_description_richtext) {\n if(editorInstance &&\n editorInstance.checkDirty()) {\n _data.description = editorInstance.getData();\n editorInstance.resetDirty();\n }\n }\n else {\n _data.description = _this.editor_$.find(\".Rk-Edit-Description\").val();\n }\n }\n if (_this.options.show_node_editor_title) {\n if(_this.options.show_node_editor_title_richtext) {\n if(editorInstanceTitle &&\n editorInstanceTitle.checkDirty()) {\n _data.title = editorInstanceTitle.getData();\n editorInstanceTitle.resetDirty();\n }\n }\n else {\n _data.title = _this.editor_$.find(\".Rk-Edit-Title\").val();\n }\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash});\n }\n if (_this.options.change_shapes) {\n if(_model.get(\"shape\")!==_this.editor_$.find(\".Rk-Edit-Shape\").val()){\n _data.shape = _this.editor_$.find(\".Rk-Edit-Shape\").val();\n }\n }\n if (_this.options.change_types) {\n if(_model.get(\"type\")!==_this.editor_$.find(\".Rk-Edit-Type\").val()){\n _data.type = _this.editor_$.find(\".Rk-Edit-Type\").val();\n }\n }\n _model.set(_data);\n _this.redraw();\n } else {\n closeEditor();\n }\n });\n }, 1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input, textarea, select\").on(\"change keyup paste\", onFieldChange);\n if( _this.options.show_node_editor_description &&\n _this.options.show_node_editor_description_richtext &&\n editorInstance)\n {\n editorInstance.on(\"change\", onFieldChange);\n editorInstance.on(\"blur\", onFieldChange);\n }\n\n if( _this.options.show_node_editor_title &&\n _this.options.show_node_editor_title_richtext &&\n editorInstanceTitle)\n {\n editorInstanceTitle.on(\"change\", onFieldChange);\n editorInstanceTitle.on(\"blur\", onFieldChange);\n }\n\n if(_this.options.allow_image_upload) {\n this.editor_$.find(\".Rk-Edit-Image-File\").change(function() {\n if (this.files.length) {\n var f = this.files[0],\n fr = new FileReader();\n if (f.type.substr(0,5) !== \"image\") {\n alert(_this.renkan.translate(\"This file is not an image\"));\n return;\n }\n if (f.size > (_this.options.uploaded_image_max_kb * 1024)) {\n alert(_this.renkan.translate(\"Image size must be under \") + _this.options.uploaded_image_max_kb + _this.renkan.translate(\"KB\"));\n return;\n }\n fr.onload = function(e) {\n _this.editor_$.find(\".Rk-Edit-Image\").val(e.target.result);\n onFieldChange();\n };\n fr.readAsDataURL(f);\n }\n });\n }\n this.editor_$.find(\".Rk-Edit-Title\")[0].focus();\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Node\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color) || (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n var shiftSize = function(n) {\n if (_this.renderer.isEditable()) {\n var _newsize = n+(_model.get(\"size\") || 0);\n _this.editor_$.find(\"#Rk-Edit-Size-Value\").text((_newsize > 0 ? \"+\" : \"\") + _newsize);\n _model.set(\"size\", _newsize);\n paper.view.draw();\n } else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Size-Down\").click(function() {\n shiftSize(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Size-Up\").click(function() {\n shiftSize(1);\n return false;\n });\n\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n\n var shiftTitleSize = function(n) {\n var min = _this.options.node_title_size_min;\n var max = _this.options.node_title_size_max;\n if (_this.renderer.isEditable()) {\n var _oldTitleSize = ((_model.has('style') && _model.get('style').title_size) || 1),\n _newTitleSize = n + _oldTitleSize;\n if(_newTitleSize < min ) {\n _newTitleSize = min;\n }\n else if (_newTitleSize > max) {\n _newTitleSize = max;\n }\n if (_newTitleSize !== _oldTitleSize) {\n _this.editor_$.find(\"#Rk-Edit-Title-Size-Value\").text(_newTitleSize.toFixed(1));\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_size: _newTitleSize}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n\n var _pickerTitle = _this.editor_$.find(\".Rk-Editor-ColorPicker-Title\");\n\n this.editor_$.find(\".Rk-Editor-p-title-color\").hover(\n function(_e) {\n _e.preventDefault();\n _pickerTitle.show();\n },\n function(_e) {\n _e.preventDefault();\n _pickerTitle.hide();\n }\n );\n\n _pickerTitle.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n var title_color = (_model.has(\"style\") && _model.get(\"style\").title_color) || _this.options.node_fill_color;\n _this.editor_$.find(\".Rk-Editor-p-title-color .Rk-Edit-Color\").css(\"background\", title_color);\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {title_color: $(this).attr(\"data-color\")}));\n _pickerTitle.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n\n\n this.editor_$.find(\"#Rk-Edit-Title-Size-Down\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(-step);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Title-Size-Up\").click(function() {\n var step = _this.options.node_title_size_step;\n shiftTitleSize(step);\n return false;\n });\n\n this.editor_$.find(\".Rk-Edit-Image-Del\").click(function() {\n _this.editor_$.find(\".Rk-Edit-Image\").val('');\n onFieldChange();\n return false;\n });\n } else {\n if (typeof this.source_representation.highlighted === \"object\") {\n var titlehtml = this.source_representation.highlighted.replace(_(_model.get(\"title\")).escape(),'$1');\n this.editor_$.find(\".Rk-Display-Title\" + (_model.get(\"uri\") ? \" a\" : \"\")).html(titlehtml);\n if (this.options.show_node_tooltip_description) {\n this.editor_$.find(\".Rk-Display-Description\").html(this.source_representation.highlighted.replace(_(_model.get(\"description\")).escape(),'$1'));\n }\n }\n }\n this.editor_$.find(\"img\").load(function() {\n _this.redraw();\n });\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, this.source_representation.circle_radius * 0.75, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n },\n destroy: function() {\n if(typeof this.cleanEditor !== 'undefined') {\n this.cleanEditor();\n }\n this.editor_block.remove();\n this.editor_$.remove();\n }\n }).value();\n\n /* NodeEditor End */\n\n return NodeEditor;\n\n});\n\n\ndefine('renderer/edgeeditor',['jquery', 'underscore', 'requtils', 'renderer/baseeditor'], function ($, _, requtils, BaseEditor) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditor Begin */\n\n //var EdgeEditor = Renderer.EdgeEditor = Utils.inherit(Renderer._BaseEditor);\n var EdgeEditor = Utils.inherit(BaseEditor);\n\n _(EdgeEditor.prototype).extend({\n _init: function() {\n BaseEditor.prototype._init.apply(this);\n this.template = this.options.templates['templates/edgeeditor.html'];\n this.readOnlyTemplate = this.options.templates['templates/edgeeditor_readonly.html'];\n },\n draw: function() {\n var _model = this.source_representation.model,\n _from_model = _model.get(\"from\"),\n _to_model = _model.get(\"to\"),\n _created_by = _model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan),\n _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate);\n this.editor_$\n .html(_template({\n edge: {\n has_creator: !!_model.get(\"created_by\"),\n title: _model.get(\"title\"),\n uri: _model.get(\"uri\"),\n short_uri: Utils.shortenText((_model.get(\"uri\") || \"\").replace(/^(https?:\\/\\/)?(www\\.)?/,'').replace(/\\/$/,''),40),\n description: _model.get(\"description\"),\n color: (_model.has(\"style\") && _model.get(\"style\").color) || _created_by.get(\"color\"),\n dash: _model.has(\"style\") && _model.get(\"style\").dash ? \"checked\" : \"\",\n arrow: (_model.has(\"style\") && _model.get(\"style\").arrow) || !_model.has(\"style\") || (typeof _model.get(\"style\").arrow === 'undefined') ? \"checked\" : \"\",\n thickness: (_model.has(\"style\") && _model.get(\"style\").thickness) || 1,\n from_title: _from_model.get(\"title\"),\n to_title: _to_model.get(\"title\"),\n from_color: (_from_model.has(\"style\") && _from_model.get(\"style\").color) || (_from_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n to_color: (_to_model.has(\"style\") && _to_model.get(\"style\").color) || (_to_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(this.renkan)).get(\"color\"),\n created_by_color: _created_by.get(\"color\"),\n created_by_title: _created_by.get(\"title\")\n },\n renkan: this.renkan,\n shortenText: Utils.shortenText,\n options: this.options\n }));\n this.redraw();\n var _this = this,\n closeEditor = function() {\n _this.renderer.removeRepresentation(_this);\n _this.editor_$.find(\".Rk-Edit-Size-Btn\").off('click');\n paper.view.draw();\n };\n this.editor_$.find(\".Rk-CloseX\").click(closeEditor);\n this.editor_$.find(\".Rk-Edit-Goto\").click(function() {\n if (!_model.get(\"uri\")) {\n return false;\n }\n });\n\n if (this.renderer.isEditable()) {\n\n var onFieldChange = _.debounce(function() {\n _.defer(function() {\n if (_this.renderer.isEditable()) {\n var _data = {\n title: _this.editor_$.find(\".Rk-Edit-Title\").val()\n };\n if (_this.options.show_edge_editor_uri) {\n _data.uri = _this.editor_$.find(\".Rk-Edit-URI\").val();\n }\n if (_this.options.show_node_editor_style) {\n var dash = _this.editor_$.find(\".Rk-Edit-Dash\").is(':checked'),\n arrow = _this.editor_$.find(\".Rk-Edit-Arrow\").is(':checked');\n _data.style = _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {dash: dash, arrow: arrow});\n }\n _this.editor_$.find(\".Rk-Edit-Goto\").attr(\"href\",_data.uri || \"#\");\n _model.set(_data);\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n },1000);\n\n this.editor_$.on(\"keyup\", function(_e) {\n if (_e.keyCode === 27) {\n closeEditor();\n }\n });\n\n this.editor_$.find(\"input\").on(\"keyup change paste\", onFieldChange);\n\n this.editor_$.find(\".Rk-Edit-Vocabulary\").change(function() {\n var e = $(this),\n v = e.val();\n if (v) {\n _this.editor_$.find(\".Rk-Edit-Title\").val(e.find(\":selected\").text());\n _this.editor_$.find(\".Rk-Edit-URI\").val(v);\n onFieldChange();\n }\n });\n this.editor_$.find(\".Rk-Edit-Direction\").click(function() {\n if (_this.renderer.isEditable()) {\n _model.set({\n from: _model.get(\"to\"),\n to: _model.get(\"from\")\n });\n _this.draw();\n } else {\n closeEditor();\n }\n });\n\n var _picker = _this.editor_$.find(\".Rk-Editor-ColorPicker-Edge\");\n\n this.editor_$.find(\".Rk-Edit-ColorPicker-Wrapper\").hover(\n function(_e) {\n _e.preventDefault();\n _picker.show();\n },\n function(_e) {\n _e.preventDefault();\n _picker.hide();\n }\n );\n\n _picker.find(\"li\").hover(\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", $(this).attr(\"data-color\"));\n },\n function(_e) {\n _e.preventDefault();\n _this.editor_$.find(\".Rk-Edit-Color\").css(\"background\", (_model.has(\"style\") && _model.get(\"style\").color)|| (_model.get(\"created_by\") || Utils._USER_PLACEHOLDER(_this.renkan)).get(\"color\"));\n }\n ).click(function(_e) {\n _e.preventDefault();\n if (_this.renderer.isEditable()) {\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {color: $(this).attr(\"data-color\")}));\n _picker.hide();\n paper.view.draw();\n } else {\n closeEditor();\n }\n });\n var shiftThickness = function(n) {\n if (_this.renderer.isEditable()) {\n var _oldThickness = ((_model.has('style') && _model.get('style').thickness) || 1),\n _newThickness = n + _oldThickness;\n if(_newThickness < 1 ) {\n _newThickness = 1;\n }\n else if (_newThickness > _this.options.node_stroke_witdh_scale) {\n _newThickness = _this.options.node_stroke_witdh_scale;\n }\n if (_newThickness !== _oldThickness) {\n _this.editor_$.find(\"#Rk-Edit-Thickness-Value\").text(_newThickness);\n _model.set(\"style\", _.assign( ((_model.has(\"style\") && _.clone(_model.get(\"style\"))) || {}), {thickness: _newThickness}));\n paper.view.draw();\n }\n }\n else {\n closeEditor();\n }\n };\n\n this.editor_$.find(\"#Rk-Edit-Thickness-Down\").click(function() {\n shiftThickness(-1);\n return false;\n });\n this.editor_$.find(\"#Rk-Edit-Thickness-Up\").click(function() {\n shiftThickness(1);\n return false;\n });\n }\n },\n redraw: function() {\n if (this.options.popup_editor){\n var _coords = this.source_representation.paper_coords;\n Utils.drawEditBox(this.options, _coords, this.editor_block, 5, this.editor_$, this.renderer.renkan);\n }\n this.editor_$.show();\n paper.view.draw();\n }\n }).value();\n\n /* EdgeEditor End */\n\n return EdgeEditor;\n\n});\n\n\ndefine('renderer/nodebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* _NodeButton Begin */\n\n //var _NodeButton = Renderer._NodeButton = Utils.inherit(Renderer._BaseButton);\n var _NodeButton = Utils.inherit(BaseButton);\n\n _(_NodeButton.prototype).extend({\n setSectorSize: function() {\n var sectorInner = this.source_representation.circle_radius;\n if (sectorInner !== this.lastSectorInner) {\n if (this.sector) {\n this.sector.destroy();\n }\n this.sector = this.renderer.drawSector(\n this, 1 + sectorInner,\n Utils._NODE_BUTTON_WIDTH + sectorInner,\n this.startAngle,\n this.endAngle,\n 1,\n this.imageName,\n this.renkan.translate(this.text)\n );\n this.lastSectorInner = sectorInner;\n }\n },\n unselect: function() {\n BaseButton.prototype.unselect.apply(this, Array.prototype.slice.call(arguments, 1));\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n this.source_representation.hideButtons();\n }\n },\n select: function() {\n if(this.source_representation && this.source_representation.buttons_timeout) {\n clearTimeout(this.source_representation.buttons_timeout);\n }\n this.sector.select();\n },\n }).value();\n\n\n /* _NodeButton End */\n\n return _NodeButton;\n\n});\n\n\ndefine('renderer/nodeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEditButton Begin */\n\n //var NodeEditButton = Renderer.NodeEditButton = Utils.inherit(Renderer._NodeButton);\n var NodeEditButton = Utils.inherit(NodeButton);\n\n _(NodeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Node-edit-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -125 : -135;\n this.endAngle = this.options.hide_nodes ? -55 : -45;\n this.imageName = \"edit\";\n this.text = \"Edit\";\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* NodeEditButton End */\n\n return NodeEditButton;\n\n});\n\n\ndefine('renderer/noderemovebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeRemoveButton = Utils.inherit(NodeButton);\n\n _(NodeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Node-remove-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -10 : 0;\n this.endAngle = this.options.hide_nodes ? 45 : 90;\n this.imageName = \"remove\";\n this.text = \"Remove\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove node ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeNode(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeRemoveButton;\n\n});\n\n\ndefine('renderer/nodehidebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeHideButton = Utils.inherit(NodeButton);\n\n _(NodeHideButton.prototype).extend({\n _init: function() {\n this.type = \"Node-hide-button\";\n this.lastSectorInner = 0;\n this.startAngle = 45;\n this.endAngle = 90;\n this.imageName = \"hide\";\n this.text = \"Hide\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.renderer.view.addHiddenNode(this.source_representation.model);\n }\n }\n }).value();\n\n /* NodeRemoveButton End */\n\n return NodeHideButton;\n\n});\n\n\ndefine('renderer/nodeshowbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRemoveButton Begin */\n\n //var NodeRemoveButton = Renderer.NodeRemoveButton = Utils.inherit(Renderer._NodeButton);\n var NodeShowButton = Utils.inherit(NodeButton);\n\n _(NodeShowButton.prototype).extend({\n _init: function() {\n this.type = \"Node-show-button\";\n this.lastSectorInner = 0;\n this.startAngle = 90;\n this.endAngle = 135;\n this.imageName = \"show\";\n this.text = \"Show neighbors\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n this.source_representation.showNeighbors(false);\n }\n }\n }).value();\n\n /* NodeShowButton End */\n\n return NodeShowButton;\n\n});\n\n\ndefine('renderer/noderevertbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeRevertButton Begin */\n\n //var NodeRevertButton = Renderer.NodeRevertButton = Utils.inherit(Renderer._NodeButton);\n var NodeRevertButton = Utils.inherit(NodeButton);\n\n _(NodeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Node-revert-button\";\n this.lastSectorInner = 0;\n this.startAngle = -135;\n this.endAngle = 135;\n this.imageName = \"revert\";\n this.text = \"Cancel deletion\";\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* NodeRevertButton End */\n\n return NodeRevertButton;\n\n});\n\n\ndefine('renderer/nodelinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeLinkButton Begin */\n\n //var NodeLinkButton = Renderer.NodeLinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeLinkButton = Utils.inherit(NodeButton);\n\n _(NodeLinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-link-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? 135 : 90;\n this.endAngle = this.options.hide_nodes ? 190 : 180;\n this.imageName = \"link\";\n this.text = \"Link to another node\";\n },\n mousedown: function(_event, _isTouch) {\n if (this.renderer.isEditable()) {\n var _off = this.renderer.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.renderer.click_target = null;\n this.renderer.removeRepresentationsOfType(\"editor\");\n this.renderer.addTempEdge(this.source_representation, _point, Utils.OriginEnum.EDGE_BUTTON_CIRCLE);\n }\n }\n }).value();\n\n /* NodeLinkButton End */\n\n return NodeLinkButton;\n\n});\n\n\n\ndefine('renderer/nodeenlargebutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeEnlargeButton Begin */\n\n //var NodeEnlargeButton = Renderer.NodeEnlargeButton = Utils.inherit(Renderer._NodeButton);\n var NodeEnlargeButton = Utils.inherit(NodeButton);\n\n _(NodeEnlargeButton.prototype).extend({\n _init: function() {\n this.type = \"Node-enlarge-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -55 : -45;\n this.endAngle = this.options.hide_nodes ? -10 : 0;\n this.imageName = \"enlarge\";\n this.text = \"Enlarge\";\n },\n mouseup: function() {\n var _newsize = 1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeEnlargeButton End */\n\n return NodeEnlargeButton;\n\n});\n\n\ndefine('renderer/nodeshrinkbutton',['jquery', 'underscore', 'requtils', 'renderer/nodebutton'], function ($, _, requtils, NodeButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* NodeShrinkButton Begin */\n\n //var NodeShrinkButton = Renderer.NodeShrinkButton = Utils.inherit(Renderer._NodeButton);\n var NodeShrinkButton = Utils.inherit(NodeButton);\n\n _(NodeShrinkButton.prototype).extend({\n _init: function() {\n this.type = \"Node-shrink-button\";\n this.lastSectorInner = 0;\n this.startAngle = this.options.hide_nodes ? -170 : -180;\n this.endAngle = this.options.hide_nodes ? -125 : -135;\n this.imageName = \"shrink\";\n this.text = \"Shrink\";\n },\n mouseup: function() {\n var _newsize = -1 + (this.source_representation.model.get(\"size\") || 0);\n this.source_representation.model.set(\"size\", _newsize);\n this.source_representation.select();\n this.select();\n paper.view.draw();\n }\n }).value();\n\n /* NodeShrinkButton End */\n\n return NodeShrinkButton;\n\n});\n\n\ndefine('renderer/edgeeditbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeEditButton Begin */\n\n //var EdgeEditButton = Renderer.EdgeEditButton = Utils.inherit(Renderer._BaseButton);\n var EdgeEditButton = Utils.inherit(BaseButton);\n\n _(EdgeEditButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-edit-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -270, -90, 1, \"edit\", this.renkan.translate(\"Edit\"));\n },\n mouseup: function() {\n if (!this.renderer.is_dragging) {\n this.source_representation.openEditor();\n }\n }\n }).value();\n\n /* EdgeEditButton End */\n\n return EdgeEditButton;\n\n});\n\n\ndefine('renderer/edgeremovebutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRemoveButton Begin */\n\n //var EdgeRemoveButton = Renderer.EdgeRemoveButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRemoveButton = Utils.inherit(BaseButton);\n\n _(EdgeRemoveButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-remove-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -90, 90, 1, \"remove\", this.renkan.translate(\"Remove\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n this.renderer.removeRepresentationsOfType(\"editor\");\n if (this.renderer.isEditable()) {\n if (this.options.element_delete_delay) {\n var delid = Utils.getUID(\"delete\");\n this.renderer.delete_list.push({\n id: delid,\n time: new Date().valueOf() + this.options.element_delete_delay\n });\n this.source_representation.model.set(\"delete_scheduled\", delid);\n } else {\n if (confirm(this.renkan.translate('Do you really wish to remove edge ') + '\"' + this.source_representation.model.get(\"title\") + '\"?')) {\n this.project.removeEdge(this.source_representation.model);\n }\n }\n }\n }\n }).value();\n\n /* EdgeRemoveButton End */\n\n return EdgeRemoveButton;\n\n});\n\n\ndefine('renderer/edgerevertbutton',['jquery', 'underscore', 'requtils', 'renderer/basebutton'], function ($, _, requtils, BaseButton) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* EdgeRevertButton Begin */\n\n //var EdgeRevertButton = Renderer.EdgeRevertButton = Utils.inherit(Renderer._BaseButton);\n var EdgeRevertButton = Utils.inherit(BaseButton);\n\n _(EdgeRevertButton.prototype).extend({\n _init: function() {\n this.type = \"Edge-revert-button\";\n this.sector = this.renderer.drawSector(this, Utils._EDGE_BUTTON_INNER, Utils._EDGE_BUTTON_OUTER, -135, 135, 1, \"revert\", this.renkan.translate(\"Cancel deletion\"));\n },\n mouseup: function() {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n if (this.renderer.isEditable()) {\n this.source_representation.model.unset(\"delete_scheduled\");\n }\n }\n }).value();\n\n /* EdgeRevertButton End */\n\n return EdgeRevertButton;\n\n});\n\n\ndefine('renderer/miniframe',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* MiniFrame Begin */\n\n //var MiniFrame = Renderer.MiniFrame = Utils.inherit(Renderer._BaseRepresentation);\n var MiniFrame = Utils.inherit(BaseRepresentation);\n\n _(MiniFrame.prototype).extend({\n paperShift: function(_delta) {\n this.renderer.offset = this.renderer.offset.subtract(_delta.divide(this.renderer.minimap.scale).multiply(this.renderer.scale));\n this.renderer.redraw();\n },\n mouseup: function(_delta) {\n this.renderer.click_target = null;\n this.renderer.is_dragging = false;\n }\n }).value();\n\n\n /* MiniFrame End */\n\n return MiniFrame;\n\n});\n\n\ndefine('renderer/scene',['jquery', 'underscore', 'filesaver', 'requtils', 'renderer/miniframe', 'screenfull'], function ($, _, filesaver, requtils, MiniFrame, Screenfull) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Scene Begin */\n\n var Scene = function(_renkan) {\n this.renkan = _renkan;\n this.$ = $(\".Rk-Render\");\n this.representations = [];\n this.$.html(_renkan.options.templates['templates/scene.html'](_renkan));\n this.onStatusChange();\n this.canvas_$ = this.$.find(\".Rk-Canvas\");\n this.labels_$ = this.$.find(\".Rk-Labels\");\n if (!_renkan.options.popup_editor){\n this.editor_$ = $(\"#\" + _renkan.options.editor_panel);\n }else{\n this.editor_$ = this.$.find(\".Rk-Editor\");\n }\n this.notif_$ = this.$.find(\".Rk-Notifications\");\n paper.setup(this.canvas_$[0]);\n this.totalScroll = 0;\n this.mouse_down = false;\n this.click_target = null;\n this.selected_target = null;\n this.edge_layer = new paper.Layer();\n this.node_layer = new paper.Layer();\n this.buttons_layer = new paper.Layer();\n this.delete_list = [];\n this.redrawActive = false;\n\n if (_renkan.options.show_minimap) {\n this.minimap = {\n background_layer: new paper.Layer(),\n edge_layer: new paper.Layer(),\n node_layer: new paper.Layer(),\n node_group: new paper.Group(),\n size: new paper.Size( _renkan.options.minimap_width, _renkan.options.minimap_height )\n };\n\n this.minimap.background_layer.activate();\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle = new paper.Path.Rectangle(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.rectangle.fillColor = _renkan.options.minimap_background_color;\n this.minimap.rectangle.strokeColor = _renkan.options.minimap_border_color;\n this.minimap.rectangle.strokeWidth = 4;\n this.minimap.offset = new paper.Point(this.minimap.size.divide(2));\n this.minimap.scale = 0.1;\n\n this.minimap.node_layer.activate();\n this.minimap.cliprectangle = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.cliprectangle);\n this.minimap.node_group.clipped = true;\n this.minimap.miniframe = new paper.Path.Rectangle(this.minimap.topleft, this.minimap.size);\n this.minimap.node_group.addChild(this.minimap.miniframe);\n this.minimap.miniframe.fillColor = '#c0c0ff';\n this.minimap.miniframe.opacity = 0.3;\n this.minimap.miniframe.strokeColor = '#000080';\n this.minimap.miniframe.strokeWidth = 2;\n this.minimap.miniframe.__representation = new MiniFrame(this, null);\n }\n\n this.throttledPaperDraw = _(function() {\n paper.view.draw();\n }).throttle(100).value();\n\n this.bundles = [];\n this.click_mode = false;\n\n var _this = this,\n _allowScroll = true,\n _originalScale = 1,\n _zooming = false,\n _lastTapX = 0,\n _lastTapY = 0,\n _lastTap = 0;\n\n this.image_cache = {};\n this.icon_cache = {};\n\n ['edit', 'remove', 'hide', 'show', 'link', 'enlarge', 'shrink', 'revert' ].forEach(function(imgname) {\n var img = new Image();\n img.src = _renkan.options.static_url + 'img/' + imgname + '.png';\n _this.icon_cache[imgname] = img;\n });\n\n var throttledMouseMove = _.throttle(function(_event, _isTouch) {\n _this.onMouseMove(_event, _isTouch);\n }, Utils._MOUSEMOVE_RATE);\n\n this.canvas_$.on({\n mousedown: function(_event) {\n _event.preventDefault();\n _this.onMouseDown(_event, false);\n },\n mousemove: function(_event) {\n _event.preventDefault();\n throttledMouseMove(_event, false);\n },\n mouseup: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event, false);\n },\n mousewheel: function(_event, _delta) {\n if(_renkan.options.zoom_on_scroll) {\n _event.preventDefault();\n if (_allowScroll) {\n _this.onScroll(_event, _delta);\n }\n }\n },\n touchstart: function(_event) {\n _event.preventDefault();\n var _touches = _event.originalEvent.touches[0];\n if (\n _renkan.options.allow_double_click &&\n new Date() - _lastTap < Utils._DOUBLETAP_DELAY &&\n ( Math.pow(_lastTapX - _touches.pageX, 2) + Math.pow(_lastTapY - _touches.pageY, 2) < Utils._DOUBLETAP_DISTANCE )\n ) {\n _lastTap = 0;\n _this.onDoubleClick(_touches);\n } else {\n _lastTap = new Date();\n _lastTapX = _touches.pageX;\n _lastTapY = _touches.pageY;\n _originalScale = _this.view.scale;\n _zooming = false;\n _this.onMouseDown(_touches, true);\n }\n },\n touchmove: function(_event) {\n _event.preventDefault();\n _lastTap = 0;\n if (_event.originalEvent.touches.length === 1) {\n _this.onMouseMove(_event.originalEvent.touches[0], true);\n } else {\n if (!_zooming) {\n _this.onMouseUp(_event.originalEvent.touches[0], true);\n _this.click_target = null;\n _this.is_dragging = false;\n _zooming = true;\n }\n if (_event.originalEvent.scale === \"undefined\") {\n return;\n }\n var _newScale = _event.originalEvent.scale * _originalScale,\n _scaleRatio = _newScale / _this.view.scale,\n _newOffset = new paper.Point([\n _this.canvas_$.width(),\n _this.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - _scaleRatio ) ).add(_this.view.offset.multiply( _scaleRatio ));\n _this.view.setScale(_newScale, _newOffset);\n }\n },\n touchend: function(_event) {\n _event.preventDefault();\n _this.onMouseUp(_event.originalEvent.changedTouches[0], true);\n },\n click: function(_event) {\n _event.preventDefault();\n _this.onClick(_event);\n },\n dblclick: function(_event) {\n _event.preventDefault();\n if (_renkan.options.allow_double_click) {\n _this.onDoubleClick(_event);\n }\n },\n mouseleave: function(_event) {\n _event.preventDefault();\n //_this.onMouseUp(_event, false);\n _this.click_target = null;\n _this.is_dragging = false;\n },\n dragover: function(_event) {\n _event.preventDefault();\n },\n dragenter: function(_event) {\n _event.preventDefault();\n _allowScroll = false;\n },\n dragleave: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n },\n drop: function(_event) {\n _event.preventDefault();\n _allowScroll = true;\n var res = {};\n _.each(_event.originalEvent.dataTransfer.types, function(t) {\n try {\n res[t] = _event.originalEvent.dataTransfer.getData(t);\n } catch(e) {}\n });\n var text = _event.originalEvent.dataTransfer.getData(\"Text\");\n if (typeof text === \"string\") {\n switch(text[0]) {\n case \"{\":\n case \"[\":\n try {\n var data = JSON.parse(text);\n _.extend(res,data);\n }\n catch(e) {\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n break;\n case \"<\":\n if (!res[\"text/html\"]) {\n res[\"text/html\"] = text;\n }\n break;\n default:\n if (!res[\"text/plain\"]) {\n res[\"text/plain\"] = text;\n }\n }\n }\n var url = _event.originalEvent.dataTransfer.getData(\"URL\");\n if (url && !res[\"text/uri-list\"]) {\n res[\"text/uri-list\"] = url;\n }\n _this.dropData(res, _event.originalEvent);\n }\n });\n\n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n\n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n this.$.find(\".Rk-CurrentUser\").mouseenter(\n function() { _this.$.find(\".Rk-UserList\").slideDown(); }\n );\n this.$.find(\".Rk-Users\").mouseleave(\n function() { _this.$.find(\".Rk-UserList\").slideUp(); }\n );\n\n if (Screenfull.enabled){\n bindClick(\".Rk-FullScreen-Button\", \"fullScreen\");\n\n document.addEventListener(Screenfull.raw.fullscreenchange, function () {\n //the listener occur too randomly and sometimes before the fullscreen is fully set up\n //so we add 500 delay\n setTimeout(function(){\n var widthAft = _this.$.width();\n var heightAft = _this.$.height();\n\n if (_this.renkan.options.show_top_bar) {\n heightAft -= _this.$.find(\".Rk-TopBar\").height();\n }\n if (_this.renkan.options.show_bins && (this.renkan.$.find(\".Rk-Bins\").position().left > 0)) {\n widthAft -= this.renkan.$.find(\".Rk-Bins\").width();\n }\n\n paper.view.viewSize = new paper.Size([widthAft, heightAft]);\n _this.resize(_this.currentWidth, widthAft, _this.currentHeight, heightAft);\n\n _this.currentWidth = widthAft;\n _this.currentHeight = heightAft;\n\n if (!Screenfull.isFullscreen) {\n paper.view.onResize = function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n };\n }\n }, 600);\n });\n } else {\n this.$.find(\".Rk-FullScreen-Button\").addClass(\"disabled\");\n this.$.find(\".Rk-FullScreen-Button .Rk-TopBar-Tooltip-Contents\").html(this.renkan.translate(\"Fullscreen not supported by your browser\"));\n }\n\n bindClick(\".Rk-AddNode-Button\", \"addNodeBtn\");\n bindClick(\".Rk-AddEdge-Button\", \"addEdgeBtn\");\n bindClick(\".Rk-Save-Button\", \"save\");\n bindClick(\".Rk-Open-Button\", \"open\");\n bindClick(\".Rk-Export-Button\", \"exportProject\");\n this.$.find(\".Rk-Bookmarklet-Button\")\n /*jshint scripturl:true */\n .attr(\"href\",\"javascript:\" + Utils._BOOKMARKLET_CODE(_renkan))\n .click(function(){\n _this.notif_$\n .text(_renkan.translate(\"Drag this button to your bookmark bar. When on a third-party website, click it to enable drag-and-drop from the website to Renkan.\"))\n .fadeIn()\n .delay(5000)\n .fadeOut();\n return false;\n });\n this.$.find(\".Rk-TopBar-Button\").mouseover(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").show();\n }).mouseout(function() {\n $(this).find(\".Rk-TopBar-Tooltip\").hide();\n });\n bindClick(\".Rk-Fold-Bins\", \"foldBins\");\n\n paper.view.on(\"resize\", function(_event) {\n var newWidth = _event.size._width,\n newHeight = _event.size._height;\n var prevHeight = newHeight - _event.delta.height,\n prevWidth = newWidth - _event.delta.width;\n\n _this.resize(prevWidth, newWidth, prevHeight, newHeight);\n });\n\n var _thRedraw = _.throttle(function() {\n _this.redraw();\n },50);\n\n this.addRepresentations(\"Node\", this.renkan.project.get(\"nodes\"));\n this.addRepresentations(\"Edge\", this.renkan.project.get(\"edges\"));\n this.renkan.project.on(\"change:title\", function() {\n _this.$.find(\".Rk-PadTitle\").val(_renkan.project.get(\"title\")).prop('title', _renkan.project.get(\"title\"));\n });\n\n this.$.find(\".Rk-PadTitle\").on(\"keyup input paste\", function() {\n _renkan.project.set({\"title\": $(this).val()});\n });\n\n var _thRedrawUsers = _.throttle(function() {\n _this.redrawUsers();\n }, 100);\n\n _thRedrawUsers();\n\n // register model events\n this.renkan.project.on(\"change:saveStatus\", function(){\n switch (_this.renkan.project.get(\"saveStatus\")) {\n case 0: //clean\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saved\");\n break;\n case 1: //dirty\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saving\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"to-save\");\n break;\n case 2: //saving\n _this.$.find(\".Rk-Save-Button\").removeClass(\"saved\");\n _this.$.find(\".Rk-Save-Button\").removeClass(\"to-save\");\n _this.$.find(\".Rk-Save-Button\").addClass(\"saving\");\n break;\n }\n });\n\n this.renkan.project.on(\"loaded\", function(){\n if (_this.renkan.options.url_parameters){\n Backbone.history.start();\n } else {\n _this.fixSize();\n }\n _this.redrawActive = true;\n _thRedraw();\n });\n\n //register router events\n this.renkan.router.on(\"router\", function(_params){\n _this.setViewParameters(_params);\n });\n\n this.renkan.project.on(\"change:loadingStatus\", function(){\n if (_this.renkan.project.get(\"loadingStatus\")){\n var animate = _this.$.find(\".loader\").addClass(\"run\");\n var timer = setTimeout(function(){\n _this.$.find(\".loader\").hide(250);\n }, 3000);\n }\n });\n\n this.renkan.project.on(\"add:users remove:users\", _thRedrawUsers);\n\n this.renkan.project.on(\"add:views remove:views\", function(_node) {\n if(_this.renkan.project.get('views').length > 1) {\n _this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n else {\n _this.$.find(\".Rk-ZoomSetSaved\").hide();\n }\n });\n\n this.renkan.project.on(\"add:nodes\", function(_node) {\n _this.addRepresentation(\"Node\", _node);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"add:edges\", function(_edge) {\n _this.addRepresentation(\"Edge\", _edge);\n if (!_this.renkan.project.get(\"loadingStatus\")){\n _thRedraw();\n }\n });\n this.renkan.project.on(\"change:title\", function(_model, _title) {\n var el = _this.$.find(\".Rk-PadTitle\");\n if (el.is(\"input\")) {\n if (el.val() !== _title) {\n el.val(_title);\n }\n } else {\n el.text(_title);\n }\n });\n\n if (_renkan.options.size_bug_fix) {\n var _delay = (\n typeof _renkan.options.size_bug_fix === \"number\" ?\n _renkan.options.size_bug_fix\n : 500\n );\n window.setTimeout(\n function() {\n _this.fixSize();\n },\n _delay\n );\n }\n\n if (_renkan.options.force_resize) {\n $(window).resize(function() {\n _this.autoScale();\n });\n }\n\n if (_renkan.options.show_user_list && _renkan.options.user_color_editable) {\n var $cpwrapper = this.$.find(\".Rk-Users .Rk-Edit-ColorPicker-Wrapper\"),\n $cplist = this.$.find(\".Rk-Users .Rk-Editor-ColorPicker-User\");\n\n $cpwrapper.hover(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n $cplist.show();\n }\n },\n function(_e) {\n _e.preventDefault();\n $cplist.hide();\n }\n );\n\n $cplist.find(\"li\").mouseenter(\n function(_e) {\n if (_this.isEditable()) {\n _e.preventDefault();\n _this.$.find(\".Rk-CurrentUser-Color\").css(\"background\", $(this).attr(\"data-color\"));\n }\n }\n );\n }\n\n if (_renkan.options.show_search_field) {\n\n var lastval = '';\n\n this.$.find(\".Rk-GraphSearch-Field\").on(\"keyup change paste input\", function() {\n var $this = $(this),\n val = $this.val();\n if (val === lastval) {\n return;\n }\n lastval = val;\n if (val.length < 2) {\n _renkan.project.get(\"nodes\").each(function(n) {\n _this.getRepresentationByModel(n).unhighlight();\n });\n _renkan.project.get(\"edges\").each(function(e) {\n _this.getRepresentationByModel(e).unhighlight();\n });\n } else {\n var rxs = Utils.regexpFromTextOrArray(val);\n _renkan.project.get(\"nodes\").each(function(n) {\n if (n.id === val || rxs.test(n.get(\"title\")) || rxs.test(n.get(\"description\"))) {\n _this.getRepresentationByModel(n).highlight(rxs);\n } else {\n _this.getRepresentationByModel(n).unhighlight();\n }\n });\n _renkan.project.get(\"edges\").each(function(e) {\n if (e.id === val || rxs.test(e.get(\"title\")) || rxs.test(e.get(\"description\"))) {\n _this.getRepresentationByModel(e).highlight(rxs);\n } else {\n _this.getRepresentationByModel(e).unhighlight();\n }\n });\n\n }\n });\n }\n\n this.redraw();\n\n window.setInterval(function() {\n var _now = new Date().valueOf();\n _this.delete_list.forEach(function(d) {\n if (_now >= d.time) {\n var el = _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeNode(el);\n }\n el = _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n if (el) {\n project.removeEdge(el);\n }\n }\n });\n _this.delete_list = _this.delete_list.filter(function(d) {\n return _renkan.project.get(\"nodes\").findWhere({\"delete_scheduled\":d.id}) || _renkan.project.get(\"edges\").findWhere({\"delete_scheduled\":d.id});\n });\n }, 500);\n\n if (this.minimap) {\n window.setInterval(function() {\n _this.rescaleMinimap();\n }, 2000);\n }\n\n };\n\n _(Scene.prototype).extend({\n fixSize: function() {\n if(typeof this.view === 'undefined') {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").last());\n }\n this.view.autoScale();\n },\n drawSector: function(_repr, _inR, _outR, _startAngle, _endAngle, _padding, _imgname, _caption) {\n var _options = this.renkan.options,\n _startRads = _startAngle * Math.PI / 180,\n _endRads = _endAngle * Math.PI / 180,\n _img = this.icon_cache[_imgname],\n _startdx = - Math.sin(_startRads),\n _startdy = Math.cos(_startRads),\n _startXIn = Math.cos(_startRads) * _inR + _padding * _startdx,\n _startYIn = Math.sin(_startRads) * _inR + _padding * _startdy,\n _startXOut = Math.cos(_startRads) * _outR + _padding * _startdx,\n _startYOut = Math.sin(_startRads) * _outR + _padding * _startdy,\n _enddx = - Math.sin(_endRads),\n _enddy = Math.cos(_endRads),\n _endXIn = Math.cos(_endRads) * _inR - _padding * _enddx,\n _endYIn = Math.sin(_endRads) * _inR - _padding * _enddy,\n _endXOut = Math.cos(_endRads) * _outR - _padding * _enddx,\n _endYOut = Math.sin(_endRads) * _outR - _padding * _enddy,\n _centerR = (_inR + _outR) / 2,\n _centerRads = (_startRads + _endRads) / 2,\n _centerX = Math.cos(_centerRads) * _centerR,\n _centerY = Math.sin(_centerRads) * _centerR,\n _centerXIn = Math.cos(_centerRads) * _inR,\n _centerXOut = Math.cos(_centerRads) * _outR,\n _centerYIn = Math.sin(_centerRads) * _inR,\n _centerYOut = Math.sin(_centerRads) * _outR,\n _textX = Math.cos(_centerRads) * (_outR + 3),\n _textY = Math.sin(_centerRads) * (_outR + _options.buttons_label_font_size) + _options.buttons_label_font_size / 2;\n this.buttons_layer.activate();\n var _path = new paper.Path();\n _path.add([_startXIn, _startYIn]);\n _path.arcTo([_centerXIn, _centerYIn], [_endXIn, _endYIn]);\n _path.lineTo([_endXOut, _endYOut]);\n _path.arcTo([_centerXOut, _centerYOut], [_startXOut, _startYOut]);\n _path.fillColor = _options.buttons_background;\n _path.opacity = 0.5;\n _path.closed = true;\n _path.__representation = _repr;\n var _text = new paper.PointText(_textX,_textY);\n _text.characterStyle = {\n fontSize: _options.buttons_label_font_size,\n fillColor: _options.buttons_label_color\n };\n if (_textX > 2) {\n _text.paragraphStyle.justification = 'left';\n } else if (_textX < -2) {\n _text.paragraphStyle.justification = 'right';\n } else {\n _text.paragraphStyle.justification = 'center';\n }\n _text.visible = false;\n var _visible = false,\n _restPos = new paper.Point(-200, -200),\n _grp = new paper.Group([_path, _text]),\n //_grp = new paper.Group([_path]),\n _delta = _grp.position,\n _imgdelta = new paper.Point([_centerX, _centerY]),\n _currentPos = new paper.Point(0,0);\n _text.content = _caption;\n // set group pivot to not depend on text visibility that changes the group bounding box.\n _grp.pivot = _grp.bounds.center;\n _grp.visible = false;\n _grp.position = _restPos;\n var _res = {\n show: function() {\n _visible = true;\n _grp.position = _currentPos.add(_delta);\n _grp.visible = true;\n },\n moveTo: function(_point) {\n _currentPos = _point;\n if (_visible) {\n _grp.position = _point.add(_delta);\n }\n },\n hide: function() {\n _visible = false;\n _grp.visible = false;\n _grp.position = _restPos;\n },\n select: function() {\n _path.opacity = 0.8;\n _text.visible = true;\n },\n unselect: function() {\n _path.opacity = 0.5;\n _text.visible = false;\n },\n destroy: function() {\n _grp.remove();\n }\n };\n var showImage = function() {\n var _raster = new paper.Raster(_img);\n _raster.position = _imgdelta.add(_grp.position).subtract(_delta);\n _raster.locked = true; // Disable mouse events on icon\n _grp.addChild(_raster);\n };\n if (_img.width) {\n showImage();\n } else {\n $(_img).on(\"load\",showImage);\n }\n\n return _res;\n },\n addToBundles: function(_edgeRepr) {\n var _bundle = _(this.bundles).find(function(_bundle) {\n return (\n ( _bundle.from === _edgeRepr.from_representation && _bundle.to === _edgeRepr.to_representation ) ||\n ( _bundle.from === _edgeRepr.to_representation && _bundle.to === _edgeRepr.from_representation )\n );\n });\n if (typeof _bundle !== \"undefined\") {\n _bundle.edges.push(_edgeRepr);\n } else {\n _bundle = {\n from: _edgeRepr.from_representation,\n to: _edgeRepr.to_representation,\n edges: [ _edgeRepr ],\n getPosition: function(_er) {\n var _dir = (_er.from_representation === this.from) ? 1 : -1;\n return _dir * ( _(this.edges).indexOf(_er) - (this.edges.length - 1) / 2 );\n }\n };\n this.bundles.push(_bundle);\n }\n return _bundle;\n },\n isEditable: function() {\n return (this.renkan.options.editor_mode && !this.renkan.read_only);\n },\n onStatusChange: function() {\n var savebtn = this.$.find(\".Rk-Save-Button\"),\n tip = savebtn.find(\".Rk-TopBar-Tooltip-Contents\");\n if (this.renkan.read_only) {\n savebtn.removeClass(\"disabled Rk-Save-Online\").addClass(\"Rk-Save-ReadOnly\");\n tip.text(this.renkan.translate(\"Connection lost\"));\n } else {\n if (this.renkan.options.manual_save) {\n savebtn.removeClass(\"Rk-Save-ReadOnly Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Save Project\"));\n } else {\n savebtn.removeClass(\"disabled Rk-Save-ReadOnly\").addClass(\"Rk-Save-Online\");\n tip.text(this.renkan.translate(\"Auto-save enabled\"));\n }\n }\n this.redrawUsers();\n },\n redrawMiniframe: function() {\n var topleft = this.toMinimapCoords(this.toModelCoords(new paper.Point([0,0]))),\n bottomright = this.toMinimapCoords(this.toModelCoords(paper.view.bounds.bottomRight));\n this.minimap.miniframe.fitBounds(topleft, bottomright);\n },\n rescaleMinimap: function() {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min(\n this.view.scale * 0.8 * this.renkan.options.minimap_width / paper.view.bounds.width,\n this.view.scale * 0.8 * this.renkan.options.minimap_height / paper.view.bounds.height,\n ( this.renkan.options.minimap_width - 2 * this.renkan.options.minimap_padding ) / (_maxx - _minx),\n ( this.renkan.options.minimap_height - 2 * this.renkan.options.minimap_padding ) / (_maxy - _miny)\n );\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale));\n this.minimap.scale = _scale;\n }\n if (nodes.length === 1) {\n this.minimap.scale = 0.1;\n this.minimap.offset = this.minimap.size.divide(2).subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y]).multiply(this.minimap.scale));\n }\n this.redraw();\n },\n toPaperCoords: function(_point) {\n return _point.multiply(this.view.scale).add(this.view.offset);\n },\n toMinimapCoords: function(_point) {\n return _point.multiply(this.minimap.scale).add(this.minimap.offset).add(this.minimap.topleft);\n },\n toModelCoords: function(_point) {\n return _point.subtract(this.view.offset).divide(this.view.scale);\n },\n addRepresentation: function(_type, _model) {\n var RendererType = requtils.getRenderer()[_type];\n var _repr = new RendererType(this, _model);\n this.representations.push(_repr);\n return _repr;\n },\n addRepresentations: function(_type, _collection) {\n var _this = this;\n _collection.forEach(function(_model) {\n _this.addRepresentation(_type, _model);\n });\n },\n userTemplate: _.template(\n '
                                                                          • ;\"><%=name%>
                                                                          • '\n ),\n redrawUsers: function() {\n if (!this.renkan.options.show_user_list) {\n return;\n }\n var allUsers = [].concat((this.renkan.project.current_user_list || {}).models || [], (this.renkan.project.get(\"users\") || {}).models || []),\n ulistHtml = '',\n $userpanel = this.$.find(\".Rk-Users\"),\n $name = $userpanel.find(\".Rk-CurrentUser-Name\"),\n $cpitems = $userpanel.find(\".Rk-Edit-ColorPicker li\"),\n $colorsquare = $userpanel.find(\".Rk-CurrentUser-Color\"),\n _this = this;\n $name.off(\"click\").text(this.renkan.translate(\"\"));\n $cpitems.off(\"mouseleave click\");\n allUsers.forEach(function(_user) {\n if (_user.get(\"_id\") === _this.renkan.current_user) {\n $name.text(_user.get(\"title\"));\n $colorsquare.css(\"background\", _user.get(\"color\"));\n if (_this.isEditable()) {\n\n if (_this.renkan.options.user_name_editable) {\n $name.click(function() {\n var $this = $(this),\n $input = $('').val(_user.get(\"title\")).blur(function() {\n _user.set(\"title\", $(this).val());\n _this.redrawUsers();\n _this.redraw();\n });\n $this.empty().html($input);\n $input.select();\n });\n }\n\n if (_this.renkan.options.user_color_editable) {\n $cpitems.click(\n function(_e) {\n _e.preventDefault();\n if (_this.isEditable()) {\n _user.set(\"color\", $(this).attr(\"data-color\"));\n }\n $(this).parent().hide();\n }\n ).mouseleave(function() {\n $colorsquare.css(\"background\", _user.get(\"color\"));\n });\n }\n }\n\n } else {\n ulistHtml += _this.userTemplate({\n name: _user.get(\"title\"),\n background: _user.get(\"color\")\n });\n }\n });\n $userpanel.find(\".Rk-UserList\").html(ulistHtml);\n },\n removeRepresentation: function(_representation) {\n _representation.destroy();\n this.representations = _.reject(this.representations,\n function(_repr) {\n return _repr === _representation;\n }\n );\n },\n getRepresentationByModel: function(_model) {\n if (!_model) {\n return undefined;\n }\n return _.find(this.representations, function(_repr) {\n return _repr.model === _model;\n });\n },\n removeRepresentationsOfType: function(_type) {\n var _representations = _.filter(this.representations,function(_repr) {\n return _repr.type === _type;\n }),\n _this = this;\n _.each(_representations, function(_repr) {\n _this.removeRepresentation(_repr);\n });\n },\n highlightModel: function(_model) {\n var _repr = this.getRepresentationByModel(_model);\n if (_repr) {\n _repr.highlight();\n }\n },\n unhighlightAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unhighlight();\n });\n },\n unselectAll: function(_model) {\n _.each(this.representations, function(_repr) {\n _repr.unselect();\n });\n },\n redraw: function() {\n var _this = this;\n if(! this.redrawActive ) {\n return;\n }\n _.each(this.representations, function(_representation) {\n _representation.redraw({ dontRedrawEdges:true });\n });\n if (this.minimap && typeof this.view !== 'undefined') {\n this.redrawMiniframe();\n }\n paper.view.draw();\n },\n resize: function(prevWidth, newWidth, prevHeight, newHeight){\n var _ratio;\n\n if (this.minimap) {\n this.minimap.topleft = paper.view.bounds.bottomRight.subtract(this.minimap.size);\n this.minimap.rectangle.fitBounds(this.minimap.topleft.subtract([2,2]), this.minimap.size.add([4,4]));\n this.minimap.cliprectangle.fitBounds(this.minimap.topleft, this.minimap.size);\n }\n\n var ratioH = newHeight/prevHeight,\n ratioW = newWidth/prevWidth;\n if (newHeight < newWidth) {\n _ratio = ratioH;\n } else {\n _ratio = ratioW;\n }\n this.view.resizeZoom(newWidth - prevWidth, newHeight - prevHeight, _ratio);\n\n this.redraw();\n },\n addTempEdge: function(_from, _point, _origin) {\n var _tmpEdge = this.addRepresentation(\"TempEdge\",null);\n _tmpEdge.end_pos = _point;\n _tmpEdge.from_representation = _from;\n _tmpEdge.origin = _origin;\n _tmpEdge.redraw();\n this.click_target = _tmpEdge;\n },\n findTarget: function(_hitResult) {\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n var _newTarget = _hitResult.item.__representation;\n if (this.selected_target !== _hitResult.item.__representation) {\n if (this.selected_target) {\n this.selected_target.unselect(_newTarget);\n }\n _newTarget.select(this.selected_target);\n this.selected_target = _newTarget;\n }\n } else {\n if (this.selected_target) {\n this.selected_target.unselect();\n }\n this.selected_target = null;\n }\n },\n onMouseMove: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _delta = _point.subtract(this.last_point);\n this.last_point = _point;\n if (!this.is_dragging && this.mouse_down && _delta.length > Utils._MIN_DRAG_DISTANCE) {\n this.is_dragging = true;\n }\n var _hitResult = paper.project.hitTest(_point);\n if (this.is_dragging) {\n if (this.click_target && typeof this.click_target.paperShift === \"function\") {\n this.click_target.paperShift(_delta);\n } else {\n this.view.paperShift(_delta);\n }\n } else {\n this.findTarget(_hitResult);\n }\n paper.view.draw();\n },\n onMouseDown: function(_event, _isTouch) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n this.last_point = _point;\n this.mouse_down = true;\n if (!this.click_target || this.click_target.type !== \"Temp-edge\") {\n this.removeRepresentationsOfType(\"editor\");\n this.is_dragging = false;\n var _hitResult = paper.project.hitTest(_point);\n if (_hitResult && typeof _hitResult.item.__representation !== \"undefined\") {\n this.click_target = _hitResult.item.__representation;\n this.click_target.mousedown(_event, _isTouch);\n } else {\n this.click_target = null;\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_ADDNODE) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_BUTTON\n };\n var _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n }\n }\n if (this.click_mode) {\n if (this.isEditable() && this.click_mode === Utils._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === \"Node\") {\n this.removeRepresentationsOfType(\"editor\");\n this.addTempEdge(this.click_target, _point, Utils.OriginEnum.EDGE_BUTTON_BAR);\n this.click_mode = Utils._CLICKMODE_ENDEDGE;\n this.notif_$.fadeOut(function() {\n $(this).html(this.renkan.translate(\"Click on a second node to complete the edge\")).fadeIn();\n });\n } else {\n this.notif_$.hide();\n this.click_mode = false;\n }\n }\n paper.view.draw();\n },\n onMouseUp: function(_event, _isTouch) {\n this.mouse_down = false;\n if (this.click_target) {\n var _off = this.canvas_$.offset();\n this.click_target.mouseup(\n {\n point: new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ])\n },\n _isTouch\n );\n } else {\n this.click_target = null;\n this.is_dragging = false;\n if (_isTouch) {\n this.unselectAll();\n }\n this.view.updateUrl();\n }\n paper.view.draw();\n },\n onScroll: function(_event, _scrolldelta) {\n this.totalScroll += _scrolldelta;\n if (Math.abs(this.totalScroll) >= 1) {\n var _off = this.canvas_$.offset(),\n _delta = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]).subtract(this.view.offset).multiply( Math.SQRT2 - 1 );\n if (this.totalScroll > 0) {\n this.view.setScale( this.view.scale * Math.SQRT2, this.view.offset.subtract(_delta) );\n } else {\n this.view.setScale( this.view.scale * Math.SQRT1_2, this.view.offset.add(_delta.divide(Math.SQRT2)));\n }\n this.totalScroll = 0;\n }\n },\n onClick: function(_event) {\n if (!this.isEditable()) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n if(!this._open_uri_cb &&\n this.renkan.options.simple_click_open_url && \n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n this._node_click_open_url = setTimeout(function() {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n this._node_click_open_url = null;\n }.bind(this), 200);\n }\n }\n },\n onDoubleClick: function(_event) {\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]);\n var _hitResult = paper.project.hitTest(_point);\n\n if (!this.isEditable()) {\n if (this.renkan.options.double_click_open_url &&\n _hitResult &&\n typeof _hitResult.item.__representation !== \"undefined\" &&\n _hitResult.item.__representation.model.get('uri') &&\n !this._node_click_open_url\n ) {\n window.open(_hitResult.item.__representation.model.get('uri'), '_blank');\n }\n return;\n }\n if (this.isEditable() && (!_hitResult || typeof _hitResult.item.__representation === \"undefined\")) {\n var _coords = this.toModelCoords(_point),\n _data = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n origin: Utils.OriginEnum.NODE_DOUBLE_CLICK\n },\n _node = this.renkan.project.addNode(_data);\n this.getRepresentationByModel(_node).openEditor();\n }\n paper.view.draw();\n },\n defaultDropHandler: function(_data) {\n var newNode = {};\n var snippet = \"\";\n switch(_data[\"text/x-iri-specific-site\"]) {\n case \"twitter\":\n snippet = $('
                                                                            ').html(_data[\"text/x-iri-selected-html\"]);\n var tweetdiv = snippet.find(\".tweet\");\n newNode.title = this.renkan.translate(\"Tweet by \") + tweetdiv.attr(\"data-name\");\n newNode.uri = \"http://twitter.com/\" + tweetdiv.attr(\"data-screen-name\") + \"/status/\" + tweetdiv.attr(\"data-tweet-id\");\n newNode.image = tweetdiv.find(\".avatar\").attr(\"src\");\n newNode.description = tweetdiv.find(\".js-tweet-text:first\").text();\n break;\n case \"google\":\n snippet = $('
                                                                            ').html(_data[\"text/x-iri-selected-html\"]);\n newNode.title = snippet.find(\"h3:first\").text().trim();\n newNode.uri = snippet.find(\"h3 a\").attr(\"href\");\n newNode.description = snippet.find(\".st:first\").text().trim();\n break;\n default:\n if (_data[\"text/x-iri-source-uri\"]) {\n newNode.uri = _data[\"text/x-iri-source-uri\"];\n }\n }\n if (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]) {\n newNode.description = (_data[\"text/plain\"] || _data[\"text/x-iri-selected-text\"]).replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                                                            ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n var _svgimgs = snippet.find(\"image\");\n if (_svgimgs.length) {\n newNode.image = _svgimgs.attr(\"xlink:href\");\n }\n var _svgpaths = snippet.find(\"path\");\n if (_svgpaths.length) {\n newNode.clipPath = _svgpaths.attr(\"d\");\n }\n var _imgs = snippet.find(\"img\");\n if (_imgs.length) {\n newNode.image = _imgs[0].src;\n }\n var _as = snippet.find(\"a\");\n if (_as.length) {\n newNode.uri = _as[0].href;\n }\n newNode.title = snippet.find(\"[title]\").attr(\"title\") || newNode.title;\n newNode.description = snippet.text().replace(/[\\s\\n]+/gm,' ').trim();\n }\n if (_data[\"text/uri-list\"]) {\n newNode.uri = _data[\"text/uri-list\"];\n }\n if (_data[\"text/x-moz-url\"] && !newNode.title) {\n newNode.title = (_data[\"text/x-moz-url\"].split(\"\\n\")[1] || \"\").trim();\n if (newNode.title === newNode.uri) {\n newNode.title = false;\n }\n }\n if (_data[\"text/x-iri-source-title\"] && !newNode.title) {\n newNode.title = _data[\"text/x-iri-source-title\"];\n }\n if (_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]) {\n snippet = $('
                                                                            ').html(_data[\"text/html\"] || _data[\"text/x-iri-selected-html\"]);\n newNode.image = snippet.find(\"[data-image]\").attr(\"data-image\") || newNode.image;\n newNode.uri = snippet.find(\"[data-uri]\").attr(\"data-uri\") || newNode.uri;\n newNode.title = snippet.find(\"[data-title]\").attr(\"data-title\") || newNode.title;\n newNode.description = snippet.find(\"[data-description]\").attr(\"data-description\") || newNode.description;\n newNode.clipPath = snippet.find(\"[data-clip-path]\").attr(\"data-clip-path\") || newNode.clipPath;\n }\n\n if (!newNode.title) {\n newNode.title = this.renkan.translate(\"Dragged resource\");\n }\n var fields = [\"title\", \"description\", \"uri\", \"image\"];\n for (var i = 0; i < fields.length; i++) {\n var f = fields[i];\n if (_data[\"text/x-iri-\" + f] || _data[f]) {\n newNode[f] = _data[\"text/x-iri-\" + f] || _data[f];\n }\n if (newNode[f] === \"none\" || newNode[f] === \"null\") {\n newNode[f] = undefined;\n }\n }\n\n if(typeof this.renkan.options.drop_enhancer === \"function\"){\n newNode = this.renkan.options.drop_enhancer(newNode, _data);\n }\n\n return newNode;\n\n },\n dropData: function(_data, _event) {\n if (!this.isEditable()) {\n return;\n }\n if (_data[\"text/json\"] || _data[\"application/json\"]) {\n try {\n var jsondata = JSON.parse(_data[\"text/json\"] || _data[\"application/json\"]);\n _.extend(_data,jsondata);\n }\n catch(e) {}\n }\n\n var newNode = (typeof this.renkan.options.drop_handler === \"undefined\")?this.defaultDropHandler(_data):this.renkan.options.drop_handler(_data);\n\n var _off = this.canvas_$.offset(),\n _point = new paper.Point([\n _event.pageX - _off.left,\n _event.pageY - _off.top\n ]),\n _coords = this.toModelCoords(_point),\n _nodedata = {\n id: Utils.getUID('node'),\n created_by: this.renkan.current_user,\n uri: newNode.uri || \"\",\n title: newNode.title || \"\",\n description: newNode.description || \"\",\n image: newNode.image || \"\",\n color: newNode.color || undefined,\n clip_path: newNode.clipPath || undefined,\n position: {\n x: _coords.x,\n y: _coords.y\n },\n //TODO: Determine if it comes from bin or ext\n origin: Utils.OriginEnum.NODE_DROP_EXT\n };\n var _node = this.renkan.project.addNode(_nodedata),\n _repr = this.getRepresentationByModel(_node);\n if (_event.type === \"drop\") {\n _repr.openEditor();\n }\n },\n fullScreen: function() {\n this.currentWidth = this.$.width();\n this.currentHeight = this.$.height();\n\n var _el = this.renkan.$[0];\n paper.view.off(\"resize\");\n Screenfull.toggle(_el);\n },\n addNodeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_ADDNODE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_ADDNODE;\n this.notif_$.text(this.renkan.translate(\"Click on the background canvas to add a node\")).fadeIn();\n }\n return false;\n },\n addEdgeBtn: function() {\n if (this.click_mode === Utils._CLICKMODE_STARTEDGE || this.click_mode === Utils._CLICKMODE_ENDEDGE) {\n this.click_mode = false;\n this.notif_$.hide();\n } else {\n this.click_mode = Utils._CLICKMODE_STARTEDGE;\n this.notif_$.text(this.renkan.translate(\"Click on a first node to start the edge\")).fadeIn();\n }\n return false;\n },\n exportProject: function() {\n var projectJSON = this.renkan.project.toJSON(),\n downloadLink = document.createElement(\"a\"),\n projectId = projectJSON.id,\n fileNameToSaveAs = projectId + \".json\";\n\n // clean ids\n delete projectJSON.id;\n delete projectJSON._id;\n delete projectJSON.space_id;\n\n var objId,\n idsMap = {},\n hiddenNodes;\n\n _.each(projectJSON.nodes, function(e,i,l) {\n objId = e.id || e._id;\n delete e._id;\n delete e.id;\n idsMap[objId] = e['@id'] = Utils.getUUID4();\n });\n _.each(projectJSON.edges, function(e,i,l) {\n delete e._id;\n delete e.id;\n e.to = idsMap[e.to];\n e.from = idsMap[e.from];\n });\n _.each(projectJSON.views, function(e,i,l) {\n delete e._id;\n delete e.id;\n\n if(e.hidden_nodes) {\n hiddenNodes = e.hidden_nodes;\n e.hidden_nodes = [];\n _.each(hiddenNodes, function(h,j) {\n e.hidden_nodes.push(idsMap[h]);\n });\n }\n });\n projectJSON.users = [];\n\n var projectJSONStr = JSON.stringify(projectJSON, null, 2);\n var blob = new Blob([projectJSONStr], {type: \"application/json;charset=utf-8\"});\n filesaver(blob,fileNameToSaveAs);\n\n },\n setViewParameters: function(_params){\n this.removeRepresentationsOfType(\"View\");\n if ($.isEmptyObject(_params)){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n return;\n }\n if (typeof _params.viewIndex !== 'undefined'){\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(_params.viewIndex)));\n } else {\n this.view = this.addRepresentation(\"View\", this.renkan.project.get(\"views\").at(this.validViewIndex(this.renkan.options.default_index_view)));\n }\n if (typeof _params.view !== 'undefined' && _params.view.split(\",\").length >= 3){\n var viewParams = _params.view.split(\",\");\n var params = {\n \"project\": this.renkan.project,\n \"offset\": {\n \"x\": parseFloat(viewParams[0]),\n \"y\": parseFloat(viewParams[1])\n },\n \"zoom_level\": parseFloat(viewParams[2])\n };\n this.view.setScale(params.zoom_level, new paper.Point(params.offset));\n }\n //if view parameters = autoscale we apply a zoom fit on the view.\n if ((typeof _params.view !== 'undefined' && _params.view === \"autoscale\")){\n this.view.autoScale();\n }\n //if viewsNodes = false we show all the node by default.\n if (typeof _params.viewsNodes !== 'undefined'){\n if (_params.viewsNodes === \"true\"){\n this.view.hiddenNodes = (this.view.params.hidden_nodes || []).concat();\n this.view.hideNodes();\n } else {\n this.view.showNodes(false);\n }\n }\n //other parameters must go after because most of them depends on a view that must be initialize before\n this.unhighlightAll();\n if (typeof _params.node !== 'undefined' && _params.node){\n this.highlightModel(this.renkan.project.get(\"nodes\").get(_params.node));\n }\n if (typeof _params.edge !== 'undefined' && _params.edge){\n this.highlightModel(this.renkan.project.get(\"edges\").get(_params.edge));\n }\n\n },\n validViewIndex: function(index){\n //check if the view index exist (negative index is from the end) and return the correct index or false if doesn't exist\n var _index = parseInt(index);\n var validIndex = 0;\n if (_index < 0){\n validIndex = this.renkan.project.get(\"views\").length + _index;\n } else {\n validIndex = _index;\n }\n if (typeof this.renkan.project.get(\"views\").at(_index) === 'undefined'){\n validIndex = 0;\n }\n return validIndex;\n },\n foldBins: function() {\n var foldBinsButton = this.$.find(\".Rk-Fold-Bins\"),\n bins = this.renkan.$.find(\".Rk-Bins\"),\n _delta = 0;\n var _this = this,\n sizeBef = _this.canvas_$.width(),\n sizeAft;\n if (bins.position().left < 0) {\n _delta= new paper.Point([-bins.width()/2, 0]);\n bins.animate({left: 0},250);\n this.$.animate({left: 300},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n if ((sizeBef - bins.width()) < bins.height()){\n sizeAft = sizeBef;\n } else {\n sizeAft = sizeBef - bins.width();\n }\n foldBinsButton.html(\"«\");\n } else {\n _delta= new paper.Point([bins.width()/2, 0]);\n bins.animate({left: -300},250);\n this.$.animate({left: 0},250,function() {\n var w = _this.$.width();\n paper.view.viewSize = new paper.Size([w, _this.canvas_$.height()]);\n });\n sizeAft = sizeBef+300;\n foldBinsButton.html(\"»\");\n }\n this.view.paperShift(_delta);\n },\n save: function() { },\n open: function() { }\n }).value();\n\n /* Scene End */\n\n return Scene;\n\n});\n\ndefine('renderer/viewrepr',['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {\n 'use strict';\n\n var Utils = requtils.getUtils();\n\n /* Rkns.Renderer.View Class */\n\n /* The representation for the view. */\n\n var ViewRepr = Utils.inherit(BaseRepresentation);\n\n _(ViewRepr.prototype).extend({\n _init: function() {\n var _this = this;\n this.$ = $(\".Rk-Render\");\n this.type = \"View\";\n this.hiddenNodes = [];\n this.scale = 1;\n this.initialScale = 1;\n this.offset = paper.view.center;\n this.params = {};\n \n if (this.model){\n this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n }\n \n this.initWithParams();\n \n var bindClick = function(selector, fname) {\n _this.$.find(selector).click(function(evt) {\n _this[fname](evt);\n return false;\n });\n };\n \n bindClick(\".Rk-ZoomOut\", \"zoomOut\");\n bindClick(\".Rk-ZoomIn\", \"zoomIn\");\n bindClick(\".Rk-ZoomFit\", \"autoScale\");\n bindClick(\".Rk-ZoomSave\", \"saveView\");\n \n this.$.find(\".Rk-ZoomSetSaved\").click( function() {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset));\n _this.showNodes(false);\n if (_this.options.hide_nodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n }\n _this.updateUrl();\n });\n \n this.$.find(\".Rk-ShowHiddenNodes\").mouseenter( function() {\n _this.showNodes(true);\n _this.$.find(\".Rk-ShowHiddenNodes\").mouseleave( function() {\n _this.hideNodes();\n });\n });\n this.$.find(\".Rk-ShowHiddenNodes\").click( function() {\n _this.showNodes(false);\n _this.$.find(\".Rk-ShowHiddenNodes\").off( \"mouseleave\" ); \n });\n \n if(this.renkan.project.get(\"views\").length > 0 && this.renkan.options.save_view){\n this.$.find(\".Rk-ZoomSetSaved\").show();\n }\n },\n redraw: function(options) {\n //console.log(\"view : \", this.model.toJSON());\n },\n initWithParams: function(){\n var _this = this;\n \n if (_this.options.view_force_autoscale){\n this.autoScale();\n } else {\n _this.setScale(_this.params.zoom_level, new paper.Point(_this.params.offset)); \n }\n \n if (_this.options.hide_nodes && !_this.options.view_show_hiddennodes){\n _this.hiddenNodes = (_this.params.hidden_nodes || []).concat();\n _this.hideNodes();\n } else {\n _this.showNodes(false);\n }\n },\n saveView: function(){\n var _this = this;\n \n var offset = {\n \"x\": _this.offset.x,\n \"y\": _this.offset.y\n };\n \n _this.model = _this.renkan.project.addView( { zoom_level:_this.scale, offset:offset, hidden_nodes: _this.hiddenNodes.concat() } );\n _this.params = {\n \"zoom_level\": _this.model.get(\"zoom_level\"),\n \"offset\": _this.model.get(\"offset\"),\n \"hidden_nodes\": _this.model.get(\"hidden_nodes\")\n };\n \n this.$.find(\".Rk-ZoomSetSaved\").show();\n \n _this.updateUrl();\n },\n addHiddenNode: function(_model){\n this.hideNode(_model);\n this.hiddenNodes.push(_model.id);\n this.updateUrl();\n },\n hideNode: function(_model){\n if (typeof this.renderer.getRepresentationByModel(_model) !== 'undefined'){\n this.renderer.getRepresentationByModel(_model).hide();\n }\n },\n hideNodes: function(){\n var _this = this;\n this.hiddenNodes.forEach(function(_id, index){\n var node = _this.renkan.project.get(\"nodes\").get(_id);\n if (typeof node !== 'undefined'){\n return _this.hideNode(_this.renkan.project.get(\"nodes\").get(_id));\n }else{\n _this.hiddenNodes.splice(index, 1);\n }\n });\n paper.view.draw();\n },\n showNodes: function(ghost){\n var _this = this;\n this.hiddenNodes.forEach(function(_id){\n _this.renderer.getRepresentationByModel(_this.renkan.project.get(\"nodes\").get(_id)).show(ghost);\n });\n if (!ghost){\n this.hiddenNodes = [];\n }\n paper.view.draw();\n },\n setScale: function(_newScale, _offset) {\n if ((_newScale/this.initialScale) > Utils._MIN_SCALE && (_newScale/this.initialScale) < Utils._MAX_SCALE) {\n this.scale = _newScale;\n if (_offset) {\n this.offset = _offset;\n }\n this.renderer.redraw();\n this.updateUrl();\n }\n },\n zoomOut: function() {\n var _newScale = this.scale * Math.SQRT1_2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT1_2 ) ).add(this.offset.multiply( Math.SQRT1_2 ));\n this.setScale( _newScale, _offset );\n },\n zoomIn: function() {\n var _newScale = this.scale * Math.SQRT2,\n _offset = new paper.Point([\n this.renderer.canvas_$.width(),\n this.renderer.canvas_$.height()\n ]).multiply( 0.5 * ( 1 - Math.SQRT2 ) ).add(this.offset.multiply( Math.SQRT2 ));\n this.setScale( _newScale, _offset );\n },\n resizeZoom: function(deltaW, deltaH, _ratio) {\n var _newScale = this.scale * _ratio;\n var _offset = new paper.Point([\n (this.renderer.canvas_$.width() * 0.5 * ( 1 - _ratio) ) + (this.offset.x * _ratio + deltaW * _ratio * 0.5 ),\n (this.renderer.canvas_$.height() * 0.5 * ( 1 - _ratio) ) + (this.offset.y * _ratio + deltaH * _ratio * 0.5 )\n ]);\n this.setScale( _newScale, _offset );\n },\n autoScale: function(force_view) {\n var nodes = this.renkan.project.get(\"nodes\");\n if (nodes.length > 1) {\n var _xx = nodes.map(function(_node) { return _node.get(\"position\").x; }),\n _yy = nodes.map(function(_node) { return _node.get(\"position\").y; }),\n _minx = Math.min.apply(Math, _xx),\n _miny = Math.min.apply(Math, _yy),\n _maxx = Math.max.apply(Math, _xx),\n _maxy = Math.max.apply(Math, _yy);\n var _scale = Math.min( (paper.view.size.width - 2 * this.renkan.options.autoscale_padding) / (_maxx - _minx), (paper.view.size.height - 2 * this.renkan.options.autoscale_padding) / (_maxy - _miny));\n this.initialScale = _scale;\n // Override calculated scale if asked\n if((typeof force_view !== \"undefined\") && parseFloat(force_view.zoom_level)>0 && parseFloat(force_view.offset.x)>0 && parseFloat(force_view.offset.y)>0){\n this.setScale(parseFloat(force_view.zoom_level), new paper.Point(parseFloat(force_view.offset.x), parseFloat(force_view.offset.y)));\n }\n else{\n this.setScale(_scale, paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(_scale)));\n }\n }\n if (nodes.length === 1) {\n this.setScale(1, paper.view.center.subtract(new paper.Point([nodes.at(0).get(\"position\").x, nodes.at(0).get(\"position\").y])));\n }\n },\n paperShift: function(_delta) {\n this.offset = this.offset.add(_delta);\n this.renderer.redraw();\n },\n updateUrl: function(){\n if(this.options.url_parameters && this.options.update_url){\n var result = {};\n var parameters = Backbone.history.getFragment().split('?');\n if (parameters.length > 1){\n parameters[1].split(\"&\").forEach(function(part) {\n var item = part.split(\"=\");\n result[item[0]] = decodeURIComponent(item[1]);\n });\n }\n result.view = Math.round(this.offset.x*1000)/1000 + ',' + Math.round(this.offset.y*1000)/1000 + ',' + Math.round(this.scale*1000)/1000;\n\n if (this.renkan.project.get(\"views\").indexOf(this.model) > -1){\n result.viewIndex = this.renkan.project.get(\"views\").indexOf(this.model);\n if (result.viewIndex === this.renkan.project.get(\"views\").length - 1){\n result.viewIndex = -1;\n }\n } else {\n if (result.viewIndex){\n delete result.viewIndex;\n }\n }\n this.renkan.router.navigate(\"?\" + decodeURIComponent($.param(result)), {trigger: false, replace: true});\n }\n },\n destroy: function(_event) {\n this._super(\"destroy\");\n this.showNodes(false);\n }\n }).value();\n\n return ViewRepr;\n\n});\n\n\n//Load modules and use them\nif( typeof require.config === \"function\" ) {\n require.config({\n paths: {\n 'jquery':'../lib/jquery/jquery',\n 'underscore':'../lib/lodash/lodash',\n 'filesaver' :'../lib/FileSaver/FileSaver',\n 'requtils':'require-utils',\n 'jquery-private':'jquery-private',\n 'ckeditor-core':'../lib/ckeditor/ckeditor',\n 'screenfull':'../lib/screenfull/screenfull-umd'\n },\n // JQuery config. cf: http://requirejs.org/docs/jquery.html#noconflictmap\n map: {\n '*': { 'jquery': 'jquery-private' },\n 'jquery-private': { 'jquery': 'jquery' }\n },\n shim: {\n 'ckeditor-core': {\n exports: 'CKEDITOR',\n }\n }\n });\n}\n\nrequire(['renderer/baserepresentation',\n 'renderer/basebutton',\n 'renderer/noderepr',\n 'renderer/edge',\n 'renderer/tempedge',\n 'renderer/baseeditor',\n 'renderer/nodeeditor',\n 'renderer/edgeeditor',\n 'renderer/nodebutton',\n 'renderer/nodeeditbutton',\n 'renderer/noderemovebutton',\n 'renderer/nodehidebutton',\n 'renderer/nodeshowbutton',\n 'renderer/noderevertbutton',\n 'renderer/nodelinkbutton',\n 'renderer/nodeenlargebutton',\n 'renderer/nodeshrinkbutton',\n 'renderer/edgeeditbutton',\n 'renderer/edgeremovebutton',\n 'renderer/edgerevertbutton',\n 'renderer/miniframe',\n 'renderer/scene',\n 'renderer/viewrepr'\n ], function(BaseRepresentation, BaseButton, NodeRepr, Edge, TempEdge, BaseEditor, NodeEditor, EdgeEditor, NodeButton, NodeEditButton, NodeRemoveButton, NodeHideButton, NodeShowButton, NodeRevertButton, NodeLinkButton, NodeEnlargeButton, NodeShrinkButton, EdgeEditButton, EdgeRemoveButton, EdgeRevertButton, MiniFrame, Scene, ViewRepr){\n\n 'use strict';\n\n var Rkns = window.Rkns;\n\n if(typeof Rkns.Renderer === \"undefined\"){\n Rkns.Renderer = {};\n }\n var Renderer = Rkns.Renderer;\n\n Renderer._BaseRepresentation = BaseRepresentation;\n Renderer._BaseButton = BaseButton;\n Renderer.Node = NodeRepr;\n Renderer.Edge = Edge;\n Renderer.View = ViewRepr;\n Renderer.TempEdge = TempEdge;\n Renderer._BaseEditor = BaseEditor;\n Renderer.NodeEditor = NodeEditor;\n Renderer.EdgeEditor = EdgeEditor;\n Renderer._NodeButton = NodeButton;\n Renderer.NodeEditButton = NodeEditButton;\n Renderer.NodeRemoveButton = NodeRemoveButton;\n Renderer.NodeHideButton = NodeHideButton;\n Renderer.NodeShowButton = NodeShowButton;\n Renderer.NodeRevertButton = NodeRevertButton;\n Renderer.NodeLinkButton = NodeLinkButton;\n Renderer.NodeEnlargeButton = NodeEnlargeButton;\n Renderer.NodeShrinkButton = NodeShrinkButton;\n Renderer.EdgeEditButton = EdgeEditButton;\n Renderer.EdgeRemoveButton = EdgeRemoveButton;\n Renderer.EdgeRevertButton = EdgeRevertButton;\n Renderer.MiniFrame = MiniFrame;\n Renderer.Scene = Scene;\n\n startRenkan();\n});\n\ndefine(\"main-renderer\", function(){});\n\n// Module o use with jquery to handle no conflict. cf: http://requirejs.org/docs/jquery.html#noconflictmap\ndefine('jquery-private',['jquery'], function (jq) {\n 'use strict';\n return jq.noConflict( true );\n});\n\n"]} \ No newline at end of file