diff --git a/src/gwt/src/org/rstudio/studio/client/htmlpreview/HTMLPreviewPresenter.java b/src/gwt/src/org/rstudio/studio/client/htmlpreview/HTMLPreviewPresenter.java index 7e6529ec087..b7e2cffa997 100644 --- a/src/gwt/src/org/rstudio/studio/client/htmlpreview/HTMLPreviewPresenter.java +++ b/src/gwt/src/org/rstudio/studio/client/htmlpreview/HTMLPreviewPresenter.java @@ -19,12 +19,15 @@ import org.rstudio.core.client.files.FileSystemItem; import org.rstudio.core.client.widget.ProgressIndicator; import org.rstudio.core.client.widget.ProgressOperationWithInput; +import org.rstudio.studio.client.RStudioGinjector; import org.rstudio.studio.client.application.Desktop; import org.rstudio.studio.client.application.events.EventBus; import org.rstudio.studio.client.common.FileDialogs; import org.rstudio.studio.client.common.GlobalDisplay; import org.rstudio.studio.client.common.SimpleRequestCallback; import org.rstudio.studio.client.common.fileexport.FileExport; +import org.rstudio.studio.client.common.filetypes.FileType; +import org.rstudio.studio.client.common.filetypes.FileTypeRegistry; import org.rstudio.studio.client.common.satellite.Satellite; import org.rstudio.studio.client.htmlpreview.events.HTMLPreviewCompletedEvent; import org.rstudio.studio.client.htmlpreview.events.HTMLPreviewOutputEvent; @@ -70,7 +73,8 @@ public interface Display extends IsWidget void showPreview(String url, String htmlFile, - boolean enableSaveAs); + boolean enableSaveAs, + boolean enablePublish); void print(); } @@ -96,12 +100,8 @@ public HTMLPreviewPresenter(Display view, fileSystemContext_ = fileSystemContext; pFileExport_ = pFileExport; - binder.bind(commands, this); + binder.bind(commands, this); - // remove publish if it's not supported - if (!session.getSessionInfo().getRPubsEnabled()) - commands.publishHTML().remove(); - // map Ctrl-R to our internal refresh handler Event.addNativePreviewHandler(new NativePreviewHandler() { @Override @@ -172,7 +172,7 @@ public void onHTMLPreviewCompleted(HTMLPreviewCompletedEvent event) { previewRunning_ = false; - HTMLPreviewResult result = event.getResult(); + HTMLPreviewResult result = event.getResult(); if (result.getSucceeded()) { lastSuccessfulPreview_ = result; @@ -180,7 +180,9 @@ public void onHTMLPreviewCompleted(HTMLPreviewCompletedEvent event) view_.showPreview( server_.getApplicationURL(result.getPreviewURL()), result.getHtmlFile(), - result.getEnableSaveAs()); + result.getEnableSaveAs(), + session_.getSessionInfo().getRPubsEnabled() && + isMarkdownFile(result.getSourceFile())); } else { @@ -210,6 +212,15 @@ protected String getValue() }; } + private boolean isMarkdownFile(String file) + { + FileSystemItem fsi = FileSystemItem.createFile(file); + FileTypeRegistry ftReg = RStudioGinjector.INSTANCE.getFileTypeRegistry(); + FileType fileType = ftReg.getTypeForFile(fsi); + return fileType.equals(FileTypeRegistry.MARKDOWN) || + fileType.equals(FileTypeRegistry.RMARKDOWN); + } + public void onActivated(HTMLPreviewParams params) { lastPreviewParams_ = params; diff --git a/src/gwt/src/org/rstudio/studio/client/htmlpreview/ui/HTMLPreviewPanel.java b/src/gwt/src/org/rstudio/studio/client/htmlpreview/ui/HTMLPreviewPanel.java index 7f8b49d6c72..3b2022aec60 100644 --- a/src/gwt/src/org/rstudio/studio/client/htmlpreview/ui/HTMLPreviewPanel.java +++ b/src/gwt/src/org/rstudio/studio/client/htmlpreview/ui/HTMLPreviewPanel.java @@ -99,8 +99,9 @@ private Toolbar createToolbar(Commands commands) } - toolbar.addLeftSeparator(); - toolbar.addLeftWidget(commands.publishHTML().createToolbarButton()); + publishButtonSeparator_ = toolbar.addLeftSeparator(); + toolbar.addLeftWidget( + publishButton_ = commands.publishHTML().createToolbarButton()); findTextBox_ = new FindTextBox("Find"); @@ -198,7 +199,8 @@ public void closeProgress() @Override public void showPreview(String url, String htmlFile, - boolean enableSaveAs) + boolean enableSaveAs, + boolean enablePublish) { String shortFileName = StringUtil.shortPathName( FileSystemItem.createFile(htmlFile), @@ -207,6 +209,8 @@ public void showPreview(String url, fileLabel_.setText(shortFileName); saveHtmlPreviewAsSeparator_.setVisible(enableSaveAs); saveHtmlPreviewAs_.setVisible(enableSaveAs); + publishButtonSeparator_.setVisible(enablePublish); + publishButton_.setVisible(enablePublish); previewFrame_.navigate(url); } @@ -272,5 +276,7 @@ protected WindowEx getWindow() private FindTextBox findTextBox_; private Widget saveHtmlPreviewAsSeparator_; private Widget saveHtmlPreviewAs_; + private Widget publishButtonSeparator_; + private Widget publishButton_; private HTMLPreviewProgressDialog activeProgressDialog_; }