{"version":3,"file":"projects-C3BRTGIb.js","sources":["../../../app/javascript/projects/general.js","../../../app/javascript/projects/toolbar.js","../../../app/javascript/projects/prodsvg.svelte","../../../app/javascript/projects/experiment.svelte","../../../app/javascript/projects/projects.svelte","../../../app/javascript/entrypoints/projects.js"],"sourcesContent":["import { User } from '../shared/user';\n\nconst relation = (a,b,attr,order) => {\n let test;\n if (order==\"up\") test = ($(a).find('a').data(attr) > $(b).find('a').data(attr));\n else test = $(a).find('a').data(attr) < $(b).find('a').data(attr);\n return 2*Number(test==true) - 1;\n}\nconst sort_projects = (by,order) => {\n console.log(\"sort projects\", by, order);\n let sorted;\n switch (by){\n case 'name':\n sorted = $(\".private li\").sort( (a,b) => relation(a,b,'name',order) );\n break;\n case 'lastedit':\n sorted = $(\".private li\").sort( (a,b) => relation(a,b,'updatedAt',order) );\n break;\n case 'size':\n sorted = $(\".private li\").sort( (a,b) => relation(a,b,'size',order) );\n break;\n }\n $(\".private li\").detach();\n $(\".private ul\").append(sorted);\n}\n\n\ndocument.addEventListener('DOMContentLoaded',()=>{\n console.log(\"User:\", window.User);\n // User.onlogin( ()=> { console.log(\"reloading\"); window.location.reload() } );\n // User.onlogout( ()=> { console.log(\"logout\"); window.location.reload() } );\n\n $(\".sorts span\").click( function(){\n if ($(this).hasClass(\"down\")) $(this).removeClass(\"down\").addClass(\"up\");\n else if ($(this).hasClass(\"up\")) $(this).removeClass(\"up\").addClass(\"down\");\n else {\n $(\".sorts .up, .sorts .down\").removeClass(\"up\").removeClass(\"down\");\n $(this).addClass(\"down\");\n }\n sort_projects(...this.className.split(\" \"));\n } );\n\n $(\".filter\").on(\"input\", e=>{\n $(e.target).addClass(\"editable\");\n const text = e.target.innerText.replace(/[\\n\\r]/g,'');\n if (text.length==0 || !text.match(/\\S/)){\n $(e.target).removeClass(\"editable\");\n $(\".projects.private li\").show();\n }\n else\n $(\".projects.private li a\").each( function(){\n if (this.text.indexOf(text)<0)\n $(this).parents(\"li\").hide();\n else\n $(this).parents(\"li\").show();\n });\n }).focus( e=> $(e.target).addClass(\"editable\") ).keydown(e=>{\n if (e.key==\"Escape\"){\n $(\".projects.private li\").show();\n $(e.target).removeClass(\"editable\").text(\"\");\n }\n else if (e.key==\"Enter\") return false;\n }).blur(e=>{\n const text = e.target.innerText.replace(/[\\n\\r]/g,'');\n if (text.length==0 || !text.match(/\\S/)){\n $(e.target).removeClass(\"editable\");\n $(\".projects.private li\").show();\n }\n });\n});\n","import { Uploader } from '../shared/uploader';\n// import { Modular } from '../shared/modular_popin';\nimport { Message } from '../shared/modular_messages';\nimport { User } from '../shared/user';\n\nlet toolbar, currentExp;\n\n\nlet tryToRename = element => {\n let newname = element.html(), oldname = element.data().name;\n element.removeAttr('contenteditable');\n if (newname == oldname)\n return;\n else if ($(`.projects.private li a[data-name='${newname}']`).length){\n Message.error(`There already is another experiment named ${newname}`);\n element.html(oldname);\n }\n else\n Uploader.request_json({rename: newname}, '/experiments/'+element.data().slug)\n .success( m => {\n element.html(m.newname);\n element.data('name', m.newname);\n Message.log(`Experiment ${oldname} successfully renamed ${m.newname}` , 'experimentStatus' );\n })\n .error( m => {\n Message.log(`There was a problem renaming the experiment: ${m.error||m.message}`) \n element.html(oldname);\n });\n return false;\n};\n\n\nlet editExpName = element => {\n toolbar.css('display','none');\n element.attr(\"contenteditable\", true);\n element.focus();\n};\n\n\nconst tryExp = experiment => {\n const link = document.createElement('a');\n link.setAttribute('href', `/r/${experiment.slug}/experiment.html?test=true`);\n link.setAttribute('target', '_blank');\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n\nlet duplicateExp = experiment => {\n toolbar.css('display','none');\n let link = `/experiments/new?from=${experiment.slug}&name=${experiment.name}_copy`;\n window.location.replace( link );\n};\n\n\nlet deleteExp = experiment => {\n toolbar.css('display','none');\n const element = $(\".modulars #confirmationdelete\"), name = experiment.name;\n element.find(\".warning p\").html( `Are you sure you want to delete the experiment named ${name}?` );\n // Modular.show( 'confirmationdelete' );\n};\n\n\ndocument.addEventListener('DOMContentLoaded',()=>{\n toolbar = $(\"#toolbar-experiment\");\n let ontoolbar = false;\n let width = toolbar.width();\n toolbar.css('display', 'none');\n\n $(document).on('mouseenter', '.projects.private li', function(){\n const link = $(this).find('a');\n if (link.length && link.attr(\"contenteditable\")) return;\n let top = $(this).offset().top, \n left = link.offset().left,\n linkWidth = link.width(),\n xoverflow = width+left-$('body').width();\n toolbar.css({\n // top: `calc(${offset.top}px + 0.75em`,\n top: `calc(${top}px + 0.5em)`,\n // left: offset.left - (xoverflow>0?10+xoverflow:0),\n left: left + linkWidth + 16,\n // right: `calc(${offset.left + $(this).width()}px)`,\n 'margin-left': '0.5em',\n transform: 'translate(0%, -100%)',\n display: 'flex'\n });\n currentExp = $(this).find('a');\n })\n\n $(document).on('mouseleave', '.projects, .projects.private ul', function(){\n if (!ontoolbar)\n toolbar.css('display','none');\n });\n\n $(document).on('mouseenter', '#toolbar-experiment', ()=>{ontoolbar=true; toolbar.css('display','flex')})\n .on('mouseleave', '#toolbar-experiment', ()=>ontoolbar=false);\n\n toolbar.find(\".tryit\").on('click', e => tryExp(currentExp.data()) );\n toolbar.find(\".duplicate\").on('click', e => duplicateExp(currentExp.data()) );\n toolbar.find(\".rename\").on('click', e=> editExpName( currentExp ) );\n toolbar.find(\".delete\").on('click', e=> deleteExp( currentExp.data() ) );\n const confirmation_delete = $(\".modulars #confirmationdelete\");\n confirmation_delete.find(\"button[name='yes']\").click( ()=> {\n const slug = currentExp.data(\"slug\"), size = currentExp.data(\"size\"), name = currentExp.data(\"name\");\n // Modular.close();\n Uploader.request_json( {} , '/experiments/'+slug , 'DELETE' )\n .then( m => {\n $(`.projects.private li[slug='${slug}']`).remove();\n if (currentExp.data().slug == slug)\n toolbar.css(\"display\",\"none\"); \n Message.log( `Experiment ${name} has been successfully deleted` ); \n if (m.user) {\n const usersize = window.User.cached_size;\n m.user = JSON.parse( m.user );\n window.User['m.user'];\n console.log(\"m.user.cached_size\", m.user.cached_size, \"usersize\", usersize, \"xpsize\", size);\n if (m.user.cached_size != usersize-size)\n Message.warning( \"Some resources might have been transfered to another experiment, refresh this page for an accurate estimation of the size of the other experiments\" );\n }\n User.init( window.User );\n } );\n });\n // confirmation_delete.find(\"button[name='no']\").click( () => Modular.close() );\n // $(\".projects.private li a\").on('keydown', function(e) {\n // e.stopPropagation();\n // if (e.key == \"Enter\"){\n // e.preventDefault();\n // tryToRename($(this));\n // }\n // else if (e.key==\"Escape\")\n // $(this).blur();\n // console.log(\"key\",e.key);\n // }).on('blur', function(e){ $(this).removeAttr(\"contenteditable\"); $(this).html($(this).data().name); })\n // .on('click', function(){ return $(this).attr(\"contenteditable\")===undefined; });\n});\n","\n","\n\n{#if type == 'personal'}\n \n \n {#if stage=='prod'}\n
Accounts with unverified email addresses are limited to one project. Check your emails ({user.email}) to verify this account.
\n {/if}\nAre you sure you want to delete the experiment named {xp_to_delete.name}?
\n