diff --git a/2017/01/bomg-screenshot-1-150x150.png b/2017/01/bomg-screenshot-1-150x150.png new file mode 100644 index 0000000..5d30b68 Binary files /dev/null and b/2017/01/bomg-screenshot-1-150x150.png differ diff --git a/2017/01/bomg-screenshot-1-170x300.png b/2017/01/bomg-screenshot-1-170x300.png new file mode 100644 index 0000000..d3d305d Binary files /dev/null and b/2017/01/bomg-screenshot-1-170x300.png differ diff --git a/2017/01/bomg-screenshot-1-200.jpg b/2017/01/bomg-screenshot-1-200.jpg new file mode 100644 index 0000000..02ac4b9 Binary files /dev/null and b/2017/01/bomg-screenshot-1-200.jpg differ diff --git a/2017/01/bomg-screenshot-1.png b/2017/01/bomg-screenshot-1.png new file mode 100644 index 0000000..87dc579 Binary files /dev/null and b/2017/01/bomg-screenshot-1.png differ diff --git a/2017/01/bomg-screenshot-2-150x150.png b/2017/01/bomg-screenshot-2-150x150.png new file mode 100644 index 0000000..f7fbc2c Binary files /dev/null and b/2017/01/bomg-screenshot-2-150x150.png differ diff --git a/2017/01/bomg-screenshot-2-200.jpg b/2017/01/bomg-screenshot-2-200.jpg new file mode 100644 index 0000000..7cfa733 Binary files /dev/null and b/2017/01/bomg-screenshot-2-200.jpg differ diff --git a/2017/01/bomg-screenshot-2-300x300.png b/2017/01/bomg-screenshot-2-300x300.png new file mode 100644 index 0000000..e904c3a Binary files /dev/null and b/2017/01/bomg-screenshot-2-300x300.png differ diff --git a/2017/01/bomg-screenshot-2.png b/2017/01/bomg-screenshot-2.png new file mode 100644 index 0000000..483590e Binary files /dev/null and b/2017/01/bomg-screenshot-2.png differ diff --git a/2017/01/bomg-screenshot-3-150x150.png b/2017/01/bomg-screenshot-3-150x150.png new file mode 100644 index 0000000..1a5a43a Binary files /dev/null and b/2017/01/bomg-screenshot-3-150x150.png differ diff --git a/2017/01/bomg-screenshot-3-200.jpg b/2017/01/bomg-screenshot-3-200.jpg new file mode 100644 index 0000000..eba8b5d Binary files /dev/null and b/2017/01/bomg-screenshot-3-200.jpg differ diff --git a/2017/01/bomg-screenshot-3-300x260.png b/2017/01/bomg-screenshot-3-300x260.png new file mode 100644 index 0000000..e560f29 Binary files /dev/null and b/2017/01/bomg-screenshot-3-300x260.png differ diff --git a/2017/01/bomg-screenshot-3-768x665.png b/2017/01/bomg-screenshot-3-768x665.png new file mode 100644 index 0000000..f2733f9 Binary files /dev/null and b/2017/01/bomg-screenshot-3-768x665.png differ diff --git a/2017/01/bomg-screenshot-3.png b/2017/01/bomg-screenshot-3.png new file mode 100644 index 0000000..e586266 Binary files /dev/null and b/2017/01/bomg-screenshot-3.png differ diff --git a/2017/10/vcwl-screenshot-1-150x150.png b/2017/10/vcwl-screenshot-1-150x150.png new file mode 100644 index 0000000..786fb43 Binary files /dev/null and b/2017/10/vcwl-screenshot-1-150x150.png differ diff --git a/2017/10/vcwl-screenshot-1-200.png b/2017/10/vcwl-screenshot-1-200.png new file mode 100644 index 0000000..719d97a Binary files /dev/null and b/2017/10/vcwl-screenshot-1-200.png differ diff --git a/2017/10/vcwl-screenshot-1-300x175.png b/2017/10/vcwl-screenshot-1-300x175.png new file mode 100644 index 0000000..ff3cff0 Binary files /dev/null and b/2017/10/vcwl-screenshot-1-300x175.png differ diff --git a/2017/10/vcwl-screenshot-1-768x449.png b/2017/10/vcwl-screenshot-1-768x449.png new file mode 100644 index 0000000..c0a1aef Binary files /dev/null and b/2017/10/vcwl-screenshot-1-768x449.png differ diff --git a/2017/10/vcwl-screenshot-1.png b/2017/10/vcwl-screenshot-1.png new file mode 100644 index 0000000..3725550 Binary files /dev/null and b/2017/10/vcwl-screenshot-1.png differ diff --git a/2017/10/vcwl-screenshot-2-150x150.png b/2017/10/vcwl-screenshot-2-150x150.png new file mode 100644 index 0000000..878dba5 Binary files /dev/null and b/2017/10/vcwl-screenshot-2-150x150.png differ diff --git a/2017/10/vcwl-screenshot-2-200.png b/2017/10/vcwl-screenshot-2-200.png new file mode 100644 index 0000000..39bd86f Binary files /dev/null and b/2017/10/vcwl-screenshot-2-200.png differ diff --git a/2017/10/vcwl-screenshot-2-300x175.png b/2017/10/vcwl-screenshot-2-300x175.png new file mode 100644 index 0000000..9e2400a Binary files /dev/null and b/2017/10/vcwl-screenshot-2-300x175.png differ diff --git a/2017/10/vcwl-screenshot-2-768x449.png b/2017/10/vcwl-screenshot-2-768x449.png new file mode 100644 index 0000000..9714ab9 Binary files /dev/null and b/2017/10/vcwl-screenshot-2-768x449.png differ diff --git a/2017/10/vcwl-screenshot-2.png b/2017/10/vcwl-screenshot-2.png new file mode 100644 index 0000000..9a732d9 Binary files /dev/null and b/2017/10/vcwl-screenshot-2.png differ diff --git a/2018/01/2018-01-13-1640.png b/2018/01/2018-01-13-1640.png new file mode 100644 index 0000000..5a4608e Binary files /dev/null and b/2018/01/2018-01-13-1640.png differ diff --git a/2018/01/2018-01-13-1640_200.png b/2018/01/2018-01-13-1640_200.png new file mode 100644 index 0000000..63927c9 Binary files /dev/null and b/2018/01/2018-01-13-1640_200.png differ diff --git a/2018/01/httpweb.cs b/2018/01/httpweb.cs index b38b22a..44e3622 100644 --- a/2018/01/httpweb.cs +++ b/2018/01/httpweb.cs @@ -6,208 +6,163 @@ using System.Windows.Forms; namespace RyzStudio.Net { - public class HttpWeb - { - public string defaultUserAgent = "Momozilla/5.0 (" + Environment.OSVersion.Platform.ToString() + " ; " + Environment.OSVersion.VersionString + "; " + Application.CurrentCulture.TwoLetterISOLanguageName + ")"; - public int defaultTimeout = 6000; - public int defaultMaxRedirect = 8; - public bool defaultAllowRedirect = true; - public CookieContainer defaultCookierContainer = null; + public class HttpWeb + { + public string defaultUserAgent = "Momozilla/5.0 (" + Environment.OSVersion.Platform.ToString() + " ; " + Environment.OSVersion.VersionString + "; " + Application.CurrentCulture.TwoLetterISOLanguageName + ")"; + public int defaultTimeout = 6000; + public int defaultMaxRedirect = 8; + public bool defaultAllowRedirect = true; + public CookieContainer defaultCookierContainer = null; - public HttpWeb() - { - } + public HttpWeb() + { + } - public HttpWebRequest CreateRequest(string requestURL) => this.CreateRequest(requestURL, requestURL); + public HttpWebRequest CreateRequest(string url) + { + return this.CreateRequest(url, url); + } - public HttpWebRequest CreateRequest(string requestURL, string referrerURL) - { - if (defaultCookierContainer == null) - { - defaultCookierContainer = new CookieContainer(); - } + public HttpWebRequest CreateRequest(string url, string referrerURL) + { + if (defaultCookierContainer == null) + { + defaultCookierContainer = new CookieContainer(); + } - HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(requestURL); - webRequest.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); - webRequest.MaximumAutomaticRedirections = defaultMaxRedirect; - webRequest.CookieContainer = defaultCookierContainer; - webRequest.UserAgent = defaultUserAgent; - webRequest.AllowAutoRedirect = defaultAllowRedirect; - webRequest.Timeout = defaultTimeout; - webRequest.Referer = referrerURL; + HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); + webRequest.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); + webRequest.MaximumAutomaticRedirections = defaultMaxRedirect; + webRequest.CookieContainer = defaultCookierContainer; + webRequest.UserAgent = defaultUserAgent; + webRequest.AllowAutoRedirect = defaultAllowRedirect; + webRequest.Timeout = defaultTimeout; - return webRequest; - } + return webRequest; + } - public int GetResponse(out string sourceCode, string requestURL) => this.GetResponse(out sourceCode, this.CreateRequest(requestURL)); + public int GetResponse(out string sourceCode, string url, string referrerURL = "") + { + HttpWebRequest webRequest = this.CreateRequest(url, referrerURL); - public int GetResponse(out string sourceCode, string requestURL, string referrerURL) => this.GetResponse(out sourceCode, this.CreateRequest(requestURL, referrerURL)); + return GetResponse(out sourceCode, webRequest); + } - public int GetResponse(out string sourceCode, HttpWebRequest webRequest) - { - sourceCode = string.Empty; + public int GetResponse(out string sourceCode, HttpWebRequest webRequest) + { + sourceCode = string.Empty; - int rv = 0; + int rv = 0; - try - { - HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); + try + { + HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); - rv = (int)webResponse.StatusCode; + rv = (int)webResponse.StatusCode; - StreamReader readContent = new StreamReader(webResponse.GetResponseStream()); - sourceCode = readContent.ReadToEnd(); + StreamReader readContent = new StreamReader(webResponse.GetResponseStream()); + sourceCode = readContent.ReadToEnd(); - webResponse.Close(); - webResponse = null; - } - catch (WebException xc) - { - if (xc.Response is HttpWebResponse) - { - HttpWebResponse rs = xc.Response as HttpWebResponse; - StreamReader readContent = new StreamReader(rs.GetResponseStream()); - if (readContent != null) - { - sourceCode = readContent.ReadToEnd(); - } + webResponse.Close(); + webResponse = null; + } + catch (WebException xc) + { + if (xc.Response is HttpWebResponse) + { + HttpWebResponse rs = xc.Response as HttpWebResponse; + StreamReader readContent = new StreamReader(rs.GetResponseStream()); + if (readContent != null) + { + sourceCode = readContent.ReadToEnd(); + } - rv = (int)rs.StatusCode; - } - else - { - rv = (int)xc.Status; - sourceCode = xc.Message; - } - } - catch (Exception xc) - { - sourceCode = xc.Message; - } + rv = (int)rs.StatusCode; + } + else + { + rv = (int)xc.Status; + sourceCode = xc.Message; + } + } + catch (Exception xc) + { + sourceCode = xc.Message; + } - return rv; - } - - public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL) => this.GetResponse(out webRequest, out sourceCode, requestURL, requestURL, true); + return rv; + } - public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL, bool allowAutoRedirect) => this.GetResponse(out webRequest, out sourceCode, requestURL, requestURL, allowAutoRedirect); + public static HttpWebRequest AddBasicAuthentication(HttpWebRequest webRequest, string username, string password) + { + webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(string.Concat(username, ":", password))); + webRequest.PreAuthenticate = true; - public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL, string referrerURL) => this.GetResponse(out webRequest, out sourceCode, requestURL, referrerURL, true); + return webRequest; + } - public int GetResponse(out HttpWebRequest webRequest, out string sourceCode, string requestURL, string referrerURL, bool allowAutoRedirect) - { - webRequest = this.CreateRequest(requestURL, referrerURL); - webRequest.AllowAutoRedirect = allowAutoRedirect; - return this.GetResponse(out sourceCode, webRequest); - } + public int GetPOSTResponse(out string sourceCode, HttpWebRequest webRequest, string postData) + { + sourceCode = ""; + int rv = 0; + byte[] buffer = Encoding.UTF8.GetBytes(postData); - public int GetHEADResponse(string requestURL) => this.GetHEADResponse(requestURL, requestURL, true); + webRequest.ContentLength = buffer.Length; - public int GetHEADResponse(string requestURL, string referrerURL) => this.GetHEADResponse(requestURL, requestURL, true); + try + { + Stream dataStream = webRequest.GetRequestStream(); + dataStream.Write(buffer, 0, buffer.Length); + dataStream.Close(); + } + catch (Exception xc) + { + sourceCode = xc.Message; + return rv; + } - public int GetHEADResponse(string requestURL, bool allowAutoRedirect) => this.GetHEADResponse(requestURL, requestURL, allowAutoRedirect); + return this.GetResponse(out sourceCode, webRequest); + } - public int GetHEADResponse(string requestURL, string referrerURL, bool allowAutoRedirect) - { - HttpWebRequest webRequest = this.CreateRequest(requestURL, referrerURL); - webRequest.Method = "HEAD"; - webRequest.AllowAutoRedirect = allowAutoRedirect; + public int GetHeader(out WebHeaderCollection headerCollection, string url, string referrerURL = "") + { + headerCollection = null; - string sc; - int rc = this.GetResponse(out sc, webRequest); + int rv = 0; - return rc; - } + HttpWebRequest webRequest = this.CreateRequest(url, referrerURL); + webRequest.Method = "HEAD"; - public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL) => this.GetHEADResponse(out webRequest, requestURL, requestURL, true); + try + { + HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); + headerCollection = webResponse.Headers; - public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL, string referrerURL) => this.GetHEADResponse(out webRequest, requestURL, referrerURL, true); + rv = (int)webResponse.StatusCode; - public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL, bool allowAutoRedirect) => this.GetHEADResponse(out webRequest, requestURL, requestURL, allowAutoRedirect); + webResponse.Close(); + webResponse = null; + } + catch (WebException xc) + { + if (xc.Response is HttpWebResponse) + { + HttpWebResponse rs = xc.Response as HttpWebResponse; - public int GetHEADResponse(out HttpWebRequest webRequest, string requestURL, string referrerURL, bool allowAutoRedirect) - { - webRequest = this.CreateRequest(requestURL, referrerURL); - webRequest.Method = "HEAD"; - webRequest.AllowAutoRedirect = allowAutoRedirect; + rv = (int)rs.StatusCode; + } + else + { + rv = (int)xc.Status; + } + } + catch (Exception xc) + { + // do nothing + } - string sc; - int rc = this.GetResponse(out sc, webRequest); - - return rc; - } - - public int GetPOSTResponse(out string sourceCode, HttpWebRequest webRequest, string postData) - { - sourceCode = string.Empty; - int rv = 0; - byte[] buffer = Encoding.UTF8.GetBytes(postData); - - webRequest.ContentLength = buffer.Length; - - try - { - Stream dataStream = webRequest.GetRequestStream(); - dataStream.Write(buffer, 0, buffer.Length); - dataStream.Close(); - } - catch (Exception xc) - { - sourceCode = xc.Message; - return rv; - } - - return this.GetResponse(out sourceCode, webRequest); - } - - public int GetHeader(out WebHeaderCollection headerCollection, string url, string referrerURL = "") - { - headerCollection = null; - - int rv = 0; - - HttpWebRequest webRequest = this.CreateRequest(url, referrerURL); - webRequest.Method = "HEAD"; - - try - { - HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); - headerCollection = webResponse.Headers; - - rv = (int)webResponse.StatusCode; - - webResponse.Close(); - webResponse = null; - } - catch (WebException xc) - { - if (xc.Response is HttpWebResponse) - { - HttpWebResponse rs = xc.Response as HttpWebResponse; - - rv = (int)rs.StatusCode; - } - else - { - rv = (int)xc.Status; - } - } - catch (Exception xc) - { - // do nothing - } - - return rv; - } - - public static HttpWebRequest AddBasicAuthentication(HttpWebRequest webRequest, string username, string password) - { - webRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(string.Concat(username, ":", password))); - webRequest.PreAuthenticate = true; - - return webRequest; - } - - } + return rv; + } + } } \ No newline at end of file diff --git a/2018/05/youtube-watched-icon-1.png b/2018/05/youtube-watched-icon-1.png new file mode 100644 index 0000000..50e5240 Binary files /dev/null and b/2018/05/youtube-watched-icon-1.png differ diff --git a/2018/05/youtube-watched-screenshot-1-128.png b/2018/05/youtube-watched-screenshot-1-128.png new file mode 100644 index 0000000..d490e78 Binary files /dev/null and b/2018/05/youtube-watched-screenshot-1-128.png differ diff --git a/2018/05/youtube-watched-screenshot-1.png b/2018/05/youtube-watched-screenshot-1.png new file mode 100644 index 0000000..3fbeb33 Binary files /dev/null and b/2018/05/youtube-watched-screenshot-1.png differ diff --git a/2019/02/Docxument.cs b/2019/02/Docxument.cs deleted file mode 100644 index 44af90e..0000000 --- a/2019/02/Docxument.cs +++ /dev/null @@ -1,248 +0,0 @@ -using ICSharpCode.SharpZipLib.Zip; -using System; -using System.Collections.Generic; -using System.IO; -using System.Security; -using System.Text; - -namespace HiImRay -{ - public class Docxument - { - protected string Filename { get; set; } - - public int CompressionLevel { get; set; } = 9; - public Dictionary ReplacementWords = new Dictionary(); - public Dictionary>> ReplacementParagraphs = new Dictionary>>(); - - public Docxument() - { - } - - public Docxument(string filename) - { - Load(filename); - } - - public void Load(string filename) - { - this.Filename = filename; - } - - public void Save(string saveFilename) - { - int size = 2048; - byte[] buffer = new byte[size]; - int bufferSize = 0; - - // read file - ZipEntry readEntry = null; - ZipInputStream readStream = new ZipInputStream(File.OpenRead(this.Filename)); - - // write file - ZipOutputStream writeStream = new ZipOutputStream(File.Create(saveFilename)); - writeStream.SetLevel(this.CompressionLevel); - - // loop - while (true) - { - readEntry = readStream.GetNextEntry(); - if (readEntry == null) - { - break; - } - - if (string.IsNullOrWhiteSpace(readEntry.Name)) - { - break; - } - - if (!readEntry.IsFile) - { - continue; - } - - // change document - if (readEntry.Name.Equals("word/document.xml")) - { - MemoryStream ms = new MemoryStream(); - buffer = new byte[size]; - bufferSize = 0; - - do - { - bufferSize = readStream.Read(buffer, 0, buffer.Length); - ms.Write(buffer, 0, bufferSize); - } while (bufferSize > 0); - - ms.Position = 0; - - StreamReader sr = new StreamReader(ms); - StringBuilder sb = new StringBuilder(); - sb.Append(sr.ReadToEnd()); - - // make changes - sb = replaceTokens(sb, this.ReplacementWords); - sb = replaceParagraphs(sb, this.ReplacementParagraphs); - - // make readable - MemoryStream ms2 = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(sb.ToString())); - ms2.Position = 0; - - // write new document xml - writeStream.PutNextEntry(new ZipEntry(readEntry.Name)); - - buffer = new byte[size]; - bufferSize = 0; - - do - { - bufferSize = ms2.Read(buffer, 0, buffer.Length); - writeStream.Write(buffer, 0, bufferSize); - } while (bufferSize > 0); - - ms2.Close(); - ms2.Dispose(); - } - else - { - writeStream.PutNextEntry(new ZipEntry(readEntry.Name)); - - buffer = new byte[size]; - bufferSize = 0; - - do - { - bufferSize = readStream.Read(buffer, 0, buffer.Length); - writeStream.Write(buffer, 0, bufferSize); - } while (bufferSize > 0); - } - } - - writeStream.Finish(); - writeStream.Flush(); - writeStream.Close(); - writeStream.Dispose(); - - readStream.Close(); - readStream.Dispose(); - } - - protected StringBuilder replaceTokens(StringBuilder sb, Dictionary options) - { - foreach (KeyValuePair item in options) - { - sb.Replace("{{" + item.Key + "}}", SecurityElement.Escape(item.Value)); - } - - return sb; - } - - protected StringBuilder replaceParagraphs(StringBuilder sb, Dictionary>> options) - { - foreach (KeyValuePair>> item in options) - { - sb = replaceParagraph(sb, item); - } - - return sb; - } - - protected StringBuilder replaceParagraph(StringBuilder sb, KeyValuePair>> options) - { - string paragraph = sb.ToString(); - - Tuple outerCoord = getOuterParagraph(paragraph, "{{" + options.Key + "}}"); - if (outerCoord != null) - { - sb.Remove(outerCoord.Item1, outerCoord.Item2); - - Tuple innerCoord = getInnerParagraph(paragraph.Substring(outerCoord.Item1, outerCoord.Item2), "{{" + options.Key + "}}"); - string innerParagraph = paragraph.Substring((innerCoord.Item1 + outerCoord.Item1), innerCoord.Item2); - - StringBuilder innerText = new StringBuilder(); - foreach (Dictionary row in options.Value) - { - StringBuilder sb2 = new StringBuilder(); - sb2.Append(innerParagraph); - - sb2 = replaceTokens(sb2, row); - - innerText.Append(sb2.ToString()); - } - - sb.Insert(outerCoord.Item1, innerText.ToString()); - } - - return sb; - } - - protected Tuple getOuterParagraph(string fullText, string findTerm) - { - string headTerm = "(headIndex, (tailIndex - headIndex)); - } - - protected Tuple getInnerParagraph(string fullText, string findTerm) - { - string headTerm = "(headIndex, (tailIndex - headIndex)); - } - } -} diff --git a/2019/03/SQLiteDatabase.cs b/2019/03/SQLiteDatabase.cs deleted file mode 100644 index a3bec00..0000000 --- a/2019/03/SQLiteDatabase.cs +++ /dev/null @@ -1,469 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Data.SQLite; -using System.IO; -using System.Text; - -namespace RyzStudio.Data.SQLite -{ - public class SQLiteDatabase - { - public SQLiteConnection DBConnection { get; protected set; } = null; - - public string DBLocation { get; protected set; } = null; - - public string LastError { get; protected set; } = null; - - public int LastInsertID - { - get - { - if (this.DBConnection == null) - { - return 0; - } - - DataTable dt = this.DoQuery("SELECT last_insert_rowid() AS rv;"); - if (dt == null) - { - return 0; - } - - if (dt.Rows.Count <= 0) - { - return 0; - } - - int n; - if (!int.TryParse(dt.Rows[0]["rv"].ToString(), out n)) - { - n = 0; - } - - return n; - } - } - - protected string[] requiredTableList = new string[0]; - - protected const string appSettingsTableName = "ryz_app_xxxx_config"; - - public bool Create() - { - this.LastError = string.Empty; - - this.DBLocation = ":memory:"; - - try - { - this.DBConnection = new SQLiteConnection(string.Concat("Data Source=\"", this.DBLocation, "\";Version=3;UTF8Encoding=True;")); - this.DBConnection.Open(); - } - catch (Exception exc) - { - this.LastError = exc.Message; - - return false; - } - - return true; - } - - public bool Create(string filename, bool overwriteFile = false, string password = null, bool useAppSettings = false) - { - bool rs = create(filename, overwriteFile, password); - - if (useAppSettings) - { - if (!rs) - { - return false; - } - - rs = prepareDatabase(); - if (!rs) - { - return false; - } - - return this.HasRequiredTables(); - } - else - { - return rs; - } - } - - public bool LoadFile(string filename, string password = null) - { - this.LastError = string.Empty; - - if (!File.Exists(filename)) - { - return false; - } - - this.DBLocation = filename; - - try - { - this.DBConnection = new SQLiteConnection(string.Concat("Data Source=\"", filename, "\";Version=3;UTF8Encoding=True;", (password == null) ? string.Empty : string.Concat("Password=", encode64(password), ";"))); - this.DBConnection.Open(); - } - catch (Exception exc) - { - this.LastError = exc.Message; - - return false; - } - - return true; - } - - public void Close() - { - this.LastError = string.Empty; - - if (this.DBConnection != null) - { - try - { - this.DBConnection.Cancel(); - this.DBConnection.Close(); - this.DBConnection.Dispose(); - this.DBConnection = null; - - SQLiteConnection.ClearAllPools(); - GC.Collect(); - } - catch (Exception exc) - { - this.LastError = exc.Message; - } - } - } - - public DataTable DoQuery(string query) - { - this.LastError = string.Empty; - - if (this.DBConnection == null) - { - return null; - } - - try - { - SQLiteCommand command = new SQLiteCommand(query, this.DBConnection); - SQLiteDataReader dr = command.ExecuteReader(); - - DataTable dt = new DataTable(); - dt.Load(dr); - - return dt; - } - catch (Exception exc) - { - this.LastError = exc.Message; - - return null; - } - } - - public DataTable DoQuery(string query, params string[] args) => DoQuery(prepareQuery(query, args)); - - public int DoQueryCount(string query) - { - this.LastError = string.Empty; - - if (this.DBConnection == null) - { - return -1; - } - - DataTable dt = this.DoQuery(query); - if (dt == null) - { - return -1; - } - - return dt.Rows.Count; - } - - public int DoQueryCount(string query, params string[] args) => this.DoQueryCount(prepareQuery(query, args)); - - public bool DoQueryExist(string query) => (this.DoQueryCount(query) > 0); - - public bool DoQueryExist(string query, params string[] args) => this.DoQueryExist(prepareQuery(query, args)); - - public string DoQuerySingle(string query) - { - this.LastError = string.Empty; - - if (this.DBConnection == null) - { - return string.Empty; - } - - DataTable dt = this.DoQuery(query); - - if (dt == null) - { - return string.Empty; - } - - if (dt.Columns.Count <= 0) - { - return string.Empty; - } - - if (dt.Rows.Count <= 0) - { - return string.Empty; - } - - if (dt.Rows[0][0] is byte[]) - { - return Encoding.UTF8.GetString(dt.Rows[0][0] as byte[]); - } - else - { - return dt.Rows[0][0].ToString(); - } - } - - public string DoQuerySingle(string query, params string[] args) => this.DoQuerySingle(prepareQuery(query, args)); - - public int DoNonQuery(string query) - { - this.LastError = string.Empty; - - if (this.DBConnection == null) - { - return -1; - } - - int rv = 0; - - try - { - SQLiteCommand command = new SQLiteCommand(query, this.DBConnection); - rv = command.ExecuteNonQuery(); - } - catch (Exception exc) - { - this.LastError = exc.Message; - rv = -1; - } - - return rv; - } - - public int DoNonQuery(string query, params string[] args) => this.DoNonQuery(prepareQuery(query, args)); - - public bool HasTable(string tableName) - { - this.LastError = string.Empty; - - if (this.DBConnection == null) - { - return false; - } - - int rv = this.DoQueryCount("SELECT 1 FROM sqlite_master WHERE type='table' AND name='" + escapeSQL(tableName) + "'"); - - return (rv > 0); - } - - public bool HasRequiredTables() - { - bool rv = true; - foreach (string tbl in requiredTableList) - { - if (string.IsNullOrEmpty(tbl)) - { - continue; - } - - if (!this.HasTable(tbl)) - { - rv = false; - break; - } - } - - return rv; - } - - public bool SetConfig(string name, bool value) => this.SetConfig(name, (value ? "1" : "0")); - - public bool SetConfig(string name, int value) => this.SetConfig(name, value.ToString()); - - public bool SetConfig(string name, string value) - { - prepareAppSettings(); - - string sql = string.Empty; - int rv = this.DoQueryCount("SELECT 1 FROM " + appSettingsTableName + " WHERE cfg_name='" + escapeSQL(name) + "'"); - if (rv <= 0) - { - sql = "INSERT INTO " + appSettingsTableName + " (cfg_name, cfg_value) VALUES ('[^1]', '[^2]');"; - } - else - { - sql = "UPDATE " + appSettingsTableName + " SET cfg_value='[^2]' WHERE cfg_name='[^1]';"; - } - - sql = prepareQuery(sql, new string[] { name, value }); - - return this.DoNonQuery(sql) > 0; - } - - public string GetConfig(string name, string defaultValue = null) - { - prepareAppSettings(); - - bool rv = this.DoQueryExist("SELECT 1 FROM " + appSettingsTableName + " WHERE cfg_name='" + escapeSQL(name) + "';"); - if (!rv) - { - return defaultValue; - } - - return this.DoQuerySingle("SELECT cfg_value FROM " + appSettingsTableName + " WHERE cfg_name='" + escapeSQL(name) + "';"); - } - - public int GetIntConfig(string name, int defaultValue = 0) - { - string rv = this.GetConfig(name); - if (string.IsNullOrWhiteSpace(rv)) - { - return defaultValue; - } - - int n; - if (!int.TryParse(rv, out n)) - { - n = defaultValue; - } - - return n; - } - - public bool GetBoolConfig(string name, bool defaultValue = false) - { - string rv = this.GetConfig(name); - if (string.IsNullOrWhiteSpace(rv)) - { - return defaultValue; - } - - if (rv.Equals("1")) - { - return true; - } - - if (rv.Equals("true", StringComparison.CurrentCultureIgnoreCase)) - { - return true; - } - - return false; - } - - protected bool create(string filename, bool overwriteFile, string password) - { - this.LastError = string.Empty; - - if (File.Exists(filename)) - { - if (overwriteFile) - { - try - { - File.Delete(filename); - } - catch (Exception exc) - { - this.LastError = exc.Message; - - return false; - } - - try - { - SQLiteConnection.CreateFile(filename); - } - catch (Exception exc) - { - this.LastError = exc.Message; - - return false; - } - - return this.LoadFile(filename, password); - } - else - { - return this.LoadFile(filename, password); - } - } - else - { - try - { - SQLiteConnection.CreateFile(filename); - } - catch (Exception exc) - { - this.LastError = exc.Message; - - return false; - } - - return this.LoadFile(filename, password); - } - } - - protected string prepareQuery(string query, params string[] arguments) - { - string rv = query; - - if (string.IsNullOrWhiteSpace(rv)) - { - return string.Empty; - } - - for (int i = 0; i < arguments.Length; i++) - { - rv = rv.Replace("[^" + (i + 1).ToString() + "]", escapeSQL(arguments[i])); - } - - return rv; - } - - protected string escapeSQL(string q) => q.Replace("'", "''").Trim(); - - protected string escapeValue(string text) => text.Replace("\"", "\\\"").Replace("\t", "\\t").Replace("\r", " \\r").Replace("\n", "\\n"); - - protected string encode64(string text) => Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); - - protected bool prepareAppSettings() - { - if (this.HasTable(appSettingsTableName)) - { - return true; - } - - int rv = this.DoNonQuery("CREATE TABLE " + appSettingsTableName + " (cfg_name TEXT, cfg_value TEXT)"); - - return rv > 0; - } - - protected virtual bool prepareDatabase() - { - return true; - } - } -} diff --git a/2019/03/example-randy-form.png b/2019/03/example-randy-form.png new file mode 100644 index 0000000..2e27405 Binary files /dev/null and b/2019/03/example-randy-form.png differ diff --git a/2019/05/PanelBook.cs b/2019/05/PanelBook.cs deleted file mode 100644 index 7f3ca2d..0000000 --- a/2019/05/PanelBook.cs +++ /dev/null @@ -1,258 +0,0 @@ -namespace RyzStudio.Windows.Forms -{ - using System; - using System.Collections; - using System.ComponentModel; - using System.Drawing; - using System.Windows.Forms; - - [ToolboxItem(true)] - public class PanelBook : Panel - { - public class PanelCollection : CollectionBase - { - protected PanelBook panelBook = null; - - public PanelCollection(PanelBook parentPanelBook) : base() - { - panelBook = parentPanelBook; - } - - public PanelBook Parent => panelBook; - - public Panel this[int index] { get => (Panel)List[index]; set => List[index] = value; } - - public int Add(Panel value) => List.Add(value); - - public void AddRange(Panel[] pages) => Array.ForEach(pages, x => this.Add(x)); - - public bool Contains(Panel value) => List.Contains(value); - - public int IndexOf(Panel value) => List.IndexOf(value); - - public void Insert(int index, Panel value) => List.Insert(index, value); - - public void Remove(Panel value) => List.Remove(value); - - protected override void OnInsertComplete(int index, object value) - { - base.OnInsertComplete(index, value); - - if (panelBook != null) - { - panelBook.PageIndex = index; - } - } - - protected override void OnRemoveComplete(int index, object value) - { - base.OnRemoveComplete(index, value); - - if (panelBook != null) - { - if (panelBook.PageIndex == index) - { - if (index < InnerList.Count) - { - panelBook.PageIndex = index; - } - else - { - panelBook.PageIndex = InnerList.Count - 1; - } - } - } - } - - } - - private System.ComponentModel.IContainer components = null; - - protected PanelCollection panelCollection = null; - - public PanelBook() - { - InitializeComponent(); - - panelCollection = new PanelCollection(this); - } - - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - - base.Dispose(disposing); - } - - protected void InitializeComponent() - { - components = new System.ComponentModel.Container(); - } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public Panel ActivePanel { get; protected set; } = null; - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override bool AutoScroll { get => base.AutoScroll; set => base.AutoScroll = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new Size AutoScrollMargin { get => base.AutoScrollMargin; set => base.AutoScrollMargin = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new Size AutoScrollMinSize { get => base.AutoScrollMinSize; set => base.AutoScrollMinSize = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; } - - [Category("Collection")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PanelCollection Pages => panelCollection; - - [Category("Collection")] - public int SelectedIndex - { - get => (panelCollection.Count <= 0) ? -1 : panelCollection.IndexOf(this.ActivePanel); - set - { - if (panelCollection.Count <= 0) return; - if (value < 0) return; - if (value > (panelCollection.Count - 1)) return; - if (value == this.SelectedIndex) return; - - ActivatePage(value); - } - } - - protected internal int PageIndex - { - get => panelCollection.IndexOf(this.ActivePanel); - set - { - if (panelCollection.Count <= 0) - { - ActivatePage(-1); - return; - } - - if ((value < -1) || (value >= panelCollection.Count)) - { - throw new ArgumentOutOfRangeException("PageIndex", value, "The page index must be between 0 and " + Convert.ToString(panelCollection.Count - 1)); - } - - ActivatePage(value); - } - } - - protected internal void ActivatePage(int index) - { - if ((panelCollection.Count == 0) && (index >= panelCollection.Count) && (index <= 0)) - { - return; - } - - Panel p = (Panel)panelCollection[index]; - - ActivatePage(p); - } - - protected internal void ActivatePage(Panel page) - { - if (this.ActivePanel != null) - { - if (this.ActivePanel.InvokeRequired) - { - this.ActivePanel.Invoke(new MethodInvoker(() => { - this.ActivePanel.Visible = false; - })); - } - else - { - this.ActivePanel.Visible = false; - } - } - - this.ActivePanel = page; - if (this.ActivePanel != null) - { - this.ActivePanel.Parent = this; - if (!this.Contains(this.ActivePanel)) - { - this.Container.Add(this.ActivePanel); - } - - if (this.ActivePanel.InvokeRequired) - { - this.ActivePanel.Invoke(new MethodInvoker(() => { - this.ActivePanel.Dock = DockStyle.Fill; - this.ActivePanel.Visible = true; - this.ActivePanel.BringToFront(); - })); - } - else - { - this.ActivePanel.Dock = DockStyle.Fill; - this.ActivePanel.Visible = true; - this.ActivePanel.BringToFront(); - } - } - - if (this.ActivePanel != null) - { - if (this.ActivePanel.InvokeRequired) - { - this.ActivePanel.Invoke(new MethodInvoker(() => { - this.ActivePanel.Invalidate(); - })); - } - else - { - this.ActivePanel.Invalidate(); - } - } - else - { - this.Invalidate(); - } - } - -#if DEBUG - - protected override void OnResize(EventArgs e) - { - base.OnResize(e); - - if (this.DesignMode) - { - this.Invalidate(); - } - } - -#endif - - protected override void DestroyHandle() - { - base.DestroyHandle(); - - foreach (Panel p in panelCollection) - { - p.Dispose(); - } - } - - } -} \ No newline at end of file diff --git a/2019/05/bomg-screenshot-1-200.png b/2019/05/bomg-screenshot-1-200.png new file mode 100644 index 0000000..2beaa2b Binary files /dev/null and b/2019/05/bomg-screenshot-1-200.png differ diff --git a/2019/05/bomg-screenshot-1.png b/2019/05/bomg-screenshot-1.png new file mode 100644 index 0000000..6b0fd87 Binary files /dev/null and b/2019/05/bomg-screenshot-1.png differ diff --git a/2019/05/bomg-screenshot-2-200.png b/2019/05/bomg-screenshot-2-200.png new file mode 100644 index 0000000..d055cad Binary files /dev/null and b/2019/05/bomg-screenshot-2-200.png differ diff --git a/2019/05/bomg-screenshot-2.png b/2019/05/bomg-screenshot-2.png new file mode 100644 index 0000000..0203045 Binary files /dev/null and b/2019/05/bomg-screenshot-2.png differ diff --git a/2019/05/bomg-screenshot-3-200.png b/2019/05/bomg-screenshot-3-200.png new file mode 100644 index 0000000..cb822ed Binary files /dev/null and b/2019/05/bomg-screenshot-3-200.png differ diff --git a/2019/05/bomg-screenshot-3.png b/2019/05/bomg-screenshot-3.png new file mode 100644 index 0000000..b2f7571 Binary files /dev/null and b/2019/05/bomg-screenshot-3.png differ diff --git a/2019/05/panelbook-page-1-2.png b/2019/05/panelbook-page-1-2.png new file mode 100644 index 0000000..9d018d6 Binary files /dev/null and b/2019/05/panelbook-page-1-2.png differ diff --git a/2019/05/panelbook-page1.png b/2019/05/panelbook-page1.png new file mode 100644 index 0000000..fd742c5 Binary files /dev/null and b/2019/05/panelbook-page1.png differ diff --git a/2019/05/panelbook-page2.png b/2019/05/panelbook-page2.png new file mode 100644 index 0000000..7ad2fb2 Binary files /dev/null and b/2019/05/panelbook-page2.png differ diff --git a/2019/07/bsdialog-v0.1.0.024.js b/2019/07/bsdialog-v0.1.0.024.js deleted file mode 100644 index c00ed40..0000000 --- a/2019/07/bsdialog-v0.1.0.024.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.024 (2019/07/05 2210) - */ -var BSDialog = { - Create: function(id, title, url, is_big, update_body) { - var a = this; - var isBig = ((typeof(is_big) == "undefined") ? false : (is_big == true) ? true : false); - var updateBody = ((typeof(update_body) == "undefined") ? false : (update_body == true) ? true : false); - - if (!a.hasDialog(id)) { - var html = a.generateModalHtml(id, title, null, isBig); - - $("body").append(html); - } - - $.ajax({ - url: url, - cache: false, - timeout: 10000, - success: function(result, status, xhr){ - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) - { - if (updateBody) - { - a.updateContentBody(id, result); - } else { - $("#dlg" + id).find(".modal-content").html(result); - } - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function(xhr){ - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function(xhr, status){ - // do nothing yet - } - }); - - a.show(id); - }, - Close: function(id) { - if (!this.hasDialog(id)) return; - - $("#dlg" + id).modal('hide'); - }, - Clear: function() { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function(id, title, message, is_big) { - if (this.hasDialog(id)) return; - - var html = this.generateModalHtml(id, title, message, is_big); - $("body").append(html); - - this.show(id); - }, - hasDialog: function(id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function(id, title, message, is_big) { - var size = ((typeof(is_big) == "undefined") ? "sm" : (is_big == true ? "lg" : "sm")); - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " "; - html += " " + title + ""; - html += "
"; - - if ($.trim(message).length <= 0) - { - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - show: function(id) { - $("#dlg" + id).modal('show'); - $("#dlg" + id).off('hide.bs.modal'); - $("#dlg" + id).on('hide.bs.modal', function() { - if ($("body > div[id='dlg" + id + "']").next().is("div[class~='modal-backdrop']")) { - $("body > div[id='dlg" + id + "']").next().remove(); - } - - $("body > div[id='dlg" + id + "']").remove(); - - }); - }, - updateContentBody: function(id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - } -}; \ No newline at end of file diff --git a/2019/07/bsdialog-v0.1.0.025.js b/2019/07/bsdialog-v0.1.0.025.js deleted file mode 100644 index bbb49d1..0000000 --- a/2019/07/bsdialog-v0.1.0.025.js +++ /dev/null @@ -1,114 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.025 (2019/07/26 1022) - */ -var BSDialog = { - Create: function(id, title, url, is_big, update_body) { - var a = this; - var isBig = ((typeof(is_big) == "undefined") ? false : (is_big == true) ? true : false); - var updateBody = ((typeof(update_body) == "undefined") ? false : (update_body == true) ? true : false); - - if (!a.hasDialog(id)) { - var html = a.generateModalHtml(id, title, null, isBig); - - $("body").append(html); - } - - if (url != null) - { - $.ajax({ - url: url, - cache: false, - timeout: 60000, - success: function(result, status, xhr){ - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) - { - if (updateBody) - { - a.updateContentBody(id, result); - } else { - $("#dlg" + id).find(".modal-content").html(result); - } - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function(xhr){ - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function(xhr, status){ - // do nothing yet - } - }); - } - a.show(id); - }, - Close: function(id) { - if (!this.hasDialog(id)) return; - - $("#dlg" + id).modal('hide'); - }, - Clear: function() { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function(id, title, message, is_big) { - if (this.hasDialog(id)) return; - - var html = this.generateModalHtml(id, title, message, is_big); - $("body").append(html); - - this.show(id); - }, - hasDialog: function(id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function(id, title, message, is_big) { - var size = ((typeof(is_big) == "undefined") ? "sm" : (is_big == true ? "lg" : "sm")); - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " "; - html += " " + title + ""; - html += "
"; - - if ($.trim(message).length <= 0) - { - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - show: function(id) { - $("#dlg" + id).modal('show'); - $("#dlg" + id).off('hide.bs.modal'); - $("#dlg" + id).on('hide.bs.modal', function() { - if ($("body > div[id='dlg" + id + "']").next().is("div[class~='modal-backdrop']")) { - $("body > div[id='dlg" + id + "']").next().remove(); - } - - $("body > div[id='dlg" + id + "']").remove(); - - }); - }, - updateContentBody: function(id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - } -}; \ No newline at end of file diff --git a/2019/08/bsdialog-v0.1.0.026.js b/2019/08/bsdialog-v0.1.0.026.js deleted file mode 100644 index 3acdc4b..0000000 --- a/2019/08/bsdialog-v0.1.0.026.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.026 (2019/08/22 0052) - */ -var BSDialog = { - Create: function (id, title, url, is_big, update_body) { - var a = this; - - a.id = id; - a.title = title; - a.url = url; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - - var updateBody = ((typeof (update_body) == "undefined") ? true : (update_body == true) ? true : false); - - if (!a.Exists(id)) { - a.renderContent(null); - } - - if (url != null) { - $.ajax({ - url: url, - cache: false, - timeout: 60000, - success: function (result, status, xhr) { - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) { - if (updateBody) { - a.updateContentBody(id, result); - } else { - $("#dlg" + id).find(".modal-content").html(result); - } - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function (xhr) { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function (xhr, status) { - // do nothing yet - } - }); - } - - a.initialiseComponents(); - }, - Close: function (id) { - $("#dlg" + id).modal('hide'); - }, - Clear: function () { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function (id, title, message, is_big) { - var a = this; - - if (a.Exists(id)) { - return; - } - - a.id = id; - a.title = title; - a.url = null; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - - a.renderContent(message); - a.initialiseComponents(); - }, - Exists: function (id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function (message) { - var a = this; - var size = ((typeof (a.isBig) == "undefined") ? "md" : (a.isBig == true ? "lg" : "md")); - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " "; - html += "  "; - html += " "; - html += " " + a.title + ""; - html += "
"; - - if ($.trim(message).length <= 0) { - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - renderContent: function (content) { - $("body").append(this.generateModalHtml(content)); - }, - initialiseComponents: function () { - var a = this; - var dialog = a.getElement(); - - var btnToggleSize = $(dialog).find("button[data-modal-action='restore']"); - if ($(btnToggleSize).length > 0) { - $(btnToggleSize).off('click'); - $(btnToggleSize).on('click', function () { - a.toggleSize(); - }); - } - - $(dialog).modal('show'); - $(dialog).off('hide.bs.modal'); - $(dialog).on('hide.bs.modal', function () { - if ($(dialog).next().is("div[class~='modal-backdrop']")) { - $(dialog).next().remove(); - } - - $(dialog).remove(); - }); - }, - updateContentBody: function (id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - }, - getElement: function () { - return $("#dlg" + this.id); - }, - toggleSize: function () { - var div = $(this.getElement()).find("div[class^='modal-dialog']"); - if ($(div).length <= 0) { - return; - } - - if ($(div).hasClass("modal-md")) { - $(div).removeClass("modal-md"); - $(div).addClass("modal-lg"); - } else if ($(div).hasClass("modal-lg")) { - $(div).removeClass("modal-lg"); - $(div).addClass("modal-md"); - } - } -}; \ No newline at end of file diff --git a/2019/09/bsdialog-v0.1.0.027.js b/2019/09/bsdialog-v0.1.0.027.js deleted file mode 100644 index 19324c6..0000000 --- a/2019/09/bsdialog-v0.1.0.027.js +++ /dev/null @@ -1,174 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.027 (2019/09/19 0002) - */ -var BSDialog = { - Create: function (id, title, url, is_big, update_body) { - var a = this; - - a.id = id; - a.title = title; - a.url = url; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - - var updateBody = ((typeof (update_body) == "undefined") ? true : (update_body == true) ? true : false); - - if (!a.Exists(id)) { - a.renderContent(null); - } - - if (url != null) { - $.ajax({ - url: url, - cache: false, - timeout: 60000, - success: function (result, status, xhr) { - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) { - if (updateBody) { - a.updateContentBody(id, result); - } else { - $("#dlg" + id).find(".modal-content").html(result); - } - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function (xhr) { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function (xhr, status) { - // do nothing yet - } - }); - } - - a.initialiseComponents(); - }, - Close: function (id) { - $("#dlg" + id).modal('hide'); - }, - Clear: function () { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function (id, title, message, is_big) { - var a = this; - - if (a.Exists(id)) { - return; - } - - a.id = id; - a.title = title; - a.url = null; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - - a.renderContent(message); - a.initialiseComponents(); - }, - Exists: function (id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function (message) { - var a = this; - var size = ((typeof (a.isBig) == "undefined") ? "md" : (a.isBig == true ? "lg" : "md")); - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " "; - html += "  "; - html += " "; - html += " " + a.title + ""; - html += "
"; - - if ($.trim(message).length <= 0) { - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - renderContent: function (content) { - $("body").append(this.generateModalHtml(content)); - }, - initialiseComponents: function () { - var a = this; - var dialog = a.getElement(); - - var btnToggleSize = $(dialog).find("button[data-modal-action='restore']"); - if ($(btnToggleSize).length > 0) { - $(btnToggleSize).off('click'); - $(btnToggleSize).on('click', function () { - a.toggleSize(); - }); - } - - $(dialog).modal('show'); - - $(dialog).off('hide.bs.modal'); - $(dialog).on('hide.bs.modal', function () { - if ($(dialog).next().is("div[class~='modal-backdrop']")) { - $(dialog).next().remove(); - } - - $(dialog).remove(); - }); - - $(dialog).find(".modal-header").off("mousedown"); - $(dialog).find(".modal-header").on("mousedown", function(e) { - var posX = e.pageX - $(this).offset().left; - var posY = e.pageY - $(this).offset().top; - - $("body").off("mousemove.draggable"); - $("body").on("mousemove.draggable", function(e2) { - $(dialog).children(".modal-dialog").offset({ "left": (e2.pageX - posX), "top": (e2.pageY - posY) }); - }); - - $("body").off("mouseup"); - $("body").on("mouseup", function() { - $("body").off("mousemove.draggable"); - }); - - $(dialog).off("bs.modal.hide"); - $(dialog).on("bs.modal.hide", function() { - $("body").off("mousemove.draggable"); - }); - }); - }, - updateContentBody: function (id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - }, - getElement: function () { - return $("#dlg" + this.id); - }, - toggleSize: function () { - var div = $(this.getElement()).find("div[class^='modal-dialog']"); - if ($(div).length <= 0) { - return; - } - - if ($(div).hasClass("modal-md")) { - $(div).removeClass("modal-md"); - $(div).addClass("modal-lg"); - } else if ($(div).hasClass("modal-lg")) { - $(div).removeClass("modal-lg"); - $(div).addClass("modal-md"); - } - } -}; \ No newline at end of file diff --git a/2019/09/bsdialog-v0.1.0.027.min.js b/2019/09/bsdialog-v0.1.0.027.min.js deleted file mode 100644 index f3df81b..0000000 --- a/2019/09/bsdialog-v0.1.0.027.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.027 (2019/09/19 0002) - */ -var BSDialog={Create:function(o,t,d,e,a){var s=this;s.id=o,s.title=t,s.url=d,s.isBig=void 0!==e&&1==e;var l=void 0===a||1==a;s.Exists(o)||s.renderContent(null),null!=d&&$.ajax({url:d,cache:!1,timeout:6e4,success:function(t,d,e){200==e.status||302==e.status||301==e.status?l?s.updateContentBody(o,t):$("#dlg"+o).find(".modal-content").html(t):s.updateContentBody(o,e.statusText+" ("+e.status+")")},error:function(t){s.updateContentBody(o,t.statusText+" ("+t.status+")")},complete:function(o,t){}}),s.initialiseComponents()},Close:function(o){$("#dlg"+o).modal("hide")},Clear:function(){$("body > div[class~='modal'][role='dialog']").remove(),$("body > div[class~='modal-backdrop']").remove(),$("body").removeClass("modal-open")},ShowToast:function(o,t,d,e){var a=this;a.Exists(o)||(a.id=o,a.title=t,a.url=null,a.isBig=void 0!==e&&1==e,a.renderContent(d),a.initialiseComponents())},Exists:function(o){return $("body > div[id='dlg"+o+"']").length>0},generateModalHtml:function(o){var t=this,d=void 0===t.isBig?"md":1==t.isBig?"lg":"md",e="";return e+='"},renderContent:function(o){$("body").append(this.generateModalHtml(o))},initialiseComponents:function(){var o=this,t=o.getElement(),d=$(t).find("button[data-modal-action='restore']");$(d).length>0&&($(d).off("click"),$(d).on("click",function(){o.toggleSize()})),$(t).modal("show"),$(t).off("hide.bs.modal"),$(t).on("hide.bs.modal",function(){$(t).next().is("div[class~='modal-backdrop']")&&$(t).next().remove(),$(t).remove()}),$(t).find(".modal-header").off("mousedown"),$(t).find(".modal-header").on("mousedown",function(o){var d=o.pageX-$(this).offset().left,e=o.pageY-$(this).offset().top;$("body").off("mousemove.draggable"),$("body").on("mousemove.draggable",function(o){$(t).children(".modal-dialog").offset({left:o.pageX-d,top:o.pageY-e})}),$("body").off("mouseup"),$("body").on("mouseup",function(){$("body").off("mousemove.draggable")}),$(t).off("bs.modal.hide"),$(t).on("bs.modal.hide",function(){$("body").off("mousemove.draggable")})})},updateContentBody:function(o,t){var d=$("#dlg"+o).find(".modal-body");$(d).hasClass("custom-loading")&&$(d).removeClass("custom-loading"),$(d).html(t)},getElement:function(){return $("#dlg"+this.id)},toggleSize:function(){var o=$(this.getElement()).find("div[class^='modal-dialog']");$(o).length<=0||($(o).hasClass("modal-md")?($(o).removeClass("modal-md"),$(o).addClass("modal-lg")):$(o).hasClass("modal-lg")&&($(o).removeClass("modal-lg"),$(o).addClass("modal-md")))}}; \ No newline at end of file diff --git a/2019/09/bsdialog-v0.1.0.029.js b/2019/09/bsdialog-v0.1.0.029.js deleted file mode 100644 index fb44cc8..0000000 --- a/2019/09/bsdialog-v0.1.0.029.js +++ /dev/null @@ -1,183 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.029 (2019/09/24 1112) - */ -var BSDialog = { - Create: function (id, title, url, is_big, update_body, show_size) { - var a = this; - - a.id = id; - a.title = title; - a.url = url; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - a.showSize = ((typeof (show_size) == "undefined") ? true : (show_size == true) ? true : false); - - var updateBody = ((typeof (update_body) == "undefined") ? true : (update_body == true) ? true : false); - - if (!a.Exists(id)) { - a.renderContent(null); - } - - if (url != null) { - $.ajax({ - url: url, - cache: false, - timeout: 60000, - success: function (result, status, xhr) { - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) { - if (updateBody) { - a.updateContentBody(id, result); - } else { - $("#dlg" + id).find(".modal-content").html(result); - } - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function (xhr) { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function (xhr, status) { - // do nothing yet - } - }); - } - - a.initialiseComponents(); - }, - Close: function (id) { - $("#dlg" + id).modal('hide'); - }, - Clear: function () { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function (id, title, message, is_big) { - var a = this; - - if (a.Exists(id)) { - return; - } - - a.id = id; - a.title = title; - a.url = null; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - - a.renderContent(message); - a.initialiseComponents(); - }, - Exists: function (id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function (message) { - var a = this; - var size = (a.isBig == true ? "lg" : "md"); - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " "; - - if (a.showSize) - { - html += "  "; - html += " "; - } - - html += " " + a.title + ""; - html += "
"; - - if ($.trim(message).length <= 0) { - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - renderContent: function (content) { - $("body").append(this.generateModalHtml(content)); - }, - initialiseComponents: function () { - var a = this; - var dialog = a.getElement(); - - if (a.showSize) - { - var btnToggleSize = $(dialog).find("button[data-modal-action='restore']"); - if ($(btnToggleSize).length > 0) { - $(btnToggleSize).off('click'); - $(btnToggleSize).on('click', function () { - a.toggleSize(); - }); - } - } - - $(dialog).modal('show'); - - $(dialog).off('hide.bs.modal'); - $(dialog).on('hide.bs.modal', function () { - if ($(dialog).next().is("div[class~='modal-backdrop']")) { - $(dialog).next().remove(); - } - - $(dialog).remove(); - }); - - $(dialog).find(".modal-header").off("mousedown"); - $(dialog).find(".modal-header").on("mousedown", function(e) { - var posX = e.pageX - $(this).offset().left; - var posY = e.pageY - $(this).offset().top; - - $("body").off("mousemove.draggable"); - $("body").on("mousemove.draggable", function(e2) { - $(dialog).children(".modal-dialog").offset({ "left": (e2.pageX - posX), "top": (e2.pageY - posY) }); - }); - - $("body").off("mouseup"); - $("body").on("mouseup", function() { - $("body").off("mousemove.draggable"); - }); - - $(dialog).off("bs.modal.hide"); - $(dialog).on("bs.modal.hide", function() { - $("body").off("mousemove.draggable"); - }); - }); - }, - updateContentBody: function (id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - }, - getElement: function () { - return $("#dlg" + this.id); - }, - toggleSize: function () { - var div = $(this.getElement()).find("div[class^='modal-dialog']"); - if ($(div).length <= 0) { - return; - } - - if ($(div).hasClass("modal-md")) { - $(div).removeClass("modal-md"); - $(div).addClass("modal-lg"); - } else if ($(div).hasClass("modal-lg")) { - $(div).removeClass("modal-lg"); - $(div).addClass("modal-md"); - } - } -}; \ No newline at end of file diff --git a/2019/09/bsdialog-v0.1.0.029.min.js b/2019/09/bsdialog-v0.1.0.029.min.js deleted file mode 100644 index 2e56073..0000000 --- a/2019/09/bsdialog-v0.1.0.029.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.029 (2019/09/24 1112) - */ -var BSDialog={Create:function(d,o,t,e,a,s){var l=this;l.id=d,l.title=o,l.url=t,l.isBig=void 0!==e&&1==e,l.showSize=void 0===s||1==s;var n=void 0===a||1==a;l.Exists(d)||l.renderContent(null),null!=t&&$.ajax({url:t,cache:!1,timeout:6e4,success:function(o,t,e){200==e.status||302==e.status||301==e.status?n?l.updateContentBody(d,o):$("#dlg"+d).find(".modal-content").html(o):l.updateContentBody(d,e.statusText+" ("+e.status+")")},error:function(o){l.updateContentBody(d,o.statusText+" ("+o.status+")")},complete:function(o,t){}}),l.initialiseComponents()},Close:function(o){$("#dlg"+o).modal("hide")},Clear:function(){$("body > div[class~='modal'][role='dialog']").remove(),$("body > div[class~='modal-backdrop']").remove(),$("body").removeClass("modal-open")},ShowToast:function(o,t,e,d){var a=this;a.Exists(o)||(a.id=o,a.title=t,a.url=null,a.isBig=void 0!==d&&1==d,a.renderContent(e),a.initialiseComponents())},Exists:function(o){return 0<$("body > div[id='dlg"+o+"']").length},generateModalHtml:function(o){var t=this,e=1==t.isBig?"lg":"md",d="";return d+='"},renderContent:function(o){$("body").append(this.generateModalHtml(o))},initialiseComponents:function(){var o=this,d=o.getElement();if(o.showSize){var t=$(d).find("button[data-modal-action='restore']");0<$(t).length&&($(t).off("click"),$(t).on("click",function(){o.toggleSize()}))}$(d).modal("show"),$(d).off("hide.bs.modal"),$(d).on("hide.bs.modal",function(){$(d).next().is("div[class~='modal-backdrop']")&&$(d).next().remove(),$(d).remove()}),$(d).find(".modal-header").off("mousedown"),$(d).find(".modal-header").on("mousedown",function(o){var t=o.pageX-$(this).offset().left,e=o.pageY-$(this).offset().top;$("body").off("mousemove.draggable"),$("body").on("mousemove.draggable",function(o){$(d).children(".modal-dialog").offset({left:o.pageX-t,top:o.pageY-e})}),$("body").off("mouseup"),$("body").on("mouseup",function(){$("body").off("mousemove.draggable")}),$(d).off("bs.modal.hide"),$(d).on("bs.modal.hide",function(){$("body").off("mousemove.draggable")})})},updateContentBody:function(o,t){var e=$("#dlg"+o).find(".modal-body");$(e).hasClass("custom-loading")&&$(e).removeClass("custom-loading"),$(e).html(t)},getElement:function(){return $("#dlg"+this.id)},toggleSize:function(){var o=$(this.getElement()).find("div[class^='modal-dialog']");$(o).length<=0||($(o).hasClass("modal-md")?($(o).removeClass("modal-md"),$(o).addClass("modal-lg")):$(o).hasClass("modal-lg")&&($(o).removeClass("modal-lg"),$(o).addClass("modal-md")))}}; \ No newline at end of file diff --git a/2019/10/280-150x140.jpg b/2019/10/280-150x140.jpg new file mode 100644 index 0000000..7f9431f Binary files /dev/null and b/2019/10/280-150x140.jpg differ diff --git a/2019/10/280.jpg b/2019/10/280.jpg new file mode 100644 index 0000000..851bee9 Binary files /dev/null and b/2019/10/280.jpg differ diff --git a/2019/10/297-150x140.jpg b/2019/10/297-150x140.jpg new file mode 100644 index 0000000..04bee31 Binary files /dev/null and b/2019/10/297-150x140.jpg differ diff --git a/2019/10/297.jpg b/2019/10/297.jpg new file mode 100644 index 0000000..b4153e5 Binary files /dev/null and b/2019/10/297.jpg differ diff --git a/2019/10/dashboard-watchface-layout.png b/2019/10/dashboard-watchface-layout.png new file mode 100644 index 0000000..11899e8 Binary files /dev/null and b/2019/10/dashboard-watchface-layout.png differ diff --git a/2019/10/dashboard-watchface.pdn b/2019/10/dashboard-watchface.pdn new file mode 100644 index 0000000..3fdf3f9 Binary files /dev/null and b/2019/10/dashboard-watchface.pdn differ diff --git a/2019/10/lesssuckypicker-example.7z b/2019/10/lesssuckypicker-example.7z new file mode 100644 index 0000000..de98709 Binary files /dev/null and b/2019/10/lesssuckypicker-example.7z differ diff --git a/2019/10/xamarin-forms-picker-1.png b/2019/10/xamarin-forms-picker-1.png new file mode 100644 index 0000000..3f2f3dc Binary files /dev/null and b/2019/10/xamarin-forms-picker-1.png differ diff --git a/2019/10/xamarin-forms-picker-2.png b/2019/10/xamarin-forms-picker-2.png new file mode 100644 index 0000000..0b2091e Binary files /dev/null and b/2019/10/xamarin-forms-picker-2.png differ diff --git a/2019/10/xamarin-forms-picker-3.png b/2019/10/xamarin-forms-picker-3.png new file mode 100644 index 0000000..cd7e4aa Binary files /dev/null and b/2019/10/xamarin-forms-picker-3.png differ diff --git a/2019/10/xamarin-forms-picker-4.pdn b/2019/10/xamarin-forms-picker-4.pdn new file mode 100644 index 0000000..10762c0 Binary files /dev/null and b/2019/10/xamarin-forms-picker-4.pdn differ diff --git a/2019/10/xamarin-forms-picker-4.png b/2019/10/xamarin-forms-picker-4.png new file mode 100644 index 0000000..4e584d4 Binary files /dev/null and b/2019/10/xamarin-forms-picker-4.png differ diff --git a/2019/11/bsdialog-v0.1.0.029a.js b/2019/11/bsdialog-v0.1.0.029a.js deleted file mode 100644 index 04e1b5f..0000000 --- a/2019/11/bsdialog-v0.1.0.029a.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.029a (2019/11/09 2239) - */ -var BSDialog = { - Create: function (id, title, url, is_big, update_body, show_size) { - var a = this; - - a.id = id; - a.title = title; - a.url = url; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - a.showSize = ((typeof (show_size) == "undefined") ? true : (show_size == true) ? true : false); - - var updateBody = ((typeof (update_body) == "undefined") ? true : (update_body == true) ? true : false); - - if (!a.Exists(id)) { - a.renderContent(null); - } - - if (url != null) { - $.ajax({ - url: url, - cache: false, - xhrFields: { - withCredentials:true - }, - timeout: 60000, - success: function (result, status, xhr) { - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) { - if (updateBody) { - a.updateContentBody(id, result); - } else { - $("#dlg" + id).find(".modal-content").html(result); - } - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function (xhr) { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function (xhr, status) { - // do nothing yet - } - }); - } - - a.initialiseComponents(); - }, - Close: function (id) { - $("#dlg" + id).modal('hide'); - }, - Clear: function () { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function (id, title, message, is_big) { - var a = this; - - if (a.Exists(id)) { - return; - } - - a.id = id; - a.title = title; - a.url = null; - a.isBig = ((typeof (is_big) == "undefined") ? false : (is_big == true) ? true : false); - - a.renderContent(message); - a.initialiseComponents(); - }, - Exists: function (id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function (message) { - var a = this; - var size = (a.isBig == true ? "lg" : "md"); - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " "; - - if (a.showSize) - { - html += "  "; - html += " "; - } - - html += " " + a.title + ""; - html += "
"; - - if ($.trim(message).length <= 0) { - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - renderContent: function (content) { - $("body").append(this.generateModalHtml(content)); - }, - initialiseComponents: function () { - var a = this; - var dialog = a.getElement(); - - if (a.showSize) - { - var btnToggleSize = $(dialog).find("button[data-modal-action='restore']"); - if ($(btnToggleSize).length > 0) { - $(btnToggleSize).off('click'); - $(btnToggleSize).on('click', function () { - a.toggleSize(); - }); - } - } - - $(dialog).modal('show'); - - $(dialog).off('hide.bs.modal'); - $(dialog).on('hide.bs.modal', function () { - if ($(dialog).next().is("div[class~='modal-backdrop']")) { - $(dialog).next().remove(); - } - - $(dialog).remove(); - }); - - $(dialog).find(".modal-header").off("mousedown"); - $(dialog).find(".modal-header").on("mousedown", function(e) { - var posX = e.pageX - $(this).offset().left; - var posY = e.pageY - $(this).offset().top; - - $("body").off("mousemove.draggable"); - $("body").on("mousemove.draggable", function(e2) { - $(dialog).children(".modal-dialog").offset({ "left": (e2.pageX - posX), "top": (e2.pageY - posY) }); - }); - - $("body").off("mouseup"); - $("body").on("mouseup", function() { - $("body").off("mousemove.draggable"); - }); - - $(dialog).off("bs.modal.hide"); - $(dialog).on("bs.modal.hide", function() { - $("body").off("mousemove.draggable"); - }); - }); - }, - updateContentBody: function (id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - }, - getElement: function () { - return $("#dlg" + this.id); - }, - toggleSize: function () { - var div = $(this.getElement()).find("div[class^='modal-dialog']"); - if ($(div).length <= 0) { - return; - } - - if ($(div).hasClass("modal-md")) { - $(div).removeClass("modal-md"); - $(div).addClass("modal-lg"); - } else if ($(div).hasClass("modal-lg")) { - $(div).removeClass("modal-lg"); - $(div).addClass("modal-md"); - } - } -}; \ No newline at end of file diff --git a/2019/11/bsdialog-v0.1.0.029a.min.js b/2019/11/bsdialog-v0.1.0.029a.min.js deleted file mode 100644 index 353a5ee..0000000 --- a/2019/11/bsdialog-v0.1.0.029a.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * BSDialog - * @version v0.1.0.029a (2019/11/09 2239) - */ -var BSDialog={Create:function(o,t,e,d,a,s){var l=this;l.id=o,l.title=t,l.url=e,l.isBig=void 0!==d&&1==d,l.showSize=void 0===s||1==s;var n=void 0===a||1==a;l.Exists(o)||l.renderContent(null),null!=e&&$.ajax({url:e,cache:!1,xhrFields:{withCredentials:!0},timeout:6e4,success:function(t,e,d){200==d.status||302==d.status||301==d.status?n?l.updateContentBody(o,t):$("#dlg"+o).find(".modal-content").html(t):l.updateContentBody(o,d.statusText+" ("+d.status+")")},error:function(t){l.updateContentBody(o,t.statusText+" ("+t.status+")")},complete:function(o,t){}}),l.initialiseComponents()},Close:function(o){$("#dlg"+o).modal("hide")},Clear:function(){$("body > div[class~='modal'][role='dialog']").remove(),$("body > div[class~='modal-backdrop']").remove(),$("body").removeClass("modal-open")},ShowToast:function(o,t,e,d){var a=this;a.Exists(o)||(a.id=o,a.title=t,a.url=null,a.isBig=void 0!==d&&1==d,a.renderContent(e),a.initialiseComponents())},Exists:function(o){return $("body > div[id='dlg"+o+"']").length>0},generateModalHtml:function(o){var t=this,e=1==t.isBig?"lg":"md",d="";return d+='"},renderContent:function(o){$("body").append(this.generateModalHtml(o))},initialiseComponents:function(){var o=this,t=o.getElement();if(o.showSize){var e=$(t).find("button[data-modal-action='restore']");$(e).length>0&&($(e).off("click"),$(e).on("click",function(){o.toggleSize()}))}$(t).modal("show"),$(t).off("hide.bs.modal"),$(t).on("hide.bs.modal",function(){$(t).next().is("div[class~='modal-backdrop']")&&$(t).next().remove(),$(t).remove()}),$(t).find(".modal-header").off("mousedown"),$(t).find(".modal-header").on("mousedown",function(o){var e=o.pageX-$(this).offset().left,d=o.pageY-$(this).offset().top;$("body").off("mousemove.draggable"),$("body").on("mousemove.draggable",function(o){$(t).children(".modal-dialog").offset({left:o.pageX-e,top:o.pageY-d})}),$("body").off("mouseup"),$("body").on("mouseup",function(){$("body").off("mousemove.draggable")}),$(t).off("bs.modal.hide"),$(t).on("bs.modal.hide",function(){$("body").off("mousemove.draggable")})})},updateContentBody:function(o,t){var e=$("#dlg"+o).find(".modal-body");$(e).hasClass("custom-loading")&&$(e).removeClass("custom-loading"),$(e).html(t)},getElement:function(){return $("#dlg"+this.id)},toggleSize:function(){var o=$(this.getElement()).find("div[class^='modal-dialog']");$(o).length<=0||($(o).hasClass("modal-md")?($(o).removeClass("modal-md"),$(o).addClass("modal-lg")):$(o).hasClass("modal-lg")&&($(o).removeClass("modal-lg"),$(o).addClass("modal-md")))}}; \ No newline at end of file diff --git a/2020/01/bsdialog4-v0.1.0.001.js b/2020/01/bsdialog4-v0.1.0.001.js deleted file mode 100644 index 3cab3e9..0000000 --- a/2020/01/bsdialog4-v0.1.0.001.js +++ /dev/null @@ -1,182 +0,0 @@ -/** - * BSDialog4 - * @version v0.1.0.001 (2019/12/27 0531) - */ -var BSDialog = { - Create: function (id, title, url, size) { - var a = this; - - a.id = id; - a.title = title; - a.url = url; - a.size = ((typeof (size) == "undefined") ? "md" : size); - - if (!a.Exists(id)) { - a.renderContent(null); - } - - if (url != null) { - $.ajax({ - url: url, - cache: false, - xhrFields: { - withCredentials:true - }, - timeout: 20000, - success: function (result, status, xhr) { - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) { - a.updateContentBody(id, result); - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function (xhr) { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function (xhr, status) { - // do nothing yet - } - }); - } - - a.initialiseComponents(); - }, - Close: function (id) { - $("#dlg" + id).modal('hide'); - }, - Clear: function () { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function (id, title, message, size) { - var a = this; - - if (a.Exists(id)) { - return; - } - - a.id = id; - a.title = title; - a.url = null; - a.size = ((typeof (size) == "undefined") ? "md" : size); - - a.renderContent(message); - a.initialiseComponents(); - }, - Exists: function (id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function (message) { - var a = this; - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " " + a.title + ""; - html += " "; - html += " "; - - html += "
"; - - if ($.trim(message).length <= 0) { - html += "
"; - html += "
"; - html += "
"; - html += " Loading..."; - html += "
"; - html += "
"; - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - renderContent: function (content) { - $("body").append(this.generateModalHtml(content)); - }, - initialiseComponents: function () { - var a = this; - var dialog = a.getElement(); - - var btnToggleSize = $(dialog).find("button[data-modal-action='restore']"); - if ($(btnToggleSize).length > 0) { - $(btnToggleSize).off('click'); - $(btnToggleSize).on('click', function () { - a.toggleSize(); - }); - } - - $(dialog).modal('show'); - - $(dialog).off('hide.bs.modal'); - $(dialog).on('hide.bs.modal', function () { - if ($(dialog).next().is("div[class~='modal-backdrop']")) { - $(dialog).next().remove(); - } - - $(dialog).remove(); - }); - - $(dialog).find(".modal-header").off("mousedown"); - $(dialog).find(".modal-header").on("mousedown", function(e) { - var posX = e.pageX - $(this).offset().left; - var posY = e.pageY - $(this).offset().top; - - $("body").off("mousemove.draggable"); - $("body").on("mousemove.draggable", function(e2) { - $(dialog).children(".modal-dialog").offset({ "left": (e2.pageX - posX), "top": (e2.pageY - posY) }); - }); - - $("body").off("mouseup"); - $("body").on("mouseup", function() { - $("body").off("mousemove.draggable"); - }); - - $(dialog).off("bs.modal.hide"); - $(dialog).on("bs.modal.hide", function() { - $("body").off("mousemove.draggable"); - }); - }); - }, - updateContentBody: function (id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - }, - getElement: function () { - return $("#dlg" + this.id); - }, - toggleSize: function () { - var div = $(this.getElement()).find("div[class^='modal-dialog']"); - if ($(div).length <= 0) { - return; - } - - if ($(div).hasClass("modal-md")) { - $(div).removeClass("modal-md"); - $(div).addClass("modal-lg"); - } else if ($(div).hasClass("modal-lg")) { - $(div).removeClass("modal-lg"); - $(div).addClass("modal-xl"); - } else if ($(div).hasClass("modal-xl")) { - $(div).removeClass("modal-xl"); - $(div).addClass("modal-sm"); - } else if ($(div).hasClass("modal-sm")) { - $(div).removeClass("modal-sm"); - $(div).addClass("modal-md"); - } - } -}; \ No newline at end of file diff --git a/2020/01/bsdialog4-v0.1.0.001.min.js b/2020/01/bsdialog4-v0.1.0.001.min.js deleted file mode 100644 index 03124a7..0000000 --- a/2020/01/bsdialog4-v0.1.0.001.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * BSDialog4 - * @version v0.1.0.001 (2019/12/27 0531) - */ -var BSDialog={Create:function(o,t,e,d){var a=this;a.id=o,a.title=t,a.url=e,a.size=void 0===d?"md":d,a.Exists(o)||a.renderContent(null),null!=e&&$.ajax({url:e,cache:!1,xhrFields:{withCredentials:!0},timeout:2e4,success:function(t,e,d){200==d.status||302==d.status||301==d.status?a.updateContentBody(o,t):a.updateContentBody(o,d.statusText+" ("+d.status+")")},error:function(t){a.updateContentBody(o,t.statusText+" ("+t.status+")")},complete:function(o,t){}}),a.initialiseComponents()},Close:function(o){$("#dlg"+o).modal("hide")},Clear:function(){$("body > div[class~='modal'][role='dialog']").remove(),$("body > div[class~='modal-backdrop']").remove(),$("body").removeClass("modal-open")},ShowToast:function(o,t,e,d){var a=this;a.Exists(o)||(a.id=o,a.title=t,a.url=null,a.size=void 0===d?"md":d,a.renderContent(e),a.initialiseComponents())},Exists:function(o){return $("body > div[id='dlg"+o+"']").length>0},generateModalHtml:function(o){var t=this,e="";return e+='"},renderContent:function(o){$("body").append(this.generateModalHtml(o))},initialiseComponents:function(){var o=this,t=o.getElement(),e=$(t).find("button[data-modal-action='restore']");$(e).length>0&&($(e).off("click"),$(e).on("click",function(){o.toggleSize()})),$(t).modal("show"),$(t).off("hide.bs.modal"),$(t).on("hide.bs.modal",function(){$(t).next().is("div[class~='modal-backdrop']")&&$(t).next().remove(),$(t).remove()}),$(t).find(".modal-header").off("mousedown"),$(t).find(".modal-header").on("mousedown",function(o){var e=o.pageX-$(this).offset().left,d=o.pageY-$(this).offset().top;$("body").off("mousemove.draggable"),$("body").on("mousemove.draggable",function(o){$(t).children(".modal-dialog").offset({left:o.pageX-e,top:o.pageY-d})}),$("body").off("mouseup"),$("body").on("mouseup",function(){$("body").off("mousemove.draggable")}),$(t).off("bs.modal.hide"),$(t).on("bs.modal.hide",function(){$("body").off("mousemove.draggable")})})},updateContentBody:function(o,t){var e=$("#dlg"+o).find(".modal-body");$(e).hasClass("custom-loading")&&$(e).removeClass("custom-loading"),$(e).html(t)},getElement:function(){return $("#dlg"+this.id)},toggleSize:function(){var o=$(this.getElement()).find("div[class^='modal-dialog']");$(o).length<=0||($(o).hasClass("modal-md")?($(o).removeClass("modal-md"),$(o).addClass("modal-lg")):$(o).hasClass("modal-lg")?($(o).removeClass("modal-lg"),$(o).addClass("modal-xl")):$(o).hasClass("modal-xl")?($(o).removeClass("modal-xl"),$(o).addClass("modal-sm")):$(o).hasClass("modal-sm")&&($(o).removeClass("modal-sm"),$(o).addClass("modal-md")))}}; \ No newline at end of file diff --git a/2020/02/426-150x140.jpg b/2020/02/426-150x140.jpg new file mode 100644 index 0000000..329ce84 Binary files /dev/null and b/2020/02/426-150x140.jpg differ diff --git a/2020/02/426.jpg b/2020/02/426.jpg new file mode 100644 index 0000000..260e4a6 Binary files /dev/null and b/2020/02/426.jpg differ diff --git a/2020/02/450-150x140.jpg b/2020/02/450-150x140.jpg new file mode 100644 index 0000000..4834464 Binary files /dev/null and b/2020/02/450-150x140.jpg differ diff --git a/2020/02/450.jpg b/2020/02/450.jpg new file mode 100644 index 0000000..dd6f485 Binary files /dev/null and b/2020/02/450.jpg differ diff --git a/2020/02/diff-image-diff.png b/2020/02/diff-image-diff.png new file mode 100644 index 0000000..415d7d2 Binary files /dev/null and b/2020/02/diff-image-diff.png differ diff --git a/2020/02/diff-image-diffmock.png b/2020/02/diff-image-diffmock.png new file mode 100644 index 0000000..66bf56b Binary files /dev/null and b/2020/02/diff-image-diffmock.png differ diff --git a/2020/02/diff-image-modified.png b/2020/02/diff-image-modified.png new file mode 100644 index 0000000..b3d695d Binary files /dev/null and b/2020/02/diff-image-modified.png differ diff --git a/2020/02/diff-image-original.png b/2020/02/diff-image-original.png new file mode 100644 index 0000000..be94edb Binary files /dev/null and b/2020/02/diff-image-original.png differ diff --git a/2020/02/switch-css-preview.png b/2020/02/switch-css-preview.png new file mode 100644 index 0000000..3b8b15e Binary files /dev/null and b/2020/02/switch-css-preview.png differ diff --git a/2020/02/switch.css b/2020/02/switch.css deleted file mode 100644 index 49a2c06..0000000 --- a/2020/02/switch.css +++ /dev/null @@ -1,79 +0,0 @@ -.switch { - display: inline-block; - height: 30px; - position: relative; - width: 56px; -} - -.switch > input { - height: 0px; - opacity: 0; - width: 0px; -} - -.switch > .switch-slider { - -webkit-transition: .4s; - background-color: #ccc; - border-radius: 30px; - bottom: 0; - cursor: pointer; - left: 0; - position: absolute; - right: 0; - top: 0; - transition: .4s; -} - -.switch > .switch-slider:before { - -webkit-transition: .4s; - background-color: white; - border-radius: 50%; - bottom: 4px; - content: ""; - height: 22px; - left: 4px; - position: absolute; - transition: .4s; - width: 22px; -} - -.switch > input:checked + .switch-slider:before { - -ms-transform: translateX(26px); - -webkit-transform: translateX(26px); - transform: translateX(26px); -} - -.switch.switch-off-primary > input + .switch-slider { background-color: #2196F3; } -.switch.switch-off-success > input + .switch-slider { background-color: #5cb85c; } -.switch.switch-off-info > input + .switch-slider { background-color: #5bc0de; } -.switch.switch-off-warning > input + .switch-slider { background-color: #f0ad4e; } -.switch.switch-off-danger > input + .switch-slider { background-color: #d9534f; } -.switch.switch-off-muted > input + .switch-slider { background-color: #555555; } - -.switch.switch-primary > input:checked + .switch-slider { background-color: #2196F3; box-shadow: 0 0 3px #2196F3; } -.switch.switch-success > input:checked + .switch-slider { background-color: #5cb85c; box-shadow: 0 0 3px #5cb85c; } -.switch.switch-info > input:checked + .switch-slider { background-color: #5bc0de; box-shadow: 0 0 3px #5bc0de; } -.switch.switch-warning > input:checked + .switch-slider { background-color: #f0ad4e; box-shadow: 0 0 3px #f0ad4e; } -.switch.switch-danger > input:checked + .switch-slider { background-color: #d9534f; box-shadow: 0 0 3px #d9534f; } -.switch.switch-muted > input:checked + .switch-slider { background-color: #555555; box-shadow: 0 0 3px #555555; } - -.switch-label, .label-switch { - float: left; - font-weight: bold; - padding-top: 5px; -} - - -.switch-sm { - height: 26px; - width: 48px; -} -.switch-sm > .switch-slider:before { - height: 18px; - width: 18px; -} -.switch-sm > input:checked + .switch-slider:before { - -ms-transform: translateX(22px); - -webkit-transform: translateX(22px); - transform: translateX(22px); -} diff --git a/2020/04/493-150x140.png b/2020/04/493-150x140.png new file mode 100644 index 0000000..31d8159 Binary files /dev/null and b/2020/04/493-150x140.png differ diff --git a/2020/04/493.png b/2020/04/493.png new file mode 100644 index 0000000..5ba4f22 Binary files /dev/null and b/2020/04/493.png differ diff --git a/2020/05/fizzy-launcher-1-200.png b/2020/05/fizzy-launcher-1-200.png new file mode 100644 index 0000000..2eb2181 Binary files /dev/null and b/2020/05/fizzy-launcher-1-200.png differ diff --git a/2020/05/fizzy-launcher-1-uc.png b/2020/05/fizzy-launcher-1-uc.png new file mode 100644 index 0000000..9ce923c Binary files /dev/null and b/2020/05/fizzy-launcher-1-uc.png differ diff --git a/2020/05/fizzy-launcher-1.png b/2020/05/fizzy-launcher-1.png new file mode 100644 index 0000000..0835f79 Binary files /dev/null and b/2020/05/fizzy-launcher-1.png differ diff --git a/2020/05/fizzy-launcher-2-200.png b/2020/05/fizzy-launcher-2-200.png new file mode 100644 index 0000000..a06d4ef Binary files /dev/null and b/2020/05/fizzy-launcher-2-200.png differ diff --git a/2020/05/fizzy-launcher-2-uc.png b/2020/05/fizzy-launcher-2-uc.png new file mode 100644 index 0000000..e97150b Binary files /dev/null and b/2020/05/fizzy-launcher-2-uc.png differ diff --git a/2020/05/fizzy-launcher-2.png b/2020/05/fizzy-launcher-2.png new file mode 100644 index 0000000..6334aea Binary files /dev/null and b/2020/05/fizzy-launcher-2.png differ diff --git a/2020/05/fizzy-launcher-3-200.png b/2020/05/fizzy-launcher-3-200.png new file mode 100644 index 0000000..8836a31 Binary files /dev/null and b/2020/05/fizzy-launcher-3-200.png differ diff --git a/2020/05/fizzy-launcher-3-uc.png b/2020/05/fizzy-launcher-3-uc.png new file mode 100644 index 0000000..7306257 Binary files /dev/null and b/2020/05/fizzy-launcher-3-uc.png differ diff --git a/2020/05/fizzy-launcher-3.png b/2020/05/fizzy-launcher-3.png new file mode 100644 index 0000000..91e5aa5 Binary files /dev/null and b/2020/05/fizzy-launcher-3.png differ diff --git a/2020/11/2020-11-28-0541.png b/2020/11/2020-11-28-0541.png new file mode 100644 index 0000000..79c7c3c Binary files /dev/null and b/2020/11/2020-11-28-0541.png differ diff --git a/2020/11/666-150x140.png b/2020/11/666-150x140.png new file mode 100644 index 0000000..3262f2f Binary files /dev/null and b/2020/11/666-150x140.png differ diff --git a/2020/11/666.png b/2020/11/666.png new file mode 100644 index 0000000..59e2521 Binary files /dev/null and b/2020/11/666.png differ diff --git a/2020/11/BorderlessForm.cs b/2020/11/BorderlessForm.cs deleted file mode 100644 index a387a47..0000000 --- a/2020/11/BorderlessForm.cs +++ /dev/null @@ -1,274 +0,0 @@ -using System.Drawing; -using System.Windows.Forms; - -namespace WindowsFormsApp2 -{ - public class BorderlessForm : Form - { - protected bool isDragging = false; - protected Rectangle lastRectangle = new Rectangle(); - - - public BorderlessForm() : base() - { - this.FormBorderStyle = FormBorderStyle.None; - - initialiseFormEdge(); - } - - - protected void initialiseFormEdge() - { - int resizeWidth = 5; - - this.MouseDown += new MouseEventHandler(form_MouseDown); - this.MouseMove += new MouseEventHandler(form_MouseMove); - this.MouseUp += delegate (object sender, MouseEventArgs e) - { - isDragging = false; - }; - - // bottom - UserControl uc1 = new UserControl() - { - Anchor = (AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right), - Height = resizeWidth, - Width = this.DisplayRectangle.Width - (resizeWidth * 2), - Left = resizeWidth, - Top = this.DisplayRectangle.Height - resizeWidth, - BackColor = Color.Transparent, - Cursor = Cursors.SizeNS - }; - uc1.MouseDown += form_MouseDown; - uc1.MouseUp += form_MouseUp; - uc1.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - this.Size = new Size(lastRectangle.Width, e.Y - lastRectangle.Y + this.Height); - } - }; - uc1.BringToFront(); - - this.Controls.Add(uc1); - - // right - UserControl uc2 = new UserControl() - { - Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom), - Height = this.DisplayRectangle.Height - (resizeWidth * 2), - Width = resizeWidth, - Left = this.DisplayRectangle.Width - resizeWidth, - Top = resizeWidth, - BackColor = Color.Transparent, - Cursor = Cursors.SizeWE - }; - uc2.MouseDown += form_MouseDown; - uc2.MouseUp += form_MouseUp; - uc2.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - this.Size = new Size(e.X - lastRectangle.X + this.Width, lastRectangle.Height); - } - }; - uc2.BringToFront(); - - this.Controls.Add(uc2); - - // bottom-right - UserControl uc3 = new UserControl() - { - Anchor = (AnchorStyles.Bottom | AnchorStyles.Right), - Height = resizeWidth, - Width = resizeWidth, - Left = this.DisplayRectangle.Width - resizeWidth, - Top = this.DisplayRectangle.Height - resizeWidth, - BackColor = Color.Transparent, - Cursor = Cursors.SizeNWSE - }; - uc3.MouseDown += form_MouseDown; - uc3.MouseUp += form_MouseUp; - uc3.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - this.Size = new Size((e.X - lastRectangle.X + this.Width), (e.Y - lastRectangle.Y + this.Height)); - } - }; - uc3.BringToFront(); - - this.Controls.Add(uc3); - - // top-right - UserControl uc4 = new UserControl() - { - Anchor = (AnchorStyles.Top | AnchorStyles.Right), - Height = resizeWidth, - Width = resizeWidth, - Left = this.DisplayRectangle.Width - resizeWidth, - Top = 0, - BackColor = Color.Transparent, - Cursor = Cursors.SizeNESW - }; - uc4.MouseDown += form_MouseDown; - uc4.MouseUp += form_MouseUp; - uc4.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - int diff = (e.Location.Y - lastRectangle.Y); - int y = (this.Location.Y + diff); - - this.Location = new Point(this.Location.X, y); - this.Size = new Size(e.X - lastRectangle.X + this.Width, (this.Height + (diff * -1))); - } - }; - uc4.BringToFront(); - //uc4.BackColor = Color.Firebrick; - - this.Controls.Add(uc4); - - // top - UserControl uc5 = new UserControl() - { - Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right), - Height = resizeWidth, - Width = this.DisplayRectangle.Width - (resizeWidth * 2), - Left = resizeWidth, - Top = 0, - BackColor = Color.Transparent, - Cursor = Cursors.SizeNS - }; - uc5.MouseDown += form_MouseDown; - uc5.MouseUp += form_MouseUp; - uc5.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - int diff = (e.Location.Y - lastRectangle.Y); - int y = (this.Location.Y + diff); - - this.Location = new Point(this.Location.X, y); - this.Size = new Size(lastRectangle.Width, (this.Height + (diff * -1))); - } - }; - uc5.BringToFront(); - - this.Controls.Add(uc5); - - // left - UserControl uc6 = new UserControl() - { - Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Bottom), - Height = this.DisplayRectangle.Height - (resizeWidth * 2), - Width = resizeWidth, - Left = 0, - Top = resizeWidth, - BackColor = Color.Transparent, - Cursor = Cursors.SizeWE - }; - uc6.MouseDown += form_MouseDown; - uc6.MouseUp += form_MouseUp; - uc6.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - int diff = (e.Location.X - lastRectangle.X); - int x = (this.Location.X + diff); - - this.Location = new Point(x, this.Location.Y); - this.Size = new Size((this.Width + (diff * -1)), this.Height); - } - }; - uc6.BringToFront(); - - this.Controls.Add(uc6); - - // bottom-left - UserControl uc7 = new UserControl() - { - Anchor = (AnchorStyles.Bottom | AnchorStyles.Left), - Height = resizeWidth, - Width = resizeWidth, - Left = 0, - Top = this.DisplayRectangle.Height - resizeWidth, - BackColor = Color.Transparent, - Cursor = Cursors.SizeNESW - }; - uc7.MouseDown += form_MouseDown; - uc7.MouseUp += form_MouseUp; - uc7.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - int diff = (e.Location.X - lastRectangle.X); - int x = (this.Location.X + diff); - - this.Location = new Point(x, this.Location.Y); - this.Size = new Size((this.Width + (diff * -1)), (e.Y - lastRectangle.Y + this.Height)); - } - }; - uc7.BringToFront(); - - this.Controls.Add(uc7); - - // bottom-left - UserControl uc8 = new UserControl() - { - Anchor = (AnchorStyles.Top | AnchorStyles.Left), - Height = resizeWidth, - Width = resizeWidth, - Left = 0, - Top = 0, - BackColor = Color.Transparent, - Cursor = Cursors.SizeNWSE - }; - uc8.MouseDown += form_MouseDown; - uc8.MouseUp += form_MouseUp; - uc8.MouseMove += delegate (object sender, MouseEventArgs e) - { - if (isDragging) - { - int dX = (e.Location.X - lastRectangle.X); - int dY = (e.Location.Y - lastRectangle.Y); - int x = (this.Location.X + dX); - int y = (this.Location.Y + dY); - - this.Location = new Point(x, y); - this.Size = new Size((this.Width + (dX * -1)), (this.Height + (dY * -1))); - } - }; - uc8.BringToFront(); - - this.Controls.Add(uc8); - } - - - private void form_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - isDragging = true; - lastRectangle = new Rectangle(e.Location.X, e.Location.Y, this.Width, this.Height); - } - } - - private void form_MouseMove(object sender, MouseEventArgs e) - { - if (isDragging) - { - int x = (this.Location.X + (e.Location.X - lastRectangle.X)); - int y = (this.Location.Y + (e.Location.Y - lastRectangle.Y)); - - this.Location = new Point(x, y); - } - } - - private void form_MouseUp(object sender, MouseEventArgs e) - { - isDragging = false; - } - - } -} diff --git a/2020/12/682-150x140.jpg b/2020/12/682-150x140.jpg new file mode 100644 index 0000000..738c5b5 Binary files /dev/null and b/2020/12/682-150x140.jpg differ diff --git a/2020/12/682.jpg b/2020/12/682.jpg new file mode 100644 index 0000000..49fe30a Binary files /dev/null and b/2020/12/682.jpg differ diff --git a/2020/12/Circle.cs b/2020/12/Circle.cs deleted file mode 100644 index 413518f..0000000 --- a/2020/12/Circle.cs +++ /dev/null @@ -1,148 +0,0 @@ -using System; -using System.Drawing; - -namespace RyzStudio.Drawing -{ - public class Circle - { - - public Circle() - { - - } - - public Circle(int x, int y, int width, int height) - { - this.X = x; - this.Y = y; - this.Width = width; - this.Height = height; - } - - public Circle(Rectangle rectangle) - { - this.X = rectangle.X; - this.Y = rectangle.Y; - this.Width = rectangle.Width; - this.Height = rectangle.Height; - } - - public Circle(Point position, Size size) - { - this.X = position.X; - this.Y = position.Y; - this.Width = size.Width; - this.Height = size.Height; - } - - public Circle(Size size) - { - this.X = 0; - this.Y = 0; - this.Width = size.Width; - this.Height = size.Height; - } - - - public int X { get; set; } = 0; - - public int Y { get; set; } = 0; - - public int Width { get; set; } = 0; - - public int Height { get; set; } = 0; - - public PointF Origin - { - get - { - return new PointF() - { - X = (this.Width / 2) + this.X, - Y = (this.Height / 2) + this.Y - }; - } - } - - public int MinSideLength => Math.Min(this.Width, this.Height); - - public static PointF GetPointromOrigin(PointF originPosition, Size size) - { - float offsetX = (size.Width / 2); - float offsetY = (size.Height / 2); - - PointF rs = new PointF() - { - X = originPosition.X, - Y = originPosition.Y - }; - - rs.X -= offsetX; - rs.Y -= offsetY; - - return rs; - } - - public PointF GetPoint(int deg, int distance) - { - PointF origin = this.Origin; - PointF rs = new PointF() - { - X = origin.X, - Y = origin.Y - }; - - if (deg == 0) - { - rs.Y -= distance; - } - else if (deg == 90) - { - rs.X += distance; - } - else if (deg == 180) - { - rs.Y += distance; - } - else if (deg == 270) - { - rs.X -= distance; - } - else if ((deg > 0) && (deg < 90)) - { - rs.X += (float)(distance * Math.Sin(calcToRad(deg))); - rs.Y -= (float)(distance * Math.Cos(calcToRad(deg))); - } - else if ((deg > 90) && (deg < 180)) - { - rs.X += (float)(distance * Math.Cos(calcToRad(deg - 90))); - rs.Y += (float)(distance * Math.Sin(calcToRad(deg - 90))); - } - else if ((deg > 180) && (deg < 270)) - { - rs.X -= (float)(distance * Math.Sin(calcToRad(deg - 180))); - rs.Y += (float)(distance * Math.Cos(calcToRad(deg - 180))); - } - else if ((deg > 270) && (deg < 360)) - { - rs.X -= (float)(distance * Math.Cos(calcToRad(deg - 270))); - rs.Y -= (float)(distance * Math.Sin(calcToRad(deg - 270))); - } - - // adjust position - rs.X += this.X; - rs.Y += this.Y; - - return rs; - } - - public void Deflate(int x, int y) - { - this.Width -= x; - this.Height -= y; - } - - protected double calcToRad(int deg) => ((Math.PI / 180) * deg); - - } -} diff --git a/2020/12/TImageButton.cs b/2020/12/TImageButton.cs deleted file mode 100644 index ab94f0a..0000000 --- a/2020/12/TImageButton.cs +++ /dev/null @@ -1,378 +0,0 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace RyzStudio.Windows.Forms -{ - public class TImageButton : System.Windows.Forms.Label - { - public enum TImageBoxState - { - Disabled = 0, - Normal, - Hover, - Active - } - - protected bool isEnabled = true; - protected bool isHover = false; - protected Color foreColor = Color.Black; - protected string text; - protected Size textSize = new Size(); - protected DockStyle textAlign = DockStyle.Fill; - protected TImageBoxState controlState = TImageBoxState.Normal; - - - public TImageButton() - { - this.AutoEllipsis = true; - this.AutoSize = false; - this.BackColor = Color.Transparent; - //this.BackgroundImage = Properties.Resources.circle; - this.BackgroundImageLayout = ImageLayout.Center; - this.BorderStyle = BorderStyle.None; - this.CausesValidation = true; - this.DoubleBuffered = true; - this.FlatStyle = FlatStyle.Flat; - this.ForeColor = Color.Black; - this.ImageAlign = ContentAlignment.MiddleCenter; - //this.Margin = new Padding(0); - //this.MaximumSize = new Size(135, 135); - //this.MinimumSize = this.MaximumSize; - //this.Padding = new Padding(0); - //this.Size = this.MaximumSize; - base.TextAlign = ContentAlignment.MiddleCenter; - this.TextAlign = DockStyle.Fill; - this.UseCompatibleTextRendering = false; - this.UseMnemonic = true; - - this.DisabledForeColor = Color.Black; - this.ControlState = TImageBoxState.Normal; - } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override bool AllowDrop { get => base.AllowDrop; set => base.AllowDrop = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool AutoEllipsis { get => base.AutoEllipsis; set => base.AutoEllipsis = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override bool AutoSize { get => base.AutoSize; set => base.AutoSize = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Color BackColor { get => base.BackColor; set => base.BackColor = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Image BackgroundImage { get => base.BackgroundImage; set => base.BackgroundImage = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override ImageLayout BackgroundImageLayout { get => base.BackgroundImageLayout; set => base.BackgroundImageLayout = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new BorderStyle BorderStyle { get => base.BorderStyle; set => base.BorderStyle = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool CausesValidation { get => base.CausesValidation; set => base.CausesValidation = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Cursor Cursor { get => base.Cursor; set => base.Cursor = value; } - - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool Enabled - { - get => isEnabled; - set - { - isEnabled = value; - - this.ControlState = (isEnabled ? TImageBoxState.Normal : TImageBoxState.Disabled); - } - } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new FlatStyle FlatStyle { get => base.FlatStyle; set => base.FlatStyle = value; } - - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - //public override Font Font { get => base.Font; set => base.Font = value; } - - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Color ForeColor { get => foreColor; set => foreColor = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new Image Image { get => base.Image; set => base.Image = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new ContentAlignment ImageAlign { get => base.ImageAlign; set => base.ImageAlign = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new string ImageKey { get => base.ImageKey; set => base.ImageKey = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new int ImageIndex { get => base.ImageIndex; set => base.ImageIndex = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new ImageList ImageList { get => base.ImageList; set => base.ImageList = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new ImeMode ImeMode { get => base.ImeMode; set => base.ImeMode = value; } - - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - //public new Padding Margin { get => base.Margin; set => base.Margin = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Size MaximumSize { get => base.MaximumSize; set => base.MaximumSize = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override Size MinimumSize { get => base.MinimumSize; set => base.MinimumSize = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new Padding Padding { get => base.Padding; set => base.Padding = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public override RightToLeft RightToLeft { get => base.RightToLeft; set => base.RightToLeft = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new object Tag { get => base.Tag; set => base.Tag = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - //public new string Text { get => base.Text; set => base.Text = value; } - public new string Text { get => base.Text; set => base.Text = string.Empty; } - - [Category("Appearance")] - public string Text2 - { - get => text; - set - { - base.Text = string.Empty; - - text = value ?? string.Empty; - textSize = TextRenderer.MeasureText(text, this.Font); - } - } - - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - //public new ContentAlignment TextAlign { get => base.TextAlign; set => base.TextAlign = value; } - - [Category("Appearance")] - public new DockStyle TextAlign { get => textAlign; set => textAlign = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool UseCompatibleTextRendering { get => base.UseCompatibleTextRendering; set => base.UseCompatibleTextRendering = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool UseMnemonic { get => base.UseMnemonic; set => base.UseMnemonic = value; } - - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new bool UseWaitCursor { get => base.UseWaitCursor; set => base.UseWaitCursor = value; } - - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint(e); - - Graphics g = e.Graphics; - - Point pos = calcTextPosition(); - - TextRenderer.DrawText(e.Graphics, this.Text2, this.Font, pos, base.ForeColor); - - } - - protected override void OnClick(EventArgs e) - { - if (this.Enabled || this.AllowClickOnDisabled) - { - base.OnClick(e); - } - } - - protected override void OnDoubleClick(EventArgs e) - { - if (this.Enabled || this.AllowClickOnDisabled) - { - base.OnDoubleClick(e); - } - } - - protected override void OnFontChanged(EventArgs e) - { - base.OnFontChanged(e); - - this.Text2 = this.Text2; - } - - protected override void OnMouseClick(MouseEventArgs e) - { - if (!this.Enabled && !this.AllowClickOnDisabled) return; - if (e.Button != MouseButtons.Left) return; - - base.OnMouseClick(e); - } - - protected override void OnMouseDoubleClick(MouseEventArgs e) - { - if (!this.Enabled && !this.AllowClickOnDisabled) return; - if (e.Button != MouseButtons.Left) return; - - base.OnMouseDoubleClick(e); - } - - protected override void OnMouseDown(MouseEventArgs e) - { - if (e.Button != MouseButtons.Left) return; - - this.ControlState = (this.Enabled ? TImageBoxState.Active : TImageBoxState.Disabled); - - base.OnMouseDown(e); - } - - protected override void OnMouseEnter(EventArgs e) - { - isHover = true; - - this.ControlState = (this.Enabled ? (isHover ? TImageBoxState.Hover : TImageBoxState.Normal) : TImageBoxState.Disabled); - - base.OnMouseEnter(e); - } - - protected override void OnMouseLeave(EventArgs e) - { - isHover = false; - - this.ControlState = (this.Enabled ? (isHover ? TImageBoxState.Hover : TImageBoxState.Normal) : TImageBoxState.Disabled); - - base.OnMouseLeave(e); - } - - protected override void OnMouseUp(MouseEventArgs e) - { - this.ControlState = (this.Enabled ? (isHover ? TImageBoxState.Hover : TImageBoxState.Normal) : TImageBoxState.Disabled); - - base.OnMouseUp(e); - } - - protected override void OnCreateControl() - { - base.OnCreateControl(); - - this.ControlState = this.ControlState; - this.AutoSize = false; - - } - - - [Category("Appearance (Background)")] - public bool UseBackImage { get; set; } = true; - - [Category("Appearance (Foreground)")] - public bool UseForeImage { get; set; } = false; - - [Category("Appearance")] - public Color DisabledForeColor { get; set; } - - [Category("Appearance")] - public int TextOffset { get; set; } = 0; - - [Category("Behavior")] - public bool AllowClickOnDisabled { get; set; } = false; - - [Category("Appearance (Foreground)")] - public Image NormalImage { get; set; } = null; - - [Category("Appearance (Foreground)")] - public Image HoverImage { get; set; } = null; - - [Category("Appearance (Foreground)")] - public Image ActiveImage { get; set; } = null; - - [Category("Appearance (Foreground)")] - public Image DisabledImage { get; set; } = null; - - [Category("Appearance (Background)")] - public Image NormalBackImage { get; set; } = null; - - [Category("Appearance (Background)")] - public Image HoverBackImage { get; set; } = null; - - [Category("Appearance (Background)")] - public Image ActiveBackImage { get; set; } = null; - - [Category("Appearance (Background)")] - public Image DisabledBackImage { get; set; } = null; - - - protected TImageBoxState ControlState - { - get => controlState; - set - { - controlState = value; - - switch (controlState) - { - case TImageBoxState.Disabled: - if (this.UseBackImage) this.BackgroundImage = this.DisabledBackImage; - if (this.UseForeImage) this.Image = this.DisabledImage; - base.ForeColor = this.DisabledForeColor; - - break; - case TImageBoxState.Normal: - if (this.UseBackImage) this.BackgroundImage = this.NormalBackImage; - if (this.UseForeImage) this.Image = this.NormalImage; - base.ForeColor = this.ForeColor; - - break; - case TImageBoxState.Hover: - if (this.UseBackImage) this.BackgroundImage = this.HoverBackImage; - if (this.UseForeImage) this.Image = this.HoverImage; - base.ForeColor = this.ForeColor; - - break; - case TImageBoxState.Active: - if (this.UseBackImage) this.BackgroundImage = this.ActiveBackImage; - if (this.UseForeImage) this.Image = this.ActiveImage; - base.ForeColor = this.ForeColor; - - break; - default: break; - } - - } - } - - protected Point calcTextPosition() - { - Point rs = new Point(); - - switch (this.TextAlign) - { - case DockStyle.Top: - rs.X = ((this.DisplayRectangle.Width - textSize.Width) / 2); - rs.Y = ((this.DisplayRectangle.Height / 2) - textSize.Height - this.TextOffset); - break; - case DockStyle.Bottom: - rs.X = ((this.DisplayRectangle.Width - textSize.Width) / 2); - rs.Y = ((this.DisplayRectangle.Height / 2) + this.TextOffset); - break; - case DockStyle.Left: - rs.X = ((this.DisplayRectangle.Width / 2) - textSize.Width - this.TextOffset); - rs.Y = ((this.DisplayRectangle.Height - textSize.Height) / 2); - break; - case DockStyle.Right: - rs.X = ((this.DisplayRectangle.Width / 2) + this.TextOffset); - rs.Y = ((this.DisplayRectangle.Height - textSize.Height) / 2); - break; - case DockStyle.Fill: - case DockStyle.None: - default: - rs.X = ((this.DisplayRectangle.Width - textSize.Width) / 2); - rs.Y = ((this.DisplayRectangle.Height - textSize.Height) / 2); - break; - } - - return rs; - } - - } -} \ No newline at end of file diff --git a/2020/12/circle-1-200.png b/2020/12/circle-1-200.png new file mode 100644 index 0000000..5f63b0d Binary files /dev/null and b/2020/12/circle-1-200.png differ diff --git a/2020/12/circle-1.png b/2020/12/circle-1.png new file mode 100644 index 0000000..bb011ab Binary files /dev/null and b/2020/12/circle-1.png differ diff --git a/2020/12/circle-2-200.png b/2020/12/circle-2-200.png new file mode 100644 index 0000000..b1f95de Binary files /dev/null and b/2020/12/circle-2-200.png differ diff --git a/2020/12/circle-2.png b/2020/12/circle-2.png new file mode 100644 index 0000000..b32d2ae Binary files /dev/null and b/2020/12/circle-2.png differ diff --git a/2020/12/circle.dia.autosave b/2020/12/circle.dia.autosave new file mode 100644 index 0000000..e3649af Binary files /dev/null and b/2020/12/circle.dia.autosave differ diff --git a/2020/12/circle.dia~ b/2020/12/circle.dia~ new file mode 100644 index 0000000..f94018d Binary files /dev/null and b/2020/12/circle.dia~ differ diff --git a/2020/12/circle.png b/2020/12/circle.png new file mode 100644 index 0000000..dda166e Binary files /dev/null and b/2020/12/circle.png differ diff --git a/2020/12/image-button.svg b/2020/12/image-button.svg deleted file mode 100644 index af25849..0000000 --- a/2020/12/image-button.svg +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - hash - - action - computer - icons - theme - - - - - Danny Allen - - - - - Danny Allen - - - - - Danny Allen - - - - image/svg+xml - - - en - - - - - - - - - - - - - - - - - - - - - - Layer 1 - - - - - - Disabled - Normal - Hover - Active - Background - Foreground - diff --git a/2020/12/timagebutton-demo-1.png b/2020/12/timagebutton-demo-1.png new file mode 100644 index 0000000..890f7ee Binary files /dev/null and b/2020/12/timagebutton-demo-1.png differ diff --git a/2020/12/timagebutton-demo-2-150.png b/2020/12/timagebutton-demo-2-150.png new file mode 100644 index 0000000..f0ac6b2 Binary files /dev/null and b/2020/12/timagebutton-demo-2-150.png differ diff --git a/2020/12/timagebutton-demo-2.png b/2020/12/timagebutton-demo-2.png new file mode 100644 index 0000000..dd3754e Binary files /dev/null and b/2020/12/timagebutton-demo-2.png differ diff --git a/2020/12/timagebutton-demo-3-150.png b/2020/12/timagebutton-demo-3-150.png new file mode 100644 index 0000000..1d387df Binary files /dev/null and b/2020/12/timagebutton-demo-3-150.png differ diff --git a/2020/12/timagebutton-demo-3.png b/2020/12/timagebutton-demo-3.png new file mode 100644 index 0000000..96068ba Binary files /dev/null and b/2020/12/timagebutton-demo-3.png differ diff --git a/2020/12/timagebutton-demo-4-150.png b/2020/12/timagebutton-demo-4-150.png new file mode 100644 index 0000000..37a4097 Binary files /dev/null and b/2020/12/timagebutton-demo-4-150.png differ diff --git a/2020/12/timagebutton-demo-4.png b/2020/12/timagebutton-demo-4.png new file mode 100644 index 0000000..4c4edc4 Binary files /dev/null and b/2020/12/timagebutton-demo-4.png differ diff --git a/2020/12/timagebutton-demo-5-150.png b/2020/12/timagebutton-demo-5-150.png new file mode 100644 index 0000000..781abd7 Binary files /dev/null and b/2020/12/timagebutton-demo-5-150.png differ diff --git a/2020/12/timagebutton-demo-5.png b/2020/12/timagebutton-demo-5.png new file mode 100644 index 0000000..2dc628c Binary files /dev/null and b/2020/12/timagebutton-demo-5.png differ diff --git a/2020/12/timagebutton-demo-6-150.png b/2020/12/timagebutton-demo-6-150.png new file mode 100644 index 0000000..4894dc8 Binary files /dev/null and b/2020/12/timagebutton-demo-6-150.png differ diff --git a/2020/12/timagebutton-demo-6.png b/2020/12/timagebutton-demo-6.png new file mode 100644 index 0000000..19e37c5 Binary files /dev/null and b/2020/12/timagebutton-demo-6.png differ diff --git a/2021/02/10.png b/2021/02/10.png new file mode 100644 index 0000000..f3ff050 Binary files /dev/null and b/2021/02/10.png differ diff --git a/2021/02/12.png b/2021/02/12.png new file mode 100644 index 0000000..dea6c64 Binary files /dev/null and b/2021/02/12.png differ diff --git a/2021/02/230.png b/2021/02/230.png new file mode 100644 index 0000000..1d1ca83 Binary files /dev/null and b/2021/02/230.png differ diff --git a/2021/02/397.png b/2021/02/397.png new file mode 100644 index 0000000..5621790 Binary files /dev/null and b/2021/02/397.png differ diff --git a/2021/02/541.png b/2021/02/541.png new file mode 100644 index 0000000..7d4b600 Binary files /dev/null and b/2021/02/541.png differ diff --git a/2021/02/68.png b/2021/02/68.png new file mode 100644 index 0000000..5f797ea Binary files /dev/null and b/2021/02/68.png differ diff --git a/2021/02/IMG_0502-150x150.jpg b/2021/02/IMG_0502-150x150.jpg new file mode 100644 index 0000000..8795f75 Binary files /dev/null and b/2021/02/IMG_0502-150x150.jpg differ diff --git a/2021/02/IMG_0502-300x108.jpg b/2021/02/IMG_0502-300x108.jpg new file mode 100644 index 0000000..7e6817c Binary files /dev/null and b/2021/02/IMG_0502-300x108.jpg differ diff --git a/2021/02/IMG_0502.jpg b/2021/02/IMG_0502.jpg new file mode 100644 index 0000000..349972f Binary files /dev/null and b/2021/02/IMG_0502.jpg differ diff --git a/2021/02/SpreadsheetCoord.cs b/2021/02/SpreadsheetCoord.cs deleted file mode 100644 index bbe30a1..0000000 --- a/2021/02/SpreadsheetCoord.cs +++ /dev/null @@ -1,199 +0,0 @@ -using System; - -namespace WindowsFormsApp1 -{ - public class SpreadsheetCoord - { - public static string ConvertToColumnCode(int columnNo, int rowNo) - { - if ((columnNo <= 0) || (rowNo <= 0)) return null; - - string rs = string.Empty; - - int x = 790; - while (x > 0) - { - int n = (x % 26); - - rs = Convert.ToChar(65 + n - 1) + rs; - - x -= n; - x = (x / 26); - } - - return string.Concat(rs, rowNo.ToString()); - } - - public static Tuple ConvertToCoord(string value) - { - bool checkAlpha = true; - string alpha = string.Empty; - string digit = string.Empty; - - for (int i = 0; i < value.Length; i++) - { - if (checkAlpha) - { - if (isAlpha(value[i])) - { - alpha += value[i]; - } - else if (isDigit(value[i])) - { - digit += value[i]; - - checkAlpha = false; - } - else - { - return null; - } - } - else - { - if (isAlpha(value[i])) - { - return null; - } - else if (isDigit(value[i])) - { - digit += value[i]; - } - else - { - return null; - } - } - } - - // no alpha or digits - if ((alpha.Length <= 0) || (digit.Length <= 0)) - { - return null; - } - - int rowNo; - if (!int.TryParse(digit, out rowNo)) - { - return null; - } - - if (rowNo <= 0) - { - return null; - } - - int columnNo = convertColumn(alpha); - - return new Tuple(columnNo, rowNo); - } - - public static bool IsValid(string value) - { - bool checkAlpha = true; - string alpha = string.Empty; - string digit = string.Empty; - - for (int i = 0; i < value.Length; i++) - { - if (checkAlpha) - { - if (isAlpha(value[i])) - { - alpha += value[i]; - } - else if (isDigit(value[i])) - { - digit += value[i]; - - checkAlpha = false; - } - else - { - return false; - } - } - else - { - if (isAlpha(value[i])) - { - return false; - } - else if (isDigit(value[i])) - { - digit += value[i]; - } - else - { - return false; - } - } - } - - // no alpha or digits - if ((alpha.Length <= 0) || (digit.Length <= 0)) - { - return false; - } - - int n; - if (!int.TryParse(digit, out n)) - { - return false; - } - - if (n <= 0) - { - return false; - } - - return true; - } - - protected static int convertColumn(string value) - { - int rv = 0; - - int len = value.Length - 1; - for (int i = len; i >= 0; i--) - { - int n = (len - i); - int x = convertColumn(value[i]); - - rv += (int)(x * Math.Pow(26, n)); - } - - return rv; - } - - protected static int convertColumn(char value) - { - if (isAlpha(value)) - { - int code = Convert.ToInt16(char.ToUpper(value)); - - return (code - 65) + 1; - } - else - { - return 0; - } - } - - - protected static bool isAlpha(char value) - { - int code = Convert.ToInt16(char.ToUpper(value)); - - return ((code >= 65) && (code <= 90)); - } - - protected static bool isDigit(char value) - { - int code = Convert.ToInt16(char.ToUpper(value)); - - return ((code >= 48) && (code <= 57)); - } - - } -} diff --git a/2021/04/bsdialog4-v0.1.0.002.js b/2021/04/bsdialog4-v0.1.0.002.js deleted file mode 100644 index 4659887..0000000 --- a/2021/04/bsdialog4-v0.1.0.002.js +++ /dev/null @@ -1,191 +0,0 @@ -/** - * BSDialog4 - * @version v0.1.0.002 (2021/04/25 1713) - */ -var BSDialog = { - Create: function (id, title, url, size) { - var a = this; - - a.id = id; - a.title = title; - a.url = url; - - if (typeof (size) == "undefined") { - a.size = "md"; - } else if (size === true) { - a.size = "lg"; - } else if (size === false) { - a.size = "md"; - } else { - a.size = size; - } - - if (!a.Exists(id)) { - a.renderContent(null); - } - - if (url != null) { - $.ajax({ - url: url, - cache: false, - xhrFields: { - withCredentials:true - }, - timeout: 30000, - success: function (result, status, xhr) { - if ((xhr.status == 200) || (xhr.status == 302) || (xhr.status == 301)) { - a.updateContentBody(id, result); - } else { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - } - }, - error: function (xhr) { - a.updateContentBody(id, xhr.statusText + " (" + xhr.status + ")"); - }, - complete: function (xhr, status) { - // do nothing yet - } - }); - } - - a.initialiseComponents(); - }, - Close: function (id) { - $("#dlg" + id).modal('hide'); - }, - Clear: function () { - $("body > div[class~='modal'][role='dialog']").remove(); - $("body > div[class~='modal-backdrop']").remove(); - $("body").removeClass("modal-open"); - }, - ShowToast: function (id, title, message, size) { - var a = this; - - if (a.Exists(id)) { - return; - } - - a.id = id; - a.title = title; - a.url = null; - a.size = ((typeof (size) == "undefined") ? "md" : size); - - a.renderContent(message); - a.initialiseComponents(); - }, - Exists: function (id) { - return ($("body > div[id='dlg" + id + "']").length > 0); - }, - generateModalHtml: function (message) { - var a = this; - - var html = ""; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - html += " " + a.title + ""; - html += " "; - html += " "; - html += "
"; - - if ($.trim(message).length <= 0) { - html += "
"; - html += "
"; - html += "
"; - html += " Loading..."; - html += "
"; - html += "
"; - html += "
"; - } else { - html += "
" + message + "
"; - } - - html += "
"; - html += " "; - html += "
"; - html += "
"; - html += "
"; - html += "
"; - - return html; - }, - renderContent: function (content) { - $("body").append(this.generateModalHtml(content)); - }, - initialiseComponents: function () { - var a = this; - var dialog = a.getElement(); - - var btnToggleSize = $(dialog).find("button[data-modal-action='restore']"); - if ($(btnToggleSize).length > 0) { - $(btnToggleSize).off('click'); - $(btnToggleSize).on('click', function () { - a.toggleSize(); - }); - } - - $(dialog).modal('show'); - - $(dialog).off('hide.bs.modal'); - $(dialog).on('hide.bs.modal', function () { - if ($(dialog).next().is("div[class~='modal-backdrop']")) { - $(dialog).next().remove(); - } - - $(dialog).remove(); - }); - - $(dialog).find(".modal-header").off("mousedown"); - $(dialog).find(".modal-header").on("mousedown", function(e) { - var posX = e.pageX - $(this).offset().left; - var posY = e.pageY - $(this).offset().top; - - $("body").off("mousemove.draggable"); - $("body").on("mousemove.draggable", function(e2) { - $(dialog).children(".modal-dialog").offset({ "left": (e2.pageX - posX), "top": (e2.pageY - posY) }); - }); - - $("body").off("mouseup"); - $("body").on("mouseup", function() { - $("body").off("mousemove.draggable"); - }); - - $(dialog).off("bs.modal.hide"); - $(dialog).on("bs.modal.hide", function() { - $("body").off("mousemove.draggable"); - }); - }); - }, - updateContentBody: function (id, text) { - var body = $("#dlg" + id).find(".modal-body"); - - if ($(body).hasClass("custom-loading")) $(body).removeClass("custom-loading"); - - $(body).html(text); - }, - getElement: function () { - return $("#dlg" + this.id); - }, - toggleSize: function () { - var div = $(this.getElement()).find("div[class^='modal-dialog']"); - if ($(div).length <= 0) { - return; - } - - if ($(div).hasClass("modal-md")) { - $(div).removeClass("modal-md"); - $(div).addClass("modal-lg"); - } else if ($(div).hasClass("modal-lg")) { - $(div).removeClass("modal-lg"); - $(div).addClass("modal-xl"); - } else if ($(div).hasClass("modal-xl")) { - $(div).removeClass("modal-xl"); -// $(div).addClass("modal-sm"); - $(div).addClass("modal-md"); - } else if ($(div).hasClass("modal-sm")) { - $(div).removeClass("modal-sm"); - $(div).addClass("modal-md"); - } - } -}; \ No newline at end of file diff --git a/2021/04/bsdialog4-v0.1.0.002.min.js b/2021/04/bsdialog4-v0.1.0.002.min.js deleted file mode 100644 index b926c88..0000000 --- a/2021/04/bsdialog4-v0.1.0.002.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * BSDialog4 - * @version v0.1.0.002 (2021/04/25 1713) - */ -var BSDialog={Create:function(o,t,e,d){var a=this;a.id=o,a.title=t,a.url=e,a.size=void 0===d?"md":!0===d?"lg":!1===d?"md":d,a.Exists(o)||a.renderContent(null),null!=e&&$.ajax({url:e,cache:!1,xhrFields:{withCredentials:!0},timeout:3e4,success:function(t,e,d){200==d.status||302==d.status||301==d.status?a.updateContentBody(o,t):a.updateContentBody(o,d.statusText+" ("+d.status+")")},error:function(t){a.updateContentBody(o,t.statusText+" ("+t.status+")")},complete:function(o,t){}}),a.initialiseComponents()},Close:function(o){$("#dlg"+o).modal("hide")},Clear:function(){$("body > div[class~='modal'][role='dialog']").remove(),$("body > div[class~='modal-backdrop']").remove(),$("body").removeClass("modal-open")},ShowToast:function(o,t,e,d){var a=this;a.Exists(o)||(a.id=o,a.title=t,a.url=null,a.size=void 0===d?"md":d,a.renderContent(e),a.initialiseComponents())},Exists:function(o){return $("body > div[id='dlg"+o+"']").length>0},generateModalHtml:function(o){var t=this,e="";return e+='"},renderContent:function(o){$("body").append(this.generateModalHtml(o))},initialiseComponents:function(){var o=this,t=o.getElement(),e=$(t).find("button[data-modal-action='restore']");$(e).length>0&&($(e).off("click"),$(e).on("click",function(){o.toggleSize()})),$(t).modal("show"),$(t).off("hide.bs.modal"),$(t).on("hide.bs.modal",function(){$(t).next().is("div[class~='modal-backdrop']")&&$(t).next().remove(),$(t).remove()}),$(t).find(".modal-header").off("mousedown"),$(t).find(".modal-header").on("mousedown",function(o){var e=o.pageX-$(this).offset().left,d=o.pageY-$(this).offset().top;$("body").off("mousemove.draggable"),$("body").on("mousemove.draggable",function(o){$(t).children(".modal-dialog").offset({left:o.pageX-e,top:o.pageY-d})}),$("body").off("mouseup"),$("body").on("mouseup",function(){$("body").off("mousemove.draggable")}),$(t).off("bs.modal.hide"),$(t).on("bs.modal.hide",function(){$("body").off("mousemove.draggable")})})},updateContentBody:function(o,t){var e=$("#dlg"+o).find(".modal-body");$(e).hasClass("custom-loading")&&$(e).removeClass("custom-loading"),$(e).html(t)},getElement:function(){return $("#dlg"+this.id)},toggleSize:function(){var o=$(this.getElement()).find("div[class^='modal-dialog']");$(o).length<=0||($(o).hasClass("modal-md")?($(o).removeClass("modal-md"),$(o).addClass("modal-lg")):$(o).hasClass("modal-lg")?($(o).removeClass("modal-lg"),$(o).addClass("modal-xl")):$(o).hasClass("modal-xl")?($(o).removeClass("modal-xl"),$(o).addClass("modal-md")):$(o).hasClass("modal-sm")&&($(o).removeClass("modal-sm"),$(o).addClass("modal-md")))}}; \ No newline at end of file diff --git a/2021/07/886-150x140.jpg b/2021/07/886-150x140.jpg new file mode 100644 index 0000000..17eb46d Binary files /dev/null and b/2021/07/886-150x140.jpg differ diff --git a/2021/07/886.jpg b/2021/07/886.jpg new file mode 100644 index 0000000..ce8e108 Binary files /dev/null and b/2021/07/886.jpg differ diff --git a/2021/07/emulator-login-screen-2-200.png b/2021/07/emulator-login-screen-2-200.png new file mode 100644 index 0000000..62e58bc Binary files /dev/null and b/2021/07/emulator-login-screen-2-200.png differ diff --git a/2021/07/emulator-login-screen-2.png b/2021/07/emulator-login-screen-2.png new file mode 100644 index 0000000..307cb94 Binary files /dev/null and b/2021/07/emulator-login-screen-2.png differ diff --git a/2021/07/emulator-login-screen-200.png b/2021/07/emulator-login-screen-200.png new file mode 100644 index 0000000..def436b Binary files /dev/null and b/2021/07/emulator-login-screen-200.png differ diff --git a/2021/07/emulator-login-screen.png b/2021/07/emulator-login-screen.png new file mode 100644 index 0000000..ee5ce98 Binary files /dev/null and b/2021/07/emulator-login-screen.png differ diff --git a/2021/07/emulator-more-info-screen-200.png b/2021/07/emulator-more-info-screen-200.png new file mode 100644 index 0000000..1079dec Binary files /dev/null and b/2021/07/emulator-more-info-screen-200.png differ diff --git a/2021/07/emulator-more-info-screen.png b/2021/07/emulator-more-info-screen.png new file mode 100644 index 0000000..cde90fe Binary files /dev/null and b/2021/07/emulator-more-info-screen.png differ diff --git a/2021/07/emulator-password-reset-1-screen-2-200.png b/2021/07/emulator-password-reset-1-screen-2-200.png new file mode 100644 index 0000000..01a66aa Binary files /dev/null and b/2021/07/emulator-password-reset-1-screen-2-200.png differ diff --git a/2021/07/emulator-password-reset-1-screen-2.png b/2021/07/emulator-password-reset-1-screen-2.png new file mode 100644 index 0000000..5dea8ff Binary files /dev/null and b/2021/07/emulator-password-reset-1-screen-2.png differ diff --git a/2021/07/emulator-password-reset-1-screen-200.png b/2021/07/emulator-password-reset-1-screen-200.png new file mode 100644 index 0000000..1d3144c Binary files /dev/null and b/2021/07/emulator-password-reset-1-screen-200.png differ diff --git a/2021/07/emulator-password-reset-1-screen.png b/2021/07/emulator-password-reset-1-screen.png new file mode 100644 index 0000000..2026817 Binary files /dev/null and b/2021/07/emulator-password-reset-1-screen.png differ diff --git a/2021/07/emulator-password-reset-2-screen-200.png b/2021/07/emulator-password-reset-2-screen-200.png new file mode 100644 index 0000000..7054bb0 Binary files /dev/null and b/2021/07/emulator-password-reset-2-screen-200.png differ diff --git a/2021/07/emulator-password-reset-2-screen.png b/2021/07/emulator-password-reset-2-screen.png new file mode 100644 index 0000000..1814ba0 Binary files /dev/null and b/2021/07/emulator-password-reset-2-screen.png differ diff --git a/2021/07/emulator-splash-screen-200.png b/2021/07/emulator-splash-screen-200.png new file mode 100644 index 0000000..c46b6c8 Binary files /dev/null and b/2021/07/emulator-splash-screen-200.png differ diff --git a/2021/07/emulator-splash-screen.png b/2021/07/emulator-splash-screen.png new file mode 100644 index 0000000..ab02eab Binary files /dev/null and b/2021/07/emulator-splash-screen.png differ diff --git a/2021/07/fizzy-launcher-1-1-200.png b/2021/07/fizzy-launcher-1-1-200.png new file mode 100644 index 0000000..795979a Binary files /dev/null and b/2021/07/fizzy-launcher-1-1-200.png differ diff --git a/2021/07/fizzy-launcher-1-1.png b/2021/07/fizzy-launcher-1-1.png new file mode 100644 index 0000000..c322b32 Binary files /dev/null and b/2021/07/fizzy-launcher-1-1.png differ diff --git a/2021/07/fizzy-launcher-2-1-200.png b/2021/07/fizzy-launcher-2-1-200.png new file mode 100644 index 0000000..96878b4 Binary files /dev/null and b/2021/07/fizzy-launcher-2-1-200.png differ diff --git a/2021/07/fizzy-launcher-2-1.png b/2021/07/fizzy-launcher-2-1.png new file mode 100644 index 0000000..a21eb1b Binary files /dev/null and b/2021/07/fizzy-launcher-2-1.png differ diff --git a/2021/07/fizzy-launcher-3-1-200.png b/2021/07/fizzy-launcher-3-1-200.png new file mode 100644 index 0000000..a988529 Binary files /dev/null and b/2021/07/fizzy-launcher-3-1-200.png differ diff --git a/2021/07/fizzy-launcher-3-1.png b/2021/07/fizzy-launcher-3-1.png new file mode 100644 index 0000000..e42132d Binary files /dev/null and b/2021/07/fizzy-launcher-3-1.png differ diff --git a/2021/07/wireframe-login-screen-200.png b/2021/07/wireframe-login-screen-200.png new file mode 100644 index 0000000..dcb8251 Binary files /dev/null and b/2021/07/wireframe-login-screen-200.png differ diff --git a/2021/07/wireframe-login-screen-360.png b/2021/07/wireframe-login-screen-360.png new file mode 100644 index 0000000..24c10d8 Binary files /dev/null and b/2021/07/wireframe-login-screen-360.png differ diff --git a/2021/07/wireframe-login-screen.png b/2021/07/wireframe-login-screen.png new file mode 100644 index 0000000..71dca87 Binary files /dev/null and b/2021/07/wireframe-login-screen.png differ diff --git a/2021/07/wireframe-more-info-screen-200.png b/2021/07/wireframe-more-info-screen-200.png new file mode 100644 index 0000000..702e313 Binary files /dev/null and b/2021/07/wireframe-more-info-screen-200.png differ diff --git a/2021/07/wireframe-more-info-screen-360.png b/2021/07/wireframe-more-info-screen-360.png new file mode 100644 index 0000000..aec18b9 Binary files /dev/null and b/2021/07/wireframe-more-info-screen-360.png differ diff --git a/2021/07/wireframe-more-info-screen.png b/2021/07/wireframe-more-info-screen.png new file mode 100644 index 0000000..6a34e82 Binary files /dev/null and b/2021/07/wireframe-more-info-screen.png differ diff --git a/2021/07/wireframe-password-reset-1-screen-200.png b/2021/07/wireframe-password-reset-1-screen-200.png new file mode 100644 index 0000000..7c9f054 Binary files /dev/null and b/2021/07/wireframe-password-reset-1-screen-200.png differ diff --git a/2021/07/wireframe-password-reset-1-screen-360.png b/2021/07/wireframe-password-reset-1-screen-360.png new file mode 100644 index 0000000..0f75e78 Binary files /dev/null and b/2021/07/wireframe-password-reset-1-screen-360.png differ diff --git a/2021/07/wireframe-password-reset-1-screen.png b/2021/07/wireframe-password-reset-1-screen.png new file mode 100644 index 0000000..3dc21ee Binary files /dev/null and b/2021/07/wireframe-password-reset-1-screen.png differ diff --git a/2021/07/wireframe-password-reset-2-screen-200.png b/2021/07/wireframe-password-reset-2-screen-200.png new file mode 100644 index 0000000..8af376f Binary files /dev/null and b/2021/07/wireframe-password-reset-2-screen-200.png differ diff --git a/2021/07/wireframe-password-reset-2-screen-360.png b/2021/07/wireframe-password-reset-2-screen-360.png new file mode 100644 index 0000000..a88219a Binary files /dev/null and b/2021/07/wireframe-password-reset-2-screen-360.png differ diff --git a/2021/07/wireframe-password-reset-2-screen.png b/2021/07/wireframe-password-reset-2-screen.png new file mode 100644 index 0000000..4d69b10 Binary files /dev/null and b/2021/07/wireframe-password-reset-2-screen.png differ diff --git a/2021/07/wireframe-splash-screen-200.png b/2021/07/wireframe-splash-screen-200.png new file mode 100644 index 0000000..2528d4a Binary files /dev/null and b/2021/07/wireframe-splash-screen-200.png differ diff --git a/2021/07/wireframe-splash-screen-360.png b/2021/07/wireframe-splash-screen-360.png new file mode 100644 index 0000000..d760073 Binary files /dev/null and b/2021/07/wireframe-splash-screen-360.png differ diff --git a/2021/07/wireframe-splash-screen.png b/2021/07/wireframe-splash-screen.png new file mode 100644 index 0000000..da12cdf Binary files /dev/null and b/2021/07/wireframe-splash-screen.png differ diff --git a/2021/08/bookmark-manager-data.json b/2021/08/bookmark-manager-data.json new file mode 100644 index 0000000..b9fb690 --- /dev/null +++ b/2021/08/bookmark-manager-data.json @@ -0,0 +1 @@ +{"Name":"Bookmark Manager","Description":"Bookmark Manager is a free utility for storing and organising your favourite Internet shortcuts. Your bookmarks are stored in a locally saved file to give you complete control. This is free open source software for Windows.","CurrentVersion":"0.4.4.026 beta","CTA":[{"Name":"Download Installer (64-bit)","Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.4.026/bookmark-manager.exe"}],"Features":["Loads title, description and favicon from the webpage.","Supports favicons (with a local cache)","Supports password protection for your saved files","Supports unicode","Simple design","Open-source software","No ads","No installer required (installer available)","No warranty"],"Screenshots":[{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/bomg-r4-screenshot-2-200.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/bomg-r4-screenshot-2.png"},{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/bomg-r4-screenshot-1-200.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/bomg-r4-screenshot-1.png"}],"History":[{"Name":"0.4.4.026 beta","Date":"27/01/2022","ChangeLog":["Improved controls"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.4.026/bookmark-manager.exe","Name":"64-Bit Installer","MD5":"61433FCC6E9549C71B2EFC9C69905C34"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.4.026/bookmark-manager.7z","Name":"64-Bit 7zip","MD5":"44F1C3348D395E522C8F2D3D438FD136"}]},{"Name":"0.4.3.030 beta","Date":"30/12/2021","ChangeLog":["Improved accessibility with UI controls"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.3.030/bookmark-manager.exe","Name":"64-Bit Installer","MD5":"1D11CDF24FAF11520B82ED4BFFA3048D"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.3.030/bookmark-manager.7z","Name":"64-Bit 7zip","MD5":"14D2969161EC5FF678A04F8DEA61E5C3"}]},{"Name":"0.4.2.008 beta","Date":"16/11/2021","ChangeLog":["Added: optional toolbar"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.2.008/bookmark-manager.exe","Name":"64-Bit Installer","MD5":"04B84E0FB1F5F968306822A780DBDFB8"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.2.008/bookmark-manager.7z","Name":"64-Bit 7zip","MD5":"5B8837213C6D323A8B5E2FF4D8A3D4F5"}]},{"Name":"0.4.1.006 beta","Date":"12/10/2021","ChangeLog":["Added: ignore SSL verification for reading webpage details","Fixed: saving new file doesn't save file location"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.1.006/bookmark-manager-86.exe","Name":"32-Bit Installer","MD5":"C6E695C14A0CD82E1439E58AA9BD7634"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.1.006/bookmark-manager-86.7z","Name":"32-Bit 7zip","MD5":"8B6D3F729E7F7A162C40474AEB974BF5"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.1.006/bookmark-manager-64.exe","Name":"64-Bit Installer","MD5":"8F2B7761F67E05A77FAC0EB06B1F2170"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.1.006/bookmark-manager-64.7z","Name":"64-Bit 7zip","MD5":"CD22D9FCA2BCE434CD9C47B46B9F838B"}]},{"Name":"0.4.0.132 beta","Date":"01/10/2021","ChangeLog":["Fixed: webpage title not updating"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.132/bookmark-manager-86.exe","Name":"32-Bit Installer","MD5":"BAD94FFE905732205186A865FB7DA036"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.132/bookmark-manager-86.7z","Name":"32-Bit 7zip","MD5":"3BCEC6D6F255F56C3175C08F6F62BC48"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.132/bookmark-manager-64.exe","Name":"64-Bit Installer","MD5":"4B3E21F4E7A9585F3F351F35FE699A75"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.132/bookmark-manager-64.7z","Name":"64-Bit 7zip","MD5":"A128674EB7BC695D89DE825CB15C5849"}]},{"Name":"0.4.0.130 beta","Date":"01/10/2021","ChangeLog":["Upgraded to .NET Framework 5.0","Changed project icon","Modernised code-base"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.130/bookmark-manager-86.exe","Name":"32-Bit Installer","MD5":"6B39F1818FED6A9200AE5C4A2FCB3B73"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.130/bookmark-manager-86.7z","Name":"32-Bit 7zip","MD5":"A0DF9EE01CA5662C79E9EC3557312227"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.130/bookmark-manager-64.exe","Name":"64-Bit Installer","MD5":"EAE030459E907F432B7E64225EBB9ABB"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager-r4/0.4.0.130/bookmark-manager-64.7z","Name":"64-Bit 7zip","MD5":"EAE030459E907F432B7E64225EBB9ABB"}]},{"Name":"0.3.0.031 beta","Date":"05/09/2020","ChangeLog":["Upgraded to using .NET Framework 4.7.2","Changed icons","Added dialog box to load files","Refactor/modernise some code","Added \"-open\" switch to open file on-launch"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.3.0.031-beta/bookmark-manager.7z","Name":"7-Zip Package","MD5":"F1F3EA2F6E2AF6157D1B8B3554E33C48"}]},{"Name":"0.3.0.018 beta","Date":"18/05/2019","ChangeLog":["Save button state change on content change"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.3.0.018-beta/bookmark-manager.7z","Name":"7-Zip Package","MD5":"A60FCC014DD44CA12640BBB9B607A954"}]},{"Name":"0.3.0.014 beta","Date":"28/04/2019","ChangeLog":["Improved favicon detection"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.3.0.014-beta/bookmark-manager.7z","Name":"7-Zip Package","MD5":"A5E4ECD7111B8BD77D8E1BA20F8799E1"}]},{"Name":"0.3.0.013 beta","Date":"27/04/2019","ChangeLog":["Near-total rebuild","Improved UI look","New save file format (Jsnx)","New icons (Feather)"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.3.0.013-beta/bookmark-manager.7z","Name":"7-Zip Package","MD5":"1CAEE8BF6420BCC3E9FF613AC57F3A03"}]},{"Name":"0.2.0.082 beta","Date":"19/05/2017","ChangeLog":["Swapped out SQLite.Core library and helper","New yellow icon","HtmlAgilityPack to use nuget package"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.2.0.082-beta/bookmark-manager.7z","Name":"7-Zip Package","MD5":"6C40D442154F4AE51EE5F79C31B60E32"}]},{"Name":"0.2.0.073 beta","Date":"12/01/2017","ChangeLog":["First public release","Known issues: treeview drag-and-drop needs to be reworked."],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.2.0.073-beta/bookmark-manager.7z","Name":"7-Zip Package","MD5":"C129ED374AE2F17FA11B10AAA2B7E9D6"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/bookmark-manager/0.2.0.073-beta/source-code.7z","Name":"Source Code","MD5":"A3AB65D4C1D89AF73EDDC4B35C5BF645"}]},{"Name":"0.2.0.068 beta","Date":"09/01/2017","ChangeLog":["First beta release after major rebuild","Internal release"],"Downloads":[]},{"Name":"0.1.0.062 alpha","Date":"16/10/2012","ChangeLog":["Final build before project is shelved","Internal release"],"Downloads":[]},{"Name":"0.1.0.022 alpha","Date":"29/09/2012","ChangeLog":["First alpha build","Internal release"],"Downloads":[]},{"Name":"0.0.0","Date":"11/09/2012","ChangeLog":["Project started"],"Downloads":[]}],"Repositories":[{"Name":"GitLab","Link":"https://git.hiimray.co.uk/SympatheticFire/bookmark-manager-r4"},{"Name":"GitLab (for 0.3.x and below)","Link":"https://git.hiimray.co.uk/SympatheticFire/bookmark-manager"}],"License":["This software is released under the GPLv3 license.","All software on this website is provided \"as is\" without warranty of any kind, either express or implied. The use of this software, in particular, is done solely at your own risk; with agreement that the original author is not liable for any damage (subsequently incurred) of any kind."],"Acknowledgements":["This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites."],"Attribution":[{"Name":"Feather - Simply Beautiful Open Source Icons","Link":"https://feathericons.com/"},{"Name":"Newtonsoft Json.NET","Link":"https://www.newtonsoft.com/json"},{"Name":"HtmlAgilityPack","Link":"https://htmlagilitypack.codeplex.com/"},{"Name":"SharpZipLib","Link":"https://icsharpcode.github.io/SharpZipLib/"},{"Name":"System.Data.SQLite.Core","Link":"https://system.data.sqlite.org/"}]} diff --git a/2021/08/bsdialog-data.json b/2021/08/bsdialog-data.json new file mode 100644 index 0000000..755e379 --- /dev/null +++ b/2021/08/bsdialog-data.json @@ -0,0 +1 @@ +{"Name":"BSDialog","Description":"BSDialog is a JavaScript helper for improving Bootstrap 3 modals. Add (and remove) modals to a page dynamically and load content with jQuery/AJAX. Bootstrap 3 is required.","CurrentVersion":"0.1.0.029a","CTA":[{"Name":"Download Minified JS","Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2019/11/bsdialog-v0.1.0.029a.min.js"},{"Name":"Download Full-Fat JS","Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2019/11/bsdialog-v0.1.0.029a.js"}],"Features":["Add (inject) and remove modals into a page","Load modal-content or modal-body from URL with jQuery-AJAX","Stack multiple modals"],"Screenshots":[],"History":[{"Name":"0.1.0.029a","Date":"09/11/2019","ChangeLog":["Ajax with-credentials support"],"Downloads":[{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2019/11/bsdialog-v0.1.0.029a.min.js","Name":"minJS","MD5":""},{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2019/11/bsdialog-v0.1.0.029a.js","Name":"JS","MD5":""},{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2019/11/bsdialog-v0.1.0.029a.js","Name":"GitLab","MD5":""}],"Documentation":[{"Link":"/2022/04/02/usage-guide-for-bsdialog/1113","Name":"Quick usage guide"}]},{"Name":"0.1.0.024","Date":"07/07/2019","ChangeLog":["Major rewrite","Added support for modal-content and modal-body content update"],"Downloads":[{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2019/07/bsdialog-v0.1.0.024.min.js","Name":"minJS","MD5":""},{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2019/07/bsdialog-v0.1.0.024.js","Name":"JS","MD5":""},{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2019/07/bsdialog-v0.1.0.024.js","Name":"GitLab","MD5":""}]},{"Name":"0.1.0.023","Date":"14/07/2015","ChangeLog":["First release"],"Downloads":[{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2016/08/bshelper-modal-v0.1.0.023.min.js","Name":"minJS","MD5":""},{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2016/08/bshelper-modal-v0.1.0.023.js","Name":"JS","MD5":""},{"Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2016/08/bshelper-modal-v0.1.0.023.js","Name":"GitLab","MD5":""}]}],"Repositories":[{"Name":"GitLab","Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2019/11/bsdialog-v0.1.0.029a.js"}],"License":[],"Acknowledgements":["This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites."],"Attribution":[{"Name":"Bootstrap","Link":"https://getbootstrap.com/"},{"Name":"jQuery","Link":"https://jquery.com"}]} diff --git a/2021/08/bsdialog4-data.json b/2021/08/bsdialog4-data.json new file mode 100644 index 0000000..29b9f7e --- /dev/null +++ b/2021/08/bsdialog4-data.json @@ -0,0 +1 @@ +{"Name":"BSDialog4","Description":"BSDialog4 is a JavaScript helper for improving Bootstrap 4 modals. Add (and remove) modals to a page dynamically and load content with jQuery-AJAX. Bootstrap 4 is required.","CurrentVersion":"0.1.0.002","CTA":[{"Name":"Download Minified JS","Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2021/04/bsdialog4-v0.1.0.002.min.js"},{"Name":"Download Full-Fat JS","Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2021/04/bsdialog4-v0.1.0.002.js"}],"Features":["Add (inject) and remove modals into a page","Load modal-content or modal-body from URL with jQuery-AJAX","Stack multiple modals"],"Screenshots":[],"History":[{"Name":"0.1.0.002","Date":"25/04/2021","ChangeLog":["Added backwards support for migrations from BSDialog","Removed small-size from list of sizes","Changed AJAX time-out to 30 seconds"],"Downloads":[{"Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2021/04/bsdialog4-v0.1.0.002.min.js","Name":"minJS","MD5":""},{"Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2021/04/bsdialog4-v0.1.0.002.js","Name":"JS","MD5":""},{"Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2021/04/bsdialog4-v0.1.0.002.js","Name":"GitLab","MD5":""}],"Documentation":[{"Link":"/2022/04/02/usage-guide-for-bsdialog4/1117","Name":"Quick usage guide"}]},{"Name":"0.1.0.001","Date":"27/12/2019","ChangeLog":["Forked from BSDialog, upgraded for BS4"],"Downloads":[{"Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2020/01/bsdialog4-v0.1.0.001.min.js","Name":"minJS","MD5":""},{"Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/raw/master/2020/01/bsdialog4-v0.1.0.001.js","Name":"JS","MD5":""},{"Link":"//git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2020/01/bsdialog4-v0.1.0.001.js","Name":"GitLab","MD5":""}]}],"Repositories":[{"Name":"GitLab","Link":"https://git.hiimray.co.uk/SympatheticFire/hiimray-co-uk-www-posts/blob/master/2021/04/bsdialog4-v0.1.0.002.js"}],"License":[],"Acknowledgements":["This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites."],"Attribution":[{"Name":"Bootstrap","Link":"https://getbootstrap.com/"},{"Name":"jQuery","Link":"https://jquery.com"}]} diff --git a/2021/08/fizzy-launcher-data.json b/2021/08/fizzy-launcher-data.json new file mode 100644 index 0000000..7e8aaff --- /dev/null +++ b/2021/08/fizzy-launcher-data.json @@ -0,0 +1 @@ +{"Name":"Fizzy Launcher","Description":"Fizzy Launcher is an app' launcher for Windows! Start applications and open file shortcuts in fizzin'-style.","CurrentVersion":"0.2.4.117","CTA":[{"Name":"Download Installer (64-bit)","Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.4.117/fizzylauncher.exe"}],"Features":["Start your applications","Open file shortcuts","Hotkey for toggling the launcher","No ads","No installer required (installer available)","No warranty"],"Screenshots":[{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/07/fizzy-launcher-1-1-200.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/07/fizzy-launcher-1-1.png"},{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/07/fizzy-launcher-2-1-200.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/07/fizzy-launcher-2-1.png"},{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/07/fizzy-launcher-3-1-200.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/07/fizzy-launcher-3-1.png"}],"History":[{"Name":"0.2.4.117","Date":"21/02/2022","ChangeLog":["Fixed issue with escapable characters saving an unicode"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.4.117/fizzylauncher.exe","Name":"64-Bit Installer","MD5":"3875BDE790780C4D1AC4F3597248EF4A"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.4.117/fizzylauncher.7z","Name":"64-Bit 7zip","MD5":"163C7285C8711C3A88CB97EBF6EAB887"}]},{"Name":"0.2.4.032","Date":"07/11/2021","ChangeLog":["Execute with shell as default"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.4.032/fizzylauncher.exe","Name":"64-Bit Installer","MD5":"B9A3C1152A5AA96DB8EC813B3A22161A"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.4.032/fizzylauncher.7z","Name":"64-Bit 7zip","MD5":"BE9A2DF523C50AAFBDA4B15D8A4309B2"}]},{"Name":"0.2.3.009","Date":"01/08/2021","ChangeLog":["Added command-line switch (-o) to open file on start-up."],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.009/fizzy-launcher-86.exe","Name":"32-Bit Installer","MD5":"0873B0A63443CC8BB6272109C2CF0FFF"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.009/fizzy-launcher-86.7z","Name":"32-Bit 7zip","MD5":"3D34FC78B6AB9B50F40E79A27E42060F"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.009/fizzy-launcher-64.exe","Name":"64-Bit Installer","MD5":"FE442DFB7CBEC6FFCFC43DECAE2B627D"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.009/fizzy-launcher-64.7z","Name":"64-Bit 7zip","MD5":"9100B391FA221A5BD2192D5D6466CDC2"}]},{"Name":"0.2.3.006","Date":"01/08/2021","ChangeLog":["Changed icons and controls for list box"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.006/fizzy-launcher-86.exe","Name":"32-Bit Installer","MD5":"82C0FC3A8DC0C3D6D9F5D4E2A38F718D"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.006/fizzy-launcher-86.7z","Name":"32-Bit 7zip","MD5":"AD62B600D08B3A45F74B8A9C9F607100"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.006/fizzy-launcher-64.exe","Name":"64-Bit Installer","MD5":"1E1F199DB4520582925E372FB3B7472B"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.3.006/fizzy-launcher-64.7z","Name":"64-Bit 7zip","MD5":"6D327B9019FB3B2188F06B9338B4AE11"}]},{"Name":"0.2.2.018","Date":"30/07/2021","ChangeLog":["Changed icons and controls for list box"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.018/fizzy-launcher-86.exe","Name":"32-Bit Installer","MD5":"267375E6E72F7B351F34E7F98C8E5616"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.018/fizzy-launcher-86.7z","Name":"32-Bit 7zip","MD5":"431E970E6A696992FAB36FDE88208988"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.018/fizzy-launcher-64.exe","Name":"64-Bit Installer","MD5":"ECB743F9EB5F493250532BBFA71745BD"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.018/fizzy-launcher-64.7z","Name":"64-Bit 7zip","MD5":"D40D732B93C51A28E720C2E8D8ED9B73"}]},{"Name":"0.2.2.015","Date":"28/07/2021","ChangeLog":["Added keyboard shortcuts to main menu","Changed order of controls in list box","Fixed folder labels failing to update","Fixed run as administrator not working"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.015/fizzy-launcher-86.exe","Name":"32-Bit Installer","MD5":"26A097B1FC1C5EC5F06FC22D53B27AE4"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.015/fizzy-launcher-86.7z","Name":"32-Bit 7zip","MD5":"301991C912F9D5CB41AE412C5469C382"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.015/fizzy-launcher-64.exe","Name":"64-Bit Installer","MD5":"F8B575AEAA1A02E0D38DA637C52B4037"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.015/fizzy-launcher-64.7z","Name":"64-Bit 7zip","MD5":"115F7E105525B606CD0B3BA7C044F79D"}]},{"Name":"0.2.2.004","Date":"24/07/2021","ChangeLog":["Changed colours in buttons","Changed ListBox to use vertical stacked controls"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.004/fizzy-launcher-86.exe","Name":"32-Bit Installer","MD5":"F38E271A1D8B87F316A6BCC69EBF998C"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.004/fizzy-launcher-86.7z","Name":"32-Bit 7zip","MD5":"BA6925FDFDFC1113E13CF7F2A60150EA"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.004/fizzy-launcher-64.exe","Name":"64-Bit Installer","MD5":"84AF9F36CD9EDD4548630B45902C0943"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.2.004/fizzy-launcher-64.7z","Name":"64-Bit 7zip","MD5":"C5B288151816EDE405E596E6DC2969D2"}]},{"Name":"0.2.1.055","Date":"23/07/2021","ChangeLog":["Upgrade/port to .NET 5"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.1.055/fizzy-launcher-86.exe","Name":"32-Bit Installer","MD5":"316D31C4551C9B8920FAF55B30FF9F53"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.1.055/fizzy-launcher-86.7z","Name":"32-Bit 7zip","MD5":"64FC397017886F98D1632CE4CF9FF99E"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.1.055/fizzy-launcher-64.exe","Name":"64-Bit Installer","MD5":"BA51D923497964E11D40721CAF3E0B6B"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.2.1.055/fizzy-launcher-64.7z","Name":"64-Bit 7zip","MD5":"65B585C7FA181E01D66EC76E81BB08B3"}]},{"Name":"0.1.2.016","Date":"01/06/2021","ChangeLog":["Added support for %FIRST% and %LAST% directory in environment path","Changed application interface template"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.2.016/fizzy-launcher.exe","Name":"Installer","MD5":"61726C49F9BB01DEE932A5C2D24FC927"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.2.016/fizzy-launcher.7z","Name":"7zip","MD5":"1900F2992AA6BA2BFD864818F35FD9B3"}]},{"Name":"0.1.1.158","Date":"21/11/2020","ChangeLog":["Added special folder support","Added system shut-down supported"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.158/fizzy-launcher.exe","Name":"Installer","MD5":"4EFE241F93BE1DAD859FC4F03D3729B9"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.158/fizzy-launcher.7z","Name":"7zip","MD5":"63840EB76CC0C55FB61747587AAA876A"}]},{"Name":"0.1.1.153","Date":"14/11/2020","ChangeLog":["Added remember last position","Added toggle on/off animation","Added toggle on/off big icons for items in folder","Added drag-n-drop support for shortcuts to folder"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.153/fizzy-launcher.exe","Name":"Installer","MD5":"9157B886313DD909CF8DC882F7EDC5FA"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.153/fizzy-launcher.7z","Name":"7zip","MD5":"01F45258BE4ACC68CE453C07F4D7BCB3"}]},{"Name":"0.1.1.144 alpha","Date":"11/09/2020","ChangeLog":["Fixed flickering with panel animation","Added remove row action in menu"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.144 alpha/fizzy-launcher.exe","Name":"Installer","MD5":"233EBEEF89DABE0EA7582467CE341334"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.144 alpha/fizzy-launcher.7z","Name":"7zip","MD5":"972C205D59F2CC215963006B59DFDB96"}]},{"Name":"0.1.1.109 alpha","Date":"07/06/2020","ChangeLog":["Fixed hotkey registration on start-up"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.109 alpha/fizzy-launcher.exe","Name":"Installer","MD5":"9909D7BB37FDD9524CB62579D76C4E97"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.109 alpha/fizzy-launcher.7z","Name":"7zip","MD5":"3E4B7071CA0B096E6BFC2FFAAE55141E"}]},{"Name":"0.1.1.108 alpha","Date":"23/05/2020","ChangeLog":["Changed dialog border colour","Changed menu colours"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.108 alpha/fizzy-launcher.exe","Name":"Installer","MD5":""},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.108 alpha/fizzy-launcher.7z","Name":"7zip","MD5":""}]},{"Name":"0.1.1.107 alpha","Date":"20/05/2020","ChangeLog":["First-working early-alpha build","Internal release"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.107 alpha/fizzy-launcher.msi","Name":"Installer","MD5":""},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/fizzy-launcher/0.1.1.107 alpha/fizzy-launcher.7z","Name":"7zip","MD5":""}]}],"Repositories":[{"Name":"GitLab","Link":"https://git.hiimray.co.uk/SympatheticFire/linear-app-launcher"}],"License":["This software is due to be released under the GPLv3 license.","All software on this website is provided \"as is\" without warranty of any kind, either express or implied. The use of this software, in particular, is done solely at your own risk; with agreement that the original author is not liable for any damage (subsequently incurred) of any kind."],"Acknowledgements":["This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites."],"Attribution":[{"Name":"Newtonsoft Json.NET","Link":"https://www.newtonsoft.com/json"}]} diff --git a/2021/08/youtube-watched-data.json b/2021/08/youtube-watched-data.json new file mode 100644 index 0000000..141ba76 --- /dev/null +++ b/2021/08/youtube-watched-data.json @@ -0,0 +1,85 @@ +{ + "Name" : "YouTube Watched", + "Description" : "YouTube Watched is a Chrome extension for removing \"watched\" and \"resumable\" videos from your YouTube Subscriptions page. This extension is not endorsed by YouTube.", + "CurrentVersion" : "1.1.0 (suspended)", + "CTA" : [ + { + "Name" : "Chrome Web Store", + "Link" : "https://chrome.google.com/webstore/detail/youtube-watched/dckoecgnbnmbgjchiopfbjkpemkmllbj" + } + ], + "Features" : [ + "Hide \"watched\" videos from your Subscriptions page", + "Hide \"resumable\" videos", + "Hide \"video hidden from feed\" boxes" + ], + "Screenshots" : [ + { + "ThumbnailURL" : "//www.hiimray.co.uk/wp-content/uploads/2018/05/youtube-watched-screenshot-1-128.png", + "ImageURL" : "//www.hiimray.co.uk/wp-content/uploads/2018/05/youtube-watched-screenshot-1.png" + } + ], + "History" : [ + { + "Name" : "1.1.0", + "Date" : "13/04/2020", + "ChangeLog" : [ + "Taken-down from Chrome Web Store (unknown reasons)", + "Refactored some code", + "Changed to private hosting" + ], + "Downloads" : [] + }, + { + "Name" : "1.0.4", + "Date" : "30/06/2018", + "ChangeLog" : [ "Reworked code for messages", "Reworked filter for hidden videos" ], + "Downloads" : [] + }, + { + "Name" : "1.0.3", + "Date" : "28/05/2018", + "ChangeLog" : [ "Hide video on middle-click" ], + "Downloads" : [] + }, + { + "Name" : "1.0.2", + "Date" : "15/05/2018", + "ChangeLog" : [ "Filter on feed-load event" ], + "Downloads" : [] + }, + { + "Name" : "1.0.1", + "Date" : "14/05/2018", + "ChangeLog" : [ "Published to Chrome Web Store" ], + "Downloads" : [] + }, + { + "Name" : "0.0.0", + "Date" : "10/05/2018", + "ChangeLog" : [ "First working" ], + "Downloads" : [] + }, + { + "Name" : "0.0.0", + "Date" : "05/11/2017", + "ChangeLog" : [ "I started to consider starting this project" ], + "Downloads" : [] + } + ], + "Repositories" : [], + "License" : [ + "All software on this website is provided \"as is\" without warranty of any kind, either express or implied. The use of this software, in particular, is done solely at your own risk; with agreement that the original author is not liable for any damage (subsequently incurred) of any kind." + ], + "Acknowledgements" : [ "This software has a number of dependencies by third-parties." ], + "Attribution" : [ + { + "Name" : "Chrome", + "Link" : "https://www.google.co.uk/chrome/" + }, + { + "Name" : "YouTube", + "Link" : "https://www.youtube.com/" + } + ] +} diff --git a/2021/10/32-1.png b/2021/10/32-1.png new file mode 100644 index 0000000..04b8aa4 Binary files /dev/null and b/2021/10/32-1.png differ diff --git a/2021/10/32.png b/2021/10/32.png new file mode 100644 index 0000000..c601a2b Binary files /dev/null and b/2021/10/32.png differ diff --git a/2021/10/bomg-r4-screenshot-1-200.png b/2021/10/bomg-r4-screenshot-1-200.png new file mode 100644 index 0000000..7e989fb Binary files /dev/null and b/2021/10/bomg-r4-screenshot-1-200.png differ diff --git a/2021/10/bomg-r4-screenshot-1.png b/2021/10/bomg-r4-screenshot-1.png new file mode 100644 index 0000000..c544660 Binary files /dev/null and b/2021/10/bomg-r4-screenshot-1.png differ diff --git a/2021/10/bomg-r4-screenshot-2-200.png b/2021/10/bomg-r4-screenshot-2-200.png new file mode 100644 index 0000000..04d566c Binary files /dev/null and b/2021/10/bomg-r4-screenshot-2-200.png differ diff --git a/2021/10/bomg-r4-screenshot-2.png b/2021/10/bomg-r4-screenshot-2.png new file mode 100644 index 0000000..dc653bb Binary files /dev/null and b/2021/10/bomg-r4-screenshot-2.png differ diff --git a/2021/10/randomfilerunner-data.json b/2021/10/randomfilerunner-data.json new file mode 100644 index 0000000..907d551 --- /dev/null +++ b/2021/10/randomfilerunner-data.json @@ -0,0 +1,93 @@ +{ + "Name" : "Random File Runner", + "Description" : "Run a file at random from a list of discovered files.", + "CurrentVersion" : "0.1.2.065 alpha", + "CTA" : [], + "Features" : [ + "Search for files using a wildcard pattern", + "Support patterns with multiple wilcards", + "Run a random file from the list", + "Support global hotkey for running next file" + ], + "Screenshots" : [ + { + "ThumbnailURL" : "//www.hiimray.co.uk/wp-content/uploads/2021/10/randomfilerunner-screenshot-1-300.png", + "ImageURL" : "//www.hiimray.co.uk/wp-content/uploads/2021/10/randomfilerunner-screenshot-1.png" + }, + { + "ThumbnailURL" : "//www.hiimray.co.uk/wp-content/uploads/2021/10/randomfilerunner-screenshot-2-300.png", + "ImageURL" : "//www.hiimray.co.uk/wp-content/uploads/2021/10/randomfilerunner-screenshot-2.png" + } + ], + "History" : [ + { + "Name" : "0.1.2.065 alpha", + "Date" : "29/12/2021", + "ChangeLog" : [ "Update shared dependencies", "Corrected shortcut label" ], + "Downloads" : [ + { + "Link" : "//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/random-file-runner/0.1.2.065 alpha/randomfilerunner.7z", + "Name" : "64-Bit 7zip", + "MD5" : "26C0977B19E1361EA39F2FA353B5E16E" + } + ] + }, + { + "Name" : "0.1.2.034 alpha", + "Date" : "18/12/2021", + "ChangeLog" : [ "Update shared dependencies" ], + "Downloads" : [ + { + "Link" : "//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/random-file-runner/0.1.2.034 alpha/randomfilerunner.7z", + "Name" : "64-Bit 7zip", + "MD5" : "E67B88B8570237D4C968C97CA0E40DFD" + } + ] + }, + { + "Name" : "0.1.1.005 alpha", + "Date" : "07/11/2021", + "ChangeLog" : [ "Refactoring for nuget package" ], + "Downloads" : [ + { + "Link" : "//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/random-file-runner/0.1.1.005 alpha/randomfilerunner.7z", + "Name" : "64-Bit 7zip", + "MD5" : "30DA29B5E34387A1D795EF8E5DB0C06E" + } + ] + }, + { + "Name" : "0.1.0.019 alpha", + "Date" : "31/10/2021", + "ChangeLog" : [ "Filthy internal alpha" ], + "Downloads" : [ + { + "Link" : "//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/random-file-runner/0.1.0.019 alpha/randomfilerunner-86.7z", + "Name" : "32-Bit 7zip", + "MD5" : "2DC3A8E82F9EFB8C97BC0CA88F7D74AB" + }, + { + "Link" : "//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/random-file-runner/0.1.0.019 alpha/randomfilerunner-64.7z", + "Name" : "64-Bit 7zip", + "MD5" : "D453DF7A8A8749A5FF2AF784CD5DE5E4" + } + ] + } + ], + "Repositories" : [ + { + "Name" : "GitLab", + "Link" : "https://git.hiimray.co.uk/SympatheticFire/random-file-runner" + } + ], + "License" : [], + "Acknowledgements" : [ + "This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites." + ], + "Attribution" : [ + { + "Name" : "Feather - Simply Beautiful Open Source Icons", + "Link" : "https://feathericons.com/" + } + ] +} diff --git a/2021/10/randomfilerunner-screenshot-1-300.png b/2021/10/randomfilerunner-screenshot-1-300.png new file mode 100644 index 0000000..506526f Binary files /dev/null and b/2021/10/randomfilerunner-screenshot-1-300.png differ diff --git a/2021/10/randomfilerunner-screenshot-1.png b/2021/10/randomfilerunner-screenshot-1.png new file mode 100644 index 0000000..858531c Binary files /dev/null and b/2021/10/randomfilerunner-screenshot-1.png differ diff --git a/2021/10/randomfilerunner-screenshot-2-300.png b/2021/10/randomfilerunner-screenshot-2-300.png new file mode 100644 index 0000000..515333b Binary files /dev/null and b/2021/10/randomfilerunner-screenshot-2-300.png differ diff --git a/2021/10/randomfilerunner-screenshot-2.png b/2021/10/randomfilerunner-screenshot-2.png new file mode 100644 index 0000000..a8e502c Binary files /dev/null and b/2021/10/randomfilerunner-screenshot-2.png differ diff --git a/2021/10/videopreview-data.json b/2021/10/videopreview-data.json new file mode 100644 index 0000000..e6aa63c --- /dev/null +++ b/2021/10/videopreview-data.json @@ -0,0 +1 @@ +{"Name":"Video Preview","Description":"Preview a video file by rendering random frames","CurrentVersion":"0.1.3.010","CTA":[],"Features":["Read random frames from a video"],"Screenshots":[{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/videopreview-screenshot-2-300.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/videopreview-screenshot-2.png"},{"ThumbnailURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/videopreview-screenshot-3-300.png","ImageURL":"//www.hiimray.co.uk/wp-content/uploads/2021/10/videopreview-screenshot-3.png"}],"History":[{"Name":"0.1.3.010","Date":"09/09/2022","ChangeLog":["Upgrade to .NET 6"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.3.010/videopreview.7z","Name":"64-Bit 7zip","MD5":"D8065A80F60873A98295FD43DEE57559"}]},{"Name":"0.1.2.041 alpha","Date":"06/07/2022","ChangeLog":["Added hotkey (Shift+F11) to toggle always-on-top"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.2.041-alpha/videopreview.7z","Name":"64-Bit 7zip","MD5":"1549CEDFF461689D6DF946CCB9177C96"}]},{"Name":"0.1.2.039 alpha","Date":"29/12/2021","ChangeLog":["Improved UI accessibility"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.2.039-alpha/videopreview.7z","Name":"64-Bit 7zip","MD5":"317FC30F3C155DBD6464BF465DA9D5B1"}]},{"Name":"0.1.2.007 alpha","Date":"19/12/2021","ChangeLog":["Changed to use a shared dependency"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.2.007-alpha/videopreview.7z","Name":"64-Bit 7zip","MD5":"5623F241F3CCD73BEA0A018793B7DEC0"}]},{"Name":"0.1.1.022 alpha","Date":"07/11/2021","ChangeLog":["Added shortcut keys (F1, F3, F5 and Ctrl+F12).","Fixed issue with ffmpeg path","Changed position of buttons","Optimised find next file"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.1.022-alpha/videopreview-64.7z","Name":"64-Bit 7zip","MD5":"0AAE8AB1D6A8B123F658B319913ECC6D"}]},{"Name":"0.1.1.008 alpha","Date":"03/11/2021","ChangeLog":["Added load next file feature","Changed ffmpeg path to application executable path","Show filename in title"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.1.008-alpha/videopreview-86.7z","Name":"32-Bit 7zip","MD5":"5D292E3AA72BEE86094B090FDCD3FDBB"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.1.008-alpha/videopreview-64.7z","Name":"64-Bit 7zip","MD5":"70596DF1E795DDF16EC749645C33FD52"}]},{"Name":"0.1.0.097 alpha","Date":"06/10/2021","ChangeLog":["Dirty internal alpha"],"Downloads":[{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.0.097-alpha/videopreview-86.7z","Name":"32-Bit 7zip","MD5":"7E61CB455CE4518E6B8FD75F28E0B20D"},{"Link":"//cdn.hiimray.co.uk/d5ebeda9-6fac-40aa-8ea4-4041e7e8fdf0/video-preview/0.1.0.097-alpha/videopreview-64.7z","Name":"64-Bit 7zip","MD5":"8324E86DE95A477649E5C822E58A4A74"}]}],"Repositories":[{"Name":"GitLab","Link":"https://git.hiimray.co.uk/SympatheticFire/video-preview"}],"License":[],"Acknowledgements":["This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites."],"Attribution":[{"Name":"Feather - Simply Beautiful Open Source Icons","Link":"https://feathericons.com/"},{"Name":"FFmpeg","Link":"https://www.ffmpeg.org"},{"Name":"MediaToolkit","Link":"https://github.com/mtebenev/MediaToolkit.NetCore"}]} diff --git a/2021/10/videopreview-icon-32-1.png b/2021/10/videopreview-icon-32-1.png new file mode 100644 index 0000000..7565036 Binary files /dev/null and b/2021/10/videopreview-icon-32-1.png differ diff --git a/2021/10/videopreview-icon-32.png b/2021/10/videopreview-icon-32.png new file mode 100644 index 0000000..7565036 Binary files /dev/null and b/2021/10/videopreview-icon-32.png differ diff --git a/2021/10/videopreview-screenshot-1-300.png b/2021/10/videopreview-screenshot-1-300.png new file mode 100644 index 0000000..0b00068 Binary files /dev/null and b/2021/10/videopreview-screenshot-1-300.png differ diff --git a/2021/10/videopreview-screenshot-1.png b/2021/10/videopreview-screenshot-1.png new file mode 100644 index 0000000..66705f1 Binary files /dev/null and b/2021/10/videopreview-screenshot-1.png differ diff --git a/2021/10/videopreview-screenshot-2-300.png b/2021/10/videopreview-screenshot-2-300.png new file mode 100644 index 0000000..7a47e49 Binary files /dev/null and b/2021/10/videopreview-screenshot-2-300.png differ diff --git a/2021/10/videopreview-screenshot-2.png b/2021/10/videopreview-screenshot-2.png new file mode 100644 index 0000000..c351dae Binary files /dev/null and b/2021/10/videopreview-screenshot-2.png differ diff --git a/2021/10/videopreview-screenshot-3-300.png b/2021/10/videopreview-screenshot-3-300.png new file mode 100644 index 0000000..085b445 Binary files /dev/null and b/2021/10/videopreview-screenshot-3-300.png differ diff --git a/2021/10/videopreview-screenshot-3.png b/2021/10/videopreview-screenshot-3.png new file mode 100644 index 0000000..217ee80 Binary files /dev/null and b/2021/10/videopreview-screenshot-3.png differ diff --git a/2021/10/visual-task-walker-data.json b/2021/10/visual-task-walker-data.json new file mode 100644 index 0000000..8ac0960 --- /dev/null +++ b/2021/10/visual-task-walker-data.json @@ -0,0 +1,43 @@ +{ + "Name" : "Visual Task Walker", + "Description" : "Visual Task Walker is a task runner that uses graphical shapes (blocks) to represent tasks. You can configure these tasks and chain them together to pass data from one block to another.", + "CurrentVersion" : "", + "CTA" : [], + "Features" : [ + "Reads data from files, websites and others sources.", + "A user friendlier visual approach to data flow", + "Accessible plug-in architecture, build your own plug-ins." + ], + "Screenshots" : [ + { + "ThumbnailURL" : "//www.hiimray.co.uk/wp-content/uploads/2017/10/vcwl-screenshot-1-200.png", + "ImageURL" : "//www.hiimray.co.uk/wp-content/uploads/2017/10/vcwl-screenshot-1.png" + }, + { + "ThumbnailURL" : "//www.hiimray.co.uk/wp-content/uploads/2017/10/vcwl-screenshot-2-200.png", + "ImageURL" : "//www.hiimray.co.uk/wp-content/uploads/2017/10/vcwl-screenshot-2.png" + } + ], + "History" : [ + { + "Name" : "0.0.0.311 alpha", + "Date" : "07/10/2017", + "ChangeLog" : [ "First working alpha build", "Internal release" ], + "Downloads" : [] + }, + { + "Name" : "0", + "Date" : "01/05/2008", + "ChangeLog" : [ "Project concept started" ], + "Downloads" : [] + } + ], + "Repositories" : [], + "License" : [ + "All software on this website is provided \"as is\" without warranty of any kind, either express or implied. The use of this software, in particular, is done solely at your own risk; with agreement that the original author is not liable for any damage (subsequently incurred) of any kind." + ], + "Acknowledgements" : [ + "This software uses a number of dependencies and assets from third-parties. These developers and artists deserve due credit for their work and for their commitment to sharing their work freely. Each product is released under their own particular license, for more information please visit their websites." + ], + "Attribution" : [] +} diff --git a/2021/11/AccessibleDirectory.cs b/2021/11/AccessibleDirectory.cs deleted file mode 100644 index 76aa427..0000000 --- a/2021/11/AccessibleDirectory.cs +++ /dev/null @@ -1,492 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace RyzStudio.IO -{ - public class AccessibleDirectory - { - - public static List GetFiles(string path, string pattern, bool searchTopOnly) => GetFilesAsync(path, pattern, searchTopOnly).Result; - - public static Task> GetFilesAsync(string path, string pattern, bool searchTopOnly) - { - CancellationToken cancellationToken = new CancellationToken(); - - return GetFilesAsync(path, pattern, searchTopOnly, cancellationToken); - } - - public static Task> GetFilesAsync(string path, string pattern, bool searchTopOnly, CancellationToken cancellationToken) - { - return Task.Run>(() => - { - List fileList = new List(); - List directoryList = new List(); - - if (string.IsNullOrWhiteSpace(pattern)) pattern = "*"; - - if (cancellationToken.IsCancellationRequested) return fileList; - - directoryList.Add(path); - - while (true) - { - if (directoryList.Count <= 0) - { - break; - } - - if (cancellationToken.IsCancellationRequested) return fileList; - - string directory = directoryList.First(); - directoryList.RemoveAt(0); - - if (IsDirectoryAccessible(directory)) - { - IEnumerable searchDirList = new List(); - - if (cancellationToken.IsCancellationRequested) return fileList; - - try - { - searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly); - } - catch (Exception) - { - continue; - } - - if (!searchTopOnly) - { - foreach (string item in searchDirList) - { - if (!IsDirectoryAccessible(item)) - { - continue; - } - - directoryList.Add(item); - } - } - - foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) - { - if (cancellationToken.IsCancellationRequested) return fileList; - - if (!MatchFileSearchPattern(pattern, Path.GetFileName(item))) - { - continue; - } - - if (!IsFileAccessible(item)) - { - continue; - } - - fileList.Add(item); - - if (cancellationToken.IsCancellationRequested) return fileList; - } - - if (cancellationToken.IsCancellationRequested) return fileList; - } - } - - return fileList; - }); - } - - public static IEnumerable EnumerateFiles(string path, string pattern, bool searchTopOnly) - { - List directoryList = new List(); - - if (string.IsNullOrWhiteSpace(pattern)) pattern = "*"; - - directoryList.Add(path); - - while (true) - { - if (directoryList.Count <= 0) - { - yield break; - } - - string directory = directoryList.First(); - directoryList.RemoveAt(0); - - if (IsDirectoryAccessible(directory)) - { - IEnumerable searchDirList = new List(); - - try - { - searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly); - } - catch (Exception) - { - continue; - } - - if (!searchTopOnly) - { - foreach (string item in searchDirList) - { - if (!IsDirectoryAccessible(item)) - { - continue; - } - - directoryList.Add(item); - } - } - - foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) - { - if (!MatchFileSearchPattern(pattern, Path.GetFileName(item))) - { - continue; - } - - if (!IsFileAccessible(item)) - { - continue; - } - - yield return item; - } - } - } - } - - public static void GetFiles(string path, string pattern, bool searchTopOnly, Func callback) => GetFilesAsync(path, pattern, searchTopOnly, callback); - - public static Task GetFilesAsync(string path, string pattern, bool searchTopOnly, Func callback) - { - CancellationToken cancellationToken = new CancellationToken(); - - return GetFilesAsync(path, pattern, searchTopOnly, callback, cancellationToken); - } - - public static Task GetFilesAsync(string path, string pattern, bool searchTopOnly, Func callback, CancellationToken cancellationToken) - { - return Task.Run(() => - { - List directoryList = new List(); - ulong searchCount = 0; - - if (string.IsNullOrWhiteSpace(pattern)) pattern = "*"; - - if (cancellationToken.IsCancellationRequested) return; - - directoryList.Add(path); - searchCount++; - - while (true) - { - if (directoryList.Count <= 0) - { - break; - } - - if (cancellationToken.IsCancellationRequested) return; - - string directory = directoryList.First(); - directoryList.RemoveAt(0); - - callback(null, searchCount, directoryList.Count); - - if (IsDirectoryAccessible(directory)) - { - IEnumerable searchDirList = new List(); - - try - { - searchDirList = Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly); - } - catch (Exception) - { - continue; - } - - if (cancellationToken.IsCancellationRequested) return; - - if (!searchTopOnly) - { - foreach (string item in searchDirList) - { - if (!IsDirectoryAccessible(item)) - { - continue; - } - - directoryList.Add(item); - searchCount++; - - callback(null, searchCount, directoryList.Count); - } - } - - foreach (string item in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) - { - if (cancellationToken.IsCancellationRequested) return; - - if (!MatchFileSearchPattern(pattern, Path.GetFileName(item))) - { - continue; - } - - if (!IsFileAccessible(item)) - { - continue; - } - - callback(item, searchCount, directoryList.Count); - - if (cancellationToken.IsCancellationRequested) return; - } - - if (cancellationToken.IsCancellationRequested) return; - } - } - }); - } - - public static string GetNextFile(string filepath, string pattern) => GetNextFileAsync(filepath, pattern).Result; - - public static Task GetNextFileAsync(string filepath, string pattern) - { - return Task.Run(() => - { - if (string.IsNullOrWhiteSpace(filepath)) return null; - - string path = Path.GetDirectoryName(filepath); - if (string.IsNullOrWhiteSpace(path)) return null; - - string filename = Path.GetFileName(filepath); - if (string.IsNullOrWhiteSpace(filename)) return null; - - bool returnNext = false; - foreach (string item in Directory.EnumerateFiles(path, "*", SearchOption.TopDirectoryOnly)) - { - if (!MatchFileSearchPattern(pattern, Path.GetFileName(item))) - { - continue; - } - - if (!IsFileAccessible(item)) - { - continue; - } - - if (returnNext) - { - return item; - } - - if (Path.GetFileName(item).Equals(filename)) - { - returnNext = true; - } - } - - return null; - }); - } - - public static string GetPreviousFile(string filepath, string pattern) => GetPreviousFileAsync(filepath, pattern).Result; - - public static Task GetPreviousFileAsync(string filepath, string pattern) - { - return Task.Run(() => - { - if (string.IsNullOrWhiteSpace(filepath)) return null; - - string path = Path.GetDirectoryName(filepath); - if (string.IsNullOrWhiteSpace(path)) return null; - - string filename = Path.GetFileName(filepath); - if (string.IsNullOrWhiteSpace(filename)) return null; - - StringBuilder sb = new StringBuilder(); - foreach (string item in Directory.EnumerateFiles(path, "*", SearchOption.TopDirectoryOnly)) - { - if (!MatchFileSearchPattern(pattern, Path.GetFileName(item))) - { - continue; - } - - if (!IsFileAccessible(item)) - { - continue; - } - - sb.Clear(); - sb.Append(item); - - if (Path.GetFileName(item).Equals(filename)) - { - return (sb.Length <= 0) ? null : sb.ToString(); - } - } - - return null; - }); - } - - public static bool IsAccessible(string path) - { - if (string.IsNullOrWhiteSpace(path)) return false; - - if (File.Exists(path)) return IsFileAccessible(path); - if (Directory.Exists(path)) return IsDirectoryAccessible(path); - - return false; - } - - public static bool IsFileAccessible(string filename) - { - if (string.IsNullOrWhiteSpace(filename)) return false; - if (!File.Exists(filename)) return false; - - try - { - FileInfo fi = new FileInfo(filename); - fi.GetAccessControl(); - } - catch - { - return false; - } - - return true; - } - - public static bool IsDirectoryAccessible(string path) - { - if (string.IsNullOrWhiteSpace(path)) return false; - if (!Directory.Exists(path)) return false; - - try - { - DirectoryInfo di = new DirectoryInfo(path); - di.GetAccessControl(); - } - catch - { - return false; - } - - return true; - } - - public static bool MatchFileSearchPattern(string pattern, string subject) - { - if (string.IsNullOrWhiteSpace(pattern)) - { - return false; - } - - Func matchPattern = (pattern, subject) => - { - string[] parts = pattern.Split('*'); - if (parts.Length <= 1) - { - return subject.Equals(pattern, StringComparison.CurrentCultureIgnoreCase); - } - - int pos = 0; - - for (int i = 0; i < parts.Length; i++) - { - if (i <= 0) - { - // first - pos = subject.IndexOf(parts[i], pos, StringComparison.CurrentCultureIgnoreCase); - if (pos != 0) - { - return false; - } - } - else if (i >= (parts.Length - 1)) - { - // last - if (!subject.EndsWith(parts[i], StringComparison.CurrentCultureIgnoreCase)) - { - return false; - } - } - else - { - pos = subject.IndexOf(parts[i], pos, StringComparison.CurrentCultureIgnoreCase); - if (pos < 0) - { - return false; - } - - pos += parts[i].Length; - } - } - - return true; - }; - - Func matchAllPattern = (pattern, subject) => - { - int wildcardCount = pattern.Count(x => x.Equals('*')); - if (wildcardCount <= 0) - { - return subject.Equals(pattern, StringComparison.CurrentCultureIgnoreCase); - } - else if (wildcardCount == 1) - { - string newWildcardPattern = pattern.Replace("*", ""); - - if (pattern.StartsWith("*")) - { - return subject.EndsWith(newWildcardPattern, StringComparison.CurrentCultureIgnoreCase); - } - else if (pattern.EndsWith("*")) - { - return subject.StartsWith(newWildcardPattern, StringComparison.CurrentCultureIgnoreCase); - } - else - { - return matchPattern(pattern, subject); - } - } - else - { - return matchPattern(pattern, subject); - } - }; - - if (pattern.Contains(';')) - { - string[] parts = pattern.Split(';'); - for (int i=0; i