/
rcloud_bundle.min.js
6 lines (6 loc) · 172 KB
/
rcloud_bundle.min.js
1
2
3
4
5
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=$("<pre class='response'></pre>").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;i<path.length;++i)v=v[path[i]];return v}function set(path,val){var v=ocaps;for(var i=0;i<path.length-1;++i)v=v[path[i]];v[path[path.length-1]+suffix]=val}var suffix=replace?"":"Async";_.each(paths,function(path){var fn=get(path);set(path,fn?rcloud_handler(path.join("."),Promise.promisify(fn)):null)});return ocaps}return process_paths}();RCloud.create=function(rcloud_ocaps){function rcloud_github_handler(command,promise){function success(result){if(result.ok){return result.content}else{var message;if(result.content&&result.content.message)message=result.content.message;else message="error code "+result.code;throw new Error(command+": "+message)}}return promise.then(success)}var rcloud={};function setup_unauthenticated_ocaps(){var paths=[["version_info"],["anonymous_session_init"],["anonymous_compute_init"],["has_compute_separation"],["prefix_uuid"],["get_conf_value"],["get_notebook"],["load_notebook"],["load_notebook_compute"],["call_notebook"],["install_notebook_stylesheets"],["tag_notebook_version"],["get_version_by_tag"],["get_tag_by_version"],["get_users"],["log","record_cell_execution"],["setup_js_installer"],["replace_token"],["comments","get_all"],["help"],["debug","raise"],["stars","star_notebook"],["stars","unstar_notebook"],["stars","is_notebook_starred"],["stars","get_notebook_star_count"],["stars","get_notebook_starrer_list"],["stars","get_multiple_notebook_star_counts"],["stars","get_my_starred_notebooks"],["session_cell_eval"],["reset_session"],["set_device_pixel_ratio"],["api","enable_echo"],["api","disable_echo"],["api","enable_warnings"],["api","disable_warnings"],["api","set_url"],["api","get_url"],["get_notebook_by_name"],["languages","get_list"],["plots","render"],["plots","get_formats"]];RCloud.promisify_paths(rcloud_ocaps,paths);rcloud.username=function(){return $.cookies.get("user")};rcloud.github_token=function(){return $.cookies.get("token")};rcloud.version_info=function(){return rcloud_ocaps.version_infoAsync.apply(null,arguments)};rcloud.anonymous_session_init=function(){return rcloud_ocaps.anonymous_session_initAsync()};rcloud.anonymous_compute_init=function(){return rcloud_ocaps.anonymous_compute_initAsync()};rcloud.init_client_side_data=function(){var that=this;return Promise.all([rcloud_ocaps.prefix_uuidAsync(),rcloud_ocaps.has_compute_separationAsync()]).spread(function(uuid,has_compute){that.deferred_knitr_uuid=uuid;that.has_compute_separation=has_compute})};rcloud.get_conf_value=function(key){return rcloud_ocaps.get_conf_valueAsync(key)};rcloud.get_notebook=function(id,version){return rcloud_github_handler("rcloud.get.notebook "+id,rcloud_ocaps.get_notebookAsync(id,version))};rcloud.load_notebook=function(id,version){return Promise.all([rcloud_github_handler("rcloud.load.notebook.compute "+id,rcloud_ocaps.load_notebook_computeAsync(id,version)),rcloud_github_handler("rcloud.load.notebook "+id,rcloud_ocaps.load_notebookAsync(id,version))]).spread(function(_,notebook){return notebook})};rcloud.tag_notebook_version=function(gist_id,version,tag_name){return rcloud_ocaps.tag_notebook_versionAsync(gist_id,version,tag_name)};rcloud.get_version_by_tag=function(gist_id,tag){return rcloud_ocaps.get_version_by_tagAsync(gist_id,tag)};rcloud.get_tag_by_version=function(gist_id,version){return rcloud_ocaps.get_tag_by_versionAsync(gist_id,version)};rcloud.call_notebook=function(id,version){return rcloud_github_handler("rcloud.call.notebook "+id,rcloud_ocaps.call_notebookAsync(id,version))};rcloud.install_notebook_stylesheets=function(){return rcloud_ocaps.install_notebook_stylesheetsAsync()};rcloud.help=function(topic){return rcloud_ocaps.helpAsync(topic).then(function(found){if(!found)RCloud.UI.help_frame.display_content("<h2>No help found for <em>"+topic+"</em></h2>")})};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($('<link type="text/css" rel="stylesheet" class="rcloud-user-defined-css" href="'+url+'"/>'))});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=$("<div class='alert alert-danger'></div>");result.append($("<span></span>").text(msg));label=label||"Reconnect";var button=$("<button type='button' class='close'>"+label+"</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=$("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×</button>");var result=$("<div class='alert alert-danger alert-dismissable'></div>");result.append(button);var text=_.map(msg.split("\n"),function(str){var el=$("<div></div>").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<pos.row;i++)ret+=text[i].length+nlLength;ret+=pos.column;return ret};ui_utils.position_of_character_offset=function(widget,offset){var session=widget.getSession(),doc=session.getDocument();var nlLength=doc.getNewLineCharacter().length;var text=doc.getAllLines();var i;for(i=0;i<text.length;i++){if(offset<=text[i].length)break;offset-=text[i].length+nlLength}if(i===text.length)throw new Error("character offset off end of editor");return{row:i,column:offset}};ui_utils.ace_range_of_character_range=function(widget,cbegin,cend){var Range=ace.require("ace/range").Range;var begin=ui_utils.position_of_character_offset(widget,cbegin),end=ui_utils.position_of_character_offset(widget,cend);return new Range(begin.row,begin.column,end.row,end.column)};ui_utils.ignore_programmatic_changes=function(widget,listener){var listen=true;widget.on("change",function(){if(listen)listener(widget.getValue())});return function(value){listen=false;var res=widget.setValue(value);listen=true;return res}};ui_utils.set_ace_readonly=function(widget,readonly){widget.setOptions({readOnly:readonly,highlightActiveLine:!readonly,highlightGutterLine:!readonly});widget.renderer.$cursorLayer.element.style.opacity=readonly?0:1};ui_utils.twostate_icon=function(item,on_activate,on_deactivate,active_icon,inactive_icon){function set_state(state){item[0].checked=state;var icon=item.find("i");if(state){icon.removeClass(inactive_icon);icon.addClass(active_icon)}else{icon.removeClass(active_icon);icon.addClass(inactive_icon)}}function on_click(){var state=!this.checked;set_state(state);if(state)on_activate();else on_deactivate()}function enable(val){item.off("click");if(val)item.click(on_click)}enable(true);return{set_state:set_state,enable:enable}};ui_utils.checkbox_menu_item=function(item,on_check,on_uncheck){var ret=ui_utils.twostate_icon(item,on_check,on_uncheck,"icon-check","icon-check-empty");var base_enable=ret.enable;ret.enable=function(val){item.parent().toggleClass("disabled",!val);base_enable(val)};return ret};ui_utils.customize_ace_gutter=function(widget,line_text_function){var dom=ace.require("ace/lib/dom");widget.renderer.$gutterLayer.update=function(config){var emptyAnno={className:""};var html=[];var i=config.firstRow;var lastRow=config.lastRow;var fold=this.session.getNextFoldLine(i);var foldStart=fold?fold.start.row:Infinity;var foldWidgets=this.$showFoldWidgets&&this.session.foldWidgets;var breakpoints=this.session.$breakpoints;var decorations=this.session.$decorations;var firstLineNumber=this.session.$firstLineNumber;var lastLineNumber=0;for(;i<=lastRow;++i)html.push("<div class='ace_gutter-cell ","' style='height:",this.session.getRowLength(0)*config.lineHeight,"px;'>",line_text_function(i),"</div>");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,"<br/>")}return s.replace(/ /g," ")}function decode(s){if(command.allow_multiline){s=s.replace(/<br>/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&&index<parent.children.length){var next=parent.children[index];$(next.element).mouseover()}})};ui_utils.on_next_tick=function(f){window.setTimeout(f,0)};ui_utils.scroll_to_after=function($sel,duration){if($sel.length===0)return;var opts;if(duration!==undefined)opts={animation:{duration:duration}};var $parent=$sel.parent();var y=$parent.scrollTop()+$sel.position().top+$sel.outerHeight();$parent.scrollTo(null,y,opts)};ui_utils.scroll_into_view=function($scroller,top_buffer,bottom_buffer,_){if(_===undefined)return;var height=+$scroller.css("height").replace("px","");var scrolltop=$scroller.scrollTop(),elemtop=0;for(var i=3;i<arguments.length;++i)elemtop+=arguments[i].position().top;if(elemtop>height)$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=$('<div class="alert"></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($('<button type="button" class="close" data-dismiss="alert">×</button>').click(opts.on_close));return div};bootstrap_utils.button=function(opts){opts=opts||{};var a=$('<a class="btn" href="#"></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=$("<li></li>");var anchor=$("<a href='#'></a>");var filename_span=$("<span style='cursor:pointer'>"+asset_model.filename()+"</span>");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=$("<div class='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_=$("<div class='cell-status nonselectable'></div>");var cell_status_left=$("<div class='cell-status-left'></div>");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=$("<div class='cell-control-bar'></div>");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=$("<div class='cell-controls-above nonselectable'></div>");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=$("<div></div>");var clear_div=$("<div style='clear:both;'></div>");notebook_cell_div.append(inner_div);notebook_cell_div.append(clear_div);source_div_=$('<div class="source-div"></div>');code_div_=$('<div class="code-div"></div>');source_div_.append(code_div_);var outer_ace_div=$('<div class="outer-ace-div"></div>');var ace_div=$('<div style="width:100%; height:100%;"></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('<div class="non-result">'+status+"</div>");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('<span class="',highlight_classes(range.kind),'">',yuk(code.substring(range.begin,range.end)),"</span>");last=range.end});text.push(yuk(code.substring(last)));return text.join("")},function(code){var line=1;code=code.replace(/^/gm,function(){return'<span class="rcloud-line-number-position nonselectable">​<span class="rcloud-line-number">'+line++ +"</span></span>"});code+=" ";return code},function(code){if(code[code.length-1]==="\n")code+="\n";var lines=(code.match(/\n/g)||[]).length;if(lines<MIN_LINES)code+=new Array(MIN_LINES+1-lines).join("\n");return code});function assign_code(code){code=code||cell_model.content();code=code_preprocessors_.reduce(function(code,f){return f(code)},code);code_div_.empty();var elem=$("<code></code>").append(code);var gutter=$('<div class="rcloud-gutter"></div>');var hljs_class=RCloud.language.hljs_class(cell_model.language());if(hljs_class)elem.addClass(hljs_class);code_div_.append(gutter,$("<pre></pre>").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_=$('<div class="r-result-div"></div>');clear_result();inner_div.append(result_div_);input_div_=$('<div class="input-div"></div>');input_ace_div_=$('<div style="height: 100%"></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=$("<pre></pre>");current_result_=$("<code></code>");pre.append(current_result_);result_div_.append(pre)}current_result_.append(_.escape(r));break;case"error":if(!current_error_){pre=$("<pre></pre>");current_error_=$('<code style="color: crimson"></code>');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('<span class="deferred-result">'+r+"</span>");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_='<span class="deferred-result">$&</span>'}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(x<this.cells.length&&this.cells[x].id()<id)++x;if(x<this.cells.length&&id+n>this.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;j<n;++j){changes.push(cell_model.change_object({id:id+j}));cell_model.id(id+j);this.cells.splice(x,0,cell_model);if(!skip_event)_.each(this.views,function(view){view.cell_inserted(that.cells[x],x)});++x}while(x<this.cells.length&&n){if(this.cells[x].id()>id){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<this.assets.length&&n){if(this.assets[x].filename()==filename){if(!skip_event)_.each(this.views,function(view){view.asset_removed(that.assets[x],x)});changes.push(that.assets[x].change_object({erase:1}));this.assets.splice(x,1)}if(x<this.assets.length)filename=this.assets[x].filename();--n}return changes},remove_cell:function(cell_model,n,skip_event){var that=this;var cell_index,id;if(cell_model!==null){cell_index=this.cells.indexOf(cell_model);id=cell_model.id();if(cell_index===-1){throw new Error("cell_model not in notebook model?!")}}else{cell_index=0;id=1}n=n||1;var x=cell_index;var changes=[];while(x<this.cells.length&&n){if(this.cells[x].id()==id){var cell=this.cells[x];this.cells.splice(x,1);if(!skip_event)_.each(this.views,function(view){view.cell_removed(cell,x)});changes.push(cell.change_object({erase:1}))}++id;--n}return changes},move_cell:function(cell_model,before){var pre_index=this.cells.indexOf(cell_model),changes=this.remove_cell(cell_model,1,true).concat(before>=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<contents.length;++i)if(contents[i]!==null)changes.push(this.cells[i].change_object());var asset_change=RCloud.UI.scratchpad.update_model();if(asset_change!==null){var active_asset_model=RCloud.UI.scratchpad.current_model;changes.push(active_asset_model.change_object())}return changes},read_only:function(readonly){if(!_.isUndefined(readonly)){readonly_=readonly;_.each(this.views,function(view){view.set_readonly(readonly_)})}return readonly_},user:function(user){if(!_.isUndefined(user)){user_=user}return user_},update_files:function(files){for(var i=0;i<this.assets.length;++i){var ghfile=files[this.assets[i].filename()];this.assets[i].language(ghfile.language)}_.each(this.views,function(view){view.update_urls()})},on_dirty:function(){_.each(this.dishers,function(disher){disher.on_dirty()})},json:function(){return _.map(this.cells,function(cell_model){return cell_model.json()})}}};Notebook.create_controller=function(model){var current_gist_,dirty_=false,save_button_=null,save_timer_=null,save_timeout_=3e4;var default_callback=function(){var cb_=null;return function(){if(!cb_){var editor_callback=editor.load_callback({is_change:true,selroot:true});cb_=function(notebook){if(save_button_)ui_utils.disable_bs_button(save_button_);dirty_=false;if(save_timer_){window.clearTimeout(save_timer_);save_timer_=null}return editor_callback(notebook)}}return cb_}}();function append_cell_helper(content,type,id){var cell_model=Notebook.Cell.create_model(content,type);var cell_controller=Notebook.Cell.create_controller(cell_model);cell_model.controller=cell_controller;return{controller:cell_controller,changes:model.append_cell(cell_model,id)}}function append_asset_helper(content,filename){var asset_model=Notebook.Asset.create_model(content,filename);var asset_controller=Notebook.Asset.create_controller(asset_model);asset_model.controller=asset_controller;return{controller:asset_controller,changes:model.append_asset(asset_model,filename)}}function insert_cell_helper(content,type,id){var cell_model=Notebook.Cell.create_model(content,type);var cell_controller=Notebook.Cell.create_controller(cell_model);cell_model.controller=cell_controller;return{controller:cell_controller,changes:model.insert_cell(cell_model,id)}}function on_load(version,notebook){var is_read_only=version!==null||notebook.user.login!==rcloud.username()||shell.is_view_mode();current_gist_=notebook;model.read_only(is_read_only);if(!_.isUndefined(notebook.files)){var i;if(!notebook.description)notebook.description="(untitled)";this.clear();var cells={};var assets={};_.each(notebook.files,function(file,k){if(k==="r_attributes"||k==="r_type")return;var filename=file.filename;if(Notebook.is_part_name(filename)){var number=parseInt(filename.slice(4).split(".")[0]);if(!isNaN(number))cells[number]=[file.content,file.language,number]}else{assets[filename]=[file.content,file.filename]}});var asset_controller;for(i in cells)append_cell_helper(cells[i][0],cells[i][1],cells[i][2]);for(i in assets){var result=append_asset_helper(assets[i][0],assets[i][1]).controller;
asset_controller=asset_controller||result}model.user(notebook.user.login);model.update_files(notebook.files);if(asset_controller)asset_controller.select();else RCloud.UI.scratchpad.set_model(null);model.read_only(is_read_only)}return notebook}function find_changes_from(notebook){function change_object(obj){obj.name=function(n){return n};return obj}var changes=[];var nf=notebook.files,cf=_.extend({},current_gist_.files);for(var f in nf){if(f==="r_type"||f==="r_attributes")continue;if(f in cf){if(cf[f].language!=nf[f].language||cf[f].content!=nf[f].content){changes.push(change_object({filename:f,language:cf[f].language,content:cf[f].content}))}delete cf[f]}else changes.push(change_object({filename:f,erase:true,language:nf[f].language}))}for(f in cf){if(f==="r_type"||f==="r_attributes")continue;changes.push(change_object({filename:f,language:cf[f].language,content:cf[f].content}))}return changes}function update_notebook(changes,gistname,more){function add_more_changes(gist){if(_.isUndefined(more))return gist;return _.extend(_.clone(gist),more)}changes=changes.filter(function(change){return change.content||change.erase||change.rename});if(model.read_only())return Promise.reject(new Error("attempted to update read-only notebook"));if(!changes.length&&_.isUndefined(more)){return Promise.cast(current_gist_)}gistname=gistname||shell.gistname();function changes_to_gist(changes){var files={},creates={};_.each(changes,function(change){if(change.erase||change.rename){if(creates[change.filename])delete files[change.filename];else files[change.filename]=null;if(change.rename)files[change.rename]={content:change.content}}else{if(change.create&&!(change.filename in files))creates[change.filename]=true;files[change.filename]={content:change.content}}});return{files:files}}var gist=add_more_changes(changes_to_gist(changes));return rcloud.update_notebook(gistname,gist).then(function(notebook){if("error"in notebook)throw notebook;current_gist_=notebook;model.update_files(notebook.files);return notebook}).catch(function(e){if(/non-existent/.test(e.message))editor.fatal_reload(e.message);throw e})}function apply_changes_and_load(changes,gistname){return(changes.length?update_notebook(changes,gistname):Promise.resolve(undefined)).then(function(){return result.load_notebook(gistname,null)})}function refresh_buffers(){return model.reread_buffers()}function on_dirty(){if(!dirty_){if(save_button_)ui_utils.enable_bs_button(save_button_);dirty_=true}if(save_timer_)window.clearTimeout(save_timer_);save_timer_=window.setTimeout(function(){result.save();save_timer_=null},save_timeout_)}model.dishers.push({on_dirty:on_dirty});var result={current_gist:function(){return current_gist_},save_button:function(save_button){if(arguments.length){save_button_=save_button}return save_button_},append_asset:function(content,filename){var cch=append_asset_helper(content,filename);return update_notebook(refresh_buffers().concat(cch.changes)).then(default_callback()).then(function(notebook){return[notebook,cch.controller]})},append_cell:function(content,type,id){var cch=append_cell_helper(content,type,id);return update_notebook(refresh_buffers().concat(cch.changes)).then(default_callback()).then(function(notebook){return[notebook,cch.controller]})},insert_cell:function(content,type,id){var cch=insert_cell_helper(content,type,id);return update_notebook(refresh_buffers().concat(cch.changes)).then(default_callback()).then(function(notebook){return[notebook,cch.controller]})},remove_cell:function(cell_model){var changes=refresh_buffers().concat(model.remove_cell(cell_model));RCloud.UI.command_prompt.focus();return update_notebook(changes).then(default_callback())},remove_asset:function(asset_model){var changes=refresh_buffers().concat(model.remove_asset(asset_model));return update_notebook(changes).then(default_callback())},move_cell:function(cell_model,before){var changes=refresh_buffers().concat(model.move_cell(cell_model,before?before.id():-1));return update_notebook(changes).then(default_callback())},join_prior_cell:function(cell_model){var prior=model.prior_cell(cell_model);if(!prior)return Promise.resolve(undefined);function opt_cr(text){if(text.length&&text[text.length-1]!="\n")return text+"\n";return text}function crunch_quotes(left,right){var end=/```\n$/,begin=/^```{r}/;if(end.test(left)&&begin.test(right))return left.replace(end,"")+right.replace(begin,"");else return left+right}var new_content,changes=refresh_buffers();if(prior.language()==cell_model.language()){new_content=crunch_quotes(opt_cr(prior.content()),cell_model.content());prior.content(new_content);changes=changes.concat(model.update_cell(prior))}else{if(prior.language()==="R"){new_content=crunch_quotes("```{r}\n"+opt_cr(prior.content())+"```\n",cell_model.content());prior.content(new_content);changes=changes.concat(model.change_cell_language(prior,"Markdown"));changes[changes.length-1].content=new_content}else{new_content=crunch_quotes(opt_cr(prior.content())+"```{r}\n",opt_cr(cell_model.content())+"```\n");new_content=new_content.replace(/```\n```{r}\n/,"");prior.content(new_content);changes=changes.concat(model.update_cell(prior))}}_.each(prior.views,function(v){v.clear_result()});return update_notebook(changes.concat(model.remove_cell(cell_model))).then(default_callback())},split_cell:function(cell_model,point1,point2){function resplit(a){for(var i=0;i<a.length-1;++i)if(!/\n$/.test(a[i])&&/^\n/.test(a[i+1])){a[i]=a[i].concat("\n");a[i+1]=a[i+1].replace(/^\n/,"")}}var changes=refresh_buffers();var content=cell_model.content();if(point1>=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<parts.length;++i)changes=changes.concat(insert_cell_helper(parts[i],language,id+i).changes);return update_notebook(changes).then(default_callback())},change_cell_language:function(cell_model,language){var changes=refresh_buffers().concat(model.change_cell_language(cell_model,language));return update_notebook(changes).then(default_callback())},clear:function(){model.clear();RCloud.UI.scratchpad.clear()},load_notebook:function(gistname,version){return rcloud.load_notebook(gistname,version||null).catch(function(xep){xep.from_load=true;throw xep}).then(_.bind(on_load,this,version))},create_notebook:function(content){var that=this;return rcloud.create_notebook(content).then(_.bind(on_load,this,null))},revert_notebook:function(gistname,version){model.read_only(false);return rcloud.load_notebook(gistname,null).then(function(notebook){return[find_changes_from(notebook),gistname]}).spread(apply_changes_and_load)},fork_notebook:function(gistname,version){model.read_only(false);return rcloud.fork_notebook(gistname).then(function(notebook){if(version)return rcloud.get_notebook(notebook.id,null).then(function(notebook2){return[find_changes_from(notebook2),notebook2.id]});else return[[],notebook.id]}).spread(apply_changes_and_load)},update_cell:function(cell_model){return update_notebook(refresh_buffers().concat(model.update_cell(cell_model))).then(default_callback())},update_asset:function(asset_model){return update_notebook(refresh_buffers().concat(model.update_asset(asset_model))).then(default_callback())},rename_notebook:function(desc){return update_notebook(refresh_buffers(),null,{description:desc}).then(default_callback())},apply_changes:function(changes){return update_notebook(changes).then(default_callback())},save:function(){if(!dirty_)return Promise.resolve(undefined);return update_notebook(refresh_buffers()).then(default_callback())},execute_cell_version:function(context_id,info){function execute_cell_callback(r){if(r&&r.r_attributes){if(r.r_attributes["class"]==="parse-error"){RCloud.end_cell_output(context_id,"Parse error: "+r.error);throw"stop"}else if(r.r_attributes["class"]==="cell-eval-error"){var tb=r["traceback"]||"";if(tb.join)tb=tb.join("\n");var trace=tb?"trace:\n"+tb:true;RCloud.end_cell_output(context_id,trace);throw"stop"}else RCloud.end_cell_output(context_id,null)}else RCloud.end_cell_output(context_id,null);_.each(model.execution_watchers,function(ew){ew.run_cell(info.json_rep)})}rcloud.record_cell_execution(info.json_rep);var cell_eval=rcloud.authenticated?rcloud.authenticated_cell_eval:rcloud.session_cell_eval;return cell_eval(context_id,info.partname,info.language,info.version,false).then(execute_cell_callback)},run_all:function(){var that=this;return this.save().then(function(){_.each(model.cells,function(cell_model){cell_model.controller.enqueue_execution_snapshot()})})},show_cell_numbers:function(whether){_.each(model.views,function(view){view.set_show_cell_numbers(whether)});return this},is_mine:function(){return rcloud.username()===model.user()},_r_source_visible:true,hide_r_source:function(){this._r_source_visible=false;RCloud.UI.advanced_menu.check("show_source",false);Notebook.hide_r_source()},show_r_source:function(){this._r_source_visible=true;RCloud.UI.advanced_menu.check("show_source",true);Notebook.show_r_source()}};model.controller=result;return result};Notebook.hide_r_source=function(selection){if(selection)selection=$(selection).find(".r");else selection=$(".r");selection.hide()};Notebook.show_r_source=function(selection){if(selection)selection=$(selection).find(".r");else selection=$(".r");selection.show()};Notebook.part_name=function(id,language){if(_.isString(id))return id;var ext=RCloud.language.extension(language);if(_.isUndefined(ext))throw new Error("Unknown language "+language);return"part"+id+"."+ext};Notebook.empty_for_github=function(text){return/^\s*$/.test(text)};Notebook.is_part_name=function(filename){return filename.match(/^part\d+\./)};Notebook.sanitize=function(notebook){notebook=_.pick(notebook,"description","files");var files=notebook.files;delete files.r_attributes;delete files.r_type;for(var fn in files)files[fn]=_.pick(files[fn],"content");return notebook};(function(){function append_session_info(text){RCloud.UI.session_pane.append_text(text)}function handle_img(msg,url,dims,device,page){console.log("handle_img ",msg," device ",device," page ",page," url ",url);if(!url)return;var image=RCloud.UI.image_manager.update(url,dims,device,page);if(curr_context_id_&&output_contexts_[curr_context_id_]&&output_contexts_[curr_context_id_].html_out)output_contexts_[curr_context_id_].selection_out(image.div());else append_session_info(image.div())}var output_contexts_={};var curr_context_id_=null,next_context_id_=17;RCloud.register_output_context=function(callbacks){output_contexts_[next_context_id_]=callbacks;return next_context_id_++};RCloud.unregister_output_context=function(context_id){delete output_contexts_[context_id]};RCloud.end_cell_output=function(context_id,error){if(context_id!=curr_context_id_)console.log("unmatched context_id id: curr "+curr_context_id_+", end.cell.output "+context_id);if(output_contexts_[context_id]&&output_contexts_[context_id].end)output_contexts_[context_id].end(error);RCloud.unregister_output_context(context_id);curr_context_id_=null};function forward_to_context(type,has_continuation){return function(){var context=output_contexts_[curr_context_id_];if(curr_context_id_&&context&&context[type])context[type].apply(context,arguments);else{append_session_info.apply(null,arguments);if(has_continuation)arguments[arguments.length-1]("context does not support input",null)}}}var oob_sends={browsePath:function(v){var url=" "+window.location.protocol+"//"+window.location.host+v+" ";RCloud.UI.help_frame.display_href(url)},pager:function(files,header,title){var html="<h2>"+title+"</h2>\n";for(var i=0;i<files.length;++i){if(_.isArray(header)&&header[i])html+="<h3>"+header[i]+"</h3>\n";html+="<pre>"+files[i]+"</pre>"}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+="<br />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 i<collection.length},function(i){return operator(collection[i]).return(++i)},0)}RCloud.upload_assets=function(options,react){react=react||{};options=upload_opts(options);function upload_asset(filename,content){var replacing=shell.notebook.model.get_asset(filename);var promise_controller;if(replacing){if(react.replace)react.replace(filename);replacing.content(content);promise_controller=shell.notebook.controller.update_asset(replacing).return(replacing.controller)}else{if(react.add)react.add(filename);promise_controller=shell.notebook.controller.append_asset(content,filename).then(function(){return shell.notebook.model.get_asset(filename).controller})}return promise_controller.then(function(controller){controller.select()})}return promise_sequence(options.files,function(file){return text_reader()(file).then(function(content){if(Notebook.empty_for_github(content))throw new Error("empty");return upload_asset(file.name,content)})})};function binary_upload(upload_ocaps,react){return Promise.promisify(function(file,is_replace,callback){var fr=new FileReader;var chunk_size=1024*128;var f_size=file.size;var cur_pos=0;var bytes_read=0;if(react.start)react.start(file.name);fr.readAsArrayBuffer(file.slice(cur_pos,cur_pos+chunk_size));fr.onload=function(e){if(react.progress)react.progress(bytes_read,f_size);var promise;if(e.target.result.byteLength>0){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=$("<select class='form-control cell-control-select'></select>");control.append.apply(control,items.map(function(item){return $("<option></option>").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=$("<span><span/>").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("<i></i>");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="<img src='/img/grab_affordance.svg' type='image/svg+xml'></img>";return that.create_static(svg,function(x){return $("<span class='grab-affordance'>").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 $("<span class='left-indicator'></span>").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<remaining.length;++i)if(heights[remaining[i]]<split){left-=heights[remaining[i]];remaining.splice(i,1);--i;done=false}split=left/remaining.length}for(i=0;i<remaining.length;++i)heights[remaining[i]]=split;do_fit=true}for(id in heights){$("#"+id).find(".panel-body").height(heights[id]);$("#"+id).trigger("panel-resize")}reshadow();var expected=$(sel_column).height();var got=d3.sum(_.values(padding))+d3.sum(_.values(heights))+total_headings;if(do_fit&&expected!=got)console.log("Error in vertical layout algo: filling "+expected+" pixels with "+got)},hide:function(persist,skip_calc){collapsibles().each(function(){var heading_sel=$(this).data("heading-content-selector");if(heading_sel)heading_sel.hide()});$(sel_accordion+" > .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.row<r-1)down_handler.exec(widget,args,request);else{if(history_.has_next()){change_prompt(history_.next());ui_utils.ace_set_pos(widget,0,pos.column)}else{r=last_row(widget);ui_utils.ace_set_pos(widget,r,last_col(widget,r))}}}}]);widget.commands.removeCommands(["find","replace"]);ui_utils.customize_ace_gutter(widget,function(i){return i===0?">":""});return{widget:widget,restore:restore_prompt,set_language:set_language}}function setup_prompt_history(){var entries_=[],alt_=[];var curr_=0;function curr_cmd(){return alt_[curr_]||(curr_<entries_.length?entries_[curr_]:"")}var prefix_=null;var result={init:function(){prefix_="rcloud.history."+shell.gistname()+".";var i=0;entries_=[];alt_=[];var last_lang=window.localStorage["last_cell_lang"]||"R";while(1){var cmd=window.localStorage[prefix_+i],cmda=window.localStorage[prefix_+i+".alt"];if(cmda!==undefined)alt_[i]=cmda;if(cmd===undefined)break;entries_.push(cmd);++i}curr_=entries_.length;return{cmd:curr_cmd(),lang:last_lang}},add_entry:function(cmd){if(cmd==="")return;alt_[entries_.length]=null;entries_.push(cmd);alt_[curr_]=null;curr_=entries_.length;window.localStorage[prefix_+(curr_-1)]=cmd},has_last:function(){return curr_>0},last:function(){if(curr_>0)--curr_;return curr_cmd()},has_next:function(){return curr_<entries_.length},next:function(){if(curr_<entries_.length)++curr_;return curr_cmd()},change:function(cmd){window.localStorage[prefix_+curr_+".alt"]=alt_[curr_]=cmd}};return result}function show_or_hide(){var prompt_area=$("#prompt-area"),prompt=$("#command-prompt"),controls=$("#prompt-area .cell-status .cell-control-bar");if(readonly_)prompt_area.hide();else{prompt_area.show();if(show_prompt_){prompt.show();controls.removeClass("flipped")}else{prompt.hide();controls.addClass("flipped")}}}var result={init:function(){var that=this;RCloud.UI.cell_commands.add({insert_prompt:{area:"prompt",modifying:true,sort:1e3,create:function(){return RCloud.UI.cell_commands.create_button("icon-plus","insert new cell",function(){shell.new_cell("",language_).spread(function(_,controller){controller.edit_source(true)})})}},language_prompt:{area:"prompt",modifying:true,sort:2e3,create:function(){return RCloud.UI.cell_commands.create_select(RCloud.language.available_languages(),function(language){window.localStorage["last_cell_lang"]=language;RCloud.UI.command_prompt.language(language,true)})}}});var prompt_div=$(RCloud.UI.panel_loader.load_snippet("command-prompt-snippet"));$("#rcloud-cellarea").append(prompt_div);var prompt_command_bar=$("#prompt-area .cell-control-bar");command_bar_=RCloud.UI.cell_commands.decorate("prompt",prompt_command_bar);history_=setup_prompt_history();entry_=setup_command_entry()},history:function(){return history_},show_prompt:function(val){if(!arguments.length)return show_prompt_;show_prompt_=val;show_or_hide();return this},readonly:function(val){if(!arguments.length)return readonly_;readonly_=val;show_or_hide();return this},language:function(val,skip_ui){if(val===undefined)return language_;language_=val;if(!skip_ui)command_bar_.controls["language_prompt"].set(language_);entry_.set_language(language_);return this},focus:function(){if(!entry_)return;entry_.widget.focus();entry_.restore()}};return result}();RCloud.UI.comments_frame=function(){function rebuild_comments(comments){try{comments=JSON.parse(comments)}catch(e){RCloud.UI.session_pane.post_error("populate comments: "+e.message);return}var username=rcloud.username();var editable=function(d){return d.user.login===username};d3.select("#comment-count").text(String(comments.length));d3.select("#comments-container").selectAll("div").remove();var comment_div=d3.select("#comments-container").selectAll("div").data(comments).enter().append("div").attr("class","comment-container").on("mouseover",function(d){if(editable(d)){$(".comment-header-close",this).show()}}).on("mouseout",function(d){$(".comment-header-close",this).hide()}).attr("comment_id",function(d){return d.id});comment_div.append("div").attr("class","comment-header").style({"max-width":"30%"}).text(function(d){return d.user.login});comment_div.append("div").attr("class","comment-body").style({"max-width":"70%"}).append("div").attr("class","comment-body-wrapper").append("div").attr("class","comment-body-text").text(function(d){return d.body}).each(function(d){var comment_element=$(this);var edit_comment=function(v){var comment_text=comment_element.html();result.modify_comment(d.id,comment_text)};var editable_opts={change:edit_comment,allow_multiline:true,validate:function(name){return!Notebook.empty_for_github(name)}};ui_utils.editable(comment_element,$.extend({allow_edit:editable(d),inactive_text:comment_element.text(),active_text:comment_element.text()},editable_opts))});var text_div=d3.selectAll(".comment-body-wrapper",this);text_div.append("i").attr("class","icon-remove comment-header-close").style({"max-width":"5%"}).on("click",function(d,e){if(editable(d))result.delete_comment(d.id)});$("#collapse-comments").trigger("size-changed");ui_utils.on_next_tick(function(){ui_utils.scroll_to_after($("#comments-qux"))})}var result={body:function(){return RCloud.UI.panel_loader.load_snippet("comments-snippet")},init:function(){var that=this;var comment=$("#comment-entry-body");var count=0;var scroll_height="";$("#comment-submit").click(function(){if(!Notebook.empty_for_github(comment.val())){that.post_comment(_.escape(comment.val()));comment.height("41px")}return false});comment.keydown(function(e){if(e.keyCode==$.ui.keyCode.ENTER&&(e.ctrlKey||e.metaKey)){if(!Notebook.empty_for_github(comment.val())){that.post_comment(_.escape(comment.val()));comment.height("41px");count=0;scroll_height=""}return false}comment.bind("input",function(){if(count>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=$("<button type='submit' class='btn btn-primary' style='float:right'>"+label+"</span>"),ignore_button=$("<span class='btn' style='float:right'>Ignore</span>"),body=$("<div />").append("<h1>Aw, shucks</h1>",'<p style="white-space: pre-wrap">'+message+"</p>",default_button,ignore_button,'<div style="clear: both;"></div>');default_button.click(function(e){e.preventDefault();window.location=href});ignore_button.click(function(){fatal_dialog_.modal("hide")});fatal_dialog_=$('<div id="fatal-dialog" class="modal fade" />').append($('<div class="modal-dialog" />').append($('<div class="modal-content" />').append($('<div class="modal-body" />').append(body))));$("body").append(fatal_dialog_);fatal_dialog_.on("shown.bs.modal",function(){default_button.focus()})}fatal_dialog_.modal({keyboard:false})}})();RCloud.UI.find_replace=function(){var find_dialog_=null,regex_,find_desc_,find_input_,replace_desc_,replace_input_,replace_stuff_,find_next_,find_last_,replace_next_,replace_all_,shown_=false,replace_mode_=false,find_cycle_=null,replace_cycle_=null,matches_=[],active_match_;function toggle_find_replace(replace){if(!find_dialog_){find_dialog_=$('<div id="find-dialog"></div>');var find_form=$('<form id="find-form"></form>');find_desc_=$('<label id="find-label" for="find-input"><span>Find</span></label>');find_input_=$('<input type=text id="find-input" class="form-control-ext"></input>');find_next_=$('<button id="find-next" class="btn btn-primary">Next</button>');find_last_=$('<button id="find-last" class="btn">Previous</button>');var replace_break=$("<br/>");replace_desc_=$('<label id="replace-label" for="replace-input"><span>Replace</span></label>');replace_input_=$('<input type=text id="replace-input" class="form-control-ext"></input>');replace_next_=$('<button id="replace" class="btn">Replace</button>');replace_all_=$('<button id="replace-all" class="btn">Replace All</button>');replace_stuff_=replace_break.add(replace_desc_).add(replace_input_).add(replace_next_).add(replace_all_);var close=$('<span id="find-close"><i class="icon-remove"></i></span>');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<a.length&&!f(a[i]);++i);return i===a.length?-1:i}var match=matches_[active_match_];var cell=shell.notebook.model.cells[match.index];var content=cell.content();var before=content.substring(0,match.begin),after=content.substring(match.end);var replacement=replace_input_.val();var dlen=replacement.length+match.begin-match.end;match.begin=before.length;match.end=before.length+replacement.length;for(var i=active_match_+1;i<matches_.length&&matches_[i].filename===match.filename;++i){matches_[i].begin+=dlen;matches_[i].end+=dlen}return cell.content(before+replacement+after)?cell:null}function replace_all(find,replace){highlight_all(null);if(!find||!find.length)return;find=escapeRegExp(find);var regex=new RegExp(find,"g");var changes=shell.notebook.model.reread_buffers();shell.notebook.model.cells.forEach(function(cell){var content=cell.content(),new_content=content.replace(regex,replace);if(cell.content(new_content))changes.push.apply(changes,shell.notebook.model.update_cell(cell))});shell.notebook.controller.apply_changes(changes)}function replace_rest(){var changes=shell.notebook.model.reread_buffers();while(active_match_<matches_.length){var cell=replace_current();active_transition("replace");if(cell)changes.push.apply(changes,shell.notebook.model.update_cell(cell));++active_match_}active_match_=undefined;shell.notebook.controller.apply_changes(changes)}var result={init:function(){document.addEventListener("keydown",function(e){var action;if(ui_utils.is_a_mac()&&e.keyCode==70&&e.metaKey){if(e.shiftKey)return;action=e.altKey?"replace":"find"}else if(!ui_utils.is_a_mac()&&e.keyCode==70&&e.ctrlKey)action="find";else if(!ui_utils.is_a_mac()&&e.keyCode==72&&e.ctrlKey)action="replace";if(action){if(shell.notebook.model.read_only())action="find";e.preventDefault();toggle_find_replace(action==="replace")}})}};return result}();RCloud.UI.help_frame={body:function(){return RCloud.UI.panel_loader.load_snippet("help-snippet")},init:function(){$("#help-body").append('<iframe id="help-frame" frameborder="0" />');$("#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<rawLength;++i){uInt8Array[i]=raw.charCodeAt(i)}return new Blob([uInt8Array],{type:contentType})}RCloud.UI.image_manager=function(){var images_={};var formats_=RCloud.extension.create();function create_image(id,url,dims,device,page){var div_,img_,image_div_,scroller_div_,dims_;function img_tag(){var attrs=[];attrs.push("id='"+id+"'");attrs.push("src='"+url+"'");return $("<img "+attrs.join(" ")+">\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=$('<div class="dropdown"></div>');var save_button=$('<span class="dropdown-toggle fontawesome-button" type="button" data-toggle="dropdown" aria-expanded="true"></span>');save_button.append($('<i class="icon-save"></i>'));var save_menu=$('<ul role="menu" class="dropdown-menu plot-save-formats"></ul>');_.pluck(formats_.entries("all"),"key").forEach(function(fmt){var link=$('<a role="menuitem" href="#">'+fmt+"</a>");link.click(function(){save_as(fmt)});var li=$('<li role="presentation"></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=$('<div class="live-plot"></div>');scroller_div_=$('<div class="live-plot-scroller"></div>');image_div_=$("<div></div>");container.append(scroller_div_);scroller_div_.append(image_div_,$("<br/>"));image_div_.append($image);var image_commands=$('<span class="live-plot-commands"></div>');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=$('<div class="container"/>').append($(["<p>Import notebooks from another GitHub instance.</p><p>Currently import does not preserve history.</p>",'<p>source repo api url: <input type="text" class="form-control-ext" id="import-source" style="width:100%;" value="https://api.github.com"></input></td>','<p>notebooks:<br /><textarea class="form-control-ext" style="height: 20%;width: 50%;max-width: 100%" rows="10" cols="30" id="import-gists" form="port"></textarea></p>','<p>prefix (e.g. <code>folder/</code> to put notebooks in a folder): <input type="text" class="form-control-ext" id="import-prefix" style="width:100%;"></input>'].join("")));var cancel=$('<span class="btn btn-cancel">Cancel</span>').on("click",function(){$(dialog).modal("hide")});var go=$('<span class="btn btn-primary">Import</span>').on("click",do_import);var footer=$('<div class="modal-footer"></div>').append(cancel).append(go);var header=$(['<div class="modal-header">','<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>',"<h3>Import Notebooks</h3>","</div>"].join(""));var dialog=$('<div id="import-notebooks-dialog" class="modal fade"></div>').append($('<div class="modal-dialog"></div>').append($('<div class="modal-content"></div>').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=$('<div class="container"/>');var file_select=$('<input type="file" id="notebook-file-upload" size="50"></input>');file_select.click(function(){ui_utils.disable_bs_button(import_button)}).change(function(){do_upload(file_select[0].files[0])});notebook_status=$("<span />");notebook_status.append(notebook_status);var notebook_desc=$("<span>Notebook description: </span>");notebook_desc_content=$('<input type="text" class="form-control-ext" size="50"></input>').keypress(function(e){if(e.which===$.ui.keyCode.ENTER){do_import();return false}return true});notebook_desc.append(notebook_desc_content);body.append($("<p/>").append(file_select)).append($("<p/>").append(notebook_status.hide())).append($("<p/>").append(notebook_desc.hide()));var cancel=$('<span class="btn btn-cancel">Cancel</span>').on("click",function(){$(dialog).modal("hide")});import_button=$('<span class="btn btn-primary">Import</span>').on("click",do_import);ui_utils.disable_bs_button(import_button);var footer=$('<div class="modal-footer"></div>').append(cancel).append(import_button);var header=$(['<div class="modal-header">','<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>',"<h3>Import Notebook File</h3>","</div>"].join(""));var dialog=$('<div id="import-notebook-file-dialog" class="modal fade"></div>').append($('<div class="modal-dialog"></div>').append($('<div class="modal-content"></div>').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<parts.length;++i)if(!_.isUndefined(parts[i]))strings.push(parts[i]);strings.push("");rcloud.purl_source(strings.join("\n")).then(function(purled_lines){var purled_source=_.isString(purled_lines)?purled_lines:purled_lines.join("\n");download_as_file(notebook.description+".R",purled_source,"text/plain")})})}}});return this}}}();RCloud.UI.init=function(){$("#fork-notebook").click(function(){var is_mine=shell.notebook.controller.is_mine();var gistname=shell.gistname();var version=shell.version();editor.fork_notebook(is_mine,gistname,version)});$("#revert-notebook").click(function(){var is_mine=shell.notebook.controller.is_mine();var gistname=shell.gistname();var version=shell.version();editor.revert_notebook(is_mine,gistname,version)});var saveb=$("#save-notebook");saveb.click(function(){shell.save_notebook()});shell.notebook.controller.save_button(saveb);RCloud.UI.run_button.init();function make_cells_sortable(){var cells=$("#output");cells.sortable({items:"> .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=$('<div class="offscreen"></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'<a class="navbar-brand" href="#">RCloud</a>'}}})},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 <a href='"+url+"'>"+fork_desc+"</a>")}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=$("<div/>",{"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=$('<div id="progress-dialog" class="modal fade"><div class="modal-dialog"><div class="modal-content"><div class="modal-body">Please wait...</div></div></div>');$("body").append(progress_dialog)}progress_dialog.modal({keyboard:true})}function clear_curtain(){if(!curtains_on)return;curtains_on=false;progress_dialog.modal("hide")}function set_cursor(){_.delay(function(){document.body.style.cursor="wait"},0)}function clear_cursor(){_.delay(function(){document.body.style.cursor=""},0)}RCloud.UI.with_progress=function(promise_thunk,delay){if(_.isUndefined(delay))delay=2e3;set_cursor();function done(){progress_counter-=1;if(progress_counter===0){clear_cursor();clear_curtain()}}_.delay(function(){if(progress_counter>0&&allowed>0)set_curtain()},delay);progress_counter+=1;return Promise.resolve(done).then(promise_thunk).then(function(v){done();return v}).catch(function(error){done();throw error})};RCloud.UI.prevent_progress_modal=function(){if(allowed===1){if(progress_counter>0){clear_cursor();clear_curtain()}}allowed-=1};RCloud.UI.allow_progress_modal=function(){if(allowed===0){if(progress_counter>0){set_cursor();set_curtain()}}allowed+=1}})();RCloud.UI.right_panel=RCloud.UI.collapsible_column("#right-column","#accordion-right","#right-pane-collapser");RCloud.UI.run_button=function(){var run_button_=$("#run-notebook"),running_=false,stopping_=false,queue_=[],cancels_=[];function display(icon,title){$("i",run_button_).removeClass().addClass(icon);run_button_.attr("title",title)}function highlight(whether){run_button_.parent().find(".button-highlight").animate({opacity:whether?1:0},250)}function start_queue(){if(queue_.length===0){stopping_=false;running_=false;display("icon-play","Run All");highlight(false);return Promise.resolve(undefined)}else{running_=true;var first=queue_.shift();display("icon-stop","Stop");highlight(true);return first().then(function(){if(stopping_){stopping_=false;throw"stop"}cancels_.shift();return start_queue()})}}return{init:function(){var that=this;run_button_.click(function(){if(running_){that.stop()}else shell.run_notebook()});RCloud.session.listeners.push({on_reset:function(){that.on_stopped()}})},stop:function(){if(rcloud.has_compute_separation)rcloud.signal_to_compute(2);else stopping_=true},on_stopped:function(){cancels_.forEach(function(cancel){cancel()});queue_=[];cancels_=[];running_=false;display("icon-play","Run All");highlight(false)},enqueue:function(f,cancel){var that=this;queue_.push(f);cancels_.push(cancel||function(){});if(!running_){start_queue().catch(function(xep){if(xep==="stop"){cancels_.shift();that.on_stopped()}else{console.log(xep);that.on_stopped();if(!/^ERROR FROM R SERVER: 127/.test(xep))throw xep}})}}}}();RCloud.UI.scratchpad={session:null,widget:null,exists:false,current_model:null,change_content:null,body:function(){return RCloud.UI.panel_loader.load_snippet("assets-snippet")},init:function(){var that=this;function setup_scratchpad(div){var inner_div=$("<div></div>");var clear_div=$("<div style='clear:both;'></div>");div.append(inner_div);div.append(clear_div);var ace_div=$('<div style="width:100%; height:100%"></div>');ace_div.css({"background-color":"#f1f1f1"});inner_div.append(ace_div);ace.require("ace/ext/language_tools");var widget=ace.edit(ace_div[0]);var LangMode=ace.require("ace/mode/r").Mode;var session=widget.getSession();that.session=session;that.widget=widget;var doc=session.doc;session.on("change",function(){widget.resize()});widget.setOptions({enableBasicAutocompletion:true});session.setMode(new LangMode(false,doc,session));session.setUseWrapMode(true);widget.resize();ui_utils.on_next_tick(function(){session.getUndoManager().reset();widget.resize()});that.change_content=ui_utils.ignore_programmatic_changes(that.widget,function(){if(that.current_model)that.current_model.parent_model.on_dirty()});ui_utils.install_common_ace_key_bindings(widget,function(){return that.current_model.language()});$("#collapse-assets").on("shown.bs.collapse panel-resize",function(){widget.resize()})}function setup_asset_drop(){var showOverlay_;$(document).on("dragstart dragenter dragover",function(e){var dt=e.originalEvent.dataTransfer;if(!dt)return;if(dt.types!==null&&(dt.types.indexOf?dt.types.indexOf("Files")!=-1&&dt.types.indexOf("text/html")==-1:dt.types.contains("application/x-moz-file"))){if(!shell.notebook.model.read_only()){e.stopPropagation();e.preventDefault();$("#asset-drop-overlay").css({display:"block"});showOverlay_=true}else{e.stopPropagation();e.preventDefault()}}});$(document).on("drop dragleave",function(e){e.stopPropagation();e.preventDefault();showOverlay_=false;setTimeout(function(){if(!showOverlay_){$("#asset-drop-overlay").css({display:"none"})}},100)});$("#scratchpad-wrapper").bind({drop:function(e){e=e.originalEvent||e;var files=e.files||e.dataTransfer.files;var dt=e.dataTransfer;if(!shell.notebook.model.read_only()){RCloud.UI.upload_with_alerts(true,{files:files}).catch(function(){})}$("#asset-drop-overlay").css({display:"none"})},"dragenter dragover":function(e){var dt=e.originalEvent.dataTransfer;if(!shell.notebook.model.read_only())dt.dropEffect="copy"}})}var scratchpad_editor=$("#scratchpad-editor");if(scratchpad_editor.length){this.exists=true;setup_scratchpad(scratchpad_editor);setup_asset_drop()}$("#new-asset > a").click(function(){var filename=prompt("Choose a filename for your asset");if(!filename)return;if(Notebook.is_part_name(filename)){alert("Asset names cannot start with 'part[0-9]', sorry!");return}var found=shell.notebook.model.get_asset(filename);if(found)found.controller.select();else{var comment_text=function(text,ext){switch(ext){case"css":return"/* "+text+" */\n";case"js":return"// "+text+"\n";case"html":return"<!-- "+text+" -->\n";default:return"# "+text+"\n"}};var ext=filename.indexOf(".")!=-1?filename.match(/\.(.*)/)[1]:"";shell.notebook.controller.append_asset(comment_text("New file "+filename,ext),filename).spread(function(_,controller){controller.select();ui_utils.ace_set_pos(RCloud.UI.scratchpad.widget,2,1)})}})},panel_sizer:function(el){return{padding:RCloud.UI.collapsible_column.default_padder(el),height:9e3}},set_model:function(asset_model){var that=this;if(!this.exists)return;if(this.current_model){this.current_model.cursor_position(this.widget.getCursorPosition());if(this.current_model.content(this.widget.getValue())){this.current_model.parent_model.controller.update_asset(this.current_model)}}this.current_model=asset_model;if(!this.current_model){that.change_content("");that.widget.resize();that.widget.setReadOnly(true);$("#scratchpad-editor > *").hide();$("#asset-link").hide();return}that.widget.setReadOnly(false);$("#scratchpad-editor > *").show();this.change_content(this.current_model.content());this.update_asset_url();$("#asset-link").show();var model_cursor=asset_model.cursor_position();if(model_cursor){ui_utils.ace_set_pos(this.widget,model_cursor)}else{ui_utils.ace_set_pos(this.widget,0,0)}ui_utils.on_next_tick(function(){that.session.getUndoManager().reset()});that.language_updated();that.widget.resize();that.widget.focus()},update_model:function(){return this.current_model?this.current_model.content(this.widget.getSession().getValue()):null},content_updated:function(){var range=this.widget.getSelection().getRange();var changed=this.current_model.content();this.change_content(changed);this.widget.getSelection().setSelectionRange(range);return changed},language_updated:function(){var lang=this.current_model.language();var LangMode=ace.require(RCloud.language.ace_mode(lang)).Mode;this.session.setMode(new LangMode(false,this.session.doc,this.session))},set_readonly:function(readonly){if(!shell.is_view_mode()){if(this.widget)ui_utils.set_ace_readonly(this.widget,readonly);if(readonly)$("#new-asset").hide();else $("#new-asset").show()}},update_asset_url:function(){function make_asset_url(model){return window.location.protocol+"//"+window.location.host+"/notebook.R/"+model.parent_model.controller.current_gist().id+"/"+model.filename()}if(this.current_model)$("#asset-link").attr("href",make_asset_url(this.current_model))},clear:function(){if(!this.exists)return;this.change_content("");this.session.getUndoManager().reset();this.widget.resize()}};RCloud.UI.search=function(){var page_size_=10;var search_err_msg=['<p style="color:black;margin:0;">The search engine in RCloud uses Lucene for advanced search features.',"It appears you may have used one of the special characters in Lucene syntax incorrectly. ",'Please see this <a target="_blank" href="http://lucene.apache.org/core/3_5_0/queryparsersyntax.html">link</a> to learn about Lucene syntax. ','</p><p style="color:black;margin:0;">Or, if you mean to search for the character itself, escape it using a backslash, e.g. "foo\\:"</p>'];function go_to_page(page_num,incr_by){var start=parseInt(page_num)*parseInt(incr_by);var end=parseInt(start)+parseInt(incr_by);var qry=$("#input-text-search").val();var sortby=$("#sort-by option:selected").val();var orderby=$("#order-by option:selected").val();$("#input-text-search").blur();if(!($("#input-text-search").val()===""))RCloud.UI.search.exec(qry,sortby,orderby,start,end,true)}function sortby(){return $("#sort-by option:selected").val()}function orderby(){return $("#order-by option:selected").val()}function order_from_sort(){var orderby;switch(sortby()){case"starcount":case"updated_at":orderby="desc";break;case"user":case"description":orderby="asc";break}$("#order-by").val(orderby)}return{body:function(){return RCloud.UI.panel_loader.load_snippet("search-snippet")},init:function(){if(!rcloud.search)$("#search-wrapper").text("Search engine not enabled on server");else{$("#search-form").submit(function(e){searchproc();return false});$("#sort-by").change(function(){rcloud.config.set_user_option("search-sort-by",sortby());order_from_sort();rcloud.config.set_user_option("search-order-by",orderby());searchproc()});$("#order-by").change(function(){rcloud.config.set_user_option("search-order-by",orderby());searchproc()});var searchproc=function(){var start=0;var qry=$("#input-text-search").val();$("#input-text-search").focus();if(!($("#input-text-search").val()==="")){RCloud.UI.search.exec(qry,sortby(),orderby(),start,page_size_)}else{$("#paging").html("");$("#search-results").html("");$("#search-summary").html("")}}}},load:function(){return rcloud.config.get_user_option(["search-results-per-page","search-sort-by","search-order-by"]).then(function(opts){if(opts["search-results-per-page"])page_size_=opts["search-results-per-page"];if(!opts["search-sort-by"])opts["search-sort-by"]="starcount";$("#sort-by").val(opts["search-sort-by"]);if(opts["search-order-by"])$("#order-by").val(opts["search-order-by"]);else order_from_sort()})},panel_sizer:function(el){var padding=RCloud.UI.collapsible_column.default_padder(el);var height=24+$("#search-summary").height()+$("#search-results").height()+$("#search-results-pagination").height();height+=30;return{height:height,padding:padding}},toggle:function(id,togid){$("#"+togid+"").text(function(_,txt){var ret="";if(txt.indexOf("Show me more...")>-1){ret="Show me less...";$("#"+id+"").css("height","auto")}else{ret="Show me more...";$("#"+id+"").css("height","150px")}return ret});return false},exec:function(query,sortby,orderby,start,noofrows,pgclick){function summary(html,color){$("#search-summary").css("color",color||"black");$("#search-summary").show().html($("<h4/>").append(html))}function err_msg(html,color){$("#search-summary").css("display","none");$("#search-results").css("color",color||"black");$("#search-results-row").show().animate({scrollTop:$(document).height()},"slow");$("#search-results").show().html($("<h4/>").append(html))}function create_list_of_search_results(d){var i;var custom_msg="";if(d===null||d==="null"||d===""){summary("No Results Found")}else if(d[0]==="error"){d[1]=d[1].replace(/\n/g,"<br/>");if($("#paging").html!="")$("#paging").html("");if(d[1].indexOf("org.apache.solr.search.SyntaxError")>-1)custom_msg=search_err_msg.join("");err_msg(custom_msg+"ERROR:\n"+d[1],"darkred")}else{if(typeof d==="string"){d=JSON.parse("["+d+"]")}for(i=0;i<d.length;i++){if(typeof d[i]==="string"){d[i]=JSON.parse(d[i])}}d.sort(function(a,b){var astars=+(a.starcount||0),bstars=+(b.starcount||0);return bstars-astars});var len=d.length;var search_results="";var star_count;var qtime=0;var numfound=0;if(d[0]!=undefined){numfound=d[0].numFound}var noofpages=Math.ceil(numfound/page_size_);for(i=0;i<len;i++){try{qtime=d[0].QTime;if(typeof d[i].starcount==="undefined"){star_count=0
}else{star_count=d[i].starcount}var notebook_id=d[i].id;var image_string='<i class="icon-star search-star"><sub>'+star_count+"</sub></i>";d[i].parts=JSON.parse(d[i].parts);var parts_table="";var inner_table="";var added_parts=0;var partslen=d[i].parts.length;var nooflines=0;for(var k=0;k<d[i].parts.length&&added_parts<5;k++){inner_table="";var ks=Object.keys(d[i].parts[k]);if(ks.length>0&&d[i].parts[k].content!==""){var content=d[i].parts[k].content;if(typeof content==="string")content=[content];if(content.length>0)parts_table+="<tr><th class='search-result-part-name'>"+d[i].parts[k].filename+"</th></tr>";for(var l=0;l<content.length;l++){if(d[i].parts[k].filename==="comments"){var split=content[l].split(/ *::: */);if(split.length<2)split=content[l].split(/ *: */);var comment_content=split[1]||"";if(!comment_content)continue;var comment_author=split[2]||"";var display_comment=comment_author?comment_author+": "+comment_content:comment_content;inner_table+="<tr><td class='search-result-comment'><span class='search-result-comment-content'>"+comment_author+": "+comment_content+"</span></td></tr>"}else{inner_table+="<tr><td class='search-result-code'><code>"+content[l]+"</code></td></tr>"}}if(d[i].parts[k].filename!="comments"){nooflines+=inner_table.match(/\|-\|/g).length}added_parts++}if(inner_table!==""){inner_table=inner_table.replace(/\|-\|,/g,"<br>").replace(/\|-\|/g,"<br>");inner_table=inner_table.replace(/line_no/g,"|");inner_table="<table style='width: 100%'>"+inner_table+"</table>";parts_table+="<tr><td>"+inner_table+"</td></tr>"}}var togid=i+"more";var url=ui_utils.make_url("edit.html",{notebook:notebook_id});if(parts_table!==""){if(nooflines>10){parts_table='<div><div style="height:150px;overflow: hidden;" id=\''+i+"'><table style='width: 100%'>"+parts_table+"</table></div>"+'<div style="position: relative;"><a href="#" id=\''+togid+"' onclick=\"RCloud.UI.search.toggle("+i+",'"+togid+'\');" style="color:orange">Show me more...</a></div></div>'}else{parts_table="<div><div id='"+i+"'><table style='width: 100%'>"+parts_table+"</table></div></div>"}}search_results+="<table class='search-result-item' width=100%><tr><td width=10%>"+'<a id="open_'+i+"\" href='"+url+"'\" data-gistname='"+notebook_id+"' class='search-result-heading'>"+d[i].user+" / "+d[i].notebook+"</a>"+image_string+"<br/><span class='search-result-modified-date'>modified at <i>"+d[i].updated_at+"</i></span></td></tr>";if(parts_table!=="")search_results+="<tr><td colspan=2 width=100% style='font-size: 12'><div>"+parts_table+"</div></td></tr>";search_results+="</table>"}catch(e){summary("Error : \n"+e,"darkred")}}if(!pgclick){$("#paging").html("");$("#search-results-pagination").show();if(parseInt(numfound)-parseInt(page_size_)>0){var number_of_pages=noofpages;$("#current_page").val(0);if(numfound!=0){var current_link=0;$("#paging").bootpag({total:number_of_pages,page:1,maxVisible:8}).on("page",function(event,num){go_to_page(num-1,page_size_)})}}}var qry=decodeURIComponent(query);qry=qry.replace(/</g,"<");qry=qry.replace(/>/g,">");if(numfound===0){summary("No Results Found")}else if(parseInt(numfound)<page_size_){summary(numfound+" Results Found","darkgreen")}else{var search_summary=numfound+" Results Found, showing ";if(numfound-start===1){search_summary+=start+1}else if(numfound-noofrows>0){search_summary+=start+1+" - "+noofrows}else{search_summary+=start+1+" - "+numfound}summary(search_summary,"darkgreen")}$("#search-results-row").css("display","table-row");$("#search-results-scroller").scrollTop(0);$("#search-results").html(search_results);$("#search-results .search-result-heading").click(function(e){e.preventDefault();var gistname=$(this).attr("data-gistname");editor.open_notebook(gistname,null,null,e.metaKey||e.ctrlKey);return false})}$("#collapse-search").trigger("size-changed")}summary("Searching...");if(!pgclick){$("#search-results-row").hide();$("#search-results").html("")}query=encodeURIComponent(query);RCloud.UI.with_progress(function(){return rcloud.search(query,sortby,orderby,start,page_size_).then(function(v){create_list_of_search_results(v)})})}}}();RCloud.UI.session_pane={error_dest_:null,allow_clear:true,body:function(){return RCloud.UI.panel_loader.load_snippet("session-info-snippet")},init:function(){var that=this;this.error_dest_=$("#session-info");if(this.error_dest_.length){this.show_error_area=function(){RCloud.UI.right_panel.collapse($("#collapse-session-info"),false,false)}}else{this.error_dest_=$("#output");this.show_error_area=function(){}}RCloud.session.listeners.push({on_reset:function(){that.clear()}});Promise.onPossiblyUnhandledRejection(function(e,promise){that.post_rejection(e)})},panel_sizer:function(el){var def=RCloud.UI.collapsible_column.default_sizer(el);if(def.height)def.height+=20;return def},error_dest:function(){return this.error_dest_},clear:function(){if(this.allow_clear)$("#session-info").empty()},append_text:function(msg){if(!$("#session-info").length)return;if(!document.getElementById("session-info-out"))$("#session-info").append($("<pre id='session-info-out'></pre>"));$("#session-info-out").append(msg);RCloud.UI.right_panel.collapse($("#collapse-session-info"),false,false);ui_utils.on_next_tick(function(){ui_utils.scroll_to_after($("#session-info"))})},post_error:function(msg,dest,logged){$("#loading-animation").hide();var errclass="session-error";if(typeof msg==="string"){msg=ui_utils.string_error(msg);errclass="session-error spare"}else if(typeof msg!=="object")throw new Error("post_error expects a string or a jquery div");msg.addClass(errclass);dest=dest||this.error_dest_;if(dest){dest.append(msg);this.show_error_area();ui_utils.on_next_tick(function(){ui_utils.scroll_to_after($("#session-info"))})}if(!logged)console.log("pre-init post_error: "+msg.text())},post_rejection:function(e){var msg="";if(!window.chrome&&e.message)msg+="Error: "+e.message+"\n";msg+=e.stack;console.log(msg);this.post_error(msg,undefined,true)}};RCloud.UI.settings_frame=function(){var options_={};var body_;var controls_={};var now_setting_={};function set_option_noecho(key,value){try{now_setting_[key]=true;options_[key].set(value,controls_[key])}catch(xep){throw xep}finally{now_setting_[key]=false}}var result={body:function(){return body_=$.el.div({id:"settings-body-wrapper","class":"panel-body"},$.el.div({id:"settings-scroller",style:"width: 100%; height: 100%; overflow-x: auto"},$.el.div({id:"settings-body","class":"widget-vsize"})),$.el.span({"class":"settings-reload-msg",style:"display: none"},"Reload to see changes"))},panel_sizer:function(el){var sz=RCloud.UI.collapsible_column.default_sizer(el);return{height:sz.height+5,padding:sz.padding}},show_reload_msg:function(val){if(val)$(body_).find(".settings-reload-msg").show();else $(body_).find(".settings-reload-msg").hide()},checkbox:function(opts){opts=_.extend({sort:1e4,default_value:false,needs_reload:false,label:"",id:"",set:function(val){}},opts);return{sort:opts.sort,default_value:opts.default_value,create_control:function(on_change){var check=$.el.input({type:"checkbox"});$(check).prop("id",opts.id);var span=$.el.span(opts.label);var label=$.el.label(check,span);var checkboxdiv=$($.el.div({"class":"checkbox"},label));$(check).change(function(){var val=$(this).prop("checked");on_change(val);if(opts.needs_reload)result.show_reload_msg(true);opts.set(val)});return checkboxdiv},set:function(val,control){val=!!val;control.find("input").prop("checked",val);opts.set(val)}}},text_input:function(opts){opts=_.extend({sort:1e4,default_value:"",needs_reload:false,label:"",id:"",parse:function(val){return val},format:function(val){return val},set:function(val){}},opts);return{sort:opts.sort,default_value:opts.default_value,create_control:function(on_change){var input=$.el.input({type:"text","class":"form-control-ext"});$(input).prop("id",opts.id);var span=$.el.span(opts.label);var label=$.el.label(span,input);var div=$($.el.div({"class":"settings-input"},label));function commit(){var val=$(input).val();val=opts.parse(val);on_change(val);if(opts.needs_reload)result.show_reload_msg(true);opts.set(val);val=opts.format(val);$(input).val(val);div.data("original-value",val)}function cancel(){$(input).val(div.data("original-value"))}$(input).keydown(function(e){if(e.keyCode===$.ui.keyCode.ENTER)commit();else if(e.keyCode===$.ui.keyCode.ESCAPE)cancel()});$(input).blur(function(){cancel()});return div},set:function(val,control){opts.set(val);val=opts.format(val);control.find("input").val(val);control.data("original-value",val)}}},text_input_vector:function(opts){opts=_.extend({parse:function(val){return val.split(/, */).filter(function(x){return!!x})},format:function(val){return val.join?val.join(", "):val}},opts);return this.text_input(opts)},init:function(){var that=this;this.add({"show-command-prompt":that.checkbox({sort:1e3,default_value:true,label:"Show Command Prompt",set:function(val){RCloud.UI.command_prompt.show_prompt(val)}}),"show-terse-dates":that.checkbox({sort:2e3,default_value:true,needs_reload:true,label:"Show Terse Version Dates",set:function(val){editor.set_terse_dates(val)}}),"show-cell-numbers":that.checkbox({sort:3e3,default_value:true,label:"Show Cell Numbers",set:function(val){shell.notebook.controller.show_cell_numbers(val)}}),addons:that.text_input_vector({sort:1e4,needs_reload:true,needs_reload:true,label:"Enable Extensions"}),"skip-addons":that.text_input_vector({sort:11e3,needs_reload:true,needs_reload:true,label:"Disable Extensions"})})},add:function(S){_.extend(options_,S)},remove:function(option_name){delete options_[option_name]},load:function(){var that=this;var sort_controls=[];_.keys(options_).forEach(function(name){var option=options_[name];controls_[name]=option.create_control(function(value){if(!now_setting_[name])rcloud.config.set_user_option(name,value)});sort_controls.push({sort:option.sort,control:controls_[name]})});sort_controls=sort_controls.sort(function(a,b){return a.sort-b.sort});var body=$("#settings-body");for(var i=0;i<sort_controls.length;++i)body.append(sort_controls[i].control);var option_keys=_.keys(options_);if(option_keys.length===1)option_keys.push("foo");rcloud.config.get_user_option(option_keys).then(function(settings){for(var key in settings){if(key==="foo"||key==="r_attributes"||key==="r_type")continue;var value=settings[key]!==null?settings[key]:options_[key].default_value;set_option_noecho(key,value)}})}};return result}();RCloud.UI.share_button=function(){var view_types_={};var default_item_=null;function set_page(title){title=title&&view_types_[title]?title:default_item_;if(!title)return Promise.reject(new Error("share button view types set up wrong"));var page=view_types_[title].page;$("#view-type li a").css("font-weight",function(){return $(this).text()===title?"bold":"normal"});var opts={notebook:shell.gistname(),do_path:view_types_[title].do_path,version:shell.version()};if(!opts.version){$("#share-link").attr("href",ui_utils.make_url(page,opts));return Promise.resolve(undefined)}else return rcloud.get_tag_by_version(shell.gistname(),opts.version).then(function(t){if(t)opts.tag=t;$("#share-link").attr("href",ui_utils.make_url(page,opts))})}return{init:function(){this.add({"view.html":{sort:1e3,page:"view.html"},"notebook.R":{sort:2e3,page:"notebook.R",do_path:true},"mini.html":{sort:3e3,page:"mini.html"},"shiny.html":{sort:4e3,page:"shiny.html"}});return this},add:function(view_types){for(var vt in view_types){view_types_[vt]=_.extend({title:vt},view_types[vt])}return this},remove:function(view_type){delete view_types_[view_type]},load:function(){var that=this;var items=_.values(view_types_).sort(function(a,b){return a.sort-b.sort});default_item_=items.length?items[0].title:null;$("#view-type").append($(items.map(function(item){var a=$.el.a({href:"#"},item.title);$(a).click(function(){rcloud.set_notebook_property(shell.gistname(),"view-type",item.title);set_page(item.title)});return $.el.li(a)})));return this},update_link:function(){return rcloud.get_notebook_property(shell.gistname(),"view-type").then(set_page)}}}();RCloud.UI.upload_with_alerts=function(){function upload_ui_opts(opts){if(_.isBoolean(opts))opts={force:opts};else if(!_.isObject(opts))throw new Error("didn't understand options "+opts);opts=$.extend({$file:$("#file"),$progress:$(".progress"),$progress_bar:$("#progress-bar"),$upload_results:$("#file-upload-results").length?$("#file-upload-results"):RCloud.UI.session_pane.error_dest(),$result_panel:$("#collapse-file-upload")},opts);return opts}function upload_files(to_notebook,options){function results_append($div){options.$upload_results.append($div);options.$result_panel.trigger("size-changed");if(options.$upload_results.length)ui_utils.on_next_tick(function(){ui_utils.scroll_to_after(options.$upload_results)})}function result_alert($content){var alert_element=$("<div></div>");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=$("<p>File "+filename+" exists. </p>");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=$("<p>File is empty.</p>")}else if(message==="Overwrite cancelled"){p=$("<p>").append(message)}else if(message==="badname"){p=$("<p>Filename not allowed.</p>")}else{p=$("<p>(unexpected) "+message+"</p>");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}}};