Esempio n. 1
0
		public string RenderSlide(Course course, Slide slide)
		{
			var jsFiles = GetJsFiles().Select(f => Path.GetFullPath(".\\html\\" + f));
			var cssFiles = GetCssFiles().Select(f => Path.GetFullPath(".\\html\\" + f));
			var page = StandaloneLayout.Page(course, slide, CreateToc(course, slide), cssFiles, jsFiles);
			return "<!DOCTYPE html>\n" + page.ToHtmlString();
		}
Esempio n. 2
0
		public CourseDiff(Course original, Course changed)
		{
			OriginalCourse = original;
			ChangedCourse = changed;

			RemovedSlides = new List<Slide>();
			InsertedSlides = new List<Slide>();
			SlideDiffs = new List<SlideDiff>();
			FindDifferences();
		}
Esempio n. 3
0
		public static string[] SpellCheckCourse(this SpellChecker spellchecker, Course course)
		{
			var titleErrors = spellchecker.SpellCheckString(course.Title).Select(e => e.ToPrettyString()).ToList();
			var titleError = ToPrettyMessage("Заголовок курса:", titleErrors);

			var unitsErrors = course.GetUnits().SelectMany(spellchecker.SpellCheckString).Select(e => e.ToPrettyString()).ToList();
			var unitsError = ToPrettyMessage("Заголовки модулей:", unitsErrors);

			var slidesErrors = course.Slides.Select(spellchecker.SpellCheckSlide).Where(s => !string.IsNullOrWhiteSpace(s));

			var res = new List<string> { titleError, unitsError };
			res.AddRange(slidesErrors);
			return res.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
		}
Esempio n. 4
0
		private static Sequential[] CourseToSequentials(Course course, string exerciseUrl, string solutionsUrl, Dictionary<string, string> videoGuids, string ltiId)
		{
			var units = course.GetUnits().ToList();
			return Enumerable
				.Range(0, units.Count)
				.Select(
					x => new Sequential(course.Id + "-1-" + x, units[x], 
						course.Slides
							.Where(y => y.Info.UnitName == units[x])
							.SelectMany(y => y.ToVerticals(course.Id, exerciseUrl, solutionsUrl, videoGuids, ltiId))
							.ToArray()
					)
				).ToArray();
		}
Esempio n. 5
0
		public void LoadFrom(DirectoryInfo dir)
		{
			Course = new CourseLoader().LoadCourse(dir);
			CourseDirectory = dir;
			NotifyChanged();
		}
public static System.Web.WebPages.HelperResult Page(Course course, Slide slide, TocModel toc, IEnumerable<string> cssFiles, IEnumerable<string> jsFiles)
{
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {


 

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<html>\r\n\t<head>\r\n\t\t<title>Preview: ");


WebViewPage.WriteTo(@__razor_helper_writer, course.Title);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, " — ");


WebViewPage.WriteTo(@__razor_helper_writer, slide.Title);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</title>\r\n\t\t<link rel=\"shortcut icon\" href=\"favicon.ico?v=1\" />\r\n\t\t<meta charset=" +
"\'UTF-8\'>\r\n");


 		foreach (var cssFile in cssFiles)
		{

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<link href=\'");


WebViewPage.WriteTo(@__razor_helper_writer, cssFile);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\' rel=\'stylesheet\' />\r\n");


		}

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t</head>\r\n\t<body>\r\n\t\t<div class=\'side-bar navbar-collapse collapse navbar-nav con" +
"tainer\'>\r\n\t\t\t");


WebViewPage.WriteTo(@__razor_helper_writer, TableOfContents.Toc(toc));

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t</div>\r\n\r\n\t\t<div class=\"slide-container\">\r\n\t\t\t<div class=\"container body-cont" +
"ent\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t");


WebViewPage.WriteTo(@__razor_helper_writer, SlideHtml.Slide(new BlockRenderContext(course, slide, "/static/", 
						slide.Blocks.Select(
							(b, i) => b is ExerciseBlock 
								? new ExerciseBlockData { RunSolutionUrl = "/" + slide.Index.ToString("000") + ".html?query=submit", DebugView = true } 
								: b is AbstractQuestionBlock 
									? new QuizInfoModel(new QuizModel() {AnswersToQuizes = slide.Blocks.OfType<AbstractQuestionBlock>().ToDictionary(x => x.Id, x => new List<string>())}, b, i, QuizState.Total) 
									: (dynamic)null
							).ToArray()
						)
					));

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\r\n");


 		foreach (var jsFile in jsFiles)
		{

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<script src=\'");


WebViewPage.WriteTo(@__razor_helper_writer, jsFile);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\'></script>\r\n");


		}

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t</body>\r\n</html>\r\n");



});

}
Esempio n. 7
0
        private static string TryGetDictionaryPath(this Course course)
        {
            var file = Path.Combine(course.Directory.FullName, course.Settings.GetDictionaryFile());

            return(File.Exists(file) ? file : null);
        }
public static System.Web.WebPages.HelperResult Page(Course course, Slide slide, TocModel toc, IEnumerable<string> cssFiles, IEnumerable<string> jsFiles)
{
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {


 

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t<html>\r\n\t<head>\r\n\t\t<title>Preview: ");


WebViewPage.WriteTo(@__razor_helper_writer, course.Title);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, " — ");


WebViewPage.WriteTo(@__razor_helper_writer, slide.Title);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "</title>\r\n\t\t<meta charset=\'UTF-8\'>\r\n");


 		foreach (var cssFile in cssFiles)
		{

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<link href=\'");


WebViewPage.WriteTo(@__razor_helper_writer, cssFile);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\' rel=\'stylesheet\' />\r\n");


		}

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t</head>\r\n\t<body>\r\n\t\t<div class=\'side-bar navbar-collapse collapse navbar-nav con" +
"tainer\'>\r\n\t\t\t");


WebViewPage.WriteTo(@__razor_helper_writer, TableOfContents.Toc(toc));

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t</div>\r\n\r\n\t\t<div class=\"slide-container\">\r\n\t\t\t<div class=\"container body-cont" +
"ent\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t");


WebViewPage.WriteTo(@__razor_helper_writer, SlideHtml.Slide(new BlockRenderContext(course, slide, slide.Info.SlideFile.Directory.FullName, slide.Blocks.Select(b => (dynamic)null).ToArray())));

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\r\n");


 		foreach (var jsFile in jsFiles)
		{

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t\t\t<script src=\'");


WebViewPage.WriteTo(@__razor_helper_writer, jsFile);

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\'></script>\r\n");


		}

WebViewPage.WriteLiteralTo(@__razor_helper_writer, "\t</body>\r\n</html>\r\n");



});

}
Esempio n. 9
0
		public static EdxCourse ToEdxCourse(Course course, string organization, string exerciseUrl, string solutionsUrl,
			Dictionary<string, string> youtubeId2UlearnVideoIds, string ltiId)
		{
			return new EdxCourse(course.Id, organization, course.Title, null, null,
				new [] { new Chapter(course.Id + "-1", course.Title, CourseToSequentials(course, exerciseUrl, solutionsUrl, youtubeId2UlearnVideoIds, ltiId)) });
		}
Esempio n. 10
0
		private TocModel CreateToc(Course course, Slide slide)
		{
			var builder = new TocModelBuilder(s => GetSlideUrl(s), s => 0, course, slide.Index);
			return builder.CreateTocModel();
		}
Esempio n. 11
0
		public void SetUp()
		{
			var cm = new CourseManager(new DirectoryInfo(@"..\..\..\uLearn.Web"));
			cm.ReloadCourse("ForTests.zip");
			course = cm.GetCourses().Single();
		}
Esempio n. 12
0
		private void FixFileReferencesInCourse(Course course, DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory)
		{
			foreach (var instructorNote in course.InstructorNotes)
				instructorNote.File = (FileInfo)GetNewPathForFileAfterMoving(instructorNote.File, sourceDirectory, destinationDirectory);
			foreach (var slide in course.Slides)
			{
				slide.Info.SlideFile = (FileInfo)GetNewPathForFileAfterMoving(slide.Info.SlideFile, sourceDirectory, destinationDirectory);

				foreach (var exerciseBlock in slide.Blocks.OfType<ProjectExerciseBlock>())
					exerciseBlock.SlideFolderPath = (DirectoryInfo)GetNewPathForFileAfterMoving(exerciseBlock.SlideFolderPath, sourceDirectory, destinationDirectory);
			}
		}
Esempio n. 13
0
		public void MoveCourse(Course course, DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory)
		{
			var tempDirectoryName = coursesDirectory.GetSubdir(Path.GetRandomFileName());
			LockCourse(course.Id);

			try
			{

				TrySeveralTimes(() => Directory.Move(destinationDirectory.FullName, tempDirectoryName.FullName));

				try
				{
					TrySeveralTimes(() => Directory.Move(sourceDirectory.FullName, destinationDirectory.FullName));
				}
				catch (IOException)
				{
					/* In case of any file system's error rollback previous operation */
					TrySeveralTimes(() => Directory.Move(tempDirectoryName.FullName, destinationDirectory.FullName));
					throw;
				}
				FixFileReferencesInCourse(course, sourceDirectory, destinationDirectory);

				UpdateCourse(course);
			}
			finally
			{
				ReleaseCourse(course.Id);
			}
			TrySeveralTimes(() => ClearDirectory(tempDirectoryName, true));
		}
Esempio n. 14
0
		public void UpdateCourse(Course course)
		{
			if (!courses.ContainsKey(course.Id))
				return;
			courses[course.Id] = course;
		}