mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
get rid of task description files everywhere
This commit is contained in:
+1
-1
@@ -214,7 +214,7 @@ public class CCSubtaskEditorNotificationProvider extends EditorNotifications.Pro
|
||||
if (activeSubtaskIndex > mySubtaskIndex) {
|
||||
myTask.setActiveSubtaskIndex(activeSubtaskIndex - 1);
|
||||
}
|
||||
StudySubtaskUtils.updateUI(myProject, myTask, taskDir, true);
|
||||
StudySubtaskUtils.updateUI(myProject, myTask, true);
|
||||
for (VirtualFile file : FileEditorManager.getInstance(myProject).getOpenFiles()) {
|
||||
EditorNotifications.getInstance(myProject).updateNotifications(file);
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ import java.util.Map;
|
||||
|
||||
public class CCUtils {
|
||||
public static final String ANSWER_EXTENSION_DOTTED = ".answer.";
|
||||
public static final String TASK_DESCRIPTION_TEXT = "Write task description here using markdown or html";
|
||||
private static final Logger LOG = Logger.getInstance(CCUtils.class);
|
||||
public static final String GENERATED_FILES_FOLDER = ".coursecreator";
|
||||
public static final String COURSE_MODE = "Course Creator";
|
||||
|
||||
+2
-9
@@ -1,15 +1,12 @@
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.util.Function;
|
||||
import com.jetbrains.edu.coursecreator.settings.CCSettings;
|
||||
import com.jetbrains.edu.coursecreator.CCUtils;
|
||||
import com.jetbrains.edu.learning.EduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.core.EduUtils;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
@@ -120,11 +117,7 @@ public class CCCreateTask extends CCCreateStudyItemActionBase {
|
||||
return null;
|
||||
}
|
||||
task.setLesson(((Lesson)parentItem));
|
||||
String fileName = StudyUtils.getTaskDescriptionFileName(CCSettings.getInstance().useHtmlAsDefaultTaskFormat());
|
||||
FileTemplate template = FileTemplateManager.getDefaultInstance().getInternalTemplate(fileName);
|
||||
if (template != null) {
|
||||
task.addTaskText(fileName, template.getText());
|
||||
}
|
||||
task.addTaskText(task.getTaskDescriptionNameWithoutExtension(), CCUtils.TASK_DESCRIPTION_TEXT);
|
||||
return task;
|
||||
}
|
||||
}
|
||||
+1
-18
@@ -4,7 +4,6 @@ import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.ToggleAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
@@ -60,27 +59,11 @@ public class CCEditTaskTextAction extends ToggleAction implements DumbAware {
|
||||
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
|
||||
return;
|
||||
}
|
||||
VirtualFile taskDir = task.getTaskDir(project);
|
||||
if (taskDir == null) {
|
||||
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
|
||||
return;
|
||||
}
|
||||
VirtualFile taskTextFile = StudyUtils.findTaskDescriptionVirtualFile(project, taskDir);
|
||||
if (taskTextFile == null) {
|
||||
LOG.info("Failed to find task.html");
|
||||
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
|
||||
return;
|
||||
}
|
||||
Document document = FileDocumentManager.getInstance().getDocument(taskTextFile);
|
||||
if (!state) {
|
||||
if (document != null) {
|
||||
FileDocumentManager.getInstance().saveDocument(document);
|
||||
task.addTaskText(taskTextFile.getName(), document.getText());
|
||||
}
|
||||
window.leaveEditingMode(project);
|
||||
return;
|
||||
}
|
||||
window.enterEditingMode(taskTextFile, project);
|
||||
window.enterEditingMode(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-30
@@ -1,28 +1,18 @@
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.Presentation;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.jetbrains.edu.coursecreator.CCUtils;
|
||||
import com.jetbrains.edu.coursecreator.settings.CCSettings;
|
||||
import com.jetbrains.edu.learning.EduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudySubtaskUtils;
|
||||
import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseFormat.Lesson;
|
||||
import com.jetbrains.edu.learning.courseFormat.TaskFile;
|
||||
@@ -36,7 +26,6 @@ import static com.jetbrains.edu.coursecreator.CCUtils.renameFiles;
|
||||
|
||||
|
||||
public class CCNewSubtaskAction extends DumbAwareAction {
|
||||
private static final Logger LOG = Logger.getInstance(CCNewSubtaskAction.class);
|
||||
public static final String NEW_SUBTASK = "Add Subtask";
|
||||
|
||||
public CCNewSubtaskAction() {
|
||||
@@ -82,7 +71,6 @@ public class CCNewSubtaskAction extends DumbAwareAction {
|
||||
}
|
||||
createTestsForNewSubtask(project, task);
|
||||
int num = task.getLastSubtaskIndex() + 1;
|
||||
createTaskDescriptionFile(project, taskDir, num);
|
||||
StudySubtaskUtils.switchStep(project, task, num, false);
|
||||
task.setLastSubtaskIndex(num);
|
||||
}
|
||||
@@ -99,24 +87,6 @@ public class CCNewSubtaskAction extends DumbAwareAction {
|
||||
configurator.createTestsForNewSubtask(project, task);
|
||||
}
|
||||
|
||||
private static void createTaskDescriptionFile(Project project, VirtualFile taskDir, int index) {
|
||||
String taskDescriptionFileName = StudyUtils.getTaskDescriptionFileName(CCSettings.getInstance().useHtmlAsDefaultTaskFormat());
|
||||
FileTemplate taskTextTemplate = FileTemplateManager.getInstance(project).getInternalTemplate(taskDescriptionFileName);
|
||||
PsiDirectory taskPsiDir = PsiManager.getInstance(project).findDirectory(taskDir);
|
||||
if (taskTextTemplate != null && taskPsiDir != null) {
|
||||
String nextTaskTextName = FileUtil.getNameWithoutExtension(taskDescriptionFileName) +
|
||||
EduNames.SUBTASK_MARKER +
|
||||
index + "." +
|
||||
FileUtilRt.getExtension(taskDescriptionFileName);
|
||||
try {
|
||||
FileTemplateUtil.createFromTemplate(taskTextTemplate, nextTaskTextName, null, taskPsiDir);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
DataContext dataContext = e.getDataContext();
|
||||
|
||||
+4
-5
@@ -24,8 +24,8 @@ public class StudyFileEditorManagerListener implements FileEditorManagerListener
|
||||
@Override
|
||||
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
Task task = getTask(file);
|
||||
setTaskText(task, StudyUtils.getTaskDir(file));
|
||||
if (task != null) {
|
||||
setTaskText(task.getTaskDescription());
|
||||
if (task instanceof ChoiceTask) {
|
||||
final StudyChoiceVariantsPanel choicePanel = new StudyChoiceVariantsPanel((ChoiceTask)task);
|
||||
myToolWindow.setBottomComponent(choicePanel);
|
||||
@@ -51,7 +51,7 @@ public class StudyFileEditorManagerListener implements FileEditorManagerListener
|
||||
VirtualFile file = event.getNewFile();
|
||||
if (file != null) {
|
||||
Task task = getTask(file);
|
||||
setTaskText(task, StudyUtils.getTaskDir(file));
|
||||
setTaskText(task == null ? null : task.getTaskDescription());
|
||||
}
|
||||
myToolWindow.setBottomComponent(null);
|
||||
}
|
||||
@@ -61,12 +61,11 @@ public class StudyFileEditorManagerListener implements FileEditorManagerListener
|
||||
return StudyUtils.getTaskForFile(myProject, file);
|
||||
}
|
||||
|
||||
private void setTaskText(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
|
||||
String text = StudyUtils.getTaskTextFromTask(taskDirectory, task);
|
||||
private void setTaskText(@Nullable String text) {
|
||||
if (text == null) {
|
||||
myToolWindow.setEmptyText(myProject);
|
||||
return;
|
||||
}
|
||||
myToolWindow.setTaskText(text, taskDirectory, myProject);
|
||||
myToolWindow.setTaskText(text, myProject);
|
||||
}
|
||||
}
|
||||
@@ -90,7 +90,7 @@ public class StudySubtaskUtils {
|
||||
}
|
||||
transformTestFile(project, toSubtaskIndex, taskDir);
|
||||
task.setActiveSubtaskIndex(toSubtaskIndex);
|
||||
updateUI(project, task, taskDir, !CCUtils.isCourseCreator(project) && navigateToTask);
|
||||
updateUI(project, task, !CCUtils.isCourseCreator(project) && navigateToTask);
|
||||
if (CCUtils.isCourseCreator(project)) {
|
||||
updateOpenedTestFiles(project, taskDir, fromSubtaskIndex, toSubtaskIndex);
|
||||
}
|
||||
@@ -161,17 +161,17 @@ public class StudySubtaskUtils {
|
||||
return nameWithoutExtension + EduNames.SUBTASK_MARKER + subtaskIndex + "." + extension;
|
||||
}
|
||||
|
||||
public static void updateUI(@NotNull Project project, @NotNull Task task, VirtualFile taskDir, boolean navigateToTask) {
|
||||
public static void updateUI(@NotNull Project project, @NotNull Task task, boolean navigateToTask) {
|
||||
StudyCheckUtils.drawAllPlaceholders(project, task);
|
||||
ProjectView.getInstance(project).refresh();
|
||||
StudyToolWindow toolWindow = StudyUtils.getStudyToolWindow(project);
|
||||
if (toolWindow != null) {
|
||||
String text = StudyUtils.getTaskTextFromTask(taskDir, task);
|
||||
String text = task.getTaskDescription();
|
||||
if (text == null) {
|
||||
toolWindow.setEmptyText(project);
|
||||
return;
|
||||
task.addTaskText(task.getTaskDescriptionNameWithoutExtension(), CCUtils.TASK_DESCRIPTION_TEXT);
|
||||
text = CCUtils.TASK_DESCRIPTION_TEXT;
|
||||
}
|
||||
toolWindow.setTaskText(text, taskDir, project);
|
||||
toolWindow.setTaskText(text, project);
|
||||
}
|
||||
if (navigateToTask) {
|
||||
StudyNavigator.navigateToTask(project, task);
|
||||
|
||||
@@ -24,7 +24,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
|
||||
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
@@ -49,7 +48,6 @@ import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.util.DocumentUtil;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.TimeoutUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.text.MarkdownUtil;
|
||||
@@ -62,12 +60,8 @@ import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseFormat.Lesson;
|
||||
import com.jetbrains.edu.learning.courseFormat.TaskFile;
|
||||
import com.jetbrains.edu.learning.courseFormat.tasks.ChoiceTask;
|
||||
import com.jetbrains.edu.learning.courseFormat.tasks.Task;
|
||||
import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks;
|
||||
import com.jetbrains.edu.learning.courseFormat.tasks.TheoryTask;
|
||||
import com.jetbrains.edu.learning.editor.StudyEditor;
|
||||
import com.jetbrains.edu.learning.stepic.EduStepikUtils;
|
||||
import com.jetbrains.edu.learning.stepic.OAuthDialog;
|
||||
import com.jetbrains.edu.learning.stepic.StepicUser;
|
||||
import com.jetbrains.edu.learning.ui.StudyStepicUserWidget;
|
||||
@@ -188,7 +182,7 @@ public class StudyUtils {
|
||||
if (studyToolWindow != null) {
|
||||
String taskText = getTaskText(project);
|
||||
if (taskText != null) {
|
||||
studyToolWindow.setTaskText(taskText, null, project);
|
||||
studyToolWindow.setTaskText(taskText, project);
|
||||
}
|
||||
else {
|
||||
LOG.warn("Task text is null");
|
||||
@@ -406,93 +400,11 @@ public class StudyUtils {
|
||||
return !isRenameableOrMoveable(project, course, element);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String getTaskTextFromTask(@Nullable final VirtualFile taskDirectory, @Nullable final Task task) {
|
||||
if (task == null || task.getLesson() == null || task.getLesson().getCourse() == null) {
|
||||
return null;
|
||||
}
|
||||
final Course course = task.getLesson().getCourse();
|
||||
String text = task.getTaskDescription() != null ? task.getTaskDescription() : getTaskTextByTaskName(task, taskDirectory);
|
||||
|
||||
if (text == null) return null;
|
||||
if (course.isAdaptive()) text = wrapAdaptiveCourseText(task, text);
|
||||
|
||||
return wrapTextToDisplayLatex(text);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String constructTaskTextFilename(@NotNull Task task, @NotNull String defaultName) {
|
||||
String fileNameWithoutExtension = FileUtil.getNameWithoutExtension(defaultName);
|
||||
if (task instanceof TaskWithSubtasks) {
|
||||
int activeStepIndex = ((TaskWithSubtasks)task).getActiveSubtaskIndex();
|
||||
fileNameWithoutExtension += EduNames.SUBTASK_MARKER + activeStepIndex;
|
||||
}
|
||||
return addExtension(fileNameWithoutExtension, defaultName);
|
||||
}
|
||||
|
||||
private static String wrapAdaptiveCourseText(Task task, @NotNull String text) {
|
||||
String finalText = text;
|
||||
if (task instanceof TheoryTask) {
|
||||
finalText += "\n\n<b>Note</b>: This theory task aims to help you solve difficult tasks. " +
|
||||
"Please, read it and press \"Check\" to go further.";
|
||||
}
|
||||
else if (!(task instanceof ChoiceTask)) {
|
||||
finalText += "\n\n<b>Note</b>: Use standard input to obtain input for the task.";
|
||||
}
|
||||
finalText += getFooterWithLink(task);
|
||||
|
||||
return finalText;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String getFooterWithLink(Task task) {
|
||||
return
|
||||
"<div class=\"footer\">" + "<a href=" + EduStepikUtils.getAdaptiveLink(task) + ">Open on Stepik</a>" + "</div>";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static String addExtension(@NotNull String fileNameWithoutExtension, @NotNull String defaultName) {
|
||||
return fileNameWithoutExtension + "." + FileUtilRt.getExtension(defaultName);
|
||||
}
|
||||
|
||||
public static String wrapTextToDisplayLatex(String taskTextFileHtml) {
|
||||
final String prefix = String.format(ourPrefix, EditorColorsManager.getInstance().getGlobalScheme().getEditorFontSize());
|
||||
return prefix + taskTextFileHtml + ourPostfix;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String getTaskTextByTaskName(@NotNull Task task, @Nullable VirtualFile taskDirectory) {
|
||||
if (taskDirectory == null) return null;
|
||||
|
||||
String textFromHtmlFile = getTextByTaskFileFormat(task, taskDirectory, EduNames.TASK_HTML);
|
||||
if (textFromHtmlFile != null) {
|
||||
return textFromHtmlFile;
|
||||
}
|
||||
|
||||
String taskTextFromMd = getTextByTaskFileFormat(task, taskDirectory, EduNames.TASK_HTML);
|
||||
return convertToHtml(taskTextFromMd);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String getTextByTaskFileFormat(@NotNull Task task, @NotNull VirtualFile taskDirectory, @NotNull String taskTextFileName) {
|
||||
String textFilename = constructTaskTextFilename(task, taskTextFileName);
|
||||
VirtualFile taskTextFile = taskDirectory.findChild(textFilename);
|
||||
|
||||
if (taskTextFile != null) {
|
||||
return String.valueOf(LoadTextUtil.loadText(taskTextFile));
|
||||
}
|
||||
|
||||
VirtualFile srcDir = taskDirectory.findChild(EduNames.SRC);
|
||||
if (srcDir != null) {
|
||||
VirtualFile taskTextSrcFile = srcDir.findChild(textFilename);
|
||||
if (taskTextSrcFile != null) {
|
||||
return String.valueOf(LoadTextUtil.loadText(taskTextSrcFile));
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static StudyTwitterPluginConfigurator getTwitterConfigurator(@NotNull final Project project) {
|
||||
StudyTwitterPluginConfigurator[] extensions = StudyTwitterPluginConfigurator.EP_NAME.getExtensions();
|
||||
@@ -506,20 +418,11 @@ public class StudyUtils {
|
||||
|
||||
@Nullable
|
||||
public static String getTaskText(@NotNull final Project project) {
|
||||
Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
|
||||
if (editor == null) {
|
||||
Task task = getCurrentTask(project);
|
||||
if (task == null) {
|
||||
return StudyToolWindow.EMPTY_TASK_TEXT;
|
||||
}
|
||||
Document document = editor.getDocument();
|
||||
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
|
||||
if (virtualFile == null) {
|
||||
return StudyToolWindow.EMPTY_TASK_TEXT;
|
||||
}
|
||||
final Task task = getTaskForFile(project, virtualFile);
|
||||
if (task != null) {
|
||||
return getTaskTextFromTask(task.getTaskDir(project), task);
|
||||
}
|
||||
return null;
|
||||
return task.getTaskDescription();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -635,9 +538,7 @@ public class StudyUtils {
|
||||
return task;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String convertToHtml(@Nullable final String content) {
|
||||
if (content == null) return null;
|
||||
public static String convertToHtml(@NotNull String content) {
|
||||
ArrayList<String> lines = ContainerUtil.newArrayList(content.split("\n|\r|\r\n"));
|
||||
MarkdownUtil.replaceHeaders(lines);
|
||||
MarkdownUtil.replaceCodeBlock(lines);
|
||||
@@ -656,22 +557,6 @@ public class StudyUtils {
|
||||
return fileName.contains(EduNames.TASK) && fileName.contains(EduNames.SUBTASK_MARKER);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VirtualFile findTaskDescriptionVirtualFile(@NotNull Project project, @NotNull VirtualFile taskDir) {
|
||||
Task task = getTask(project, taskDir.getName().contains(EduNames.TASK) ? taskDir: taskDir.getParent());
|
||||
if (task == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return ObjectUtils.chooseNotNull(taskDir.findChild(constructTaskTextFilename(task, EduNames.TASK_HTML)),
|
||||
taskDir.findChild(constructTaskTextFilename(task, EduNames.TASK_MD)));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getTaskDescriptionFileName(final boolean useHtml) {
|
||||
return useHtml ? EduNames.TASK_HTML : EduNames.TASK_MD;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Document getDocument(String basePath, int lessonIndex, int taskIndex, String fileName) {
|
||||
String taskPath = FileUtil.join(basePath, EduNames.LESSON + lessonIndex, EduNames.TASK + taskIndex);
|
||||
|
||||
@@ -11,7 +11,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import com.intellij.util.xmlb.annotations.Transient;
|
||||
import com.jetbrains.edu.learning.EduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import com.jetbrains.edu.learning.checker.StudyTaskChecker;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.*;
|
||||
@@ -178,10 +177,10 @@ public abstract class Task implements StudyItem {
|
||||
if (entry == null) {
|
||||
return null;
|
||||
}
|
||||
return StudyUtils.convertToHtml(entry.getValue());
|
||||
return entry.getValue();
|
||||
}
|
||||
|
||||
protected String getTaskDescriptionNameWithoutExtension() {
|
||||
public String getTaskDescriptionNameWithoutExtension() {
|
||||
return FileUtil.getNameWithoutExtension(EduNames.TASK_HTML);
|
||||
}
|
||||
|
||||
@@ -296,4 +295,8 @@ public abstract class Task implements StudyItem {
|
||||
final Lesson lesson = getLesson();
|
||||
return lesson.getTaskList().indexOf(this) + 1;
|
||||
}
|
||||
|
||||
public void saveTaskText(String text) {
|
||||
taskTexts.put(getTaskDescriptionNameWithoutExtension(), text);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ public class TaskWithSubtasks extends PyCharmTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTaskDescriptionNameWithoutExtension() {
|
||||
public String getTaskDescriptionNameWithoutExtension() {
|
||||
return super.getTaskDescriptionNameWithoutExtension() + EduNames.SUBTASK_MARKER + myActiveSubtaskIndex;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -405,7 +405,7 @@ public class EduAdaptiveStepicConnector {
|
||||
private static void setToolWindowText(@NotNull Project project, @NotNull Task task) {
|
||||
final StudyToolWindow window = StudyUtils.getStudyToolWindow(project);
|
||||
if (window != null) {
|
||||
window.setTaskText(StudyUtils.wrapTextToDisplayLatex(task.getTaskDescription()), task.getTaskDir(project), project);
|
||||
window.setTaskText(StudyUtils.wrapTextToDisplayLatex(task.getTaskDescription()), project);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -47,6 +47,6 @@ public class StudyJavaFxToolWindow extends StudyToolWindow {
|
||||
|
||||
@Override
|
||||
public void setText(@NotNull String text) {
|
||||
myBrowserWindow.loadContent(text);
|
||||
myBrowserWindow.loadContent(StudyUtils.convertToHtml(text));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,18 +24,18 @@ import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.editor.EditorSettings;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.fileTypes.FileTypeRegistry;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.SimpleToolWindowPanel;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.JBCardLayout;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.OnePixelSplitter;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCEditTaskTextAction;
|
||||
import com.jetbrains.edu.coursecreator.settings.CCSettings;
|
||||
import com.jetbrains.edu.learning.EduPluginConfigurator;
|
||||
import com.jetbrains.edu.learning.StudyFileEditorManagerListener;
|
||||
import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
@@ -44,7 +44,6 @@ import com.jetbrains.edu.learning.core.EduNames;
|
||||
import com.jetbrains.edu.learning.courseFormat.Course;
|
||||
import com.jetbrains.edu.learning.courseFormat.Lesson;
|
||||
import com.jetbrains.edu.learning.courseFormat.StudyStatus;
|
||||
import com.jetbrains.edu.learning.courseFormat.TaskFile;
|
||||
import com.jetbrains.edu.learning.courseFormat.tasks.Task;
|
||||
import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks;
|
||||
import com.jetbrains.edu.learning.stepic.StepicAdaptiveReactionsPanel;
|
||||
@@ -66,6 +65,7 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
private final OnePixelSplitter mySplitPane;
|
||||
private JLabel myStatisticLabel;
|
||||
private StudyProgressBar myStudyProgressBar;
|
||||
private EditorEx myEditor;
|
||||
|
||||
public StudyToolWindow() {
|
||||
super(true, true);
|
||||
@@ -100,24 +100,17 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
|
||||
if (isToolwindow) {
|
||||
project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new StudyFileEditorManagerListener(this, project));
|
||||
|
||||
if (StudyTaskManager.getInstance(project).isTurnEditingMode() ||
|
||||
StudyTaskManager.getInstance(project).getToolWindowMode() == StudyToolWindowMode.EDITING) {
|
||||
TaskFile file = StudyUtils.getSelectedTaskFile(project);
|
||||
if (file != null) {
|
||||
VirtualFile taskDir = file.getTask().getTaskDir(project);
|
||||
String taskText = StudyUtils.getTaskText(project);
|
||||
if (taskText != null) {
|
||||
setTaskText(taskText, taskDir, project);
|
||||
}
|
||||
}
|
||||
Task task = StudyUtils.getCurrentTask(project);
|
||||
if (task == null) {
|
||||
setEmptyText(project);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
String taskText = StudyUtils.getTaskText(project);
|
||||
if (taskText != null) {
|
||||
setTaskText(taskText, null, project);
|
||||
}
|
||||
String taskDescription = task.getTaskDescription();
|
||||
if (taskDescription == null) {
|
||||
setEmptyText(project);
|
||||
return;
|
||||
}
|
||||
setTaskText(taskDescription, project);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,19 +181,13 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
return group;
|
||||
}
|
||||
|
||||
public void setTaskText(@NotNull String text, @Nullable VirtualFile taskDirectory, @NotNull Project project) {
|
||||
if (!EMPTY_TASK_TEXT.equals(text) && StudyTaskManager.getInstance(project).isTurnEditingMode()) {
|
||||
if (taskDirectory == null) {
|
||||
LOG.info("Failed to enter editing mode for StudyToolWindow");
|
||||
return;
|
||||
}
|
||||
VirtualFile taskTextFile = StudyUtils.findTaskDescriptionVirtualFile(project, taskDirectory);
|
||||
enterEditingMode(taskTextFile, project);
|
||||
public void setTaskText(@NotNull String text, @NotNull Project project) {
|
||||
if (StudyTaskManager.getInstance(project).isTurnEditingMode()) {
|
||||
enterEditingMode(project);
|
||||
StudyTaskManager.getInstance(project).setTurnEditingMode(false);
|
||||
}
|
||||
if (taskDirectory != null && StudyTaskManager.getInstance(project).getToolWindowMode() == StudyToolWindowMode.EDITING) {
|
||||
VirtualFile taskTextFile = StudyUtils.findTaskDescriptionVirtualFile(project, taskDirectory);
|
||||
enterEditingMode(taskTextFile, project);
|
||||
if (StudyTaskManager.getInstance(project).getToolWindowMode() == StudyToolWindowMode.EDITING) {
|
||||
enterEditingMode(project);
|
||||
}
|
||||
else {
|
||||
setText(text);
|
||||
@@ -218,7 +205,7 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
mySplitPane.setFirstComponent(myContentPanel);
|
||||
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
|
||||
}
|
||||
setTaskText(EMPTY_TASK_TEXT, null, project);
|
||||
setTaskText(EMPTY_TASK_TEXT, project);
|
||||
}
|
||||
|
||||
public enum StudyToolWindowMode {
|
||||
@@ -226,23 +213,26 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
}
|
||||
|
||||
|
||||
public void enterEditingMode(VirtualFile taskFile, Project project) {
|
||||
public void enterEditingMode(Project project) {
|
||||
Task task = StudyUtils.getCurrentTask(project);
|
||||
assert task != null;
|
||||
String taskDescription = task.getTaskDescription();
|
||||
final EditorFactory factory = EditorFactory.getInstance();
|
||||
Document document = FileDocumentManager.getInstance().getDocument(taskFile);
|
||||
if (document == null) {
|
||||
return;
|
||||
}
|
||||
Document document = factory.createDocument(taskDescription);
|
||||
WebBrowserManager.getInstance().setShowBrowserHover(false);
|
||||
final EditorEx createdEditor = (EditorEx)factory.createEditor(document, project, taskFile, false);
|
||||
String extension = CCSettings.getInstance().useHtmlAsDefaultTaskFormat() ? "html" : "md";
|
||||
myEditor = (EditorEx)factory.createEditor(document, project, FileTypeRegistry.getInstance().getFileTypeByExtension(extension), false);
|
||||
Disposer.register(project, new Disposable() {
|
||||
public void dispose() {
|
||||
factory.releaseEditor(createdEditor);
|
||||
if (!myEditor.isDisposed()) {
|
||||
factory.releaseEditor(myEditor);
|
||||
}
|
||||
}
|
||||
});
|
||||
JComponent editorComponent = createdEditor.getComponent();
|
||||
JComponent editorComponent = myEditor.getComponent();
|
||||
editorComponent.setBorder(new EmptyBorder(10, 20, 0, 10));
|
||||
editorComponent.setBackground(EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground());
|
||||
EditorSettings editorSettings = createdEditor.getSettings();
|
||||
EditorSettings editorSettings = myEditor.getSettings();
|
||||
editorSettings.setLineMarkerAreaShown(false);
|
||||
editorSettings.setLineNumbersShown(false);
|
||||
editorSettings.setFoldingOutlineShown(false);
|
||||
@@ -254,6 +244,10 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
|
||||
|
||||
public void leaveEditingMode(Project project) {
|
||||
Task task = StudyUtils.getCurrentTask(project);
|
||||
assert task != null;
|
||||
task.saveTaskText(myEditor.getDocument().getText());
|
||||
EditorFactory.getInstance().releaseEditor(myEditor);
|
||||
WebBrowserManager.getInstance().setShowBrowserHover(true);
|
||||
mySplitPane.setFirstComponent(myContentPanel);
|
||||
StudyTaskManager.getInstance(project).setToolWindowMode(StudyToolWindowMode.TEXT);
|
||||
|
||||
-4
@@ -18,7 +18,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.jetbrains.edu.coursecreator.settings.CCSettings;
|
||||
import com.jetbrains.edu.learning.checker.PyStudyTaskChecker;
|
||||
import com.jetbrains.edu.learning.checker.StudyTaskChecker;
|
||||
import com.jetbrains.edu.learning.core.EduNames;
|
||||
@@ -72,9 +71,6 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator {
|
||||
@NotNull PsiDirectory taskDirectory) {
|
||||
StudyUtils.createFromTemplate(project, taskDirectory, "task.py", view, false);
|
||||
StudyUtils.createFromTemplate(project, taskDirectory, TESTS_PY, view, false);
|
||||
StudyUtils.createFromTemplate(project, taskDirectory,
|
||||
StudyUtils.getTaskDescriptionFileName(CCSettings.getInstance().useHtmlAsDefaultTaskFormat()), view,
|
||||
false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user