/// <summary> /// exports bookmarks in gitmarks format /// </summary> /// <param name="bookmarksFile"></param> /// <param name="bookmarksDir"></param> public static void ExportBookmarks(string bookmarksFile, string bookmarksDir) { var bookmarks = JsonConvert.DeserializeObject <Bookmark[]>(File.ReadAllText(bookmarksFile)).AsEnumerable(); using (var md5 = MD5.Create()) { var result = Input.From(bookmarks).Apply(row => { if (string.IsNullOrEmpty(row["LinkUrl"].ToString())) { return; } var id = Utils.ComputeHash(row["LinkUrl"].ToString(), md5); string fileName = Path.Combine(bookmarksDir, id); var bookmark = new BookmarkContent { hash = id , creator = "batch" , rights = "CC BY" , time = DateTime.Now.ToShortDateString() , title = row["LinkText"].ToString() , uri = row["LinkUrl"].ToString() }; //dump bookmark File.WriteAllText(fileName, JsonConvert.SerializeObject(bookmark)); }).Execute(); } }
/// <summary> /// exports bookmarks in gitmarks format /// </summary> /// <param name="bookmarksFile"></param> /// <param name="bookmarksDir"></param> public static void ExportBookmarks(string bookmarksFile, string bookmarksDir) { var bookmarks = JsonConvert.DeserializeObject <Bookmark[]>(File.ReadAllText(bookmarksFile)).AsEnumerable(); var result = Input.From(bookmarks).Apply(row => { string fileName = Path.Combine(bookmarksDir, row["Id"].ToString()); var bookmark = new BookmarkContent { hash = row["Id"].ToString() , creator = "batch" , rights = "CC BY" , time = DateTime.Now.ToShortDateString() , title = row["LinkText"].ToString() , uri = row["LinkUrl"].ToString() }; //dump bookmark File.WriteAllText(fileName, JsonConvert.SerializeObject(bookmark)); }).Execute(); }
/// <summary> /// Fills the table bookmark /// </summary> /// <param name="mainDocPart">The main document part</param> /// <param name="firstBookmarkInTable">The first bookmark in the table</param> /// <param name="tableData">The table data</param> static void FillTableBookmark(MainDocumentPart mainDocPart, BookmarkContent bookmarkContent) { // find our bookmark var bookmark = mainDocPart.Document.Body.Descendants <BookmarkStart>().FirstOrDefault(b => b.Name == bookmarkContent.BookmarkContentKey); if (bookmark != null && bookmarkContent.BookmarkContentValue != null && bookmarkContent.BookmarkContentValue is ListOfList <BookmarkContent> ) { // get to first element OpenXmlElement elem = bookmark.Parent; // isolate the table to be worked on while (!(elem is Table)) { elem = elem.Parent; } OpenXmlElement targetTable = elem; // save the row you want to copy each time you have data TableRow oldRow = elem.Elements <TableRow>().Last(); TableRow rowTemplate = (TableRow)oldRow.Clone(); // whack old row elem.RemoveChild(oldRow); // Time to slap our data into the table foreach (var item in bookmarkContent.BookmarkContentValue as ListOfList <BookmarkContent> ) { TableRow newRow = (TableRow)rowTemplate.Clone(); IEnumerable <TableCell> cells = newRow.Elements <TableCell>(); for (int i = 0; i < cells.Count(); i++) { TableCell cell = cells.ElementAt(i); FillBookmarkListOnTableCell(mainDocPart, cell.Descendants <BookmarkStart>().ToList(), item); } targetTable.AppendChild(newRow); } } }
/// <summary> /// Fills bookmark list on table cell /// </summary> /// <param name="mainDocPart">The main document part</param> /// <param name="bookmarksOnCellList">The bookmark on cell list</param> /// <param name="bookmarkContentList">The bookmark content list</param> static void FillBookmarkListOnTableCell(MainDocumentPart mainDocPart, List <BookmarkStart> bookmarksOnCellList, List <BookmarkContent> bookmarkContentList) { if (bookmarksOnCellList != null && bookmarksOnCellList.Count > 0) { bookmarksOnCellList.ForEach(b => { BookmarkContent content = bookmarkContentList.FirstOrDefault(c => c.BookmarkContentKey == b.Name); if (content != null) { if (content.BookmarkContentType == BookmarkContentType.Html && !string.IsNullOrEmpty(content.BookmarkContentValue?.ToString())) { InsertHtmlContentIntoBookmark(mainDocPart, b, content.BookmarkContentValue.ToString()); } else { InsertIntoBookmark(b, content.BookmarkContentValue?.ToString()); } } }); } }
/// <summary> /// Fill book mark /// </summary> /// <param name="mainDocPart">The main document part</param> /// <param name="bookmarkContent">The bookmark content</param> static void FillBookmark(MainDocumentPart mainDocPart, BookmarkContent bookmarkContent) { BookmarkStart bookmark = mainDocPart.Document.Body.Descendants <BookmarkStart>().FirstOrDefault(b => b.Name == bookmarkContent.BookmarkContentKey); if (bookmark != null) { switch (bookmarkContent.BookmarkContentType) { case BookmarkContentType.Text: InsertIntoBookmark(bookmark, bookmarkContent.BookmarkContentValue?.ToString()); break; case BookmarkContentType.Html: InsertHtmlContentIntoBookmark(mainDocPart, bookmark, bookmarkContent.BookmarkContentValue?.ToString()); break; case BookmarkContentType.Table: FillTableBookmark(mainDocPart, bookmarkContent); break; } } }