diff --git a/NEWS.md b/NEWS.md index 66b5d62b99..dbdb8d02a6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -61,6 +61,9 @@ * Fix bug where asset would still be shown if current asset is deleted (#1343) +* Restore previous size and do not report (harmless) error when plot is resized too + small (#1337) + ## RCloud 1.3 diff --git a/htdocs/js/rcloud_bundle.js b/htdocs/js/rcloud_bundle.js index 0e8acfca3b..a5141ed0c7 100644 --- a/htdocs/js/rcloud_bundle.js +++ b/htdocs/js/rcloud_bundle.js @@ -5608,6 +5608,10 @@ RCloud.UI.image_manager = (function() { rcloud.plots.render(device, page, {dim: dims}) .then(function(data) { result.update(data.url, dims); + }) + .catch(function(err) { + if(!/Error in replayPlot/.test(err.message)) + throw err; }); } function save_button() { diff --git a/htdocs/js/rcloud_bundle.min.js b/htdocs/js/rcloud_bundle.min.js index c5e837abd9..b6a1f4336f 100644 --- a/htdocs/js/rcloud_bundle.min.js +++ b/htdocs/js/rcloud_bundle.min.js @@ -1,6 +1,6 @@ RClient={create:function(opts){opts=_.defaults(opts,{debug:false});function on_connect(){if(!rserve.ocap_mode){RCloud.UI.session_pane.post_error(ui_utils.disconnection_error("Expected an object-capability Rserve. Shutting Down!"));shutdown();return}var session_mode=opts.mode?opts.mode:"IDE";rserve.ocap([token,execToken],session_mode,function(err,ocaps){if(err)on_error(err[0],err[1]);else{ocaps=Promise.promisifyAll(ocaps);if(ocaps===null){on_error("Login failed. Shutting down!")}else if(RCloud.is_exception(ocaps)){on_error(ocaps[0])}else{result.running=true;opts.on_connect&&opts.on_connect.call(result,ocaps)}}})}function shutdown(){if(!clean){$("#input-div").hide()}if(!rserve.closed)rserve.close()}function on_error(msg,status_code){if(opts.debug){debugger}if(opts.on_error&&opts.on_error(msg,status_code))return;RCloud.UI.session_pane.post_error(ui_utils.disconnection_error(msg));shutdown()}function on_close(msg){if(opts.debug){debugger}if(!clean){RCloud.UI.fatal_dialog("Your session has been logged out.","Reconnect","/login.R");shutdown()}}var token=$.cookies.get().token;var execToken=$.cookies.get().execToken;var rserve=Rserve.create({host:opts.host,on_connect:on_connect,on_error:on_error,on_close:on_close,on_data:opts.on_data,on_oob_message:opts.on_oob_message});var result;var clean=false;result={_rserve:rserve,host:opts.host,running:false,post_response:function(msg){var d=$("
").html(msg);$("#output").append(d)},post_rejection:function(e){RCloud.UI.session_pane.post_error(e.message);throw e},close:function(){clean=true;shutdown()}};return result}};RCloud={};RCloud.is_exception=function(v){return _.isObject(v)&&v.r_attributes&&v.r_attributes["class"]==="OCAP-eval-error"};RCloud.exception_message=function(v){if(!RCloud.is_exception(v))throw new Error("Not an R exception value");return v["error"]};RCloud.promisify_paths=function(){function rcloud_handler(command,promise_fn){function success(result){if(result&&RCloud.is_exception(result)){var tb=result["traceback"]?result["traceback"]:"";if(tb.join)tb=tb.join("\n");throw new Error(command+": "+result.error+"R trace:\n"+tb)}return result}return function(){return promise_fn.apply(this,arguments).then(success)}}function process_paths(ocaps,paths,replace){function get(path){var v=ocaps;for(var i=0;iNo help found for "+topic+"")})};rcloud.get_users=function(){return rcloud_ocaps.get_usersAsync()};rcloud.record_cell_execution=function(json_rep){return rcloud_ocaps.log.record_cell_executionAsync(rcloud.username(),json_rep)};rcloud.setup_js_installer=function(v){return rcloud_ocaps.setup_js_installerAsync(v)};rcloud.modules={};rcloud.setup_js_installer({install_js:function(name,content,k){try{var result=eval(content);rcloud.modules[name]=result;k(null,result)}catch(e){Promise.reject(e);var v={type:e.name,message:e.message};k(v,null)}},clear_css:function(current_notebook,k){$(".rcloud-user-defined-css").remove();k(null,null)},install_css:function(urls,k){if(_.isString(urls))urls=[urls];_.each(urls,function(url){$("head").append($(''))});k(null,null)}});rcloud.replace_token=function(old_token,realm){return rcloud_ocaps.replace_tokenAsync(old_token,realm)};rcloud.get_all_comments=function(id){return rcloud_ocaps.comments.get_allAsync(id)};rcloud.debug={};rcloud.debug.raise=function(msg){return rcloud_ocaps.debug.raiseAsync(msg)};rcloud.stars={};rcloud.stars.is_notebook_starred=function(id){return rcloud_ocaps.stars.is_notebook_starredAsync(id)};rcloud.stars.get_notebook_star_count=function(id){return rcloud_ocaps.stars.get_notebook_star_countAsync(id)};rcloud.stars.get_notebook_starrer_list=function(id){return rcloud_ocaps.stars.get_notebook_starrer_listAsync(id)};rcloud.stars.get_multiple_notebook_star_counts=function(id){return rcloud_ocaps.stars.get_multiple_notebook_star_countsAsync(id)};rcloud.session_cell_eval=function(context_id,filename,language,version,silent){return rcloud_ocaps.session_cell_evalAsync(context_id,filename,language,version,silent)};rcloud.reset_session=function(){return rcloud_ocaps.reset_sessionAsync()};rcloud.display={};var cached_device_pixel_ratio;rcloud.display.set_device_pixel_ratio=function(){cached_device_pixel_ratio=window.devicePixelRatio;return rcloud_ocaps.set_device_pixel_ratioAsync(window.devicePixelRatio)};rcloud.display.get_device_pixel_ratio=function(){return cached_device_pixel_ratio};rcloud.get_notebook_by_name=function(user,path){return rcloud_ocaps.get_notebook_by_nameAsync(user,path)};rcloud.api={};rcloud.api.disable_warnings=function(){return rcloud_ocaps.api.disable_warningsAsync()};rcloud.api.enable_warnings=function(){return rcloud_ocaps.api.enable_warningsAsync()};rcloud.api.disable_echo=function(){return rcloud_ocaps.api.disable_echoAsync()};rcloud.api.enable_echo=function(){return rcloud_ocaps.api.enable_echoAsync()};rcloud.api.set_url=function(url){return rcloud_ocaps.api.set_urlAsync(url)};rcloud.api.get_url=function(){return rcloud_ocaps.api.get_urlAsync()};rcloud.languages={};rcloud.languages.get_list=function(){return rcloud_ocaps.languages.get_listAsync()};rcloud.plots={};rcloud.plots.render=function(device,page,options){return rcloud_ocaps.plots.renderAsync(device,page,options)};rcloud.plots.get_formats=function(){return rcloud_ocaps.plots.get_formatsAsync()}}function setup_authenticated_ocaps(){var paths=[["session_init"],["compute_init"],["signal_to_compute"],["search"],["update_notebook"],["create_notebook"],["fork_notebook"],["port_notebooks"],["purl_source"],["get_completions"],["rename_notebook"],["authenticated_cell_eval"],["session_markdown_eval"],["notebook_upload"],["file_upload","upload_path"],["file_upload","create"],["file_upload","write"],["file_upload","close"],["comments","post"],["comments","modify"],["comments","delete"],["is_notebook_published"],["publish_notebook"],["unpublish_notebook"],["set_notebook_visibility"],["api","disable_warnings"],["api","enable_echo"],["api","disable_warnings"],["api","enable_echo"],["config","all_notebooks"],["config","all_notebooks_multiple_users"],["config","add_notebook"],["config","remove_notebook"],["config","get_current_notebook"],["config","set_current_notebook"],["config","new_notebook_number"],["config","get_recent_notebooks"],["config","set_recent_notebook"],["config","clear_recent_notebook"],["config","get_user_option"],["config","set_user_option"],["config","get_alluser_option"],["get_notebook_info"],["get_multiple_notebook_infos"],["set_notebook_info"],["get_notebook_property"],["set_notebook_property"],["remove_notebook_property"],["notebook_by_name"]];RCloud.promisify_paths(rcloud_ocaps,paths);rcloud.session_init=function(username,token){return rcloud_ocaps.session_initAsync(username,token)};rcloud.compute_init=function(username,token){return rcloud_ocaps.compute_initAsync(username,token)};rcloud.signal_to_compute=function(signal){return rcloud_ocaps.signal_to_computeAsync(signal)};rcloud.update_notebook=function(id,content){return rcloud_github_handler("rcloud.update.notebook",rcloud_ocaps.update_notebookAsync(id,JSON.stringify(content)))};rcloud.search=rcloud_ocaps.searchAsync;rcloud.create_notebook=function(content){return rcloud_github_handler("rcloud.create.notebook",rcloud_ocaps.create_notebookAsync(JSON.stringify(content))).then(function(result){rcloud_ocaps.load_notebook_computeAsync(result.id);return result})};rcloud.fork_notebook=function(id){return rcloud_github_handler("rcloud.fork.notebook",rcloud_ocaps.fork_notebookAsync(id))};rcloud.port_notebooks=function(source,notebooks,prefix){return rcloud_ocaps.port_notebooksAsync(source,notebooks,prefix)};rcloud.purl_source=function(source){return rcloud_ocaps.purl_sourceAsync(source)};rcloud.get_completions=function(language,text,pos){return rcloud_ocaps.get_completionsAsync(language,text,pos).then(function(comps){if(_.isString(comps))comps=[comps];return _.map(comps,function(comp){return{meta:"local",name:"library",score:3,value:comp}})})};rcloud.rename_notebook=function(id,new_name){return rcloud_github_handler("rcloud.rename.notebook",rcloud_ocaps.rename_notebookAsync(id,new_name))};rcloud.authenticated_cell_eval=function(context_id,filename,language,version,silent){return rcloud_ocaps.authenticated_cell_evalAsync(context_id,filename,language,version,silent)};rcloud.post_comment=function(id,content){return rcloud_github_handler("rcloud.post.comment",rcloud_ocaps.comments.postAsync(id,content))};rcloud.modify_comment=function(id,cid,content){return rcloud_ocaps.comments.modifyAsync(id,cid,content)};rcloud.delete_comment=function(id,cid){return rcloud_ocaps.comments.deleteAsync(id,cid)};rcloud.is_notebook_published=function(id){return rcloud_ocaps.is_notebook_publishedAsync(id)};rcloud.publish_notebook=function(id){return rcloud_ocaps.publish_notebookAsync(id)};rcloud.unpublish_notebook=function(id){return rcloud_ocaps.unpublish_notebookAsync(id)};rcloud.set_notebook_visibility=function(id,value){return rcloud_ocaps.set_notebook_visibilityAsync(id,value)};rcloud.stars.star_notebook=function(id){return rcloud_ocaps.stars.star_notebookAsync(id)};rcloud.stars.unstar_notebook=function(id){return rcloud_ocaps.stars.unstar_notebookAsync(id)};rcloud.stars.get_my_starred_notebooks=function(){return rcloud_ocaps.stars.get_my_starred_notebooksAsync()};rcloud.config={all_notebooks:rcloud_ocaps.config.all_notebooksAsync,all_notebooks_multiple_users:rcloud_ocaps.config.all_notebooks_multiple_usersAsync,add_notebook:rcloud_ocaps.config.add_notebookAsync,remove_notebook:rcloud_ocaps.config.remove_notebookAsync,get_current_notebook:rcloud_ocaps.config.get_current_notebookAsync,set_current_notebook:rcloud_ocaps.config.set_current_notebookAsync,new_notebook_number:rcloud_ocaps.config.new_notebook_numberAsync,get_recent_notebooks:rcloud_ocaps.config.get_recent_notebooksAsync,set_recent_notebook:rcloud_ocaps.config.set_recent_notebookAsync,clear_recent_notebook:rcloud_ocaps.config.clear_recent_notebookAsync,get_user_option:rcloud_ocaps.config.get_user_optionAsync,set_user_option:rcloud_ocaps.config.set_user_optionAsync,get_alluser_option:rcloud_ocaps.config.get_alluser_optionAsync};rcloud.get_notebook_info=rcloud_ocaps.get_notebook_infoAsync;rcloud.get_multiple_notebook_infos=rcloud_ocaps.get_multiple_notebook_infosAsync;rcloud.set_notebook_info=function(id,info){if(!info.username)return Promise.reject(new Error("attempt to set info no username"));if(!info.description)return Promise.reject(new Error("attempt to set info no description"));if(!info.last_commit)return Promise.reject(new Error("attempt to set info no last_commit"));return rcloud_ocaps.set_notebook_infoAsync(id,info)};rcloud.get_notebook_property=rcloud_ocaps.get_notebook_propertyAsync;rcloud.set_notebook_property=rcloud_ocaps.set_notebook_propertyAsync;rcloud.remove_notebook_property=rcloud_ocaps.remove_notebook_propertyAsync;rcloud.get_notebook_by_name=function(user,path){return rcloud_ocaps.notebook_by_nameAsync(user,path)}}rcloud._ocaps=rcloud_ocaps;rcloud.authenticated=rcloud_ocaps.authenticated;setup_unauthenticated_ocaps();if(rcloud.authenticated)setup_authenticated_ocaps();return rcloud};var ui_utils={};ui_utils.make_url=function(page,opts){opts=opts||{};var url=window.location.protocol+"//"+window.location.host+"/"+page;if(opts.do_path){if(opts.notebook){url+="/"+opts.notebook;if(opts.version)url+="/"+opts.version}}else{if(opts.notebook){url+="?notebook="+opts.notebook;if(opts.tag)url+="&tag="+opts.tag;else if(opts.version)url+="&version="+opts.version}else if(opts.new_notebook)url+="?new_notebook=true"}return url};ui_utils.disconnection_error=function(msg,label){var result=$("
");result.append($("").text(msg));label=label||"Reconnect";var button=$("");result.append(button);button.click(function(){window.location=window.location.protocol+"//"+window.location.host+"/login.R?redirect="+encodeURIComponent(window.location.pathname+window.location.search)});return result};ui_utils.string_error=function(msg){var button=$("");var result=$("
");result.append(button);var text=_.map(msg.split("\n"),function(str){var el=$("
").text(str),match;if(match=str.match(/^( {4})+/)){var indent=match[0].length/4;el.css("left",indent+"em");el.css("position","relative")}return el});result.append(text);return result};ui_utils.fa_button=function(which,title,classname,style,container_is_self){var icon=$.el.i({"class":which});var span=$.el.span({"class":"fontawesome-button "+(classname||"")},icon);if(style){for(var k in style)icon.style[k]=style[k]}var opts={title:title,delay:{show:250,hide:0}};if(!container_is_self){opts.container="body"}return $(span).tooltip(opts)};ui_utils.enable_fa_button=function(el){el.removeClass("button-disabled")};ui_utils.disable_fa_button=function(el){el.addClass("button-disabled")};ui_utils.enable_bs_button=function(el){el.removeClass("disabled")};ui_utils.disable_bs_button=function(el){el.addClass("disabled")};ui_utils.ace_editor_height=function(widget,min_rows,max_rows){min_rows=_.isUndefined(min_rows)?0:min_rows;max_rows=_.isUndefined(max_rows)?30:max_rows;var lineHeight=widget.renderer.lineHeight;var rows=Math.max(min_rows,Math.min(max_rows,widget.getSession().getScreenLength()));var newHeight=lineHeight*rows+widget.renderer.scrollBar.getWidth();return newHeight};ui_utils.ace_set_pos=function(widget,row,column){var sel=widget.getSelection();var range=sel.getRange();range.setStart(row,column);range.setEnd(row,column);sel.setSelectionRange(range)};ui_utils.install_common_ace_key_bindings=function(widget,get_language){var Autocomplete=ace.require("ace/autocomplete").Autocomplete;var session=widget.getSession();var tab_handler=widget.commands.commandKeyBinding[0].tab;widget.commands.addCommands([{name:"another autocomplete key",bindKey:"Ctrl-.",exec:Autocomplete.startCommand.exec},{name:"the autocomplete key people want",bindKey:"Tab",exec:function(widget,args,request){var range=widget.getSelection().getRange();var line=widget.getSession().getLine(range.start.row);var before=line.substring(0,range.start.column);if(before.match(/\S/))Autocomplete.startCommand.exec(widget,args,request);else tab_handler.exec(widget,args,request)}},{name:"disable gotoline",bindKey:{win:"Ctrl-L",mac:"Command-L"},exec:function(){return false}},{name:"execute-selection-or-line",bindKey:{win:"Ctrl-Return",mac:"Command-Return",sender:"editor"},exec:function(widget,args,request){if(widget.getOption("readOnly"))return;var code=session.getTextRange(widget.getSelectionRange());if(code.length===0){var pos=widget.getCursorPosition();var Range=ace.require("ace/range").Range;var range=new Range(pos.row,0,pos.row+1,0);code=session.getTextRange(range);widget.navigateDown(1);widget.navigateLineEnd()}RCloud.UI.command_prompt.history().add_entry(code);shell.new_cell(code,get_language()).spread(function(_,controller){controller.enqueue_execution_snapshot();shell.scroll_to_end()})}}])};ui_utils.character_offset_of_pos=function(widget,pos){var session=widget.getSession(),doc=session.getDocument();var nlLength=doc.getNewLineCharacter().length;var text=doc.getAllLines();if(pos.row>text.length)throw new Error("getting position off end of editor");var ret=0,i;for(i=0;i",line_text_function(i),"");this.element=dom.setInnerHtml(this.element,html.join(""));this.element.style.height=config.minHeight+"px";if(this.session.$useWrapMode)lastLineNumber=this.session.getLength();var gutterWidth=(""+lastLineNumber).length*config.characterWidth;var padding=this.$padding||this.$computePadding();gutterWidth+=padding.left+padding.right;if(gutterWidth!==this.gutterWidth&&!isNaN(gutterWidth)){this.gutterWidth=gutterWidth;this.element.style.width=Math.ceil(this.gutterWidth)+"px";this._emit("changeGutterWidth",gutterWidth)}}};ui_utils.editable=function(elem$,command){function selectRange(range){var sel=window.getSelection();sel.removeAllRanges();sel.addRange(range)}function options(){return elem$.data("__editable")}function encode(s){if(command.allow_multiline){s=s.replace(/\n/g,"
")}return s.replace(/ /g,"  ")}function decode(s){if(command.allow_multiline){s=s.replace(/
/g,"\n")}return s.replace(/\xa0/g," ")}function set_content_type(is_multiline,content){if(is_multiline){elem$.html(content)}else{elem$.text(content)}}var old_opts=options(),new_opts=old_opts;if(_.isObject(command)){var defaults;if(old_opts)defaults=$.extend({},old_opts);else defaults={on_change:function(){return true},allow_edit:true,inactive_text:elem$.text(),active_text:elem$.text(),allow_multiline:false,select:function(el){var range=document.createRange();range.selectNodeContents(el);return range}};new_opts=$.extend(defaults,command);elem$.data("__editable",new_opts)}else{if(command!=="destroy"&&!old_opts)throw new Error("expected already editable for command "+command);var set_option=function(key,value){old_opts=$.extend({},old_opts);new_opts[key]=value};switch(command){case"destroy":elem$.data("__editable",null);new_opts=null;break;case"option":if(!arguments[2])return old_opts;else if(!arguments[3])return old_opts[arguments[2]];else{set_option(arguments[2],arguments[3])}break;case"disable":set_option("allow_edit",false);break;case"enable":set_option("allow_edit",true);break}}var action=null;if((!old_opts||!old_opts.allow_edit)&&new_opts&&new_opts.allow_edit)action="melt";else if(old_opts&&old_opts.allow_edit&&(!new_opts||!new_opts.allow_edit))action="freeze";if(new_opts)set_content_type(command.allow_multiline,encode(options().__active?new_opts.active_text:new_opts.inactive_text));switch(action){case"freeze":elem$.removeAttr("contenteditable");elem$.off("keydown.editable");elem$.off("focus.editable");elem$.off("click.editable");elem$.off("blur.editable");break;case"melt":elem$.attr("contenteditable","true");elem$.on({"focus.editable":function(){if(!options().__active){options().__active=true;set_content_type(command.allow_multiline,encode(options().active_text));window.setTimeout(function(){selectRange(options().select(elem$[0]));elem$.off("blur.editable");elem$.on("blur.editable",function(){set_content_type(command.allow_multiline,encode(options().inactive_text));options().__active=false})},10)}},"click.editable":function(e){e.stopPropagation()},"keydown.editable":function(e){if(e.keyCode===$.ui.keyCode.ENTER){var txt=decode(elem$.text());function execute_if_valid_else_ignore(f){if(options().validate(txt)){options().__active=false;elem$.off("blur.editable");elem$.blur();f(txt);return true}else{return false}}if(options().ctrl_cmd&&(e.ctrlKey||e.metaKey)){e.preventDefault();return execute_if_valid_else_ignore(options().ctrl_cmd)}else if(!command.allow_multiline||e.ctrlKey||e.metaKey){e.preventDefault();return execute_if_valid_else_ignore(options().change)}}else if(e.keyCode===$.ui.keyCode.ESCAPE){elem$.blur()}return true},"input.editable":function(e){if(elem$.text().length===0)elem$.css("padding-right","1px");else elem$.css("padding-right","")}});break}return elem$};ui_utils.fake_hover=function fake_hover(node){var parent=node.parent;var index=$(".notebook-commands.appear",node.element).css("display")!=="none"?parent.children.indexOf(node):undefined;ui_utils.on_next_tick(function(){if(index>=0&&indexheight)$scroller.scrollTo(null,scrolltop+elemtop-height+top_buffer);else if(elemtop<0)$scroller.scrollTo(null,scrolltop+elemtop-bottom_buffer)};ui_utils.prevent_backspace=function($doc){$doc.unbind("keydown").bind("keydown",function(event){var doPrevent=false;if(event.keyCode===$.ui.keyCode.BACKSPACE){var d=event.srcElement||event.target;if(d.tagName.toUpperCase()==="INPUT"&&(d.type.toUpperCase()==="TEXT"||d.type.toUpperCase()==="PASSWORD"||d.type.toUpperCase()==="FILE"||d.type.toUpperCase()==="EMAIL")||d.tagName.toUpperCase()==="TEXTAREA"||d.isContentEditable){doPrevent=d.readOnly||d.disabled}else{doPrevent=true}}if(doPrevent)event.preventDefault()})};ui_utils.is_a_mac=function(){var PLAT=navigator.platform.toUpperCase();return function(){var isMac=PLAT.indexOf("MAC")!==-1;return isMac}}();RCloud.extension=function(){return{filter_field:function(field,value){return function(entry){return entry[field]===value}},create:function(options){options=options||{};var entries_={};var sections_={};var defaults_=options.defaults?options.defaults:{};if(options.sections){for(var key in options.sections)sections_[key]={filter:options.sections[key].filter}}else sections_.all={};function recompute_sections(){for(key in sections_){sections_[key].entries=_.filter(entries_,function(entry){if(entry.disable)return false;return sections_[key].filter?sections_[key].filter(entry):true});sections_[key].entries.sort(function(a,b){return a.sort-b.sort})}}return{add:function(entries){for(var key in entries)entries_[key]=_.extend(_.extend({key:key},defaults_),entries[key]);recompute_sections();return this},remove:function(name){delete entries_[name];recompute_sections();return this},disable:function(name,disable){if(entries_[name]){entries_[name].disable=disable;recompute_sections()}return this},get:function(name){return entries_[name]},entries:function(name){return sections_[name].entries},create:function(name,_){var ret={};var args=Array.prototype.slice.call(arguments,1);this.entries(name).forEach(function(entry){ret[entry.key]=entry.create.apply(entry,args)});return ret},sections:sections_}}}}();var bootstrap_utils={};bootstrap_utils.alert=function(opts){opts=_.defaults(opts||{},{close_button:true,on_close:function(){}});var div=$('
');if(opts.html)div.html(opts.html);if(opts.text)div.text(opts.text);if(opts["class"])div.addClass(opts["class"]);if(opts.close_button)div.prepend($('').click(opts.on_close));return div};bootstrap_utils.button=function(opts){opts=opts||{};var a=$('');a.text(opts.text);if(opts["class"])a.addClass(opts["class"]);return a};Notebook={};Notebook.Buffer={};Notebook.Cell={};Notebook.Asset={};Notebook.Buffer.create_model=function(content,language){var checkpoint_="";function is_empty(text){return Notebook.empty_for_github(text)}var result={views:[],parent_model:null,renew_content:function(){checkpoint_=""},content:function(new_content){if(!_.isUndefined(new_content)){if(content!==new_content){content=new_content;this.notify_views(function(view){view.content_updated()});return content}else return null}return content},language:function(new_language){if(!_.isUndefined(new_language)){if(language!==new_language){language=new_language;this.notify_views(function(view){view.language_updated()});return language}else return null}if(language===undefined)throw new Error("tried to read no language");else if(language===null)return"Text";return language},change_object:function(obj){if(obj.content)throw new Error("content must come from the object");if(!obj.filename)throw new Error("change object must have filename");var change={filename:obj.filename};if(obj.erase)change.erase=!is_empty(checkpoint_);else if(obj.rename){if(is_empty(content)){if(!is_empty(checkpoint_))change.erase=true}else{if(is_empty(checkpoint_))change.filename=obj.rename;else change.rename=obj.rename;change.content=content}}else{if(!is_empty(content)){if(content!=checkpoint_)change.content=content;if(is_empty(checkpoint_))change.create=true}else{if(!is_empty(checkpoint_))change.erase=true}}checkpoint_=content;return change},notify_views:function(f){_.each(this.views,function(view){f(view)})}};return result};Notebook.Asset.create_html_view=function(asset_model){var filename_div=$("
  • ");var anchor=$("");var filename_span=$(""+asset_model.filename()+"");var remove=ui_utils.fa_button("icon-remove","remove","",{position:"relative",left:"2px",opacity:"0.75"},true);anchor.append(filename_span);filename_div.append(anchor);anchor.append(remove);var asset_old_name=filename_span.text();var rename_file=function(v){shell.notebook.controller.save().then(function(){var new_asset_name=filename_span.text();new_asset_name=new_asset_name.replace(/\s/g," ");var old_asset_content=asset_model.content();if(Notebook.is_part_name(new_asset_name)){alert("Asset names cannot start with 'part[0-9]', sorry!");filename_span.text(asset_old_name);return}var found=shell.notebook.model.get_asset(new_asset_name);if(found){alert('An asset with the name "'+filename_span.text()+'" already exists. Please choose a different name.');filename_span.text(asset_old_name)}else{shell.notebook.controller.append_asset(old_asset_content,new_asset_name).spread(function(_,new_controller){new_controller.select();asset_model.controller.remove(true)})}})};function select(el){if(el.childNodes.length!==1||el.firstChild.nodeType!=el.TEXT_NODE)throw new Error("expecting simple element with child text"); var text=el.firstChild.textContent;var range=document.createRange();range.setStart(el.firstChild,0);range.setEnd(el.firstChild,text.lastIndexOf(".")>0?text.lastIndexOf("."):text.length);return range}var editable_opts={change:rename_file,select:select,validate:function(name){return editor.validate_name(name)}};filename_span.click(function(){if(!asset_model.active())asset_model.controller.select()});remove.click(function(){asset_model.controller.remove()});var result={filename_updated:function(){anchor.text(asset_model.filename())},content_updated:function(){if(asset_model.active())RCloud.UI.scratchpad.content_updated()},language_updated:function(){if(asset_model.active())RCloud.UI.scratchpad.language_updated()},active_updated:function(){if(asset_model.active()){if(!shell.notebook.model.read_only())ui_utils.editable(filename_span,$.extend({allow_edit:true,inactive_text:filename_span.text(),active_text:filename_span.text()},editable_opts));filename_div.addClass("active")}else{ui_utils.editable(filename_span,"destroy");filename_div.removeClass("active")}},self_removed:function(){filename_div.remove()},set_readonly:function(readonly){if(readonly)remove.hide();else remove.show()},div:function(){return filename_div}};return result};Notebook.Asset.create_model=function(content,filename){var cursor_position_;var active_=false;var result=Notebook.Buffer.create_model(content);var base_change_object=result.change_object;_.extend(result,{active:function(new_active){if(!_.isUndefined(new_active)){if(active_!==new_active){active_=new_active;this.notify_views(function(view){view.active_updated()});return active_}else{return null}}return active_},cursor_position:function(new_cursor_position){if(!_.isUndefined(new_cursor_position))cursor_position_=new_cursor_position;return cursor_position_},filename:function(new_filename){if(!_.isUndefined(new_filename)){if(filename!=new_filename){filename=new_filename;this.notify_views(function(view){view.filename_updated()});return filename}else return null}return filename},json:function(){return{content:content,filename:this.filename(),language:this.language()}},change_object:function(obj){obj=obj||{};obj.filename=obj.filename||this.filename();return base_change_object.call(this,obj)}});return result};Notebook.Asset.create_controller=function(asset_model){var result={select:function(){if(RCloud.UI.scratchpad.current_model){RCloud.UI.scratchpad.current_model.controller.deselect()}asset_model.active(true);RCloud.UI.scratchpad.set_model(asset_model)},deselect:function(){asset_model.active(false)},remove:function(force){var asset_name=asset_model.filename();var msg="Do you want to remove the asset '"+asset_name+"' from the notebook?";if(force||confirm(msg)){asset_model.parent_model.controller.remove_asset(asset_model);if(asset_model===RCloud.UI.scratchpad.current_model){var assets=asset_model.parent_model.assets;if(assets.length)assets[0].controller.select();else{RCloud.UI.scratchpad.set_model(null)}}}}};return result};(function(){function ensure_image_has_hash(img){if(img.dataset.sha256)return img.dataset.sha256;var hasher=new sha256(img.getAttribute("src"),"TEXT");img.dataset.sha256=hasher.getHash("SHA-256","HEX");return img.dataset.sha256}var MIN_LINES=2;var EXTRA_HEIGHT_SOURCE=2,EXTRA_HEIGHT_INPUT=10;function create_cell_html_view(language,cell_model){var ace_widget_;var ace_session_;var ace_document_;var am_read_only_="unknown";var source_div_;var code_div_;var result_div_,has_result_;var current_result_;var current_error_;var change_content_;var cell_status_;var above_between_controls_,cell_controls_,left_controls_;var edit_mode_;var highlights_;var code_preprocessors_=[];var running_state_;var prompt_text_;var input_div_,input_ace_div_,input_widget_,input_kont_,input_anim_;var result={};var notebook_cell_div=$("
    ");notebook_cell_div.data("rcloud.model",cell_model);function update_model(){if(!ace_session_)return null;return cell_model.content(ace_session_.getValue())}function update_div_id(){notebook_cell_div.attr("id",Notebook.part_name(cell_model.id(),cell_model.language()));if(left_controls_)left_controls_.controls["cell_number"].set(cell_model.id())}function set_widget_height(){outer_ace_div.css("height",ui_utils.ace_editor_height(ace_widget_,MIN_LINES)+EXTRA_HEIGHT_SOURCE+"px")}cell_status_=$("
    ");var cell_status_left=$("
    ");cell_status_.append(cell_status_left);left_controls_=RCloud.UI.cell_commands.decorate("left",cell_status_left,cell_model,result);if(!shell.is_view_mode()){var cell_control_bar=$("
    ");cell_status_.append(cell_control_bar);cell_control_bar.mousedown(function(e){e.stopPropagation()});cell_controls_=RCloud.UI.cell_commands.decorate("cell",cell_control_bar,cell_model,result);var cell_commands_above=$("
    ");above_between_controls_=RCloud.UI.cell_commands.decorate("above_between",cell_commands_above,cell_model,result);notebook_cell_div.append(cell_commands_above)}notebook_cell_div.append(cell_status_);var edit_colors_={markdown:"#F7EEE4",code:"#E8F1FA"};function set_background_class(div){var md=RCloud.language.is_a_markdown(language);div.toggleClass(md?"edit-markdown":"edit-code",true);div.toggleClass(md?"edit-code":"edit-markdown",false)}function update_language(){language=cell_model.language();if(!RCloud.language.is_a_markdown(language))result.hide_source&&result.hide_source(false);if(cell_controls_)cell_controls_.controls["language_cell"].set(language);set_background_class(code_div_.find("pre"));if(ace_widget_){ace_div.toggleClass("active",true);set_background_class(ace_div);var LangMode=ace.require(RCloud.language.ace_mode(language)).Mode;ace_session_.setMode(new LangMode(false,ace_document_,ace_session_))}}var inner_div=$("
    ");var clear_div=$("
    ");notebook_cell_div.append(inner_div);notebook_cell_div.append(clear_div);source_div_=$('
    ');code_div_=$('
    ');source_div_.append(code_div_);var outer_ace_div=$('
    ');var ace_div=$('
    ');set_background_class(ace_div);update_div_id();outer_ace_div.append(ace_div);source_div_.append(outer_ace_div);inner_div.append(source_div_);function click_to_edit(div,whether){whether&=!am_read_only_;if(whether){set_background_class(code_div_.find("pre"));div.toggleClass("inactive",true);div.on({"mousedown.rcloud-cell":function(e){$(this).data("p0",{x:e.pageX,y:e.pageY})},"mouseup.rcloud-cell":function(e){var p0=$(this).data("p0");if(p0){var p1={x:e.pageX,y:e.pageY},d=Math.sqrt(Math.pow(p1.x-p0.x,2)+Math.pow(p1.y-p0.y,2));if(d<4){result.edit_source(true,e);div.mouseleave()}}}})}else div.off("mousedown.rcloud-cell mouseup.rcloud-cell")}function display_status(status){result_div_.html('
    '+status+"
    ");has_result_=false}var result_updated=_.debounce(function(){Notebook.Cell.postprocessors.entries("all").forEach(function(post){post.process(result_div_,result)})},100);function clear_result(){result_div_.empty();has_result_=false}function ace_stuff(div,content){ace.require("ace/ext/language_tools");var widget=ace.edit(div[0]);var session=widget.getSession();widget.setValue(content);ui_utils.ace_set_pos(widget,0,0);ui_utils.on_next_tick(function(){session.getUndoManager().reset()});var document=session.getDocument();widget.setOptions({enableBasicAutocompletion:true});widget.setTheme("ace/theme/chrome");session.setUseWrapMode(true);return{widget:widget,session:session,document:document}}function create_edit_widget(){if(ace_widget_)return;var aaa=ace_stuff(ace_div,cell_model.content());ace_widget_=aaa.widget;ace_session_=aaa.session;ace_document_=aaa.document;ace_session_.on("change",function(){set_widget_height();ace_widget_.resize()});ace_widget_.resize();ui_utils.install_common_ace_key_bindings(ace_widget_,function(){return language});ace_widget_.commands.addCommands([{name:"executeCell",bindKey:{win:"Alt-Return",mac:"Alt-Return",sender:"editor"},exec:function(ace_widget_,args,request){result.execute_cell()}}]);ace_widget_.commands.removeCommands(["find","replace"]);change_content_=ui_utils.ignore_programmatic_changes(ace_widget_,function(){result.state_changed("ready");cell_model.parent_model.on_dirty()});update_language()}function create_input_widget(){if(input_widget_)return;var aaa=ace_stuff(input_ace_div_,"");input_widget_=aaa.widget;ui_utils.customize_ace_gutter(input_widget_,function(i){return i===0?prompt_text_:""});input_widget_.commands.addCommands([{name:"enter",bindKey:"Return",exec:function(ace_widget,args,request){var input=ace_widget.getValue();result.add_result("code",prompt_text_+input+"\n");if(input_kont_)input_kont_(null,input);input_div_.hide();window.clearInterval(input_anim_);input_anim_=null}}]);RCloud.UI.prevent_progress_modal()}function find_code_elems(parent){return parent.find("pre code").filter(function(i,e){return e.classList.length>0})}function highlight_code(){find_code_elems(code_div_).each(function(i,e){hljs.highlightBlock(e)})}function highlight_classes(kind){return"find-highlight"+" "+kind}code_preprocessors_.push(function(code){var yuk=_.escape;var last=0,text=[];if(highlights_)highlights_.forEach(function(range){text.push(yuk(code.substring(last,range.begin)));text.push('',yuk(code.substring(range.begin,range.end)),"");last=range.end});text.push(yuk(code.substring(last)));return text.join("")},function(code){var line=1;code=code.replace(/^/gm,function(){return''+line++ +""});code+=" ";return code},function(code){if(code[code.length-1]==="\n")code+="\n";var lines=(code.match(/\n/g)||[]).length;if(lines").append(code);var gutter=$('
    ');var hljs_class=RCloud.language.hljs_class(cell_model.language());if(hljs_class)elem.addClass(hljs_class);code_div_.append(gutter,$("
    ").append(elem));highlight_code();code_div_.find(".rcloud-line-number .hljs-number").css("color","black");if(am_read_only_!=="unknown")click_to_edit(code_div_.find("pre"),!am_read_only_);set_background_class(code_div_.find("pre"))}assign_code();result_div_=$('
    ');clear_result();inner_div.append(result_div_);input_div_=$('
    ');input_ace_div_=$('
    ');input_div_.hide().append(input_ace_div_);inner_div.append(input_div_);update_language();_.extend(result,{content_updated:function(){assign_code();if(ace_widget_){var range=ace_widget_.getSelection().getRange();var changed=change_content_(cell_model.content());ace_widget_.getSelection().setSelectionRange(range)}return changed},self_removed:function(){notebook_cell_div.remove()},ace_widget:function(){return ace_widget_},id_updated:update_div_id,language_updated:update_language,state_changed:function(state){var control=left_controls_.controls["run_state"];switch(state){case"ready":if(running_state_!="waiting")control.icon("icon-circle-blank").color("#777");break;case"waiting":control.icon("icon-arrow-right").color("blue");break;case"cancelled":control.icon("icon-asterisk").color("#e06a06");break;case"running":control.icon("icon-spinner icon-spin").color("blue");has_result_=false;break;case"complete":control.icon("icon-circle").color("olivedrab");break;case"error":control.icon("icon-exclamation").color("crimson");break}running_state_=state;return this},start_output:function(){},add_result:function(type,r){if(!has_result_){result_div_.empty();if(RCloud.language.is_a_markdown(language))result.hide_source(true);has_result_=true}switch(type){case"selection":case"deferred_result":break;default:Notebook.Cell.preprocessors.entries("all").forEach(function(pre){r=pre.process(r)})}if(type!="code")current_result_=null;if(type!="error")current_error_=null;var pre;switch(type){case"code":if(!current_result_){pre=$("
    ");current_result_=$("");pre.append(current_result_);result_div_.append(pre)}current_result_.append(_.escape(r));break;case"error":if(!current_error_){pre=$("
    ");current_error_=$('');pre.append(current_error_);result_div_.append(pre)}current_error_.append(_.escape(r));break;case"selection":case"html":result_div_.append(r);break;case"deferred_result":result_div_.append(''+r+"");break;default:throw new Error("unknown result type "+type)}result_updated()},end_output:function(error){if(!has_result_){result_div_.empty();has_result_=true}this.state_changed(error?"error":"complete");current_result_=current_error_=null},clear_result:clear_result,set_readonly:function(readonly){am_read_only_=readonly;if(ace_widget_)ui_utils.set_ace_readonly(ace_widget_,readonly);[cell_controls_,above_between_controls_,left_controls_].forEach(function(controls){if(controls)controls.set_flag("modify",!readonly)});click_to_edit(code_div_.find("pre"),!readonly);cell_status_.toggleClass("readonly",readonly)},set_show_cell_numbers:function(whether){left_controls_.set_flag("cell-numbers",whether)},click_to_edit:click_to_edit,execute_cell:function(){var new_content=update_model();var promise;if(new_content!==null)promise=cell_model.parent_model.controller.update_cell(cell_model);else promise=Promise.resolve(undefined);promise.then(function(){cell_model.controller.enqueue_execution_snapshot()})},toggle_edit:function(){return this.edit_source(!edit_mode_)},edit_source:function(edit_mode,event){if(edit_mode===edit_mode_){if(edit_mode)ace_widget_.focus();return}if(edit_mode){if(RCloud.language.is_a_markdown(language))this.hide_source(false);code_div_.hide();create_edit_widget();outer_ace_div.show();ace_widget_.resize(true);set_widget_height();ace_widget_.resize(true);if(cell_controls_)cell_controls_.set_flag("edit",true);outer_ace_div.show();ace_widget_.resize();ace_widget_.focus();if(event){var screenPos=ace_widget_.renderer.pixelToScreenCoordinates(event.pageX,event.pageY);var docPos=ace_session_.screenToDocumentPosition(Math.abs(screenPos.row),Math.abs(screenPos.column));var Range=ace.require("ace/range").Range;var row=Math.abs(docPos.row),column=Math.abs(docPos.column);var range=new Range(row,column,row,column);ace_widget_.getSelection().setSelectionRange(range)}}else{var new_content=update_model();if(new_content!==null)cell_model.parent_model.controller.update_cell(cell_model);source_div_.css({height:""});if(cell_controls_)cell_controls_.set_flag("edit",false);code_div_.show();outer_ace_div.hide()}edit_mode_=edit_mode;this.change_highlights(highlights_)},hide_source:function(whether){if(whether)source_div_.hide();else source_div_.show()},get_input:function(type,prompt,k){if(!has_result_){result_div_.empty();has_result_=true}prompt_text_=prompt;create_input_widget();input_widget_.setValue("");input_div_.show();input_div_.css("height","36px");input_widget_.renderer.$gutterLayer.gutterWidth=0;input_widget_.renderer.$changes|=input_widget_.renderer.__proto__.CHANGE_FULL;input_widget_.resize(true);input_widget_.focus();input_div_.css("border-color","#eeeeee");var dir=false;var switch_color=function(){input_div_.animate({borderColor:dir?"#ffac88":"#E34234"},{duration:1e3,easing:"easeInOutCubic",queue:false});dir=!dir};switch_color();input_anim_=window.setInterval(switch_color,1e3);ui_utils.scroll_into_view($("#rcloud-cellarea"),100,100,notebook_cell_div,input_div_);input_kont_=k},div:function(){return notebook_cell_div},update_model:function(){return update_model()},focus:function(){ace_widget_.focus();return this},get_content:function(){return cell_model.content()},reformat:function(){if(edit_mode_){ace_widget_.resize();set_widget_height();ace_widget_.resize()}return this},check_buttons:function(){if(above_between_controls_)above_between_controls_.betweenness(!!cell_model.parent_model.prior_cell(cell_model));return this},change_highlights:function(ranges){highlights_=ranges;if(edit_mode_){var markers=ace_session_.getMarkers();for(var marker in markers){if(markers[marker].type==="rcloud-select")ace_session_.removeMarker(marker)}if(ranges)ranges.forEach(function(range){var ace_range=ui_utils.ace_range_of_character_range(ace_widget_,range.begin,range.end);ace_session_.addMarker(ace_range,highlight_classes(range.kind),"rcloud-select");if(/active/.test(range.kind)){ace_widget_.scrollToLine(ace_range.start.row);window.setTimeout(function(){var hl=ace_div.find(".find-highlight."+range.kind);if(hl.size())ui_utils.scroll_into_view($("#rcloud-cellarea"),100,100,notebook_cell_div,ace_div,hl)},0)}})}else{assign_code();var $active=code_div_.find(".find-highlight.active, .find-highlight.activereplaced");if($active.size())ui_utils.scroll_into_view($("#rcloud-cellarea"),100,100,notebook_cell_div,code_div_,$active)}return this}});result.edit_source(false);return result}Notebook.Cell.create_html_view=function(cell_model){return create_cell_html_view(cell_model.language(),cell_model)}})();Notebook.Cell.create_model=function(content,language){var id_=-1;var result=Notebook.Buffer.create_model(content,language);var base_change_object=result.change_object;_.extend(result,{id:function(new_id){if(!_.isUndefined(new_id)&&new_id!=id_){id_=new_id;this.notify_views(function(view){view.id_updated()})}return id_},filename:function(){if(arguments.length)throw new Error("can't set filename of cell");return Notebook.part_name(this.id(),this.language())},get_execution_snapshot:function(){var language=this.language()||"Text";return{controller:this.controller,json_rep:this.json(),partname:Notebook.part_name(this.id(),language),language:language,version:this.parent_model.controller.current_gist().history[0].version}},json:function(){return{content:content,language:this.language()}},change_object:function(obj){obj=obj||{};if(obj.id&&obj.filename)throw new Error("must specify only id or filename");if(!obj.filename){var id=obj.id||this.id();if(id>0!==true)throw new Error("bad id for cell change object: "+id);obj.filename=Notebook.part_name(id,this.language())}if(obj.rename&&_.isNumber(obj.rename))obj.rename=Notebook.part_name(obj.rename,this.language());return base_change_object.call(this,obj)}});return result};Notebook.Cell.create_controller=function(cell_model){var execution_context_=null;var result={enqueue_execution_snapshot:function(){var that=this;if(!execution_context_){function appender(type){return that.append_result.bind(this,type)}var resulter=appender("code");execution_context_={start:this.start_output.bind(this),end:this.end_output.bind(this),out:resulter,err:appender("error"),msg:resulter,html_out:appender("html"),deferred_result:appender("deferred_result"),selection_out:appender("selection"),"in":this.get_input.bind(this,"in")}}var context_id=RCloud.register_output_context(execution_context_);that.set_run_state("waiting");that.edit_source(false);var snapshot=cell_model.get_execution_snapshot();RCloud.UI.run_button.enqueue(function(){that.set_run_state("running");return cell_model.parent_model.controller.execute_cell_version(context_id,snapshot)},function(){that.set_run_state("cancelled")})},set_run_state:function(msg){cell_model.notify_views(function(view){view.state_changed(msg)})},clear_result:function(){cell_model.notify_views(function(view){view.clear_result()})},start_output:function(){cell_model.notify_views(function(view){view.start_output()})},append_result:function(type,msg){cell_model.notify_views(function(view){view.add_result(type,msg)})},end_output:function(error){cell_model.notify_views(function(view){if(error)view.add_result("error",error);view.end_output(error)})},get_input:function(type,prompt,k){var view=_.find(cell_model.views,function(v){return v.get_input});if(!view)k("cell view does not support input",null);else view.get_input(type,prompt,k)},edit_source:function(whether){cell_model.notify_views(function(view){view.edit_source(whether)})},change_language:function(language){cell_model.language(language)}};return result};Notebook.Cell.preprocessors=RCloud.extension.create();Notebook.Cell.postprocessors=RCloud.extension.create();Notebook.Cell.postprocessors.add({device_pixel_ratio:{sort:1e3,disable:true,process:function(div){var dpr=rcloud.display.get_device_pixel_ratio();div.find("img").each(function(i,img){function update(){img.style.width=img.width/dpr}if(img.width===0){$(img).on("load",update)}else{update()}})}},deferred_results:{sort:2e3,process:function(div){var uuid=rcloud.deferred_knitr_uuid;div.find("span.deferred-result").each(function(){var that=this;var uuids=this.textContent.split("|");var ocap=[uuids[1]];ocap.r_attributes={"class":"OCref"};var f=rclient._rserve.wrap_ocap(ocap);f(function(err,future){var data;if(RCloud.is_exception(future)){data=RCloud.exception_message(future);$(that).replaceWith(function(){return ui_utils.string_error(data)})}else{data=future();$(that).replaceWith(function(){return data})}})})}},mathjax:{sort:3e3,process:function(div){if(!_.isUndefined(MathJax))MathJax.Hub.Queue(["Typeset",MathJax.Hub])}},shade_pre_r:{sort:4e3,process:function(div){div.find("pre code").filter(function(i,e){return e.classList.length>0}).parent().toggleClass("r",true)}},hide_source:{sort:5e3,process:function(div){if(!shell.notebook.controller._r_source_visible){Notebook.hide_r_source(div)}}},click_markdown_code:{sort:6e3,process:function(div,view){view.click_to_edit(div.find("pre.r"),true)}}});Notebook.Cell.preprocessors.add({quote_deferred_results:{sort:1e3,process:function(){var deferred_result_uuid_,deferred_regexp_,deferred_replacement_;function make_deferred_regexp(){deferred_result_uuid_=rcloud.deferred_knitr_uuid;deferred_regexp_=new RegExp(deferred_result_uuid_+"\\|[@a-zA-Z_0-9.]*","g");deferred_replacement_='$&'}return function(r){if(!deferred_result_uuid_!=rcloud.deferred_knitr_uuid)make_deferred_regexp();return r.replace(deferred_regexp_,deferred_replacement_)}}()}});Notebook.create_html_view=function(model,root_div){var show_cell_numbers_;function on_rearrange(){_.each(result.sub_views,function(view){view.check_buttons()})}function init_cell_view(cell_view){cell_view.set_readonly(model.read_only()||shell.is_view_mode());cell_view.set_show_cell_numbers(show_cell_numbers_)}var result={model:model,sub_views:[],asset_sub_views:[],cell_appended:function(cell_model){var cell_view=Notebook.Cell.create_html_view(cell_model);cell_model.views.push(cell_view);root_div.append(cell_view.div());this.sub_views.push(cell_view);init_cell_view(cell_view);on_rearrange();return cell_view},asset_appended:function(asset_model){var asset_view=Notebook.Asset.create_html_view(asset_model);asset_model.views.push(asset_view);$("#asset-list").append(asset_view.div());this.asset_sub_views.push(asset_view);on_rearrange();return asset_view},cell_inserted:function(cell_model,cell_index){var cell_view=Notebook.Cell.create_html_view(cell_model);cell_model.views.push(cell_view);root_div.append(cell_view.div());$(cell_view.div()).insertBefore(root_div.children(".notebook-cell")[cell_index]);this.sub_views.splice(cell_index,0,cell_view);init_cell_view(cell_view);on_rearrange();return cell_view},cell_removed:function(cell_model,cell_index){_.each(cell_model.views,function(view){view.self_removed()});this.sub_views.splice(cell_index,1);on_rearrange()},asset_removed:function(asset_model,asset_index){_.each(asset_model.views,function(view){view.self_removed()});this.asset_sub_views.splice(asset_index,1)},cell_moved:function(cell_model,pre_index,post_index){this.sub_views.splice(pre_index,1);this.sub_views.splice(post_index,0,cell_model.views[0]);on_rearrange()},set_readonly:function(readonly){_.each(this.sub_views,function(view){view.set_readonly(readonly)});_.each(this.asset_sub_views,function(view){view.set_readonly(readonly)})},set_show_cell_numbers:function(whether){show_cell_numbers_=whether;_.each(this.sub_views,function(view){view.set_show_cell_numbers(whether)})},update_urls:function(){RCloud.UI.scratchpad.update_asset_url()},update_model:function(){return _.map(this.sub_views,function(cell_view){return cell_view.update_model()})},reformat:function(){_.each(this.sub_views,function(view){view.reformat()})}};model.views.push(result);return result};Notebook.create_model=function(){var readonly_=false;var user_="";function last_id(cells){if(cells.length)return cells[cells.length-1].id();else return 0}return{cells:[],assets:[],views:[],dishers:[],execution_watchers:[],clear:function(){var cells_removed=this.remove_cell(null,last_id(this.cells));var assets_removed=this.remove_asset(null,this.assets.length);return cells_removed.concat(assets_removed)},get_asset:function(filename){return _.find(this.assets,function(asset){return asset.filename()==filename})},append_asset:function(asset_model,filename,skip_event){asset_model.parent_model=this;var changes=[];changes.push(asset_model.change_object());this.assets.push(asset_model);if(!skip_event)_.each(this.views,function(view){view.asset_appended(asset_model)});return changes},append_cell:function(cell_model,id,skip_event){cell_model.parent_model=this;cell_model.renew_content();var changes=[];var n=1;id=id||1;id=Math.max(id,last_id(this.cells)+1);while(n){cell_model.id(id);changes.push(cell_model.change_object());this.cells.push(cell_model);if(!skip_event)_.each(this.views,function(view){view.cell_appended(cell_model)});++id;--n}return changes},insert_cell:function(cell_model,id,skip_event){var that=this;cell_model.parent_model=this;cell_model.renew_content();var changes=[];var n=1,x=0;while(xthis.cells[x].id()){var prev=x>0?this.cells[x-1].id():0;id=Math.max(this.cells[x].id()-n,prev+1)}for(var j=0;jid){var gap=this.cells[x].id()-id;n-=gap;id+=gap}if(n<=0)break;changes.push(this.cells[x].change_object({rename:this.cells[x].id()+n}));this.cells[x].id(this.cells[x].id()+n);++x;++id}return changes.reverse()},remove_asset:function(asset_model,n,skip_event){if(this.assets.length===0)return[];var that=this;var asset_index,filename;if(asset_model!==null){asset_index=this.assets.indexOf(asset_model);filename=asset_model.filename();if(asset_index===-1){throw new Error("asset_model not in notebook model?!")}}else{asset_index=0;filename=this.assets[asset_index].filename()}n=n||1;var x=asset_index;var changes=[];while(x=0?this.insert_cell(cell_model,before,true):this.append_cell(cell_model,null,true)),post_index=this.cells.indexOf(cell_model);_.each(this.views,function(view){view.cell_moved(cell_model,pre_index,post_index)});return changes},prior_cell:function(cell_model){var index=this.cells.indexOf(cell_model);if(index>0)return this.cells[index-1];else return null},change_cell_language:function(cell_model,language){var pre_name=cell_model.filename();cell_model.language(language);return[cell_model.change_object({filename:pre_name,rename:cell_model.filename()})]},update_cell:function(cell_model){return[cell_model.change_object()]},update_asset:function(asset_model){return[asset_model.change_object()]},reread_buffers:function(){var changed_cells_per_view=_.map(this.views,function(view){return view.update_model()});if(changed_cells_per_view.length!=1)throw new Error("not expecting more than one notebook view");var contents=changed_cells_per_view[0];var changes=[];for(var i=0;i=point2)point2=undefined;if(point2!==undefined&&/^\s*$/.test(content.substring(point2)))point2=undefined;if(point1!==undefined){if(/^\s*$/.test(content.substring(point1)))point1=undefined;else if(/^\s*$/.test(content.substring(0,point1)))point1=point2}if(point1===undefined)return Promise.resolve(undefined);var parts=[content.substring(0,point1)],id=cell_model.id(),language=cell_model.language();if(point2===undefined)parts.push(content.substring(point1));else parts.push(content.substring(point1,point2),content.substring(point2));resplit(parts);cell_model.content(parts[0]);_.each(cell_model.views,function(v){v.clear_result()});changes=changes.concat(model.update_cell(cell_model));for(var i=1;i\n";for(var i=0;i"+header[i]+"\n";html+="
    "+files[i]+"
    "}RCloud.UI.help_frame.display_content(html)},editor:function(what,content,name){append_session_info("what: "+what+"\ncontents:"+content+"\nname: "+name+"\n")},"console.out":forward_to_context("out"),"console.msg":forward_to_context("msg"),"console.err":forward_to_context("err"),"img.url.update":handle_img.bind(null,"img.url.update"),"img.url.final":handle_img.bind(null,"img.url.final"),stdout:append_session_info,stderr:append_session_info,"start.cell.output":function(context){curr_context_id_=context;if(output_contexts_[context]&&output_contexts_[context].start)output_contexts_[context].start()},"html.out":forward_to_context("html_out"),"deferred.result":forward_to_context("deferred_result")};var on_data=function(v){v=v.value.json();console.log("OOB send arrived: ['"+v[0]+"']"+(oob_sends[v[0]]?"":" (unhandled)"));if(oob_sends[v[0]])oob_sends[v[0]].apply(null,v.slice(1))};var oob_messages={"console.in":forward_to_context("in",true)};var on_message=function(v,k){v=v.value.json();console.log("OOB message arrived: ['"+v[0]+"']"+(oob_messages[v[0]]?"":" (unhandled)"));if(oob_messages[v[0]]){v.push(k);oob_messages[v[0]].apply(null,v.slice(1))}else k("unhandled",null)};function could_not_initialize_error(err){var msg="Could not initialize session. The GitHub backend might be down or you might have an invalid authorization token. (You could try clearing your cookies, for example).";if(err)msg+="
    Error: "+err.toString();return msg}function on_connect_anonymous_allowed(ocaps){var promise_c,promise_s;rcloud=RCloud.create(ocaps.rcloud);if(rcloud.authenticated){promise_c=rcloud.compute_init(rcloud.username(),rcloud.github_token());promise_s=rcloud.session_init(rcloud.username(),rcloud.github_token())}else{promise_c=rcloud.anonymous_compute_init();promise_s=rcloud.anonymous_session_init()}promise_c.catch(function(e){RCloud.UI.fatal_dialog(could_not_initialize_error(e),"Logout","/logout.R")});promise_s.catch(function(e){RCloud.UI.fatal_dialog(could_not_initialize_error(e),"Logout","/logout.R")});return Promise.all([promise_c,promise_s])}function on_connect_anonymous_disallowed(ocaps){rcloud=RCloud.create(ocaps.rcloud);if(!rcloud.authenticated){return Promise.reject(new Error("Authentication required"))}var res_c=rcloud.compute_init(rcloud.username(),rcloud.github_token());var res_s=rcloud.session_init(rcloud.username(),rcloud.github_token());return Promise.all([res_c,res_s])}function rclient_promise(allow_anonymous){var params="";if(location.href.indexOf("?")>0)params=location.href.substr(location.href.indexOf("?"));return new Promise(function(resolve,reject){rclient=RClient.create({debug:false,host:location.href.replace(/^http/,"ws").replace(/#.*$/,""),on_connect:function(ocaps){resolve(ocaps)},on_data:on_data,on_oob_message:on_message,on_error:function(error){reject(error);return false}});rclient.allow_anonymous_=allow_anonymous}).then(function(ocaps){var promise=allow_anonymous?on_connect_anonymous_allowed(ocaps):on_connect_anonymous_disallowed(ocaps);return promise}).then(function(hello){if(!$("#output > .response").length)rclient.post_response(hello)}).catch(function(error){if(window.rclient)rclient.close();if(error.message==="Authentication required"){RCloud.UI.fatal_dialog("Your session has been logged out.","Reconnect","/login.R"+params)}else{RCloud.UI.fatal_dialog(could_not_initialize_error(error),"Logout","/logout.R")}throw error}).then(function(){rcloud.get_conf_value("exec.token.renewal.time").then(function(timeout){if(timeout){timeout=timeout*1e3;var replacer=function(){rcloud.replace_token($.cookies.get("execToken"),"rcloud.exec").then(function(new_token){$.cookies.set("execToken",new_token);setTimeout(replacer,timeout)})};setTimeout(replacer,timeout)}})}).then(function(){rcloud.display.set_device_pixel_ratio();rcloud.api.set_url(window.location.href);return rcloud.languages.get_list().then(function(lang_list){RCloud.language._set_available_languages(_.omit(lang_list,"r_type","r_attributes"))}).then(rcloud.plots.get_formats).then(function(formats){formats=_.without(formats,"r_attributes","r_type");var i=1e3;var im_formats={};formats.forEach(function(format){im_formats[format]={sort:i};i+=1e3});RCloud.UI.image_manager.formats.add(im_formats)}).then(function(){return rcloud.init_client_side_data()})})}RCloud.session={first_session_:true,listeners:[],reset:function(){if(this.first_session_){this.first_session_=false;return RCloud.UI.with_progress(function(){})}this.listeners.forEach(function(listener){listener.on_reset()});return RCloud.UI.with_progress(function(){var anonymous=rclient.allow_anonymous_;rclient.close();return rclient_promise(anonymous)})},init:function(allow_anonymous){this.first_session_=true;return rclient_promise(allow_anonymous)}}})();RCloud.language=function(){var languages_={CSS:{ace_mode:"ace/mode/css"},JavaScript:{ace_mode:"ace/mode/javascript"},Text:{ace_mode:"ace/mode/text",extension:"txt"}};var langs_=[];return{is_a_markdown:function(language){return languages_[language]?languages_[language].is_a_markdown:false},ace_mode:function(language){return languages_[language]&&languages_[language].ace_mode||languages_.Text.ace_mode},extension:function(language){return languages_[language]&&languages_[language].extension||""},hljs_class:function(language){return languages_[language]&&languages_[language].hljs_class||null},_set_available_languages:function(langs){langs_=[];for(var lang in langs){langs_.push(lang);languages_[lang]=languages_[lang]||{};languages_[lang].is_a_markdown=langs[lang]["is.a.markdown"];languages_[lang].ace_mode=langs[lang]["ace.mode"];languages_[lang].hljs_class=langs[lang]["hljs.class"];languages_[lang].extension=langs[lang].extension}},available_languages:function(){return langs_}}}();(function(){function upload_opts(opts){if(_.isBoolean(opts)||_.isUndefined(opts))opts={force:!!opts};else if(!_.isObject(opts))throw new Error("didn't understand options "+opts);opts=$.extend({force:false},opts);if(!opts.files)opts.files=opts.$file?opts.$file[0].files:[];return opts}function text_reader(){return Promise.promisify(function(file,callback){var fr=new FileReader;fr.onload=function(e){callback(null,fr.result)};fr.onerror=function(e){callback(fr.error,null)};fr.readAsText(file)})}function promise_for(condition,action,value){if(!condition(value))return value;return action(value).then(promise_for.bind(null,condition,action))}function promise_sequence(collection,operator){return promise_for(function(i){return i0){var bytes=new Uint8Array(e.target.result);promise=upload_ocaps.writeAsync(bytes.buffer).then(function(){bytes_read+=e.target.result.byteLength;cur_pos+=chunk_size;fr.readAsArrayBuffer(file.slice(cur_pos,cur_pos+chunk_size))})}else{promise=upload_ocaps.closeAsync().then(function(){if(react.done)react.done(is_replace,file.name);callback(null,true)})}promise.catch(function(err){callback(err,null)})}})}RCloud.upload_files=function(options,react){var upload_ocaps=options.upload_ocaps||rcloud._ocaps.file_upload;react=react||{};options=upload_opts(options);var upload=binary_upload(upload_ocaps,react);function upload_file(path,file){var upload_name=path+"/"+file.name;return upload_ocaps.createAsync(upload_name,options.force).catch(function(err){if(react.confirm_replace&&/exists/.test(err.message)){return react.confirm_replace(file.name).then(function(confirm){return confirm?upload_ocaps.createAsync(upload_name,true).return("overwrite"):Promise.resolve(false)})}else throw err}).then(function(whether){return whether?upload(file,whether==="overwrite"):Promise.resolve(undefined)})}if(!(window.File&&window.FileReader&&window.FileList&&window.Blob))return Promise.reject(new Error("File API not supported by browser."));else{if(_.isUndefined(options.files)||!options.files.length)return Promise.reject(new Error("No files selected!"));else{return upload_ocaps.upload_pathAsync().then(function(path){return promise_sequence(options.files,upload_file.bind(null,path))})}}}})();RCloud.UI={};RCloud.UI.advanced_menu=function(){var menu_items_={};return{init:function(){this.add({open_in_github:{sort:1e3,text:"Open in GitHub",modes:["view","edit"],action:function(){window.open(shell.github_url(),"_blank")}},open_from_github:{sort:2e3,text:"Load Notebook by ID",modes:["edit"],action:function(){var result=prompt("Enter notebook ID or github URL:");if(result!==null)shell.open_from_github(result)}},show_source:{sort:9e3,text:"Show Source",checkbox:true,value:true,modes:["view"],action:function(value){if(value)shell.notebook.controller.show_r_source();else shell.notebook.controller.hide_r_source()}},publish_notebook:{sort:1e4,text:"Publish Notebook",checkbox:true,modes:["edit"],action:function(value){function publish_success(gistname,un){return function(val){if(!val)console.log("Failed to "+(un?"un":"")+"publish notebook "+gistname)}}if(value){rcloud.publish_notebook(editor.current().notebook).then(publish_success(editor.current().notebook,false))}else{rcloud.unpublish_notebook(editor.current().notebook).then(publish_success(editor.current().notebook,true))}}}});return this},add:function(menu_items){_.extend(menu_items_,menu_items);return this},remove:function(menu_item){delete menu_items_[menu_item]},check:function(menu_item,check){if(!menu_items_[menu_item]||!menu_items_[menu_item].checkbox||!menu_items_[menu_item].checkbox_widget)throw new Error("advanced menu check fail on "+menu_item);menu_items_[menu_item].checkbox_widget.set_state(check)},enable:function(menu_item,enable){if(!menu_items_[menu_item]||!menu_items_[menu_item].$li)throw new Error("advanced menu disable fail on "+menu_item);menu_items_[menu_item].$li.toggleClass("disabled",!enable)},load:function(mode){var that=this;for(var key in menu_items_)menu_items_[key]=_.extend({id:key},menu_items_[key]);mode=mode||(shell.is_view_mode()?"view":"edit");var items=_.filter(menu_items_,function(item){return item.modes.indexOf(mode)>=0});items.sort(function(a,b){return a.sort-b.sort});$("#advanced-menu").append($(items.map(function(item){var ret,$ret;if(item.checkbox){$ret=$(ret=$.el.li($.el.a({href:"#",id:item.id},$.el.i({"class":"icon-check"})," ",item.text)));item.checkbox_widget=ui_utils.checkbox_menu_item($ret,function(){item.action(true)},function(){item.action(false)});if(item.value)item.checkbox_widget.set_state(item.value)}else $ret=$(ret=$.el.li($.el.a({href:"#",id:item.id},item.text)));item.$li=$ret;return ret})));$("#advanced-menu li a").click(function(){var item=menu_items_[this.id];if(!item)throw new Error("bad id in advanced menu");if(!item.checkbox)item.action()});return this},update_link:function(){return rcloud.get_notebook_property(shell.gistname(),"view-type").then(set_page)}}}();RCloud.UI.cell_commands=function(){var extension_;function create_command_set(area,div,cell_model,cell_view){var commands_=extension_.create(area,cell_model,cell_view);_.each(commands_,function(command){command.control.addClass("cell-control")});var flags_={};div.append.apply(div,_.pluck(commands_,"control"));return{controls:commands_,set_flag:function(flag,value){var checkf=function(f){var reverse;if(f.substr(0,1)=="!"){reverse=true;f=f.substr(1)}return reverse^flags_[f]};flags_[flag]=value;extension_.entries(area).forEach(function(cmd){if(!_.every(cmd.enable_flags,checkf))commands_[cmd.key].disable();else commands_[cmd.key].enable();if(!_.every(cmd.display_flags,checkf))commands_[cmd.key].control.hide();else commands_[cmd.key].control.show()})}}}var result={create_button:function(awesome,text,action){var control=ui_utils.fa_button(awesome,text);control.click(function(e){$(".tooltip").remove();if(!$(e.currentTarget).hasClass("button-disabled")){action(control)}});return{control:control,enable:function(){ui_utils.enable_fa_button(control)},disable:function(){ui_utils.disable_fa_button(control)}}},create_select:function(items,action){var control=$("");control.append.apply(control,items.map(function(item){return $("").text(item)}));control.change(function(){var val=control.val();action(val)});return{control:control,enable:function(){control.prop("disabled",false)},disable:function(){control.prop("disabled","disabled")},set:function(val){if(items.indexOf(val)<0)throw new Error("tried to select unknown value "+val);control.val(val)}}},create_static:function(html,wrap){var content=$("").html(html);var span=wrap?wrap(content):content;return{control:span,enable:function(){},disable:function(){},set:function(html){content.html(html);return this},get:function(){return content}}},create_icon:function(icon,color,wrap){var result=this.create_static("");result=_.extend(result,{icon:function(icon){result.get().find("i").attr("class",icon);return this},color:function(color){result.get().find("i").css("color",color);return this}});result.get().attr("class","state-icon left-indicator");result.icon(icon).color(color);return result},init:function(){extension_=RCloud.extension.create({defaults:{},sections:{above_between:{filter:function(command){return command.area==="above"||command.area==="between"}},cell:{filter:function(command){return command.area==="cell"}},prompt:{filter:function(command){return command.area==="prompt"}},left:{filter:function(command){return command.area==="left"}}}});var that=this;this.add({insert:{area:"above",sort:1e3,enable_flags:["modify"],create:function(cell_model){return that.create_button("icon-plus-sign","insert cell",function(){shell.insert_cell_before("",cell_model.language(),cell_model.id()).spread(function(_,controller){controller.edit_source(true)})})}},join:{area:"between",sort:2e3,enable_flags:["modify"],create:function(cell_model){return that.create_button("icon-link","join cells",function(){shell.join_prior_cell(cell_model)})}},language_cell:{area:"cell",sort:1e3,enable_flags:["modify"],create:function(cell_model,cell_view){var languages=RCloud.language.available_languages();if(languages.indexOf(cell_model.language())<0)languages.push(cell_model.language());return that.create_select(languages,function(language){cell_model.parent_model.controller.change_cell_language(cell_model,language);cell_view.clear_result()})}},run:{area:"cell",sort:2e3,create:function(cell_model,cell_view){return that.create_button("icon-play","run",function(){cell_view.execute_cell()})}},edit:{area:"cell",sort:3e3,enable_flags:["modify"],create:function(cell_model,cell_view){return that.create_button("icon-edit","toggle edit",function(){cell_view.toggle_edit()})}},command_gap:{area:"cell",sort:3500,create:function(cell_model){return that.create_static(" ")}},split:{area:"cell",sort:4e3,enable_flags:["modify","edit"],create:function(cell_model,cell_view){return that.create_button("icon-unlink","split cell",function(){var ace_widget=cell_view.ace_widget();if(ace_widget){var range=ace_widget.getSelection().getRange();var point1,point2;point1=ui_utils.character_offset_of_pos(ace_widget,range.start);if(!range.isEmpty())point2=ui_utils.character_offset_of_pos(ace_widget,range.end);shell.split_cell(cell_model,point1,point2)}})}},remove:{area:"cell",sort:5e3,enable_flags:["modify"],create:function(cell_model){return that.create_button("icon-trash","remove",function(){cell_model.parent_model.controller.remove_cell(cell_model)})}},grab_affordance:{area:"left",sort:1e3,display_flags:["modify"],create:function(cell_model){var svg="";return that.create_static(svg,function(x){return $("").append(x)})}},left_gap:{area:"left",sort:1500,display_flags:["!modify"],create:function(cell_model){return that.create_static(" ")}},run_state:{area:"left",sort:2e3,create:function(cell_model){return that.create_icon("icon-circle-blank","#777")}},cell_number:{area:"left",sort:3e3,display_flags:["cell-numbers"],create:function(cell_model){return that.create_static(cell_model.id(),function(x){return $("").append("cell ",x)})}}});return this},add:function(commands){if(extension_)extension_.add(commands);return this},remove:function(command_name){if(extension_)extension_.remove(command_name);return this},decorate:function(area,div,cell_model,cell_view){var result=create_command_set(area,div,cell_model,cell_view);switch(area){case"above_between":_.extend(result,{betweenness:function(between){extension_.entries("above_between").forEach(function(cmd){if(cmd.area==="between"){if(between)result.controls[cmd.key].control.show();else result.controls[cmd.key].control.hide()}})}});break;default:}return result}};return result}();RCloud.UI.column=function(sel_column){var colwidth_;function classes(cw){return"col-md-"+cw+" col-sm-"+cw}var result={init:function(){var $sel=$(sel_column);if($sel.length===0)return;var classes=$sel.attr("class").split(/\s+/);classes.forEach(function(c){var cw=/^col-(?:md|sm)-(\d+)$/.exec(c);if(cw){cw=+cw[1];if(colwidth_===undefined)colwidth_=cw;else if(colwidth_!==cw)throw new Error("mismatched col-md- or col-sm- in column classes")}})},colwidth:function(val){if(!_.isUndefined(val)&&val!=colwidth_){$(sel_column).removeClass(classes(colwidth_)).addClass(classes(val));colwidth_=val}return colwidth_}};return result};RCloud.UI.collapsible_column=function(sel_column,sel_accordion,sel_collapser){var collapsed_=false;var result=RCloud.UI.column(sel_column);var parent_init=result.init.bind(result);function collapsibles(){return $(sel_accordion+" > .panel > div.panel-collapse:not(.out)")}function togglers(){return $(sel_accordion+" > .panel > div.panel-heading")}function set_collapse(target,collapse,persist){if(target.data("would-collapse")==collapse)return false;target.data("would-collapse",collapse);if(persist&&rcloud.config&&target.length){var opt="ui/"+target[0].id;rcloud.config.set_user_option(opt,collapse)}return true}function all_collapsed(){return $.makeArray(collapsibles()).every(function(el){return $(el).hasClass("out")||$(el).data("would-collapse")===true})}function sel_to_opt(sel){return sel.replace("#","ui/")}function opt_to_sel(opt){return opt.replace("ui/","#")}function reshadow(){$(sel_accordion+" .panel-shadow").each(function(v){var h=$(this).parent().find(".panel-body").outerHeight();if(h===0)h="100%";$(this).attr("height",h)})}_.extend(result,{init:function(){var that=this;parent_init();collapsibles().each(function(){$(this).data("would-collapse",!$(this).hasClass("in")&&!$(this).hasClass("out")) -});togglers().click(function(){var target=$(this.dataset.target);that.collapse(target,target.hasClass("in"));return false});collapsibles().on("size-changed",function(){that.resize(true)});$(sel_collapser).click(function(){if(collapsed_)that.show(true);else that.hide(true)})},load_options:function(){var that=this;var sels=$.makeArray(collapsibles()).map(function(el){return"#"+el.id});sels.push(sel_accordion);var opts=sels.map(sel_to_opt);return rcloud.config.get_user_option(opts).then(function(settings){var hide_column;for(var k in settings){var id=opt_to_sel(k);if(id===sel_accordion)hide_column=settings[k];else if(typeof settings[k]==="boolean")set_collapse($(id),settings[k],false)}var save_setting=false;if(hide_column===undefined){hide_column=false;save_setting=true}if(hide_column)that.hide(save_setting);else that.show(save_setting)})},collapse:function(target,whether,persist){if(persist===undefined)persist=true;if(collapsed_){collapsibles().each(function(){if(this===target[0])set_collapse($(this),false,persist);else set_collapse($(this),true,persist)});this.show(true);return}var change=set_collapse(target,whether,persist);if(all_collapsed())this.hide(persist,!change);else this.show(persist,!change)},resize:function(skip_calc){if(!skip_calc){var cw=this.calcwidth();this.colwidth(cw)}RCloud.UI.middle_column.update();var heights={},padding={},cbles=collapsibles(),ncollapse=cbles.length;var greedy_one=null;cbles.each(function(){if(!$(this).hasClass("out")&&!$(this).data("would-collapse")){var spf=$(this).data("panel-sizer");var sp=spf?spf(this):RCloud.UI.collapsible_column.default_sizer(this);heights[this.id]=sp.height;padding[this.id]=sp.padding;if(!greedy_one&&$(this).attr("data-widgetheight")==="greedy")greedy_one=$(this)}});var available=$(sel_column).height();var total_headings=d3.sum($(sel_accordion+" .panel-heading").map(function(_,ph){return $(ph).outerHeight()}));available-=total_headings;for(var id in padding)available-=padding[id];var left=available,do_fit=false;for(id in heights)left-=heights[id];if(left>=0){if(greedy_one!==null){heights[greedy_one.get(0).id]+=left;do_fit=true}}else{left=available;var remaining=_.keys(heights),done=false,i;var split=left/remaining.length;while(remaining.length&&!done){done=true;for(i=0;i .panel > div.panel-collapse:not(.collapse):not(.out)").collapse("hide");$(sel_collapser+" i").removeClass("icon-minus").addClass("icon-plus");collapsed_=true;this.resize(skip_calc);if(persist&&rcloud.config)rcloud.config.set_user_option(sel_to_opt(sel_accordion),true)},show:function(persist,skip_calc){collapsibles().each(function(){var heading_sel=$(this).data("heading-content-selector");if(heading_sel)heading_sel.show()});if(all_collapsed())set_collapse($(collapsibles()[0]),false,true);collapsibles().each(function(){$(this).collapse($(this).data("would-collapse")?"hide":"show")});$(sel_collapser+" i").removeClass("icon-plus").addClass("icon-minus");collapsed_=false;this.resize(skip_calc);if(persist&&rcloud.config)rcloud.config.set_user_option(sel_to_opt(sel_accordion),false)},calcwidth:function(){if(collapsed_)return 1;var widths=[];collapsibles().each(function(){var width=$(this).data("would-collapse")?1:$(this).attr("data-colwidth");if(width>0)widths.push(width)});return d3.max(widths)}});return result};RCloud.UI.collapsible_column.default_padder=function(el){var el$=$(el),body$=el$.find(".panel-body"),padding=el$.outerHeight()-el$.height()+body$.outerHeight()-body$.height();return padding};RCloud.UI.collapsible_column.default_sizer=function(el){var el$=$(el),$izer=el$.find(".widget-vsize"),height=$izer.height(),padding=RCloud.UI.collapsible_column.default_padder(el);return{height:height,padding:padding}};RCloud.UI.column_sizer={init:function(){$(".notebook-sizer").draggable({axis:"x",opacity:.75,zindex:1e4,revert:true,revertDuration:0,grid:[window.innerWidth/12,0],stop:function(event,ui){var wid_over_12=window.innerWidth/12;var diff,size;if($(this).hasClass("left")){diff=Math.round(ui.position.left/wid_over_12);size=Math.max(1,Math.min(+RCloud.UI.left_panel.colwidth()+diff,11-RCloud.UI.right_panel.colwidth()));if(size===1)RCloud.UI.left_panel.hide(true,true);else RCloud.UI.left_panel.show(true,true);RCloud.UI.left_panel.colwidth(size);RCloud.UI.middle_column.update()}else if($(this).hasClass("right")){diff=Math.round(ui.position.left/wid_over_12)-RCloud.UI.middle_column.colwidth();size=Math.max(1,Math.min(+RCloud.UI.right_panel.colwidth()-diff,11-RCloud.UI.left_panel.colwidth()));if(size===1)RCloud.UI.right_panel.hide(true,true);else RCloud.UI.right_panel.show(true,true);RCloud.UI.right_panel.colwidth(size);RCloud.UI.middle_column.update()}else throw new Error("unexpected shadow drag with classes "+$(this).attr("class"));$(this).css({left:"",right:"",top:""})}});$(window).resize(function(){var wid_over_12=window.innerWidth/12;$(".notebook-sizer").draggable("option","grid",[wid_over_12,0])})}};RCloud.UI.command_prompt=function(){var show_prompt_=false,readonly_=true,history_=null,entry_=null,language_=null,command_bar_=null;function setup_command_entry(){var prompt_div=$("#command-prompt");if(!prompt_div.length)return null;function set_ace_height(){var EXTRA_HEIGHT=6;prompt_div.css({height:ui_utils.ace_editor_height(widget,5)+EXTRA_HEIGHT+"px"});widget.resize();shell.scroll_to_end(0)}prompt_div.css({"background-color":"#fff"});prompt_div.addClass("r-language-pseudo");ace.require("ace/ext/language_tools");var widget=ace.edit(prompt_div[0]);set_ace_height();var RMode=ace.require("ace/mode/r").Mode;var session=widget.getSession();var doc=session.doc;widget.setOptions({enableBasicAutocompletion:true});session.on("change",set_ace_height);widget.setTheme("ace/theme/chrome");session.setUseWrapMode(true);widget.resize();var change_prompt=ui_utils.ignore_programmatic_changes(widget,history_.change.bind(history_));function execute(widget,args,request){var code=session.getValue();if(code.length){RCloud.UI.command_prompt.history().add_entry(code);shell.new_cell(code,language_).spread(function(_,controller){controller.enqueue_execution_snapshot();shell.scroll_to_end()});change_prompt("")}}function last_row(widget){var doc=widget.getSession().getDocument();return doc.getLength()-1}function last_col(widget,row){var doc=widget.getSession().getDocument();return doc.getLine(row).length}function restore_prompt(){var prop=history_.init();change_prompt(prop.cmd);result.language(prop.lang);var r=last_row(widget);ui_utils.ace_set_pos(widget,r,last_col(widget,r))}function set_language(language){var LangMode=ace.require(RCloud.language.ace_mode(language)).Mode;session.setMode(new LangMode(false,session.doc,session))}ui_utils.install_common_ace_key_bindings(widget,result.language.bind(result));var up_handler=widget.commands.commandKeyBinding[0].up,down_handler=widget.commands.commandKeyBinding[0].down;widget.commands.addCommands([{name:"execute",bindKey:{win:"Return",mac:"Return",sender:"editor"},exec:execute},{name:"execute-2",bindKey:{win:"Alt-Return",mac:"Alt-Return",sender:"editor"},exec:execute},{name:"up-with-history",bindKey:"up",exec:function(widget,args,request){var pos=widget.getCursorPositionScreen();if(pos.row>0)up_handler.exec(widget,args,request);else{if(history_.has_last()){change_prompt(history_.last());var r=widget.getSession().getScreenLength();ui_utils.ace_set_pos(widget,r,pos.column)}else ui_utils.ace_set_pos(widget,0,0)}}},{name:"down-with-history",bindKey:"down",exec:function(widget,args,request){var pos=widget.getCursorPositionScreen();var r=widget.getSession().getScreenLength();if(pos.row0},last:function(){if(curr_>0)--curr_;return curr_cmd()},has_next:function(){return curr_1&&scroll_height!=comment[0].scrollHeight){comment.height(comment[0].scrollHeight+"px")}count=count+1;scroll_height=comment[0].scrollHeight;$("#comments-qux").animate({scrollTop:$(document).height()},"slow");return false});return undefined})},display_comments:function(){return rcloud.get_all_comments(shell.gistname()).then(function(comments){rebuild_comments(comments)})},post_comment:function(comment){comment=JSON.stringify({body:comment});return rcloud.post_comment(shell.gistname(),comment).then(this.display_comments.bind(this)).then(function(){$("#comment-entry-body").val("")})},modify_comment:function(cid,comment){var that=this;comment=JSON.stringify({body:comment});return rcloud.modify_comment(shell.gistname(),cid,comment).then(this.display_comments.bind(this))},delete_comment:function(cid){return rcloud.delete_comment(shell.gistname(),cid).then(this.display_comments.bind(this))}};return result}();RCloud.UI.configure_readonly=function(){var readonly_notebook=$("#readonly-notebook");if(shell.notebook.controller.is_mine()){if(shell.notebook.model.read_only()){$("#revert-notebook").show();$("#save-notebook").hide()}else{$("#revert-notebook").hide();$("#save-notebook").show()}}else{$("#revert-notebook,#save-notebook").hide()}if(shell.notebook.model.read_only()){RCloud.UI.command_prompt.readonly(true);readonly_notebook.show();$("#save-notebook").hide();$("#output").sortable("disable");$("#upload-to-notebook").prop("checked",false).attr("disabled",true);RCloud.UI.scratchpad.set_readonly(true)}else{RCloud.UI.command_prompt.readonly(false);readonly_notebook.hide();$("#save-notebook").show();$("#output").sortable("enable");$("#upload-to-notebook").prop("checked",false).removeAttr("disabled");RCloud.UI.scratchpad.set_readonly(false)}};(function(){var fatal_dialog_;RCloud.UI.fatal_dialog=function(message,label,href){$("#loading-animation").hide();if(_.isUndefined(fatal_dialog_)){var default_button=$("');find_last_=$('');var replace_break=$("
    ");replace_desc_=$('');replace_input_=$('');replace_next_=$('');replace_all_=$('');replace_stuff_=replace_break.add(replace_desc_).add(replace_input_).add(replace_next_).add(replace_all_);var close=$('');find_form.append(find_desc_.append(find_input_),find_next_,find_last_,close,replace_break,replace_desc_.append(replace_input_),replace_next_,replace_all_);find_dialog_.append(find_form);$("#middle-column").prepend(find_dialog_);find_input_.on("input",function(e){e.preventDefault();e.stopPropagation();active_match_=undefined;build_regex(find_input_.val());highlight_all()});function find_next(reason){active_transition(reason||"deactivate");if(active_match_!==undefined)active_match_=(active_match_+1)%matches_.length;else active_match_=0;active_transition("activate")}find_next_.click(function(e){e.preventDefault();e.stopPropagation();find_next();return false});find_last_.click(function(e){e.preventDefault();e.stopPropagation();active_transition("deactivate");if(active_match_!==undefined)active_match_=(active_match_+matches_.length-1)%matches_.length;else active_match_=0;active_transition("activate");return false});replace_next_.click(function(e){e.preventDefault();e.stopPropagation();if(active_match_!==undefined){var cell=replace_current();if(cell){shell.notebook.controller.update_cell(cell).then(function(){find_next("replace")})}}else find_next();return false});replace_all_.click(function(e){e.preventDefault();e.stopPropagation();if(active_match_!==undefined){active_transition("deactivate");replace_rest()}else replace_all(find_input_.val(),replace_input_.val());return false});find_cycle_=["find-input","find-next","find-last"];replace_cycle_=["find-input","replace-input","find-next","find-last","replace-all"];function click_find_next(e){if(e.keyCode===$.ui.keyCode.ENTER){e.preventDefault();e.stopPropagation();find_next_.click();return false}return undefined}find_input_.keydown(click_find_next);replace_input_.keydown(click_find_next);find_form.keydown(function(e){switch(e.keyCode){case $.ui.keyCode.TAB:e.preventDefault();e.stopPropagation();var cycle=replace_mode_?replace_cycle_:find_cycle_;var i=cycle.indexOf(e.target.id)+cycle.length;if(e.shiftKey)--i;else++i;i=i%cycle.length;$("#"+cycle[i]).focus();return false;case $.ui.keyCode.ESCAPE:e.preventDefault();e.stopPropagation();hide_dialog();return false}return undefined});find_form.find("input").focus(function(){window.setTimeout(function(){this.select()}.bind(this),0)});close.click(function(){hide_dialog()})}find_dialog_.show();find_input_.focus();if(replace)replace_stuff_.show();else replace_stuff_.hide();build_regex(find_input_.val());highlight_all();shown_=true;replace_mode_=replace}function hide_dialog(){active_match_=undefined;build_regex(null);highlight_all();find_dialog_.hide();shown_=false}function escapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function build_regex(find){regex_=find&&find.length?new RegExp(escapeRegExp(find),"g"):null}function update_match_cell(match){var matches=matches_.filter(function(m){return m.filename===match.filename});shell.notebook.model.cells[match.index].notify_views(function(view){view.change_highlights(matches)})}function active_transition(transition){if(active_match_!==undefined){var match=matches_[active_match_];switch(transition){case"replace":match.kind="replaced";break;case"activate":match.kind=match.kind==="replaced"?"activereplaced":"active";break;case"deactivate":match.kind=match.kind==="activereplaced"?"replaced":"normal";break}update_match_cell(match)}}function highlight_cell(cell){var matches=[];if(regex_){var content=cell.content(),match;while(match=regex_.exec(content)){matches.push({begin:match.index,end:match.index+match[0].length,kind:matches.length===active_match_?"active":"normal"});if(match.index===regex_.lastIndex)++regex_.lastIndex}}cell.notify_views(function(view){view.change_highlights(matches)});return matches}function annotate_matches(matches,cell,n){return matches.map(function(match){return _.extend({index:n,filename:cell.filename()},match)})}function highlight_all(){matches_=[];shell.notebook.model.cells.forEach(function(cell,n){var matches=highlight_cell(cell);matches_.push.apply(matches_,annotate_matches(matches,cell,n))})}function replace_current(){function findIndex(a,f,i){if(i===undefined)i=0;for(;i');$("#help-form").submit(function(e){e.preventDefault();e.stopPropagation();var topic=$("#input-text-help").val();$("#input-text-help").blur();rcloud.help(topic);return false})},panel_sizer:function(el){if($("#help-body").css("display")==="none")return RCloud.UI.collapsible_column.default_sizer(el);else return{padding:RCloud.UI.collapsible_column.default_padder(el),height:9e3}},show:function(){$("#help-body").css("display","table-row");$("#help-body").attr("data-widgetheight","greedy");$("#collapse-help").trigger("size-changed");RCloud.UI.left_panel.collapse($("#collapse-help"),false);ui_utils.prevent_backspace($("#help-frame").contents())},display_content:function(content){$("#help-frame").contents().find("body").html(content);this.show()},display_href:function(href){$("#help-frame").attr("src",href);this.show()}};(function(){function dataURLToBlob(dataURL){var BASE64_MARKER=";base64,";var parts,contentType,raw;if(dataURL.indexOf(BASE64_MARKER)==-1){parts=dataURL.split(",");contentType=parts[0].split(":")[1];raw=decodeURIComponent(parts[1]);return new Blob([raw],{type:contentType})}parts=dataURL.split(BASE64_MARKER);contentType=parts[0].split(":")[1];raw=window.atob(parts[1]);var rawLength=raw.length;var uInt8Array=new Uint8Array(rawLength);for(var i=0;i\n")}function save_as(fmt){var options={type:fmt};if(dims_)options.dim=dims_;rcloud.plots.render(device,page,options).then(function(data){saveAs(dataURLToBlob(data.url),id+"."+fmt)})}function resize_stop(event,ui){var dims=[ui.size.width,ui.size.height];rcloud.plots.render(device,page,{dim:dims}).then(function(data){result.update(data.url,dims)})}function save_button(){var save_dropdown=$('');var save_button=$('');save_button.append($(''));var save_menu=$('');_.pluck(formats_.entries("all"),"key").forEach(function(fmt){var link=$(''+fmt+"");link.click(function(){save_as(fmt)});var li=$('
  • ').append(link);save_menu.append(li)});var opts={title:"save image",delay:{show:250,hide:0}};opts.container="body";save_button.tooltip(opts);save_dropdown.append(save_button,save_menu);return save_dropdown}function update_dims(dims){if(dims){if(dims[0])image_div_.css("width",dims[0]);if(dims[1]){image_div_.css("height",dims[1])}dims_=dims}}function add_controls($image){var container=$('
    ');scroller_div_=$('
    ');image_div_=$("
    ");container.append(scroller_div_);scroller_div_.append(image_div_,$("
    "));image_div_.append($image);var image_commands=$('');image_commands.append(save_button());image_commands.hide();$image.add(image_commands).hover(function(){image_commands.show()},function(){image_commands.hide()});image_div_.append(image_commands);$image.css({width:"100%",height:"100%"});update_dims(dims);image_div_.resizable({autoHide:true,stop:resize_stop});return container}img_=img_tag();div_=add_controls(img_);var result={div:function(){return div_},update:function(url,dims){img_.attr("src",url);update_dims(dims)}};return result}var result={update:function(url,dims,device,page){var id=device+"-"+page;var image;if(images_[id]){image=images_[id];image.update(url,dims)}else{image=create_image(id,url,dims,device,page);images_[id]=image}return image},formats:formats_};return result}()})();RCloud.UI.import_export=function(){function download_as_file(filename,content,mimetype){var file=new Blob([content],{type:mimetype});saveAs(file,filename)}return{init:function(){RCloud.UI.advanced_menu.add({import_notebooks:{sort:4e3,text:"Import External Notebooks",modes:["edit"],action:function(){function do_import(){var url=$("#import-source").val(),notebooks=$("#import-gists").val(),prefix=$("#import-prefix").val();notebooks=_.without(notebooks.split(/[\s,;]+/),"");rcloud.port_notebooks(url,notebooks,prefix).then(function(result){var succeeded=[],failed=[];for(var res in result){if(res==="r_type"||res==="r_attributes")continue;if(result[res].ok)succeeded.push(result[res].content);else failed.push(res)}succeeded.forEach(function(notebook){editor.star_notebook(true,{notebook:notebook}).then(function(){editor.set_notebook_visibility(notebook.id,true)})});if(failed.length)RCloud.UI.session_pane.post_error("Failed to import notebooks: "+failed.join(", "))});dialog.modal("hide")}function create_import_notebook_dialog(){var body=$('
    ').append($(["

    Import notebooks from another GitHub instance.

    Currently import does not preserve history.

    ",'

    source repo api url: ','

    notebooks:

    ','

    prefix (e.g. folder/ to put notebooks in a folder): '].join("")));var cancel=$('Cancel').on("click",function(){$(dialog).modal("hide")});var go=$('Import').on("click",do_import);var footer=$('

    ').append(cancel).append(go);var header=$(['"].join(""));var dialog=$('').append($('').append($('').append(header).append(body).append(footer)));$("body").append(dialog);dialog.on("show.bs.modal",function(){$("#import-gists").val("")}).on("shown.bs.modal",function(){$("#import-source").focus().select()});return dialog}var dialog=$("#import-notebooks-dialog");if(!dialog.length)dialog=create_import_notebook_dialog();dialog.modal({keyboard:true})}},export_notebook_gist:{sort:5e3,text:"Export Notebook to File",modes:["edit"],action:function(){return rcloud.get_notebook(shell.gistname(),shell.version()).then(function(notebook){notebook=Notebook.sanitize(notebook);var gisttext=JSON.stringify(notebook);download_as_file(notebook.description+".gist",gisttext,"text/json");return notebook})}},import_notebook_gist:{sort:6e3,text:"Import Notebook from File",modes:["edit"],action:function(){var that=this;function create_import_file_dialog(){var notebook=null;var notebook_status=null;var notebook_desc_content=null;var import_button=null;function do_upload(file){notebook_status.hide();notebook_desc.hide();var fr=new FileReader;fr.onloadend=function(e){notebook_status.show();try{notebook=JSON.parse(fr.result)}catch(x){notebook_status.text("Invalid notebook format: couldn't parse JSON");return}if(!notebook.description){notebook_status.text("Invalid notebook format: has no description");notebook=null;return}if(!notebook.files||_.isEmpty(notebook.files)){notebook_status.text("Invalid notebook format: has no files");notebook=null;return}notebook_status.text("");notebook_desc_content.val(notebook.description);notebook_desc.show();notebook=Notebook.sanitize(notebook); -ui_utils.enable_bs_button(import_button)};fr.readAsText(file)}function do_import(){if(notebook){notebook.description=notebook_desc_content.val();rcloud.create_notebook(notebook).then(function(notebook){editor.star_notebook(true,{notebook:notebook}).then(function(){editor.set_notebook_visibility(notebook.id,true)})})}dialog.modal("hide")}var body=$('
    ');var file_select=$('');file_select.click(function(){ui_utils.disable_bs_button(import_button)}).change(function(){do_upload(file_select[0].files[0])});notebook_status=$("");notebook_status.append(notebook_status);var notebook_desc=$("Notebook description: ");notebook_desc_content=$('').keypress(function(e){if(e.which===$.ui.keyCode.ENTER){do_import();return false}return true});notebook_desc.append(notebook_desc_content);body.append($("

    ").append(file_select)).append($("

    ").append(notebook_status.hide())).append($("

    ").append(notebook_desc.hide()));var cancel=$('Cancel').on("click",function(){$(dialog).modal("hide")});import_button=$('Import').on("click",do_import);ui_utils.disable_bs_button(import_button);var footer=$('

    ').append(cancel).append(import_button);var header=$(['"].join(""));var dialog=$('').append($('').append($('').append(header).append(body).append(footer)));$("body").append(dialog);dialog.on("show.bs.modal",function(){$("#notebook-file-upload")[0].value=null;notebook_status.text("");notebook_status.hide();notebook_desc_content.val("");notebook_desc.hide()});dialog.data("reset",function(){notebook=null;ui_utils.disable_bs_button(import_button)});return dialog}var dialog=$("#import-notebook-file-dialog");if(!dialog.length)dialog=create_import_file_dialog();else dialog.data().reset();dialog.modal({keyboard:true})}},export_notebook_r:{sort:7e3,text:"Export Notebook as R Source File",modes:["edit"],action:function(){return rcloud.get_notebook(shell.gistname(),shell.version()).then(function(notebook){var strings=[];var parts=[];_.each(notebook.files,function(file){var filename=file.filename;if(/^part/.test(filename)){var number=parseInt(filename.slice(4).split(".")[0]);if(!isNaN(number)){if(file.language==="R")parts[number]="```{r}\n"+file.content+"\n```";else parts[number]=file.content}}});for(var i=0;i .notebook-cell",start:function(e,info){$(e.toElement).addClass("grabbing");info.placeholder.height(info.item.height())},stop:function(e,info){$(e.toElement).removeClass("grabbing")},update:function(e,info){var ray=cells.sortable("toArray");var model=info.item.data("rcloud.model"),next=info.item.next().data("rcloud.model");shell.notebook.controller.move_cell(model,next)},handle:" .cell-status",scroll:true,scrollSensitivity:40,forcePlaceholderSize:true})}make_cells_sortable();RCloud.UI.column_sizer.init();$(window).bind("unload",function(){shell.save_notebook();return true});RCloud.UI.advanced_menu.init();RCloud.UI.navbar.init();RCloud.UI.find_replace.init();RCloud.UI.share_button.init();RCloud.UI.notebook_commands.init();RCloud.UI.cell_commands.init();RCloud.UI.panel_loader.init();RCloud.UI.import_export.init();$("#edit-notebook").click(function(){window.location="edit.html?notebook="+shell.gistname()});ui_utils.prevent_backspace($(document));$(document).on("copy",function(e){if($(arguments[0].target).hasClass("ace_text-input")||!$(arguments[0].target).closest($("#output")).size())return;var sel=window.getSelection();var div=$('
    ');$("body").append(div);var range=sel.getRangeAt(0);div.append(range.cloneContents());div.find(".nonselectable").remove();sel.selectAllChildren(div[0])});$(document).on("scroll",function(){$(this).scrollLeft(0);$(this).scrollTop(0)});$("#rcloud-cellarea").on("scroll",function(){$(this).scrollLeft(0)});document.addEventListener("keydown",function(e){if(saveb.size()){if(e.keyCode==83&&(e.ctrlKey||e.metaKey)){e.preventDefault();shell.save_notebook()}}if(e.keyCode==65&&(e.ctrlKey||e.metaKey)){e.preventDefault();var selection=window.getSelection();selection.removeAllRanges();var range=new Range;range.selectNode(document.getElementById("output"));range.setStartAfter($(".response")[0]);selection.addRange(range)}})};RCloud.UI.left_panel=RCloud.UI.collapsible_column("#left-column","#accordion-left","#left-pane-collapser");RCloud.UI.load_options=function(){return rcloud.get_conf_value("smtp.server").then(function(has_mail){if(has_mail)RCloud.UI.settings_frame.add({"subscribe-to-comments":RCloud.UI.settings_frame.checkbox({sort:5e3,default_value:false,label:"Subscribe To Comments",condition:function(){}})});return RCloud.UI.panel_loader.load().then(function(){RCloud.UI.left_panel.init();RCloud.UI.middle_column.init();RCloud.UI.right_panel.init();RCloud.UI.command_prompt.init();$(".panel-collapse").collapse({toggle:false});return Promise.all([RCloud.UI.navbar.load(),RCloud.UI.advanced_menu.load(),RCloud.UI.share_button.load(),RCloud.UI.left_panel.load_options(),RCloud.UI.right_panel.load_options()])})})};RCloud.UI.middle_column=function(){var result=RCloud.UI.column("#middle-column");_.extend(result,{update:function(){var size=12-RCloud.UI.left_panel.colwidth()-RCloud.UI.right_panel.colwidth();result.colwidth(size);shell.notebook.view.reformat()}});return result}();RCloud.UI.navbar=function(){var extension_;var result={init:function(){extension_=RCloud.extension.create({sections:{header:{filter:RCloud.extension.filter_field("area","header")},main:{filter:RCloud.extension.filter_field("area","main")}}});this.add({rcloud:{area:"header",sort:1e3,create:function(){return'RCloud'}}})},add:function(commands){if(extension_)extension_.add(commands);return this},remove:function(command_name){if(extension_)extension_.remove(command_name);return this},load:function(){if(extension_){var items=extension_.create("header");var header=$("#rcloud-navbar-header");header.append.apply(header,_.values(items))}}};return result}();RCloud.UI.notebook_commands=function(){var icon_style_={"line-height":"90%"};var star_style_=_.extend({"font-size":"80%"},icon_style_);var star_states_={"true":{"class":"icon-star",title:"unstar"},"false":{"class":"icon-star-empty",title:"star"}};var commands_={};var always_commands_,appear_commands_;var defaults_={condition0:function(node){return node.gistname&&!node.version},condition1:function(node){return true}};function add_commands(node,span,commands){commands.forEach(function(command){span.append(document.createTextNode(String.fromCharCode(160)));span.append(command.create(node))})}function condition_pred(node){return function(command){return _.every(["condition0","condition1","condition2"],function(c){return!command[c]||command[c](node)})}}var result={init:function(){this.add({star_unstar:{section:"always",sort:1e3,create:function(node){var state=editor.i_starred(node.gistname);var star_unstar=ui_utils.fa_button(star_states_[state]["class"],function(e){return star_states_[state].title},"star",star_style_,true);star_unstar.click(function(e){e.preventDefault();e.stopPropagation();var new_state=!state;editor.star_notebook(new_state,{gistname:node.gistname,user:node.user})});star_unstar[0].set_state=function(val){state=!!val;$(this).find("i").attr("class",star_states_[state].class)};star_unstar.append($.el.sub(String(editor.num_stars(node.gistname))));return star_unstar}},history:{section:"appear",sort:2e3,create:function(node){var current=editor.current();var disable=current.notebook===node.gistname&¤t.version;var history=ui_utils.fa_button("icon-time","history","history",icon_style_,true);if(disable)history.addClass("button-disabled");history.click(function(){ui_utils.fake_hover(node);if(!disable){editor.show_history(node,true)}return false});return history}},private_public:{section:"appear",sort:3e3,condition1:function(node){return node.user===editor.username()},create:function(node){var make_private=ui_utils.fa_button("icon-eye-close","make private","private",icon_style_,true),make_public=ui_utils.fa_button("icon-eye-open","make public","public",icon_style_,true);if(node.visible)make_public.hide();else make_private.hide();make_private.click(function(){ui_utils.fake_hover(node);if(node.user!==editor.username())throw new Error("attempt to set visibility on notebook not mine");else editor.set_notebook_visibility(node.gistname,false)});make_public.click(function(){ui_utils.fake_hover(node);if(node.user!==editor.username())throw new Error("attempt to set visibility on notebook not mine");else editor.set_notebook_visibility(node.gistname,true);return false});return make_private.add(make_public)}},remove:{section:"appear",sort:4e3,condition1:function(node){return node.user===editor.username()},create:function(node){var remove=ui_utils.fa_button("icon-remove","remove","remove",icon_style_,true);remove.click(function(e){$("div.popover").remove();var yn=confirm("Do you want to remove '"+node.full_name+"'?");if(yn){e.stopPropagation();e.preventDefault();editor.remove_notebook(node.user,node.gistname);return false}else{return false}});return remove}}});return this},add:function(commands){for(var key in commands)commands_[key]=_.extend(_.extend({},defaults_),commands[key]);always_commands_=_.filter(commands_,function(command){return command.section==="always"});appear_commands_=_.filter(commands_,function(command){return command.section==="appear"});[always_commands_,appear_commands_].forEach(function(set){set.sort(function(a,b){return a.sort-b.sort})});return this},remove:function(command_name){delete commands_[command_name];return this},icon_style:function(){return icon_style_},decorate:function($li,node,right){var appeared;var $right=$(right);var predicate=condition_pred(node);function do_always(){var always_commands=always_commands_.filter(predicate);if(always_commands.length){var always=$($.el.span({"class":"notebook-commands-right"}));add_commands(node,always,always_commands);$right.append(always)}}function do_appear(){var appear_commands=appear_commands_.filter(predicate);if(appear_commands.length){var appear=$($.el.span({"class":"notebook-commands appear"}));add_commands(node,appear,appear_commands);$right.append(appear);$right.find(".notebook-date").toggleClass("disappear",true);appear.hide();$right.append($.el.span({"class":"notebook-commands appear-wrapper"},appear[0]))}appeared=true}do_always();$li.find("*:not(ul)").hover(function(){if(!appeared)do_appear();var notebook_info=editor.get_notebook_info(node.gistname);$(".notebook-commands.appear",this).show();$(".notebook-date.disappear",this).css("visibility","hidden")},function(){$(".notebook-commands.appear",this).hide();$(".notebook-date.disappear",this).css("visibility","visible")});return this}};return result}();RCloud.UI.notebook_title=function(){var last_editable_=null;function version_tagger(node){return function(name){return editor.tag_version(node.gistname,node.version,name).then(function(){return editor.show_history(node.parent,{update:true})})}}function rename_current_notebook(name){editor.rename_notebook(name).then(function(){result.set(name)})}function select(el){if(el.childNodes.length!==1||el.firstChild.nodeType!=el.TEXT_NODE)throw new Error("expecting simple element with child text");var text=el.firstChild.textContent;var range=document.createRange();range.setStart(el.firstChild,text.lastIndexOf("/")+1);range.setEnd(el.firstChild,text.length);return range}var fork_and_rename=function(forked_gist_name){var is_mine=shell.notebook.controller.is_mine();var gistname=shell.gistname();var version=shell.version();editor.fork_notebook(is_mine,gistname,version).then(function rename(v){rename_current_notebook(forked_gist_name)})};var editable_opts={change:rename_current_notebook,select:select,ctrl_cmd:fork_and_rename,validate:function(name){return editor.validate_name(name)}};var result={set:function(text){$("#notebook-author").text(shell.notebook.model.user());$("#author-title-dash").show();$("#rename-notebook").show();$("#loading-animation").hide();var is_read_only=shell.notebook.model.read_only();var active_text=text;var ellipt_start=false,ellipt_end=false;var title=$("#notebook-title");title.text(text);while(window.innerWidth-title.width()<650){var slash=text.search("/");if(slash>=0){ellipt_start=true;text=text.slice(slash+1)}else{ellipt_end=true;text=text.substr(0,text.length-2)}title.text((ellipt_start?".../":"")+text+(ellipt_end?"...":""))}ui_utils.editable(title,$.extend({allow_edit:!is_read_only&&!shell.is_view_mode(),inactive_text:title.text(),active_text:active_text},editable_opts))},update_fork_info:function(fork_of){if(fork_of&&fork_of.description){var owner=fork_of.owner?fork_of.owner:fork_of.user;var fork_desc=owner.login+" / "+fork_of.description;var url=ui_utils.make_url(shell.is_view_mode()?"view.html":"edit.html",{notebook:fork_of.id});$("#forked-from-desc").html("forked from "+fork_desc+"")}else $("#forked-from-desc").text("")},make_editable:function(node,$li,editable){function get_title(node,elem){if(!node.version){return $(".jqtree-title:not(.history)",elem)}else{return $(".jqtree-title",elem)}}if(last_editable_&&(!node||last_editable_!==node))ui_utils.editable(get_title(last_editable_,last_editable_.element),"destroy");if(node){var opts=editable_opts;if(node.version){opts=$.extend({},editable_opts,{change:version_tagger(node),validate:function(name){return true}})}ui_utils.editable(get_title(node,$li),$.extend({allow_edit:editable,inactive_text:node.name,active_text:node.version?node.name:node.full_name},opts))}last_editable_=node}};return result}();RCloud.UI.notebooks_frame={body:function(){return RCloud.UI.panel_loader.load_snippet("notebooks-snippet")},heading_content:function(){var new_notebook_button=$.el.span({style:"float: right; position: relative"},$.el.a({"class":"header-button",id:"new-notebook",href:"#",style:"display:none"},$.el.span($.el.i({"class":"icon-plus"}))));return new_notebook_button},heading_content_selector:function(){return $("#new-notebook")}};RCloud.UI.panel_loader=function(){var extension_;var panels_={};function collapse_name(name){return"collapse-"+name}function add_panel(opts){var parent_id="accordion-"+opts.side;var collapse_id=collapse_name(opts.name);var heading_attrs={"class":"panel-heading","data-toggle":"collapse","data-parent":"#"+parent_id,"data-target":"#"+collapse_id};var title_span=$.el.span({"class":"title-offset"},opts.title),icon=$.el.i({"class":opts.icon_class}),heading_link=$.el.a({"class":"accordion-toggle "+opts.side,href:"#"+collapse_id},icon," ",title_span);var heading_content=opts.panel.heading_content?opts.panel.heading_content():null;var heading;if(opts.side==="left"){heading=$.el.div(heading_attrs,heading_link,heading_content)}else if(opts.side==="right"){heading=$.el.div(heading_attrs,heading_content,heading_link)}else throw new Error("Unknown panel side "+opts.side);var collapse_attrs={id:collapse_id,"class":"panel-collapse collapse","data-colwidth":opts.colwidth};if(opts.greedy)collapse_attrs["data-widgetheight"]="greedy";var collapse=$.el.div(collapse_attrs,$.el.img({height:"100%",width:"5px",src:opts.side==="left"?"/img/right_bordergray.png":"/img/left_bordergray.png","class":"panel-shadow "+opts.side}),opts.panel.body());var panel=$.el.div({"class":"panel panel-default"},heading,collapse);$("#"+parent_id).append(panel)}function add_filler_panel(side){var parent_id="accordion-"+side;var body=$("
    ",{"class":"panel-body",style:"border-top-color: transparent; background-color: #777"});for(var i=0;i<60;++i)body.append($.el.br());var collapse=$.el.div({"class":"panel-collapse out"},body[0]);var panel=$.el.div({"class":"panel panel-default"},collapse);$("#"+parent_id).append(panel)}return{init:function(){extension_=RCloud.extension.create({sections:{left:{filter:function(panel){return panel.side==="left"}},right:{filter:function(panel){return panel.side==="right"}}}});this.add({Notebooks:{side:"left",name:"notebook-tree",title:"Notebooks",icon_class:"icon-folder-open",colwidth:3,greedy:true,sort:1e3,panel:RCloud.UI.notebooks_frame},Search:{side:"left",name:"search",title:"Search",icon_class:"icon-search",colwidth:4,sort:2e3,panel:RCloud.UI.search},Settings:{side:"left",name:"settings",title:"Settings",icon_class:"icon-cog",colwidth:3,sort:3e3,panel:RCloud.UI.settings_frame},Help:{side:"left",name:"help",title:"Help",icon_class:"icon-question",colwidth:5,sort:4e3,panel:RCloud.UI.help_frame},Assets:{side:"right",name:"assets",title:"Assets",icon_class:"icon-copy",colwidth:4,sort:1e3,panel:RCloud.UI.scratchpad},"File Upload":{side:"right",name:"file-upload",title:"File Upload",icon_class:"icon-upload-alt",colwidth:2,sort:2e3,panel:RCloud.UI.upload_frame},Comments:{side:"right",name:"comments",title:"Comments",icon_class:"icon-comments",colwidth:2,sort:3e3,panel:RCloud.UI.comments_frame},Session:{side:"right",name:"session-info",title:"Session",icon_class:"icon-info",colwidth:3,sort:4e3,panel:RCloud.UI.session_pane}})},add:function(P){if(extension_)extension_.add(P)},remove:function(panel_name){extension_.remove(panel_name)},load_snippet:function(id){return $($("#"+id).html())[0]},load:function(){function do_side(panels,side){function do_panel(p){add_panel(p);if(p.panel.init)p.panel.init();if(p.panel.load)p.panel.load();if(p.panel.panel_sizer)$("#"+collapse_name(p.name)).data("panel-sizer",p.panel.panel_sizer);if(p.panel.heading_content_selector)$("#"+collapse_name(p.name)).data("heading-content-selector",p.panel.heading_content_selector())}var chosen=extension_.entries(side);chosen.forEach(do_panel);add_filler_panel(side)}do_side(panels_,"left");do_side(panels_,"right");$("#left-column").append(this.load_snippet("left-pane-collapser-snippet"));$("#right-column").append(this.load_snippet("right-pane-collapser-snippet"));return Promise.cast(undefined)}}}();(function(){var progress_dialog;var progress_counter=0;var allowed=1;var curtains_on=false;function set_curtain(){if(curtains_on)return;curtains_on=true;if(_.isUndefined(progress_dialog)){progress_dialog=$('");alert_element.append($content);var alert_box=bootstrap_utils.alert({"class":"alert-danger",html:alert_element});results_append(alert_box);return alert_box}function result_success(message){results_append(bootstrap_utils.alert({"class":"alert-info",text:message,on_close:function(){options.$progress.hide();options.$result_panel.trigger("size-changed")}}))}function asset_react(options){return{add:function(file){result_success("Asset "+file+" added.")},replace:function(file){result_success("Asset "+file+" replaced.")}}}function file_react(options){return{start:function(filename){options.$progress.show();options.$progress_bar.css("width","0%");options.$progress_bar.attr("aria-valuenow","0")},progress:function(read,size){options.$progress_bar.attr("aria-valuenow",~~(100*(read/size)));options.$progress_bar.css("width",100*(read/size)+"%")},done:function(is_replace,filename){result_success("File "+filename+" "+(is_replace?"replaced.":"uploaded."))},confirm_replace:Promise.promisify(function(filename,callback){var overwrite_click=function(){alert_box.remove();callback(null,true)};var p=$("

    File "+filename+" exists.

    ");var overwrite=bootstrap_utils.button({"class":"btn-danger"}).click(overwrite_click).text("Overwrite");p.append(overwrite);var alert_box=result_alert(p);$("button.close",alert_box).click(function(){callback(new Error("Overwrite cancelled"),null)})})}}options=upload_ui_opts(options||{});if(options.$result_panel.length)RCloud.UI.right_panel.collapse(options.$result_panel,false);var file_error_handler=function(err){var message=err.message;var p,done=true;if(message==="empty"){p=$("

    File is empty.

    ")}else if(message==="Overwrite cancelled"){p=$("

    ").append(message)}else if(message==="badname"){p=$("

    Filename not allowed.

    ")}else{p=$("

    (unexpected) "+message+"

    ");console.log(message,err.stack)}result_alert(p);throw err};var promise=to_notebook?RCloud.upload_assets(options,asset_react(options)):RCloud.upload_files(options,file_react(options));return promise.catch(function(err){return file_error_handler(err,options)}).then(function(){if(options.$progress.length)window.setTimeout(function(){options.$progress.hide()},5e3)})}return upload_files}();RCloud.UI.upload_frame={body:function(){return RCloud.UI.panel_loader.load_snippet("file-upload-snippet")},init:function(){$("#file").change(function(){$("#progress-bar").css("width","0%")});$("#upload-submit").click(function(){if($("#file")[0].files.length===0)return;var to_notebook=$("#upload-to-notebook").is(":checked");RCloud.UI.upload_with_alerts(to_notebook).catch(function(){})});RCloud.session.listeners.push({on_reset:function(){$(".progress").hide();$("#file-upload-results").empty()}})},panel_sizer:function(el){var padding=RCloud.UI.collapsible_column.default_padder(el);var height=24+$("#file-upload-controls").height()+$("#file-upload-results").height();return{height:height,padding:padding}}}; \ No newline at end of file +});togglers().click(function(){var target=$(this.dataset.target);that.collapse(target,target.hasClass("in"));return false});collapsibles().on("size-changed",function(){that.resize(true)});$(sel_collapser).click(function(){if(collapsed_)that.show(true);else that.hide(true)})},load_options:function(){var that=this;var sels=$.makeArray(collapsibles()).map(function(el){return"#"+el.id});sels.push(sel_accordion);var opts=sels.map(sel_to_opt);return rcloud.config.get_user_option(opts).then(function(settings){var hide_column;for(var k in settings){var id=opt_to_sel(k);if(id===sel_accordion)hide_column=settings[k];else if(typeof settings[k]==="boolean")set_collapse($(id),settings[k],false)}var save_setting=false;if(hide_column===undefined){hide_column=false;save_setting=true}if(hide_column)that.hide(save_setting);else that.show(save_setting)})},collapse:function(target,whether,persist){if(persist===undefined)persist=true;if(collapsed_){collapsibles().each(function(){if(this===target[0])set_collapse($(this),false,persist);else set_collapse($(this),true,persist)});this.show(true);return}var change=set_collapse(target,whether,persist);if(all_collapsed())this.hide(persist,!change);else this.show(persist,!change)},resize:function(skip_calc){if(!skip_calc){var cw=this.calcwidth();this.colwidth(cw)}RCloud.UI.middle_column.update();var heights={},padding={},cbles=collapsibles(),ncollapse=cbles.length;var greedy_one=null;cbles.each(function(){if(!$(this).hasClass("out")&&!$(this).data("would-collapse")){var spf=$(this).data("panel-sizer");var sp=spf?spf(this):RCloud.UI.collapsible_column.default_sizer(this);heights[this.id]=sp.height;padding[this.id]=sp.padding;if(!greedy_one&&$(this).attr("data-widgetheight")==="greedy")greedy_one=$(this)}});var available=$(sel_column).height();var total_headings=d3.sum($(sel_accordion+" .panel-heading").map(function(_,ph){return $(ph).outerHeight()}));available-=total_headings;for(var id in padding)available-=padding[id];var left=available,do_fit=false;for(id in heights)left-=heights[id];if(left>=0){if(greedy_one!==null){heights[greedy_one.get(0).id]+=left;do_fit=true}}else{left=available;var remaining=_.keys(heights),done=false,i;var split=left/remaining.length;while(remaining.length&&!done){done=true;for(i=0;i .panel > div.panel-collapse:not(.collapse):not(.out)").collapse("hide");$(sel_collapser+" i").removeClass("icon-minus").addClass("icon-plus");collapsed_=true;this.resize(skip_calc);if(persist&&rcloud.config)rcloud.config.set_user_option(sel_to_opt(sel_accordion),true)},show:function(persist,skip_calc){collapsibles().each(function(){var heading_sel=$(this).data("heading-content-selector");if(heading_sel)heading_sel.show()});if(all_collapsed())set_collapse($(collapsibles()[0]),false,true);collapsibles().each(function(){$(this).collapse($(this).data("would-collapse")?"hide":"show")});$(sel_collapser+" i").removeClass("icon-plus").addClass("icon-minus");collapsed_=false;this.resize(skip_calc);if(persist&&rcloud.config)rcloud.config.set_user_option(sel_to_opt(sel_accordion),false)},calcwidth:function(){if(collapsed_)return 1;var widths=[];collapsibles().each(function(){var width=$(this).data("would-collapse")?1:$(this).attr("data-colwidth");if(width>0)widths.push(width)});return d3.max(widths)}});return result};RCloud.UI.collapsible_column.default_padder=function(el){var el$=$(el),body$=el$.find(".panel-body"),padding=el$.outerHeight()-el$.height()+body$.outerHeight()-body$.height();return padding};RCloud.UI.collapsible_column.default_sizer=function(el){var el$=$(el),$izer=el$.find(".widget-vsize"),height=$izer.height(),padding=RCloud.UI.collapsible_column.default_padder(el);return{height:height,padding:padding}};RCloud.UI.column_sizer={init:function(){$(".notebook-sizer").draggable({axis:"x",opacity:.75,zindex:1e4,revert:true,revertDuration:0,grid:[window.innerWidth/12,0],stop:function(event,ui){var wid_over_12=window.innerWidth/12;var diff,size;if($(this).hasClass("left")){diff=Math.round(ui.position.left/wid_over_12);size=Math.max(1,Math.min(+RCloud.UI.left_panel.colwidth()+diff,11-RCloud.UI.right_panel.colwidth()));if(size===1)RCloud.UI.left_panel.hide(true,true);else RCloud.UI.left_panel.show(true,true);RCloud.UI.left_panel.colwidth(size);RCloud.UI.middle_column.update()}else if($(this).hasClass("right")){diff=Math.round(ui.position.left/wid_over_12)-RCloud.UI.middle_column.colwidth();size=Math.max(1,Math.min(+RCloud.UI.right_panel.colwidth()-diff,11-RCloud.UI.left_panel.colwidth()));if(size===1)RCloud.UI.right_panel.hide(true,true);else RCloud.UI.right_panel.show(true,true);RCloud.UI.right_panel.colwidth(size);RCloud.UI.middle_column.update()}else throw new Error("unexpected shadow drag with classes "+$(this).attr("class"));$(this).css({left:"",right:"",top:""})}});$(window).resize(function(){var wid_over_12=window.innerWidth/12;$(".notebook-sizer").draggable("option","grid",[wid_over_12,0])})}};RCloud.UI.command_prompt=function(){var show_prompt_=false,readonly_=true,history_=null,entry_=null,language_=null,command_bar_=null;function setup_command_entry(){var prompt_div=$("#command-prompt");if(!prompt_div.length)return null;function set_ace_height(){var EXTRA_HEIGHT=6;prompt_div.css({height:ui_utils.ace_editor_height(widget,5)+EXTRA_HEIGHT+"px"});widget.resize();shell.scroll_to_end(0)}prompt_div.css({"background-color":"#fff"});prompt_div.addClass("r-language-pseudo");ace.require("ace/ext/language_tools");var widget=ace.edit(prompt_div[0]);set_ace_height();var RMode=ace.require("ace/mode/r").Mode;var session=widget.getSession();var doc=session.doc;widget.setOptions({enableBasicAutocompletion:true});session.on("change",set_ace_height);widget.setTheme("ace/theme/chrome");session.setUseWrapMode(true);widget.resize();var change_prompt=ui_utils.ignore_programmatic_changes(widget,history_.change.bind(history_));function execute(widget,args,request){var code=session.getValue();if(code.length){RCloud.UI.command_prompt.history().add_entry(code);shell.new_cell(code,language_).spread(function(_,controller){controller.enqueue_execution_snapshot();shell.scroll_to_end()});change_prompt("")}}function last_row(widget){var doc=widget.getSession().getDocument();return doc.getLength()-1}function last_col(widget,row){var doc=widget.getSession().getDocument();return doc.getLine(row).length}function restore_prompt(){var prop=history_.init();change_prompt(prop.cmd);result.language(prop.lang);var r=last_row(widget);ui_utils.ace_set_pos(widget,r,last_col(widget,r))}function set_language(language){var LangMode=ace.require(RCloud.language.ace_mode(language)).Mode;session.setMode(new LangMode(false,session.doc,session))}ui_utils.install_common_ace_key_bindings(widget,result.language.bind(result));var up_handler=widget.commands.commandKeyBinding[0].up,down_handler=widget.commands.commandKeyBinding[0].down;widget.commands.addCommands([{name:"execute",bindKey:{win:"Return",mac:"Return",sender:"editor"},exec:execute},{name:"execute-2",bindKey:{win:"Alt-Return",mac:"Alt-Return",sender:"editor"},exec:execute},{name:"up-with-history",bindKey:"up",exec:function(widget,args,request){var pos=widget.getCursorPositionScreen();if(pos.row>0)up_handler.exec(widget,args,request);else{if(history_.has_last()){change_prompt(history_.last());var r=widget.getSession().getScreenLength();ui_utils.ace_set_pos(widget,r,pos.column)}else ui_utils.ace_set_pos(widget,0,0)}}},{name:"down-with-history",bindKey:"down",exec:function(widget,args,request){var pos=widget.getCursorPositionScreen();var r=widget.getSession().getScreenLength();if(pos.row0},last:function(){if(curr_>0)--curr_;return curr_cmd()},has_next:function(){return curr_1&&scroll_height!=comment[0].scrollHeight){comment.height(comment[0].scrollHeight+"px")}count=count+1;scroll_height=comment[0].scrollHeight;$("#comments-qux").animate({scrollTop:$(document).height()},"slow");return false});return undefined})},display_comments:function(){return rcloud.get_all_comments(shell.gistname()).then(function(comments){rebuild_comments(comments)})},post_comment:function(comment){comment=JSON.stringify({body:comment});return rcloud.post_comment(shell.gistname(),comment).then(this.display_comments.bind(this)).then(function(){$("#comment-entry-body").val("")})},modify_comment:function(cid,comment){var that=this;comment=JSON.stringify({body:comment});return rcloud.modify_comment(shell.gistname(),cid,comment).then(this.display_comments.bind(this))},delete_comment:function(cid){return rcloud.delete_comment(shell.gistname(),cid).then(this.display_comments.bind(this))}};return result}();RCloud.UI.configure_readonly=function(){var readonly_notebook=$("#readonly-notebook");if(shell.notebook.controller.is_mine()){if(shell.notebook.model.read_only()){$("#revert-notebook").show();$("#save-notebook").hide()}else{$("#revert-notebook").hide();$("#save-notebook").show()}}else{$("#revert-notebook,#save-notebook").hide()}if(shell.notebook.model.read_only()){RCloud.UI.command_prompt.readonly(true);readonly_notebook.show();$("#save-notebook").hide();$("#output").sortable("disable");$("#upload-to-notebook").prop("checked",false).attr("disabled",true);RCloud.UI.scratchpad.set_readonly(true)}else{RCloud.UI.command_prompt.readonly(false);readonly_notebook.hide();$("#save-notebook").show();$("#output").sortable("enable");$("#upload-to-notebook").prop("checked",false).removeAttr("disabled");RCloud.UI.scratchpad.set_readonly(false)}};(function(){var fatal_dialog_;RCloud.UI.fatal_dialog=function(message,label,href){$("#loading-animation").hide();if(_.isUndefined(fatal_dialog_)){var default_button=$("');find_last_=$('');var replace_break=$("
    ");replace_desc_=$('');replace_input_=$('');replace_next_=$('');replace_all_=$('');replace_stuff_=replace_break.add(replace_desc_).add(replace_input_).add(replace_next_).add(replace_all_);var close=$('');find_form.append(find_desc_.append(find_input_),find_next_,find_last_,close,replace_break,replace_desc_.append(replace_input_),replace_next_,replace_all_);find_dialog_.append(find_form);$("#middle-column").prepend(find_dialog_);find_input_.on("input",function(e){e.preventDefault();e.stopPropagation();active_match_=undefined;build_regex(find_input_.val());highlight_all()});function find_next(reason){active_transition(reason||"deactivate");if(active_match_!==undefined)active_match_=(active_match_+1)%matches_.length;else active_match_=0;active_transition("activate")}find_next_.click(function(e){e.preventDefault();e.stopPropagation();find_next();return false});find_last_.click(function(e){e.preventDefault();e.stopPropagation();active_transition("deactivate");if(active_match_!==undefined)active_match_=(active_match_+matches_.length-1)%matches_.length;else active_match_=0;active_transition("activate");return false});replace_next_.click(function(e){e.preventDefault();e.stopPropagation();if(active_match_!==undefined){var cell=replace_current();if(cell){shell.notebook.controller.update_cell(cell).then(function(){find_next("replace")})}}else find_next();return false});replace_all_.click(function(e){e.preventDefault();e.stopPropagation();if(active_match_!==undefined){active_transition("deactivate");replace_rest()}else replace_all(find_input_.val(),replace_input_.val());return false});find_cycle_=["find-input","find-next","find-last"];replace_cycle_=["find-input","replace-input","find-next","find-last","replace-all"];function click_find_next(e){if(e.keyCode===$.ui.keyCode.ENTER){e.preventDefault();e.stopPropagation();find_next_.click();return false}return undefined}find_input_.keydown(click_find_next);replace_input_.keydown(click_find_next);find_form.keydown(function(e){switch(e.keyCode){case $.ui.keyCode.TAB:e.preventDefault();e.stopPropagation();var cycle=replace_mode_?replace_cycle_:find_cycle_;var i=cycle.indexOf(e.target.id)+cycle.length;if(e.shiftKey)--i;else++i;i=i%cycle.length;$("#"+cycle[i]).focus();return false;case $.ui.keyCode.ESCAPE:e.preventDefault();e.stopPropagation();hide_dialog();return false}return undefined});find_form.find("input").focus(function(){window.setTimeout(function(){this.select()}.bind(this),0)});close.click(function(){hide_dialog()})}find_dialog_.show();find_input_.focus();if(replace)replace_stuff_.show();else replace_stuff_.hide();build_regex(find_input_.val());highlight_all();shown_=true;replace_mode_=replace}function hide_dialog(){active_match_=undefined;build_regex(null);highlight_all();find_dialog_.hide();shown_=false}function escapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function build_regex(find){regex_=find&&find.length?new RegExp(escapeRegExp(find),"g"):null}function update_match_cell(match){var matches=matches_.filter(function(m){return m.filename===match.filename});shell.notebook.model.cells[match.index].notify_views(function(view){view.change_highlights(matches)})}function active_transition(transition){if(active_match_!==undefined){var match=matches_[active_match_];switch(transition){case"replace":match.kind="replaced";break;case"activate":match.kind=match.kind==="replaced"?"activereplaced":"active";break;case"deactivate":match.kind=match.kind==="activereplaced"?"replaced":"normal";break}update_match_cell(match)}}function highlight_cell(cell){var matches=[];if(regex_){var content=cell.content(),match;while(match=regex_.exec(content)){matches.push({begin:match.index,end:match.index+match[0].length,kind:matches.length===active_match_?"active":"normal"});if(match.index===regex_.lastIndex)++regex_.lastIndex}}cell.notify_views(function(view){view.change_highlights(matches)});return matches}function annotate_matches(matches,cell,n){return matches.map(function(match){return _.extend({index:n,filename:cell.filename()},match)})}function highlight_all(){matches_=[];shell.notebook.model.cells.forEach(function(cell,n){var matches=highlight_cell(cell);matches_.push.apply(matches_,annotate_matches(matches,cell,n))})}function replace_current(){function findIndex(a,f,i){if(i===undefined)i=0;for(;i');$("#help-form").submit(function(e){e.preventDefault();e.stopPropagation();var topic=$("#input-text-help").val();$("#input-text-help").blur();rcloud.help(topic);return false})},panel_sizer:function(el){if($("#help-body").css("display")==="none")return RCloud.UI.collapsible_column.default_sizer(el);else return{padding:RCloud.UI.collapsible_column.default_padder(el),height:9e3}},show:function(){$("#help-body").css("display","table-row");$("#help-body").attr("data-widgetheight","greedy");$("#collapse-help").trigger("size-changed");RCloud.UI.left_panel.collapse($("#collapse-help"),false);ui_utils.prevent_backspace($("#help-frame").contents())},display_content:function(content){$("#help-frame").contents().find("body").html(content);this.show()},display_href:function(href){$("#help-frame").attr("src",href);this.show()}};(function(){function dataURLToBlob(dataURL){var BASE64_MARKER=";base64,";var parts,contentType,raw;if(dataURL.indexOf(BASE64_MARKER)==-1){parts=dataURL.split(",");contentType=parts[0].split(":")[1];raw=decodeURIComponent(parts[1]);return new Blob([raw],{type:contentType})}parts=dataURL.split(BASE64_MARKER);contentType=parts[0].split(":")[1];raw=window.atob(parts[1]);var rawLength=raw.length;var uInt8Array=new Uint8Array(rawLength);for(var i=0;i\n")}function save_as(fmt){var options={type:fmt};if(dims_)options.dim=dims_;rcloud.plots.render(device,page,options).then(function(data){saveAs(dataURLToBlob(data.url),id+"."+fmt)})}function resize_stop(event,ui){var dims=[ui.size.width,ui.size.height];rcloud.plots.render(device,page,{dim:dims}).then(function(data){result.update(data.url,dims)}).catch(function(err){if(!/Error in replayPlot/.test(err.message))throw err})}function save_button(){var save_dropdown=$('');var save_button=$('');save_button.append($(''));var save_menu=$('');_.pluck(formats_.entries("all"),"key").forEach(function(fmt){var link=$(''+fmt+"");link.click(function(){save_as(fmt)});var li=$('
  • ').append(link);save_menu.append(li)});var opts={title:"save image",delay:{show:250,hide:0}};opts.container="body";save_button.tooltip(opts);save_dropdown.append(save_button,save_menu);return save_dropdown}function update_dims(dims){if(dims){if(dims[0])image_div_.css("width",dims[0]);if(dims[1]){image_div_.css("height",dims[1])}dims_=dims}}function add_controls($image){var container=$('
    ');scroller_div_=$('
    ');image_div_=$("
    ");container.append(scroller_div_);scroller_div_.append(image_div_,$("
    "));image_div_.append($image);var image_commands=$('
    ');image_commands.append(save_button());image_commands.hide();$image.add(image_commands).hover(function(){image_commands.show()},function(){image_commands.hide()});image_div_.append(image_commands);$image.css({width:"100%",height:"100%"});update_dims(dims);image_div_.resizable({autoHide:true,stop:resize_stop});return container}img_=img_tag();div_=add_controls(img_);var result={div:function(){return div_},update:function(url,dims){img_.attr("src",url);update_dims(dims)}};return result}var result={update:function(url,dims,device,page){var id=device+"-"+page;var image;if(images_[id]){image=images_[id];image.update(url,dims)}else{image=create_image(id,url,dims,device,page);images_[id]=image}return image},formats:formats_};return result}()})();RCloud.UI.import_export=function(){function download_as_file(filename,content,mimetype){var file=new Blob([content],{type:mimetype});saveAs(file,filename)}return{init:function(){RCloud.UI.advanced_menu.add({import_notebooks:{sort:4e3,text:"Import External Notebooks",modes:["edit"],action:function(){function do_import(){var url=$("#import-source").val(),notebooks=$("#import-gists").val(),prefix=$("#import-prefix").val();notebooks=_.without(notebooks.split(/[\s,;]+/),"");rcloud.port_notebooks(url,notebooks,prefix).then(function(result){var succeeded=[],failed=[];for(var res in result){if(res==="r_type"||res==="r_attributes")continue;if(result[res].ok)succeeded.push(result[res].content);else failed.push(res)}succeeded.forEach(function(notebook){editor.star_notebook(true,{notebook:notebook}).then(function(){editor.set_notebook_visibility(notebook.id,true)})});if(failed.length)RCloud.UI.session_pane.post_error("Failed to import notebooks: "+failed.join(", "))});dialog.modal("hide")}function create_import_notebook_dialog(){var body=$('
    ').append($(["

    Import notebooks from another GitHub instance.

    Currently import does not preserve history.

    ",'

    source repo api url: ','

    notebooks:

    ','

    prefix (e.g. folder/ to put notebooks in a folder): '].join("")));var cancel=$('Cancel').on("click",function(){$(dialog).modal("hide")});var go=$('Import').on("click",do_import);var footer=$('

    ').append(cancel).append(go);var header=$(['"].join(""));var dialog=$('').append($('').append($('').append(header).append(body).append(footer)));$("body").append(dialog);dialog.on("show.bs.modal",function(){$("#import-gists").val("")}).on("shown.bs.modal",function(){$("#import-source").focus().select()});return dialog}var dialog=$("#import-notebooks-dialog");if(!dialog.length)dialog=create_import_notebook_dialog();dialog.modal({keyboard:true})}},export_notebook_gist:{sort:5e3,text:"Export Notebook to File",modes:["edit"],action:function(){return rcloud.get_notebook(shell.gistname(),shell.version()).then(function(notebook){notebook=Notebook.sanitize(notebook);var gisttext=JSON.stringify(notebook);download_as_file(notebook.description+".gist",gisttext,"text/json");return notebook})}},import_notebook_gist:{sort:6e3,text:"Import Notebook from File",modes:["edit"],action:function(){var that=this;function create_import_file_dialog(){var notebook=null;var notebook_status=null;var notebook_desc_content=null;var import_button=null;function do_upload(file){notebook_status.hide();notebook_desc.hide();var fr=new FileReader;fr.onloadend=function(e){notebook_status.show();try{notebook=JSON.parse(fr.result)}catch(x){notebook_status.text("Invalid notebook format: couldn't parse JSON");return}if(!notebook.description){notebook_status.text("Invalid notebook format: has no description");notebook=null;return}if(!notebook.files||_.isEmpty(notebook.files)){notebook_status.text("Invalid notebook format: has no files");notebook=null;return}notebook_status.text("");notebook_desc_content.val(notebook.description); +notebook_desc.show();notebook=Notebook.sanitize(notebook);ui_utils.enable_bs_button(import_button)};fr.readAsText(file)}function do_import(){if(notebook){notebook.description=notebook_desc_content.val();rcloud.create_notebook(notebook).then(function(notebook){editor.star_notebook(true,{notebook:notebook}).then(function(){editor.set_notebook_visibility(notebook.id,true)})})}dialog.modal("hide")}var body=$('
    ');var file_select=$('');file_select.click(function(){ui_utils.disable_bs_button(import_button)}).change(function(){do_upload(file_select[0].files[0])});notebook_status=$("");notebook_status.append(notebook_status);var notebook_desc=$("Notebook description: ");notebook_desc_content=$('').keypress(function(e){if(e.which===$.ui.keyCode.ENTER){do_import();return false}return true});notebook_desc.append(notebook_desc_content);body.append($("

    ").append(file_select)).append($("

    ").append(notebook_status.hide())).append($("

    ").append(notebook_desc.hide()));var cancel=$('Cancel').on("click",function(){$(dialog).modal("hide")});import_button=$('Import').on("click",do_import);ui_utils.disable_bs_button(import_button);var footer=$('

    ').append(cancel).append(import_button);var header=$(['"].join(""));var dialog=$('').append($('').append($('').append(header).append(body).append(footer)));$("body").append(dialog);dialog.on("show.bs.modal",function(){$("#notebook-file-upload")[0].value=null;notebook_status.text("");notebook_status.hide();notebook_desc_content.val("");notebook_desc.hide()});dialog.data("reset",function(){notebook=null;ui_utils.disable_bs_button(import_button)});return dialog}var dialog=$("#import-notebook-file-dialog");if(!dialog.length)dialog=create_import_file_dialog();else dialog.data().reset();dialog.modal({keyboard:true})}},export_notebook_r:{sort:7e3,text:"Export Notebook as R Source File",modes:["edit"],action:function(){return rcloud.get_notebook(shell.gistname(),shell.version()).then(function(notebook){var strings=[];var parts=[];_.each(notebook.files,function(file){var filename=file.filename;if(/^part/.test(filename)){var number=parseInt(filename.slice(4).split(".")[0]);if(!isNaN(number)){if(file.language==="R")parts[number]="```{r}\n"+file.content+"\n```";else parts[number]=file.content}}});for(var i=0;i .notebook-cell",start:function(e,info){$(e.toElement).addClass("grabbing");info.placeholder.height(info.item.height())},stop:function(e,info){$(e.toElement).removeClass("grabbing")},update:function(e,info){var ray=cells.sortable("toArray");var model=info.item.data("rcloud.model"),next=info.item.next().data("rcloud.model");shell.notebook.controller.move_cell(model,next)},handle:" .cell-status",scroll:true,scrollSensitivity:40,forcePlaceholderSize:true})}make_cells_sortable();RCloud.UI.column_sizer.init();$(window).bind("unload",function(){shell.save_notebook();return true});RCloud.UI.advanced_menu.init();RCloud.UI.navbar.init();RCloud.UI.find_replace.init();RCloud.UI.share_button.init();RCloud.UI.notebook_commands.init();RCloud.UI.cell_commands.init();RCloud.UI.panel_loader.init();RCloud.UI.import_export.init();$("#edit-notebook").click(function(){window.location="edit.html?notebook="+shell.gistname()});ui_utils.prevent_backspace($(document));$(document).on("copy",function(e){if($(arguments[0].target).hasClass("ace_text-input")||!$(arguments[0].target).closest($("#output")).size())return;var sel=window.getSelection();var div=$('
    ');$("body").append(div);var range=sel.getRangeAt(0);div.append(range.cloneContents());div.find(".nonselectable").remove();sel.selectAllChildren(div[0])});$(document).on("scroll",function(){$(this).scrollLeft(0);$(this).scrollTop(0)});$("#rcloud-cellarea").on("scroll",function(){$(this).scrollLeft(0)});document.addEventListener("keydown",function(e){if(saveb.size()){if(e.keyCode==83&&(e.ctrlKey||e.metaKey)){e.preventDefault();shell.save_notebook()}}if(e.keyCode==65&&(e.ctrlKey||e.metaKey)){e.preventDefault();var selection=window.getSelection();selection.removeAllRanges();var range=new Range;range.selectNode(document.getElementById("output"));range.setStartAfter($(".response")[0]);selection.addRange(range)}})};RCloud.UI.left_panel=RCloud.UI.collapsible_column("#left-column","#accordion-left","#left-pane-collapser");RCloud.UI.load_options=function(){return rcloud.get_conf_value("smtp.server").then(function(has_mail){if(has_mail)RCloud.UI.settings_frame.add({"subscribe-to-comments":RCloud.UI.settings_frame.checkbox({sort:5e3,default_value:false,label:"Subscribe To Comments",condition:function(){}})});return RCloud.UI.panel_loader.load().then(function(){RCloud.UI.left_panel.init();RCloud.UI.middle_column.init();RCloud.UI.right_panel.init();RCloud.UI.command_prompt.init();$(".panel-collapse").collapse({toggle:false});return Promise.all([RCloud.UI.navbar.load(),RCloud.UI.advanced_menu.load(),RCloud.UI.share_button.load(),RCloud.UI.left_panel.load_options(),RCloud.UI.right_panel.load_options()])})})};RCloud.UI.middle_column=function(){var result=RCloud.UI.column("#middle-column");_.extend(result,{update:function(){var size=12-RCloud.UI.left_panel.colwidth()-RCloud.UI.right_panel.colwidth();result.colwidth(size);shell.notebook.view.reformat()}});return result}();RCloud.UI.navbar=function(){var extension_;var result={init:function(){extension_=RCloud.extension.create({sections:{header:{filter:RCloud.extension.filter_field("area","header")},main:{filter:RCloud.extension.filter_field("area","main")}}});this.add({rcloud:{area:"header",sort:1e3,create:function(){return'RCloud'}}})},add:function(commands){if(extension_)extension_.add(commands);return this},remove:function(command_name){if(extension_)extension_.remove(command_name);return this},load:function(){if(extension_){var items=extension_.create("header");var header=$("#rcloud-navbar-header");header.append.apply(header,_.values(items))}}};return result}();RCloud.UI.notebook_commands=function(){var icon_style_={"line-height":"90%"};var star_style_=_.extend({"font-size":"80%"},icon_style_);var star_states_={"true":{"class":"icon-star",title:"unstar"},"false":{"class":"icon-star-empty",title:"star"}};var commands_={};var always_commands_,appear_commands_;var defaults_={condition0:function(node){return node.gistname&&!node.version},condition1:function(node){return true}};function add_commands(node,span,commands){commands.forEach(function(command){span.append(document.createTextNode(String.fromCharCode(160)));span.append(command.create(node))})}function condition_pred(node){return function(command){return _.every(["condition0","condition1","condition2"],function(c){return!command[c]||command[c](node)})}}var result={init:function(){this.add({star_unstar:{section:"always",sort:1e3,create:function(node){var state=editor.i_starred(node.gistname);var star_unstar=ui_utils.fa_button(star_states_[state]["class"],function(e){return star_states_[state].title},"star",star_style_,true);star_unstar.click(function(e){e.preventDefault();e.stopPropagation();var new_state=!state;editor.star_notebook(new_state,{gistname:node.gistname,user:node.user})});star_unstar[0].set_state=function(val){state=!!val;$(this).find("i").attr("class",star_states_[state].class)};star_unstar.append($.el.sub(String(editor.num_stars(node.gistname))));return star_unstar}},history:{section:"appear",sort:2e3,create:function(node){var current=editor.current();var disable=current.notebook===node.gistname&¤t.version;var history=ui_utils.fa_button("icon-time","history","history",icon_style_,true);if(disable)history.addClass("button-disabled");history.click(function(){ui_utils.fake_hover(node);if(!disable){editor.show_history(node,true)}return false});return history}},private_public:{section:"appear",sort:3e3,condition1:function(node){return node.user===editor.username()},create:function(node){var make_private=ui_utils.fa_button("icon-eye-close","make private","private",icon_style_,true),make_public=ui_utils.fa_button("icon-eye-open","make public","public",icon_style_,true);if(node.visible)make_public.hide();else make_private.hide();make_private.click(function(){ui_utils.fake_hover(node);if(node.user!==editor.username())throw new Error("attempt to set visibility on notebook not mine");else editor.set_notebook_visibility(node.gistname,false)});make_public.click(function(){ui_utils.fake_hover(node);if(node.user!==editor.username())throw new Error("attempt to set visibility on notebook not mine");else editor.set_notebook_visibility(node.gistname,true);return false});return make_private.add(make_public)}},remove:{section:"appear",sort:4e3,condition1:function(node){return node.user===editor.username()},create:function(node){var remove=ui_utils.fa_button("icon-remove","remove","remove",icon_style_,true);remove.click(function(e){$("div.popover").remove();var yn=confirm("Do you want to remove '"+node.full_name+"'?");if(yn){e.stopPropagation();e.preventDefault();editor.remove_notebook(node.user,node.gistname);return false}else{return false}});return remove}}});return this},add:function(commands){for(var key in commands)commands_[key]=_.extend(_.extend({},defaults_),commands[key]);always_commands_=_.filter(commands_,function(command){return command.section==="always"});appear_commands_=_.filter(commands_,function(command){return command.section==="appear"});[always_commands_,appear_commands_].forEach(function(set){set.sort(function(a,b){return a.sort-b.sort})});return this},remove:function(command_name){delete commands_[command_name];return this},icon_style:function(){return icon_style_},decorate:function($li,node,right){var appeared;var $right=$(right);var predicate=condition_pred(node);function do_always(){var always_commands=always_commands_.filter(predicate);if(always_commands.length){var always=$($.el.span({"class":"notebook-commands-right"}));add_commands(node,always,always_commands);$right.append(always)}}function do_appear(){var appear_commands=appear_commands_.filter(predicate);if(appear_commands.length){var appear=$($.el.span({"class":"notebook-commands appear"}));add_commands(node,appear,appear_commands);$right.append(appear);$right.find(".notebook-date").toggleClass("disappear",true);appear.hide();$right.append($.el.span({"class":"notebook-commands appear-wrapper"},appear[0]))}appeared=true}do_always();$li.find("*:not(ul)").hover(function(){if(!appeared)do_appear();var notebook_info=editor.get_notebook_info(node.gistname);$(".notebook-commands.appear",this).show();$(".notebook-date.disappear",this).css("visibility","hidden")},function(){$(".notebook-commands.appear",this).hide();$(".notebook-date.disappear",this).css("visibility","visible")});return this}};return result}();RCloud.UI.notebook_title=function(){var last_editable_=null;function version_tagger(node){return function(name){return editor.tag_version(node.gistname,node.version,name).then(function(){return editor.show_history(node.parent,{update:true})})}}function rename_current_notebook(name){editor.rename_notebook(name).then(function(){result.set(name)})}function select(el){if(el.childNodes.length!==1||el.firstChild.nodeType!=el.TEXT_NODE)throw new Error("expecting simple element with child text");var text=el.firstChild.textContent;var range=document.createRange();range.setStart(el.firstChild,text.lastIndexOf("/")+1);range.setEnd(el.firstChild,text.length);return range}var fork_and_rename=function(forked_gist_name){var is_mine=shell.notebook.controller.is_mine();var gistname=shell.gistname();var version=shell.version();editor.fork_notebook(is_mine,gistname,version).then(function rename(v){rename_current_notebook(forked_gist_name)})};var editable_opts={change:rename_current_notebook,select:select,ctrl_cmd:fork_and_rename,validate:function(name){return editor.validate_name(name)}};var result={set:function(text){$("#notebook-author").text(shell.notebook.model.user());$("#author-title-dash").show();$("#rename-notebook").show();$("#loading-animation").hide();var is_read_only=shell.notebook.model.read_only();var active_text=text;var ellipt_start=false,ellipt_end=false;var title=$("#notebook-title");title.text(text);while(window.innerWidth-title.width()<650){var slash=text.search("/");if(slash>=0){ellipt_start=true;text=text.slice(slash+1)}else{ellipt_end=true;text=text.substr(0,text.length-2)}title.text((ellipt_start?".../":"")+text+(ellipt_end?"...":""))}ui_utils.editable(title,$.extend({allow_edit:!is_read_only&&!shell.is_view_mode(),inactive_text:title.text(),active_text:active_text},editable_opts))},update_fork_info:function(fork_of){if(fork_of&&fork_of.description){var owner=fork_of.owner?fork_of.owner:fork_of.user;var fork_desc=owner.login+" / "+fork_of.description;var url=ui_utils.make_url(shell.is_view_mode()?"view.html":"edit.html",{notebook:fork_of.id});$("#forked-from-desc").html("forked from "+fork_desc+"")}else $("#forked-from-desc").text("")},make_editable:function(node,$li,editable){function get_title(node,elem){if(!node.version){return $(".jqtree-title:not(.history)",elem)}else{return $(".jqtree-title",elem)}}if(last_editable_&&(!node||last_editable_!==node))ui_utils.editable(get_title(last_editable_,last_editable_.element),"destroy");if(node){var opts=editable_opts;if(node.version){opts=$.extend({},editable_opts,{change:version_tagger(node),validate:function(name){return true}})}ui_utils.editable(get_title(node,$li),$.extend({allow_edit:editable,inactive_text:node.name,active_text:node.version?node.name:node.full_name},opts))}last_editable_=node}};return result}();RCloud.UI.notebooks_frame={body:function(){return RCloud.UI.panel_loader.load_snippet("notebooks-snippet")},heading_content:function(){var new_notebook_button=$.el.span({style:"float: right; position: relative"},$.el.a({"class":"header-button",id:"new-notebook",href:"#",style:"display:none"},$.el.span($.el.i({"class":"icon-plus"}))));return new_notebook_button},heading_content_selector:function(){return $("#new-notebook")}};RCloud.UI.panel_loader=function(){var extension_;var panels_={};function collapse_name(name){return"collapse-"+name}function add_panel(opts){var parent_id="accordion-"+opts.side;var collapse_id=collapse_name(opts.name);var heading_attrs={"class":"panel-heading","data-toggle":"collapse","data-parent":"#"+parent_id,"data-target":"#"+collapse_id};var title_span=$.el.span({"class":"title-offset"},opts.title),icon=$.el.i({"class":opts.icon_class}),heading_link=$.el.a({"class":"accordion-toggle "+opts.side,href:"#"+collapse_id},icon," ",title_span);var heading_content=opts.panel.heading_content?opts.panel.heading_content():null;var heading;if(opts.side==="left"){heading=$.el.div(heading_attrs,heading_link,heading_content)}else if(opts.side==="right"){heading=$.el.div(heading_attrs,heading_content,heading_link)}else throw new Error("Unknown panel side "+opts.side);var collapse_attrs={id:collapse_id,"class":"panel-collapse collapse","data-colwidth":opts.colwidth};if(opts.greedy)collapse_attrs["data-widgetheight"]="greedy";var collapse=$.el.div(collapse_attrs,$.el.img({height:"100%",width:"5px",src:opts.side==="left"?"/img/right_bordergray.png":"/img/left_bordergray.png","class":"panel-shadow "+opts.side}),opts.panel.body());var panel=$.el.div({"class":"panel panel-default"},heading,collapse);$("#"+parent_id).append(panel)}function add_filler_panel(side){var parent_id="accordion-"+side;var body=$("
    ",{"class":"panel-body",style:"border-top-color: transparent; background-color: #777"});for(var i=0;i<60;++i)body.append($.el.br());var collapse=$.el.div({"class":"panel-collapse out"},body[0]);var panel=$.el.div({"class":"panel panel-default"},collapse);$("#"+parent_id).append(panel)}return{init:function(){extension_=RCloud.extension.create({sections:{left:{filter:function(panel){return panel.side==="left"}},right:{filter:function(panel){return panel.side==="right"}}}});this.add({Notebooks:{side:"left",name:"notebook-tree",title:"Notebooks",icon_class:"icon-folder-open",colwidth:3,greedy:true,sort:1e3,panel:RCloud.UI.notebooks_frame},Search:{side:"left",name:"search",title:"Search",icon_class:"icon-search",colwidth:4,sort:2e3,panel:RCloud.UI.search},Settings:{side:"left",name:"settings",title:"Settings",icon_class:"icon-cog",colwidth:3,sort:3e3,panel:RCloud.UI.settings_frame},Help:{side:"left",name:"help",title:"Help",icon_class:"icon-question",colwidth:5,sort:4e3,panel:RCloud.UI.help_frame},Assets:{side:"right",name:"assets",title:"Assets",icon_class:"icon-copy",colwidth:4,sort:1e3,panel:RCloud.UI.scratchpad},"File Upload":{side:"right",name:"file-upload",title:"File Upload",icon_class:"icon-upload-alt",colwidth:2,sort:2e3,panel:RCloud.UI.upload_frame},Comments:{side:"right",name:"comments",title:"Comments",icon_class:"icon-comments",colwidth:2,sort:3e3,panel:RCloud.UI.comments_frame},Session:{side:"right",name:"session-info",title:"Session",icon_class:"icon-info",colwidth:3,sort:4e3,panel:RCloud.UI.session_pane}})},add:function(P){if(extension_)extension_.add(P)},remove:function(panel_name){extension_.remove(panel_name)},load_snippet:function(id){return $($("#"+id).html())[0]},load:function(){function do_side(panels,side){function do_panel(p){add_panel(p);if(p.panel.init)p.panel.init();if(p.panel.load)p.panel.load();if(p.panel.panel_sizer)$("#"+collapse_name(p.name)).data("panel-sizer",p.panel.panel_sizer);if(p.panel.heading_content_selector)$("#"+collapse_name(p.name)).data("heading-content-selector",p.panel.heading_content_selector())}var chosen=extension_.entries(side);chosen.forEach(do_panel);add_filler_panel(side)}do_side(panels_,"left");do_side(panels_,"right");$("#left-column").append(this.load_snippet("left-pane-collapser-snippet"));$("#right-column").append(this.load_snippet("right-pane-collapser-snippet"));return Promise.cast(undefined)}}}();(function(){var progress_dialog;var progress_counter=0;var allowed=1;var curtains_on=false;function set_curtain(){if(curtains_on)return;curtains_on=true;if(_.isUndefined(progress_dialog)){progress_dialog=$('");alert_element.append($content);var alert_box=bootstrap_utils.alert({"class":"alert-danger",html:alert_element});results_append(alert_box);return alert_box}function result_success(message){results_append(bootstrap_utils.alert({"class":"alert-info",text:message,on_close:function(){options.$progress.hide();options.$result_panel.trigger("size-changed")}}))}function asset_react(options){return{add:function(file){result_success("Asset "+file+" added.")},replace:function(file){result_success("Asset "+file+" replaced.")}}}function file_react(options){return{start:function(filename){options.$progress.show();options.$progress_bar.css("width","0%");options.$progress_bar.attr("aria-valuenow","0")},progress:function(read,size){options.$progress_bar.attr("aria-valuenow",~~(100*(read/size)));options.$progress_bar.css("width",100*(read/size)+"%")},done:function(is_replace,filename){result_success("File "+filename+" "+(is_replace?"replaced.":"uploaded."))},confirm_replace:Promise.promisify(function(filename,callback){var overwrite_click=function(){alert_box.remove();callback(null,true)};var p=$("

    File "+filename+" exists.

    ");var overwrite=bootstrap_utils.button({"class":"btn-danger"}).click(overwrite_click).text("Overwrite");p.append(overwrite);var alert_box=result_alert(p);$("button.close",alert_box).click(function(){callback(new Error("Overwrite cancelled"),null)})})}}options=upload_ui_opts(options||{});if(options.$result_panel.length)RCloud.UI.right_panel.collapse(options.$result_panel,false);var file_error_handler=function(err){var message=err.message;var p,done=true;if(message==="empty"){p=$("

    File is empty.

    ")}else if(message==="Overwrite cancelled"){p=$("

    ").append(message)}else if(message==="badname"){p=$("

    Filename not allowed.

    ")}else{p=$("

    (unexpected) "+message+"

    ");console.log(message,err.stack)}result_alert(p);throw err};var promise=to_notebook?RCloud.upload_assets(options,asset_react(options)):RCloud.upload_files(options,file_react(options));return promise.catch(function(err){return file_error_handler(err,options)}).then(function(){if(options.$progress.length)window.setTimeout(function(){options.$progress.hide()},5e3)})}return upload_files}();RCloud.UI.upload_frame={body:function(){return RCloud.UI.panel_loader.load_snippet("file-upload-snippet")},init:function(){$("#file").change(function(){$("#progress-bar").css("width","0%")});$("#upload-submit").click(function(){if($("#file")[0].files.length===0)return;var to_notebook=$("#upload-to-notebook").is(":checked");RCloud.UI.upload_with_alerts(to_notebook).catch(function(){})});RCloud.session.listeners.push({on_reset:function(){$(".progress").hide();$("#file-upload-results").empty()}})},panel_sizer:function(el){var padding=RCloud.UI.collapsible_column.default_padder(el);var height=24+$("#file-upload-controls").height()+$("#file-upload-results").height();return{height:height,padding:padding}}}; \ No newline at end of file diff --git a/htdocs/js/ui/image_manager.js b/htdocs/js/ui/image_manager.js index 738431b456..810069d8ae 100644 --- a/htdocs/js/ui/image_manager.js +++ b/htdocs/js/ui/image_manager.js @@ -58,6 +58,10 @@ RCloud.UI.image_manager = (function() { rcloud.plots.render(device, page, {dim: dims}) .then(function(data) { result.update(data.url, dims); + }) + .catch(function(err) { + if(!/Error in replayPlot/.test(err.message)) + throw err; }); } function save_button() {