using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ShiftOS.Engine; using Newtonsoft.Json; using static ShiftOS.Engine.SkinEngine; namespace ShiftOS.WinForms.Applications { [Launcher("Shiftnet", false)] public partial class Shiftnet : UserControl, IShiftOSWindow { public Shiftnet() { InitializeComponent(); ServerManager.MessageReceived += (msg) => { try { if (msg.Name == "shiftnet_file") { this.Invoke(new Action(() => { wbcanvas.DocumentText = ConstructHtml(msg.Contents); })); } } catch { } }; } public string ConstructHtml(string markdown) { string html = $@" "; string body = CommonMark.CommonMarkConverter.Convert(markdown); html = html.Replace("", body); return html; } public string CurrentUrl { get; set; } private void wbcanvas_Navigating(object sender, WebBrowserNavigatingEventArgs e) { if (CurrentUrl != e.Url.ToString() && !e.Url.ToString().StartsWith("about:")) { e.Cancel = true; Future.Clear(); ShiftnetNavigate(e.Url.ToString()); } } public Stack History = new Stack(); public Stack Future = new Stack(); public void ShiftnetNavigate(string Url, bool pushHistory = true) { if (!string.IsNullOrEmpty(CurrentUrl) && pushHistory) History.Push(CurrentUrl); CurrentUrl = Url; ServerManager.SendMessage("shiftnet_get", JsonConvert.SerializeObject(new { url = Url })); txturl.Text = Url; } public void OnLoad() { ShiftnetNavigate("shiftnet/main"); } public void OnSkinLoad() { ShiftnetNavigate(CurrentUrl); } public bool OnUnload() { return true; } public void OnUpgrade() { } private void btnback_Click(object sender, EventArgs e) { try { string hist = History.Pop(); if (!string.IsNullOrEmpty(hist)) { Future.Push(hist); ShiftnetNavigate(hist, false); } } catch { } } private void btnforward_Click(object sender, EventArgs e) { try { string fut = Future.Pop(); if (!string.IsNullOrEmpty(fut)) { ShiftnetNavigate(fut); } } catch { } } private void btngo_Click(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(txturl.Text)) { Future.Clear(); ShiftnetNavigate(txturl.Text); } } private void txturl_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { btngo_Click(sender, EventArgs.Empty); e.SuppressKeyPress = true; } } } }