├── .gitignore ├── @Resources ├── Config.lua ├── Fonts │ ├── segoeui.ttf │ ├── segoeuib.ttf │ ├── segoeuii.ttf │ ├── segoeuil.ttf │ ├── segoeuisl.ttf │ ├── segoeuiz.ttf │ └── seguisb.ttf ├── GitHubScraper │ ├── GitHubScraper.sln │ └── GitHubScraper │ │ ├── App.config │ │ ├── GitHubGraph.cs │ │ ├── GitHubGraphicon.ico │ │ ├── GitHubScraper.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ ├── WebDriver.dll │ │ ├── bin │ │ └── Debug │ │ │ ├── GitHubScraper.application │ │ │ ├── GitHubScraper.exe │ │ │ ├── GitHubScraper.exe.config │ │ │ ├── GitHubScraper.exe.manifest │ │ │ ├── GitHubScraper.vshost.application │ │ │ ├── GitHubScraper.vshost.exe │ │ │ ├── GitHubScraper.vshost.exe.config │ │ │ ├── GitHubScraper.vshost.exe.manifest │ │ │ ├── GraphInfo.txt │ │ │ ├── GraphInfoWeek.txt │ │ │ ├── WebDriver.dll │ │ │ ├── app.publish │ │ │ └── GitHubScraper.exe │ │ │ └── phantomjs.exe │ │ ├── packages.config │ │ └── phantomjs.exe ├── Images │ ├── exit.png │ ├── github-calendar.png │ └── info_background.png ├── config.txt ├── github-calendar.png ├── images │ ├── Button.png │ ├── Button2.png │ ├── Close.png │ ├── background.png │ ├── configback.png │ └── github_logo.png ├── preview │ └── Preview.gif ├── script.lua ├── style.inc └── week.lua ├── Config ├── Config.ini └── Info.ini ├── Documentation ├── CONTRIBUTING.md └── LICENSE.md ├── GitHubCalendar.ini ├── GitHubCalendar_v1.1.3.rmskin ├── GithubCalendar(week).ini ├── LICENSE.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebugPublic/ 15 | [Rr]elease/ 16 | [Rr]eleases/ 17 | x64/ 18 | x86/ 19 | bld/ 20 | [Oo]bj/ 21 | [Ll]og/ 22 | 23 | # Visual Studio 2015 cache/options directory 24 | .vs/ 25 | # Uncomment if you have tasks that create the project's static files in wwwroot 26 | #wwwroot/ 27 | 28 | # MSTest test Results 29 | [Tt]est[Rr]esult*/ 30 | [Bb]uild[Ll]og.* 31 | 32 | # NUNIT 33 | *.VisualState.xml 34 | TestResult.xml 35 | 36 | # Build Results of an ATL Project 37 | [Dd]ebugPS/ 38 | [Rr]eleasePS/ 39 | dlldata.c 40 | 41 | # DNX 42 | project.lock.json 43 | artifacts/ 44 | 45 | *_i.c 46 | *_p.c 47 | *_i.h 48 | *.ilk 49 | *.meta 50 | *.obj 51 | *.pch 52 | *.pdb 53 | *.pgc 54 | *.pgd 55 | *.rsp 56 | *.sbr 57 | *.tlb 58 | *.tli 59 | *.tlh 60 | *.tmp 61 | *.tmp_proj 62 | *.log 63 | *.vspscc 64 | *.vssscc 65 | .builds 66 | *.pidb 67 | *.svclog 68 | *.scc 69 | 70 | # Chutzpah Test files 71 | _Chutzpah* 72 | 73 | # Visual C++ cache files 74 | ipch/ 75 | *.aps 76 | *.ncb 77 | *.opendb 78 | *.opensdf 79 | *.sdf 80 | *.cachefile 81 | *.VC.db 82 | *.VC.VC.opendb 83 | 84 | # Visual Studio profiler 85 | *.psess 86 | *.vsp 87 | *.vspx 88 | *.sap 89 | 90 | # TFS 2012 Local Workspace 91 | $tf/ 92 | 93 | # Guidance Automation Toolkit 94 | *.gpState 95 | 96 | # ReSharper is a .NET coding add-in 97 | _ReSharper*/ 98 | *.[Rr]e[Ss]harper 99 | *.DotSettings.user 100 | 101 | # JustCode is a .NET coding add-in 102 | .JustCode 103 | 104 | # TeamCity is a build add-in 105 | _TeamCity* 106 | 107 | # DotCover is a Code Coverage Tool 108 | *.dotCover 109 | 110 | # NCrunch 111 | _NCrunch_* 112 | .*crunch*.local.xml 113 | nCrunchTemp_* 114 | 115 | # MightyMoose 116 | *.mm.* 117 | AutoTest.Net/ 118 | 119 | # Web workbench (sass) 120 | .sass-cache/ 121 | 122 | # Installshield output folder 123 | [Ee]xpress/ 124 | 125 | # DocProject is a documentation generator add-in 126 | DocProject/buildhelp/ 127 | DocProject/Help/*.HxT 128 | DocProject/Help/*.HxC 129 | DocProject/Help/*.hhc 130 | DocProject/Help/*.hhk 131 | DocProject/Help/*.hhp 132 | DocProject/Help/Html2 133 | DocProject/Help/html 134 | 135 | # Click-Once directory 136 | publish/ 137 | 138 | # Publish Web Output 139 | *.[Pp]ublish.xml 140 | *.azurePubxml 141 | # TODO: Comment the next line if you want to checkin your web deploy settings 142 | # but database connection strings (with potential passwords) will be unencrypted 143 | *.pubxml 144 | *.publishproj 145 | 146 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 147 | # checkin your Azure Web App publish settings, but sensitive information contained 148 | # in these scripts will be unencrypted 149 | PublishScripts/ 150 | 151 | # NuGet Packages 152 | *.nupkg 153 | # The packages folder can be ignored because of Package Restore 154 | **/packages/* 155 | # except build/, which is used as an MSBuild target. 156 | !**/packages/build/ 157 | # Uncomment if necessary however generally it will be regenerated when needed 158 | #!**/packages/repositories.config 159 | # NuGet v3's project.json files produces more ignoreable files 160 | *.nuget.props 161 | *.nuget.targets 162 | 163 | # Microsoft Azure Build Output 164 | csx/ 165 | *.build.csdef 166 | 167 | # Microsoft Azure Emulator 168 | ecf/ 169 | rcf/ 170 | 171 | # Windows Store app package directories and files 172 | AppPackages/ 173 | BundleArtifacts/ 174 | Package.StoreAssociation.xml 175 | _pkginfo.txt 176 | 177 | # Visual Studio cache files 178 | # files ending in .cache can be ignored 179 | *.[Cc]ache 180 | # but keep track of directories ending in .cache 181 | !*.[Cc]ache/ 182 | 183 | # Others 184 | ClientBin/ 185 | ~$* 186 | *~ 187 | *.dbmdl 188 | *.dbproj.schemaview 189 | *.pfx 190 | *.publishsettings 191 | node_modules/ 192 | orleans.codegen.cs 193 | 194 | # Since there are multiple workflows, uncomment next line to ignore bower_components 195 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 196 | #bower_components/ 197 | 198 | # RIA/Silverlight projects 199 | Generated_Code/ 200 | 201 | # Backup & report files from converting an old project file 202 | # to a newer Visual Studio version. Backup files are not needed, 203 | # because we have git ;-) 204 | _UpgradeReport_Files/ 205 | Backup*/ 206 | UpgradeLog*.XML 207 | UpgradeLog*.htm 208 | 209 | # SQL Server files 210 | *.mdf 211 | *.ldf 212 | 213 | # Business Intelligence projects 214 | *.rdl.data 215 | *.bim.layout 216 | *.bim_*.settings 217 | 218 | # Microsoft Fakes 219 | FakesAssemblies/ 220 | 221 | # GhostDoc plugin setting file 222 | *.GhostDoc.xml 223 | 224 | # Node.js Tools for Visual Studio 225 | .ntvs_analysis.dat 226 | 227 | # Visual Studio 6 build log 228 | *.plg 229 | 230 | # Visual Studio 6 workspace options file 231 | *.opt 232 | 233 | # Visual Studio LightSwitch build output 234 | **/*.HTMLClient/GeneratedArtifacts 235 | **/*.DesktopClient/GeneratedArtifacts 236 | **/*.DesktopClient/ModelManifest.xml 237 | **/*.Server/GeneratedArtifacts 238 | **/*.Server/ModelManifest.xml 239 | _Pvt_Extensions 240 | 241 | # Paket dependency manager 242 | .paket/paket.exe 243 | paket-files/ 244 | 245 | # FAKE - F# Make 246 | .fake/ 247 | 248 | # JetBrains Rider 249 | .idea/ 250 | *.sln.iml 251 | @Resources/images/github_logoLG.png 252 | @Resources/images/settings-.png 253 | @Resources/images/Button_2.png 254 | @Resources/images/configback2.png 255 | @Resources/images/configback_plain.png 256 | @Resources/data.txt 257 | @Resources/week.txt 258 | README/* 259 | @Resources/Preview/Preview_.gif 260 | -------------------------------------------------------------------------------- /@Resources/Config.lua: -------------------------------------------------------------------------------- 1 | -- ## Information ################################################################### 2 | -- Filename: config.lua 3 | -- Author: Brett Stevenson 4 | -- Project: GitHubCalendar 5 | -- License: BSD 3-Clause 6 | -- Updated: July 31, 2016 7 | -- Description: A work-in-progress Lua script, intended to improve the ease of 8 | -- use of the GitHubCalendar Rainmeter skin by automating much of the user 9 | -- configuration processes. ############################################################################### 10 | 11 | 12 | function Initialize() 13 | path = SELF:GetOption('WriteTo') 14 | Update() 15 | end 16 | 17 | 18 | function Update() 19 | local file = io.open(path, "r") 20 | io.input(file) 21 | data = io.read("*all") 22 | io.close(file) 23 | return tostring(data) 24 | end 25 | 26 | 27 | function Write() 28 | local file = io.open(path, "w") 29 | local username = SELF:GetOption('Input') 30 | local numWeeks = SELF:GetOption('Weeks') 31 | io.output(file) 32 | io.write(tostring(username)) 33 | io.write(tostring(numWeeks)) 34 | io.close(file) 35 | end 36 | -------------------------------------------------------------------------------- /@Resources/Fonts/segoeui.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/segoeui.ttf -------------------------------------------------------------------------------- /@Resources/Fonts/segoeuib.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/segoeuib.ttf -------------------------------------------------------------------------------- /@Resources/Fonts/segoeuii.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/segoeuii.ttf -------------------------------------------------------------------------------- /@Resources/Fonts/segoeuil.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/segoeuil.ttf -------------------------------------------------------------------------------- /@Resources/Fonts/segoeuisl.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/segoeuisl.ttf -------------------------------------------------------------------------------- /@Resources/Fonts/segoeuiz.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/segoeuiz.ttf -------------------------------------------------------------------------------- /@Resources/Fonts/seguisb.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Fonts/seguisb.ttf -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.24720.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHubScraper", "GitHubScraper\GitHubScraper.csproj", "{424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | NewTest|Any CPU = NewTest|Any CPU 12 | Release|Any CPU = Release|Any CPU 13 | EndGlobalSection 14 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 15 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 16 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.Debug|Any CPU.Build.0 = Debug|Any CPU 17 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.NewTest|Any CPU.ActiveCfg = NewTest|Any CPU 18 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.NewTest|Any CPU.Build.0 = NewTest|Any CPU 19 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.NewTest|Any CPU.Deploy.0 = NewTest|Any CPU 20 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD}.Release|Any CPU.Build.0 = Release|Any CPU 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | EndGlobal 27 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/GitHubGraph.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Text; 4 | using OpenQA.Selenium; 5 | using OpenQA.Selenium.PhantomJS; 6 | 7 | /******************************************************************************* 8 | ______________________________GitHubScraper__________________________________ 9 | * This program uses Selenium's WebDriver & phantomJS, in order to scrape the 10 | * contributions, fills, and active dates from a Github user's profile. 11 | * 12 | * To configure this file for your own use, replace the "Username" variable with 13 | * your own GitHub username. 14 | 15 | ******************************************************************************/ 16 | 17 | namespace GitHubScraper { 18 | 19 | class GraphScraper { 20 | 21 | private static readonly int numWeeks = 10; 22 | 23 | static void Main() { 24 | Console.SetWindowSize(50, 15); 25 | string username = File.ReadAllText(GetDirectory("/config.txt")); 26 | Console.WriteLine("Username: " + username); 27 | var driverService = PhantomJSDriverService.CreateDefaultService(); 28 | driverService.HideCommandPromptWindow = true; 29 | IWebDriver driver = new PhantomJSDriver(driverService); 30 | driver.Navigate().GoToUrl("http://github.com/" + username); 31 | Console.WriteLine("Connected."); 32 | Block[,] data = new Block[numWeeks, 7]; 33 | try { 34 | var calendar = driver.FindElement(By.ClassName("js-calendar-graph")) 35 | .FindElements(By.TagName("g")); 36 | int range = calendar.Count - numWeeks; 37 | for (int i = range; i < calendar.Count; i++) { 38 | int week = i - range; 39 | Console.Write('\r' + "Grabbing data..." + (i - range) * 10 + "%"); 40 | var rectElements = calendar[i].FindElements(By.TagName("rect")); 41 | int day = 0; 42 | foreach (var rect in rectElements) { 43 | string fill = rect.GetAttribute("fill"); 44 | int contribCount = int.Parse(rect.GetAttribute("data-count")); 45 | string date = rect.GetAttribute("data-date"); 46 | data[week, day] = new Block(contribCount, fill, date); 47 | day++; 48 | } 49 | } 50 | Console.WriteLine('\r' + "Grabbing data...100%"); 51 | } catch (NoSuchElementException e) { 52 | Console.WriteLine(e); 53 | } 54 | driver.Quit(); // close the webdriver 55 | driver.Dispose(); 56 | FillWeek(data); // add placeholders to fill current week 57 | Console.WriteLine("Done."); 58 | WriteToFile(data, GetDirectory("/data.txt")); 59 | WriteToFile(GetWeek(data, numWeeks-1), GetDirectory("/week.txt")); 60 | Environment.Exit(0); // Exit program 61 | } 62 | 63 | 64 | /* returns @Resource directory + filename */ 65 | private static string GetDirectory(string filename) { 66 | string path = Directory.GetCurrentDirectory(); 67 | return path.Substring(0, path.Length - 37) + filename; 68 | } 69 | 70 | 71 | /* create placeholders for the rest of the week */ 72 | private static void FillWeek(Block[,] data) { 73 | int tbd = 6 - (int)DateTime.Now.DayOfWeek; 74 | while(tbd > 0) { 75 | int x = 6 - tbd; 76 | data[numWeeks-1, x] = new Block(0, "#eeeeee", "TBD"); 77 | tbd--; 78 | } 79 | } 80 | 81 | /* returns the week at the given index */ 82 | private static Block[] GetWeek(Block[,] data, int index) { 83 | Block[] weekData = new Block[7]; 84 | if(index > 0 && index < numWeeks) 85 | for(int i = 0; i < 7; i++) 86 | weekData[i] = data[index, i]; 87 | return weekData; 88 | } 89 | 90 | /* Writes the data to the provided .txt file */ 91 | private static void WriteToFile(Block[] data, string dir) { 92 | StreamWriter file = new StreamWriter(dir); 93 | foreach(Block b in data) 94 | if(b != null) 95 | file.WriteLine(b.ToString()); 96 | file.Close(); 97 | } 98 | 99 | /* Writes the data to the provided .txt file */ 100 | private static void WriteToFile(Block[,] data, string dir) { 101 | StreamWriter file = new StreamWriter(dir); 102 | foreach(Block b in data) 103 | if(b != null) 104 | file.WriteLine(b.ToString()); 105 | file.Close(); 106 | } 107 | 108 | 109 | private class Block { 110 | 111 | private readonly int _contribs; 112 | private readonly string _fill; 113 | private readonly string _date; 114 | 115 | public Block(int contribs, string fill, string date) { 116 | _contribs = contribs; 117 | _fill = fill; 118 | _date = FormatDate(date); 119 | } 120 | 121 | private string FormatDate(string dataDate) { 122 | if (dataDate.Equals("TBD")) 123 | return "TBD"; 124 | int year = int.Parse(dataDate.Substring(2, 2)); 125 | int month = int.Parse(dataDate.Substring(5, 2)); 126 | int day = int.Parse(dataDate.Substring(8, 2)); 127 | return month + "/" + day + "/" + year; 128 | } 129 | 130 | public override string ToString() { 131 | StringBuilder sb = new StringBuilder(""); 132 | sb.Append(_contribs); 133 | sb.Append(Environment.NewLine); 134 | sb.Append(_fill); 135 | sb.Append(Environment.NewLine); 136 | sb.Append(_date); 137 | return sb.ToString(); 138 | } 139 | } 140 | 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/GitHubGraphicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/GitHubGraphicon.ico -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/GitHubScraper.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {424FFE5B-EE6C-4C6C-93D1-277DA4739EAD} 8 | Exe 9 | Properties 10 | GitHubScraper 11 | GitHubScraper 12 | v4.5.2 13 | 512 14 | true 15 | false 16 | C:\Users\there\Desktop\ 17 | true 18 | Disk 19 | false 20 | Foreground 21 | 7 22 | Days 23 | false 24 | false 25 | true 26 | 2 27 | 1.0.0.%2a 28 | false 29 | true 30 | true 31 | 32 | 33 | AnyCPU 34 | true 35 | full 36 | false 37 | bin\Debug\ 38 | DEBUG;TRACE 39 | prompt 40 | 4 41 | 42 | 43 | AnyCPU 44 | pdbonly 45 | true 46 | bin\Release\ 47 | TRACE 48 | prompt 49 | 4 50 | Off 51 | true 52 | 53 | 54 | 55 | 56 | 57 | 58 | GitHubGraphicon.ico 59 | 60 | 61 | 62 | 0D80960900B8B701B9F12F05A910AC485AD06B0C 63 | 64 | 65 | GitHubScraper_TemporaryKey.pfx 66 | 67 | 68 | true 69 | 70 | 71 | true 72 | 73 | 74 | 75 | bin\NewTest\ 76 | 77 | 78 | 79 | true 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ..\packages\Selenium.WebDriver.2.53.0\lib\net40\WebDriver.dll 93 | True 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | PreserveNewest 108 | 109 | 110 | 111 | 112 | 113 | False 114 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 115 | true 116 | 117 | 118 | False 119 | .NET Framework 3.5 SP1 120 | false 121 | 122 | 123 | 124 | 131 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using OpenQA.Selenium; 3 | using OpenQA.Selenium.Chrome; 4 | using System.Collections; 5 | using OpenQA.Selenium.PhantomJS; 6 | using System.Text; 7 | using System.IO; 8 | using System.Diagnostics; 9 | 10 | /* 11 | * This program uses Selenium's WebDriver to scrape the active dates and the number 12 | * of contributions made from a Github profile in the current week. 13 | * 14 | * To configure this file for your own use, replace the "username" variable with 15 | * your own GitHub Username. 16 | */ 17 | 18 | namespace GitHubGraph { 19 | 20 | class GraphScraper { 21 | 22 | private static string username = "JonSn0w"; /* <--- Change this */ 23 | private static string[] days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; 24 | private static string[] months = { "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" }; 25 | public static DateTime Today { get; } 26 | public static DateTime thisDay = DateTime.Today; 27 | private static int blockCount = 1; 28 | private static int count = 0; 29 | 30 | static void Main(string[] args) { 31 | string currentPath = System.IO.Directory.GetCurrentDirectory(); 32 | currentPath = currentPath.Substring(0, currentPath.Length - 9); 33 | var driverService = PhantomJSDriverService.CreateDefaultService(currentPath + "phantomJS"); 34 | driverService.HideCommandPromptWindow = true; 35 | IWebDriver driver = new PhantomJSDriver(driverService); 36 | driver.Navigate().GoToUrl("http://github.com/" + username); 37 | ArrayList list = new ArrayList(); 38 | ArrayList week = new ArrayList(); 39 | try { 40 | var calendarElements = driver.FindElement(By.Id("contributions-calendar")) 41 | .FindElement(By.ClassName("js-calendar-graph")) 42 | .FindElements(By.TagName("g")); 43 | int remainder = 0; 44 | for (int i = 0; i < days.Length; i++) { 45 | if (days[i] == System.DateTime.Now.ToString("dddd")) 46 | remainder = 6 - i; 47 | } 48 | foreach (var calElement in calendarElements) { 49 | if (count < calendarElements.Count - 10) 50 | count++; 51 | else if (calElement != calendarElements[calendarElements.Count - 1]) { 52 | var rectElements = calElement.FindElements(By.TagName("rect")); 53 | foreach (var rect in rectElements) { 54 | string color = rect.GetAttribute("fill"); 55 | int contribCount = Int32.Parse(rect.GetAttribute("data-count")); 56 | string dataDate = rect.GetAttribute("data-date"); 57 | Block b = new Block(blockCount, contribCount, color, dataDate); 58 | list.Add(b); 59 | blockCount++; 60 | } 61 | } 62 | else { 63 | //var thisWeek = calendarElements[calendarElements.Count - 1]; 64 | var rectElements = calElement.FindElements(By.TagName("rect")); 65 | foreach (var rect in rectElements) 66 | { 67 | string color = rect.GetAttribute("fill"); 68 | int contribCount = Int32.Parse(rect.GetAttribute("data-count")); 69 | string dataDate = rect.GetAttribute("data-date"); 70 | Block b = new Block(blockCount, contribCount, color, dataDate); 71 | week.Add(b); 72 | list.Add(b); 73 | blockCount++; 74 | } 75 | } 76 | } 77 | // create placeholders for the rest of the week 78 | while (remainder > 0) { 79 | blockCount++; 80 | Block b = new Block(blockCount, 0, "#eeeee"," "); 81 | week.Add(b); 82 | list.Add(b); 83 | remainder--; 84 | } 85 | writeToFile(list, "/GraphInfo.txt"); 86 | writeToFile(week, "/GraphInfoWeek.txt"); 87 | } 88 | catch (NoSuchElementException e) { 89 | return; 90 | } 91 | //Console.WriteLine("Finished."); 92 | Environment.Exit(0); 93 | } 94 | 95 | 96 | private static void writeToFile(ArrayList list, String filename) { 97 | var path = System.IO.Directory.GetCurrentDirectory(); 98 | var root = Path.GetDirectoryName(Path.GetDirectoryName(path)); 99 | var ancestor = Path.GetDirectoryName(Path.GetDirectoryName(root)); 100 | ancestor = ancestor + filename; 101 | //Console.WriteLine("PATH: " + path); 102 | //Console.WriteLine("TODAY: " + System.DateTime.Now.ToString("dddd")); 103 | System.IO.StreamWriter file = new System.IO.StreamWriter(ancestor); 104 | int writeCount = 1; 105 | foreach (Block item in list) { 106 | if (writeCount < 50) 107 | file.WriteLine("\"block\":{"); 108 | else 109 | file.WriteLine("\"block2\":{"); 110 | file.WriteLine(item.toDataString()); 111 | writeCount++; 112 | } 113 | file.Close(); 114 | } 115 | 116 | 117 | class Block { 118 | 119 | int index; 120 | int contributions; 121 | string fill; 122 | int day; 123 | string dayOfWeek; 124 | int month; 125 | string monthStr; 126 | int year; 127 | 128 | public Block(int index, int contributions, string fill, string date) { 129 | this.index = index; 130 | this.contributions = contributions; 131 | this.fill = fill; 132 | getInfo(date); 133 | } 134 | 135 | public void getInfo(string dataDate) { 136 | if (dataDate.Length < 2) { 137 | year = -1; 138 | } else { 139 | year = Int32.Parse(dataDate.Substring(0, 4)); 140 | month = Int32.Parse(dataDate.Substring(5, 2)); 141 | day = Int32.Parse(dataDate.Substring(8, 2)); 142 | monthStr = months[month - 1]; 143 | } 144 | } 145 | 146 | public int getDay() { return this.day; } 147 | public int getMonth() { return this.month; } 148 | public int getYear() { return this.year; } 149 | public string getDate() { 150 | if (year < 0) 151 | return " "; 152 | return this.month + "/" + this.day + "/" + this.year; 153 | } 154 | public int getContributions() { return this.contributions; } 155 | 156 | public string toReadableString() { 157 | return months[this.month - 1] + ". " + this.day + ", " + this.year + "\n" + "Contributions: " + this.contributions; 158 | } 159 | 160 | public string toDataString() { 161 | StringBuilder sb = new StringBuilder(""); 162 | //sb.Append("\"block\":{"); 163 | sb.Append(Environment.NewLine); 164 | sb.Append("\t\"contribs\": \""); 165 | sb.Append(contributions); 166 | sb.Append("\""); 167 | sb.Append(Environment.NewLine); 168 | sb.Append("\t\"fill\": \""); 169 | sb.Append(fill); 170 | sb.Append("\""); 171 | sb.Append(Environment.NewLine); 172 | sb.Append("\t\"date\": \""); 173 | sb.Append(getDate()); 174 | sb.Append("\""); 175 | sb.Append(Environment.NewLine); 176 | sb.Append("},"); 177 | return sb.ToString(); 178 | } 179 | } 180 | } 181 | 182 | } 183 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("GitHubScraper")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("GitHubScraper")] 12 | [assembly: AssemblyCopyright("Copyright © 2016")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("424ffe5b-ee6c-4c6c-93d1-277da4739ead")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/WebDriver.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/WebDriver.dll -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.application: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | QdUyD82Lb7cNCfrQOmlwefyFO//GiFZ8JouYV25my0E= 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | RcHpBruWvU6/h7ZRXZS/egWyNaFWQIXzDqQMbwAIvwA= 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | yLyMmBMg7088f+KqMLEDXG0a1hlIUzmTNpcqeKP3Qgc= 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | R7jgp+nQg1PXHtxsp3Tvt3SoQkF2t7+4NgOlwXW0GME= 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 6N7MliNbVJSIAIPrecIshMbZ7zEoKLr5SQvud4LDUOw= 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | HPmyqnMr0MZag8VdlrqYxO1GK5NyDX/YwLzFNoO/z/s= 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | yLyMmBMg7088f+KqMLEDXG0a1hlIUzmTNpcqeKP3Qgc= 103 | 104 | 105 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.vshost.application: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | QdUyD82Lb7cNCfrQOmlwefyFO//GiFZ8JouYV25my0E= 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.vshost.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.vshost.exe -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.vshost.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.vshost.exe.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | RcHpBruWvU6/h7ZRXZS/egWyNaFWQIXzDqQMbwAIvwA= 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | yLyMmBMg7088f+KqMLEDXG0a1hlIUzmTNpcqeKP3Qgc= 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | R7jgp+nQg1PXHtxsp3Tvt3SoQkF2t7+4NgOlwXW0GME= 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 6N7MliNbVJSIAIPrecIshMbZ7zEoKLr5SQvud4LDUOw= 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | HPmyqnMr0MZag8VdlrqYxO1GK5NyDX/YwLzFNoO/z/s= 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | yLyMmBMg7088f+KqMLEDXG0a1hlIUzmTNpcqeKP3Qgc= 103 | 104 | 105 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GraphInfo.txt: -------------------------------------------------------------------------------- 1 | "block":{ 2 | 3 | "contribs": "0" 4 | "fill": "#eeeeee" 5 | "date": "4/10/2016" 6 | }, 7 | "block":{ 8 | 9 | "contribs": "0" 10 | "fill": "#eeeeee" 11 | "date": "4/11/2016" 12 | }, 13 | "block":{ 14 | 15 | "contribs": "0" 16 | "fill": "#eeeeee" 17 | "date": "4/12/2016" 18 | }, 19 | "block":{ 20 | 21 | "contribs": "0" 22 | "fill": "#eeeeee" 23 | "date": "4/13/2016" 24 | }, 25 | "block":{ 26 | 27 | "contribs": "0" 28 | "fill": "#eeeeee" 29 | "date": "4/14/2016" 30 | }, 31 | "block":{ 32 | 33 | "contribs": "0" 34 | "fill": "#eeeeee" 35 | "date": "4/15/2016" 36 | }, 37 | "block":{ 38 | 39 | "contribs": "0" 40 | "fill": "#eeeeee" 41 | "date": "4/16/2016" 42 | }, 43 | "block":{ 44 | 45 | "contribs": "0" 46 | "fill": "#eeeeee" 47 | "date": "4/17/2016" 48 | }, 49 | "block":{ 50 | 51 | "contribs": "0" 52 | "fill": "#eeeeee" 53 | "date": "4/18/2016" 54 | }, 55 | "block":{ 56 | 57 | "contribs": "0" 58 | "fill": "#eeeeee" 59 | "date": "4/19/2016" 60 | }, 61 | "block":{ 62 | 63 | "contribs": "0" 64 | "fill": "#eeeeee" 65 | "date": "4/20/2016" 66 | }, 67 | "block":{ 68 | 69 | "contribs": "0" 70 | "fill": "#eeeeee" 71 | "date": "4/21/2016" 72 | }, 73 | "block":{ 74 | 75 | "contribs": "0" 76 | "fill": "#eeeeee" 77 | "date": "4/22/2016" 78 | }, 79 | "block":{ 80 | 81 | "contribs": "0" 82 | "fill": "#eeeeee" 83 | "date": "4/23/2016" 84 | }, 85 | "block":{ 86 | 87 | "contribs": "0" 88 | "fill": "#eeeeee" 89 | "date": "4/24/2016" 90 | }, 91 | "block":{ 92 | 93 | "contribs": "0" 94 | "fill": "#eeeeee" 95 | "date": "4/25/2016" 96 | }, 97 | "block":{ 98 | 99 | "contribs": "0" 100 | "fill": "#eeeeee" 101 | "date": "4/26/2016" 102 | }, 103 | "block":{ 104 | 105 | "contribs": "0" 106 | "fill": "#eeeeee" 107 | "date": "4/27/2016" 108 | }, 109 | "block":{ 110 | 111 | "contribs": "0" 112 | "fill": "#eeeeee" 113 | "date": "4/28/2016" 114 | }, 115 | "block":{ 116 | 117 | "contribs": "0" 118 | "fill": "#eeeeee" 119 | "date": "4/29/2016" 120 | }, 121 | "block":{ 122 | 123 | "contribs": "0" 124 | "fill": "#eeeeee" 125 | "date": "4/30/2016" 126 | }, 127 | "block":{ 128 | 129 | "contribs": "0" 130 | "fill": "#eeeeee" 131 | "date": "5/1/2016" 132 | }, 133 | "block":{ 134 | 135 | "contribs": "0" 136 | "fill": "#eeeeee" 137 | "date": "5/2/2016" 138 | }, 139 | "block":{ 140 | 141 | "contribs": "0" 142 | "fill": "#eeeeee" 143 | "date": "5/3/2016" 144 | }, 145 | "block":{ 146 | 147 | "contribs": "0" 148 | "fill": "#eeeeee" 149 | "date": "5/4/2016" 150 | }, 151 | "block":{ 152 | 153 | "contribs": "0" 154 | "fill": "#eeeeee" 155 | "date": "5/5/2016" 156 | }, 157 | "block":{ 158 | 159 | "contribs": "0" 160 | "fill": "#eeeeee" 161 | "date": "5/6/2016" 162 | }, 163 | "block":{ 164 | 165 | "contribs": "0" 166 | "fill": "#eeeeee" 167 | "date": "5/7/2016" 168 | }, 169 | "block":{ 170 | 171 | "contribs": "0" 172 | "fill": "#eeeeee" 173 | "date": "5/8/2016" 174 | }, 175 | "block":{ 176 | 177 | "contribs": "0" 178 | "fill": "#eeeeee" 179 | "date": "5/9/2016" 180 | }, 181 | "block":{ 182 | 183 | "contribs": "0" 184 | "fill": "#eeeeee" 185 | "date": "5/10/2016" 186 | }, 187 | "block":{ 188 | 189 | "contribs": "0" 190 | "fill": "#eeeeee" 191 | "date": "5/11/2016" 192 | }, 193 | "block":{ 194 | 195 | "contribs": "0" 196 | "fill": "#eeeeee" 197 | "date": "5/12/2016" 198 | }, 199 | "block":{ 200 | 201 | "contribs": "0" 202 | "fill": "#eeeeee" 203 | "date": "5/13/2016" 204 | }, 205 | "block":{ 206 | 207 | "contribs": "1" 208 | "fill": "#d6e685" 209 | "date": "5/14/2016" 210 | }, 211 | "block":{ 212 | 213 | "contribs": "0" 214 | "fill": "#eeeeee" 215 | "date": "5/15/2016" 216 | }, 217 | "block":{ 218 | 219 | "contribs": "0" 220 | "fill": "#eeeeee" 221 | "date": "5/16/2016" 222 | }, 223 | "block":{ 224 | 225 | "contribs": "0" 226 | "fill": "#eeeeee" 227 | "date": "5/17/2016" 228 | }, 229 | "block":{ 230 | 231 | "contribs": "0" 232 | "fill": "#eeeeee" 233 | "date": "5/18/2016" 234 | }, 235 | "block":{ 236 | 237 | "contribs": "0" 238 | "fill": "#eeeeee" 239 | "date": "5/19/2016" 240 | }, 241 | "block":{ 242 | 243 | "contribs": "0" 244 | "fill": "#eeeeee" 245 | "date": "5/20/2016" 246 | }, 247 | "block":{ 248 | 249 | "contribs": "0" 250 | "fill": "#eeeeee" 251 | "date": "5/21/2016" 252 | }, 253 | "block":{ 254 | 255 | "contribs": "0" 256 | "fill": "#eeeeee" 257 | "date": "5/22/2016" 258 | }, 259 | "block":{ 260 | 261 | "contribs": "0" 262 | "fill": "#eeeeee" 263 | "date": "5/23/2016" 264 | }, 265 | "block":{ 266 | 267 | "contribs": "0" 268 | "fill": "#eeeeee" 269 | "date": "5/24/2016" 270 | }, 271 | "block":{ 272 | 273 | "contribs": "1" 274 | "fill": "#d6e685" 275 | "date": "5/25/2016" 276 | }, 277 | "block":{ 278 | 279 | "contribs": "0" 280 | "fill": "#eeeeee" 281 | "date": "5/26/2016" 282 | }, 283 | "block":{ 284 | 285 | "contribs": "0" 286 | "fill": "#eeeeee" 287 | "date": "5/27/2016" 288 | }, 289 | "block":{ 290 | 291 | "contribs": "0" 292 | "fill": "#eeeeee" 293 | "date": "5/28/2016" 294 | }, 295 | "block2":{ 296 | 297 | "contribs": "0" 298 | "fill": "#eeeeee" 299 | "date": "5/29/2016" 300 | }, 301 | "block2":{ 302 | 303 | "contribs": "0" 304 | "fill": "#eeeeee" 305 | "date": "5/30/2016" 306 | }, 307 | "block2":{ 308 | 309 | "contribs": "0" 310 | "fill": "#eeeeee" 311 | "date": "5/31/2016" 312 | }, 313 | "block2":{ 314 | 315 | "contribs": "3" 316 | "fill": "#d6e685" 317 | "date": "6/1/2016" 318 | }, 319 | "block2":{ 320 | 321 | "contribs": "12" 322 | "fill": "#44a340" 323 | "date": "6/2/2016" 324 | }, 325 | "block2":{ 326 | 327 | "contribs": "8" 328 | "fill": "#8cc665" 329 | "date": "6/3/2016" 330 | }, 331 | "block2":{ 332 | 333 | "contribs": "2" 334 | "fill": "#d6e685" 335 | "date": "6/4/2016" 336 | }, 337 | "block2":{ 338 | 339 | "contribs": "0" 340 | "fill": "#eeeeee" 341 | "date": "6/5/2016" 342 | }, 343 | "block2":{ 344 | 345 | "contribs": "5" 346 | "fill": "#8cc665" 347 | "date": "6/6/2016" 348 | }, 349 | "block2":{ 350 | 351 | "contribs": "9" 352 | "fill": "#8cc665" 353 | "date": "6/7/2016" 354 | }, 355 | "block2":{ 356 | 357 | "contribs": "1" 358 | "fill": "#d6e685" 359 | "date": "6/8/2016" 360 | }, 361 | "block2":{ 362 | 363 | "contribs": "4" 364 | "fill": "#d6e685" 365 | "date": "6/9/2016" 366 | }, 367 | "block2":{ 368 | 369 | "contribs": "19" 370 | "fill": "#1e6823" 371 | "date": "6/10/2016" 372 | }, 373 | "block2":{ 374 | 375 | "contribs": "9" 376 | "fill": "#8cc665" 377 | "date": "6/11/2016" 378 | }, 379 | "block2":{ 380 | 381 | "contribs": "1" 382 | "fill": "#d6e685" 383 | "date": "6/12/2016" 384 | }, 385 | "block2":{ 386 | 387 | "contribs": "2" 388 | "fill": "#d6e685" 389 | "date": "6/13/2016" 390 | }, 391 | "block2":{ 392 | 393 | "contribs": "5" 394 | "fill": "#8cc665" 395 | "date": "6/14/2016" 396 | }, 397 | "block2":{ 398 | 399 | "contribs": "14" 400 | "fill": "#44a340" 401 | "date": "6/15/2016" 402 | }, 403 | "block2":{ 404 | 405 | "contribs": "3" 406 | "fill": "#d6e685" 407 | "date": "6/16/2016" 408 | }, 409 | "block2":{ 410 | 411 | "contribs": "1" 412 | "fill": "#d6e685" 413 | "date": "6/17/2016" 414 | }, 415 | "block2":{ 416 | 417 | "contribs": "2" 418 | "fill": "#d6e685" 419 | "date": "6/18/2016" 420 | }, 421 | "block2":{ 422 | 423 | "contribs": "3" 424 | "fill": "#d6e685" 425 | "date": "6/19/2016" 426 | }, 427 | "block2":{ 428 | 429 | "contribs": "15" 430 | "fill": "#1e6823" 431 | "date": "6/20/2016" 432 | }, 433 | "block2":{ 434 | 435 | "contribs": "10" 436 | "fill": "#44a340" 437 | "date": "6/21/2016" 438 | }, 439 | "block2":{ 440 | 441 | "contribs": "2" 442 | "fill": "#d6e685" 443 | "date": "6/22/2016" 444 | }, 445 | "block2":{ 446 | 447 | "contribs": "0" 448 | "fill": "#eeeee" 449 | "date": " " 450 | }, 451 | "block2":{ 452 | 453 | "contribs": "0" 454 | "fill": "#eeeee" 455 | "date": " " 456 | }, 457 | "block2":{ 458 | 459 | "contribs": "0" 460 | "fill": "#eeeee" 461 | "date": " " 462 | }, 463 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/GraphInfoWeek.txt: -------------------------------------------------------------------------------- 1 | "block":{ 2 | 3 | "contribs": "3" 4 | "fill": "#d6e685" 5 | "date": "6/19/2016" 6 | }, 7 | "block":{ 8 | 9 | "contribs": "15" 10 | "fill": "#1e6823" 11 | "date": "6/20/2016" 12 | }, 13 | "block":{ 14 | 15 | "contribs": "10" 16 | "fill": "#44a340" 17 | "date": "6/21/2016" 18 | }, 19 | "block":{ 20 | 21 | "contribs": "2" 22 | "fill": "#d6e685" 23 | "date": "6/22/2016" 24 | }, 25 | "block":{ 26 | 27 | "contribs": "0" 28 | "fill": "#eeeee" 29 | "date": " " 30 | }, 31 | "block":{ 32 | 33 | "contribs": "0" 34 | "fill": "#eeeee" 35 | "date": " " 36 | }, 37 | "block":{ 38 | 39 | "contribs": "0" 40 | "fill": "#eeeee" 41 | "date": " " 42 | }, 43 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/WebDriver.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/bin/Debug/WebDriver.dll -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/app.publish/GitHubScraper.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/bin/Debug/app.publish/GitHubScraper.exe -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/bin/Debug/phantomjs.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/bin/Debug/phantomjs.exe -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /@Resources/GitHubScraper/GitHubScraper/phantomjs.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/GitHubScraper/GitHubScraper/phantomjs.exe -------------------------------------------------------------------------------- /@Resources/Images/exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Images/exit.png -------------------------------------------------------------------------------- /@Resources/Images/github-calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Images/github-calendar.png -------------------------------------------------------------------------------- /@Resources/Images/info_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/Images/info_background.png -------------------------------------------------------------------------------- /@Resources/config.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/config.txt -------------------------------------------------------------------------------- /@Resources/github-calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/github-calendar.png -------------------------------------------------------------------------------- /@Resources/images/Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/images/Button.png -------------------------------------------------------------------------------- /@Resources/images/Button2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/images/Button2.png -------------------------------------------------------------------------------- /@Resources/images/Close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/images/Close.png -------------------------------------------------------------------------------- /@Resources/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/images/background.png -------------------------------------------------------------------------------- /@Resources/images/configback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/images/configback.png -------------------------------------------------------------------------------- /@Resources/images/github_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/images/github_logo.png -------------------------------------------------------------------------------- /@Resources/preview/Preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/@Resources/preview/Preview.gif -------------------------------------------------------------------------------- /@Resources/script.lua: -------------------------------------------------------------------------------- 1 | -- ## Information ################################################################### 2 | -- Filename: script.lua 3 | -- Project: GitHubCalendar 4 | -- Author: Brett Stevenson 5 | -- License: BSD 3-Clause 6 | -- Updated: Sept 26, 2016 7 | -- ############################################################################### 8 | 9 | -- ## Description ################################################################### 10 | -- A work-in-progress Lua script, intended to improve the performance/functionality of the 11 | -- GitHubCalendar Rainmeter skin by automating the creation and simplifying the modification 12 | -- and update processes. 13 | -- ############################################################################### 14 | 15 | 16 | -- ## Initialize() ################################################################## 17 | -- The Initialize() function contains code that will be executed when the skin is loaded from within Rainmeter or when major changes are made to the data of the skin. 18 | -- ############################################################################## 19 | 20 | function Initialize() 21 | local dataFile = SKIN:GetVariable('dataPath') 22 | local file = io.open(dataFile, "r") 23 | --Loop that writes the values for each block 24 | for i=1, 70 do 25 | local squareMeter = "Square" .. i 26 | SKIN:Bang("!WriteKeyValue", squareMeter, "Meter", "Bar") 27 | -- Reads values from C# txt file and stores them in lists 28 | local contribs = file:read("*line") 29 | local fill = file:read("*line") 30 | local date = file:read("*line") 31 | -- Set the X and Y position and meter style 32 | local remainder = (i-1)%7 33 | if i == 1 then 34 | SKIN:Bang("!WriteKeyValue", squareMeter, "MeterStyle", "SquareStyle") 35 | SKIN:Bang('!WriteKeyValue', squareMeter, 'X', '20') 36 | SKIN:Bang('!WriteKeyValue', squareMeter, 'Y', '15') 37 | elseif remainder == 0 then 38 | SKIN:Bang("!WriteKeyValue", squareMeter, "MeterStyle", "SquareStyle | WeekStartStyle") 39 | else 40 | SKIN:Bang("!WriteKeyValue", squareMeter, "MeterStyle", "SquareStyle") 41 | end 42 | -- Set the color of the square 43 | local color = string.sub(fill, 2) 44 | if color == "d6e685" then 45 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color1#") 46 | elseif color == "8cc665" then 47 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color2#") 48 | elseif color == "44a340" then 49 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color3#") 50 | elseif color == "1e6823" then 51 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color4#") 52 | else 53 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#EmptyColor#") 54 | end 55 | --Set the date of the square as ToolTipText 56 | --Set square to display contributions on mouse-over action 57 | if(string.len(date) >= 8) then 58 | SKIN:Bang('!WriteKeyValue', squareMeter, 'ToolTipText', date) 59 | SKIN:Bang('!WriteKeyValue', squareMeter, 'MouseOverAction', '[!SetOption Active Text "Contributions: ' ..contribs ..'"][!UpdateMeter Active][!Redraw]') 60 | else 61 | SKIN:Bang('!WriteKeyValue', squareMeter, 'ToolTipText', "") 62 | SKIN:Bang('!WriteKeyValue', squareMeter, 'MouseOverAction', '[!SetOption Active Text ""][!UpdateMeter Active][!Redraw]') 63 | end 64 | end 65 | file:close() 66 | end 67 | 68 | 69 | 70 | -- #### Update() #################################################################### 71 | -- The Update() function contains code that will be executed when the skin is automatically updated or 72 | -- manually refreshed, reducing the amount of work needed to update the skin. 73 | -- ############################################################################## 74 | 75 | function Update( ) 76 | print("Updating") 77 | local dataPath = SKIN:GetVariable('DataPath') 78 | local checkFile = io.open(dataPath, "r") 79 | checkFile:read("*line") 80 | checkFile:read("*line") 81 | local testDate = checkFile:read("*line") 82 | -- checkFile.close() 83 | local Meter = SKIN:GetMeter('Square1') 84 | if testDate ~= Meter:GetOption('ToolTipText') then 85 | --It's a new week 86 | Initialize() 87 | else 88 | print("Current Week") 89 | local weekPath = SKIN:GetVariable('WeekPath') 90 | local file = io.open(weekPath, "r") 91 | for i=64, 70 do 92 | local contribs = file:read("*line") 93 | local fill = file:read("*line") 94 | local date = file:read("*line") 95 | local squareMeter = SKIN:GetMeter('Square'..i) 96 | local color = string.sub(fill, 2) 97 | if color == "d6e685" then 98 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color1#") 99 | elseif color == "8cc665" then 100 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color2#") 101 | elseif color == "44a340" then 102 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color3#") 103 | elseif color == "1e6823" then 104 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color4#") 105 | else 106 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#EmptyColor#") 107 | end 108 | --Set square to display contributions on mouse-over action and date as tooltip 109 | if(string.len(date) >= 8) then 110 | SKIN:Bang('!SetOption', squareMeter, 'ToolTipText', date) 111 | SKIN:Bang('!SetOption', squareMeter, 'MouseOverAction', '[!SetOption Active Text "Contributions: ' ..contribs ..'"][!UpdateMeter Active][!Redraw]') 112 | else 113 | SKIN:Bang('!SetOption', squareMeter, 'ToolTipText', "") 114 | SKIN:Bang('!SetOption', squareMeter, 'MouseOverAction', '[!SetOption Active Text ""][!UpdateMeter Active][!Redraw]') 115 | end 116 | end 117 | -- file:close() 118 | end 119 | return 1; 120 | end 121 | -------------------------------------------------------------------------------- /@Resources/style.inc: -------------------------------------------------------------------------------- 1 | [Variables] 2 | Contribs=0 3 | EmptyColor=175,175,175,95 4 | Color1=239,255,158,200 5 | Color2=130,188,91,250 6 | Color3=80,155,75,250 7 | Color4=10,105,6,250 8 | TextColor=255,255,255,210 9 | TextFont=Serif 10 | TextSize=9 11 | TextGap=20 12 | Radius=6 13 | SquareGap=13 14 | SquareSize=(#Radius# * 2) 15 | TextWidth=((#SquareGap# * 2) + #SquareSize#) 16 | ScraperPath="#@#GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe" 17 | ProfilePath="https://github.com/#USERNAME#" 18 | 19 | [BackgroundStyle] 20 | ImageName=#@#images/background.png 21 | ImageTint=0,0,0,60 22 | X=0 23 | Y=3 24 | H=127 25 | W=165 26 | 27 | [LogoStyle] 28 | ImageName=#@#images/github_logo.png 29 | ImageTint=235,235,235,155 30 | X=142 31 | Y=108 32 | H=18 33 | W=18 34 | 35 | [SquareStyle] 36 | X=r 37 | Y=#SquareGap#r 38 | H=#SquareSize# 39 | W=#SquareSize# 40 | Solid=1 41 | LineStart=0 42 | AntiAlias=1 43 | SolidColor=#EmptyColor# 44 | LineLength=#BlockRadius# 45 | MouseLeaveAction=[!SetOption Active Text " "][!UpdateMeter Active][!Redraw] 46 | 47 | [ActiveStyle] 48 | X=85 49 | Y=109 50 | H=#SquareSize# 51 | W=#SquareSize# 52 | FontFace=#TextFont# 53 | FontSize=#TextSize# 54 | FontColor=#TextColor# 55 | StringAlign=CENTER 56 | AntiAlias=1 57 | 58 | [WeekStartStyle] 59 | X=#SquareGap#r 60 | Y=15 61 | 62 | [LabelStyle] 63 | FontSize=7 64 | FontFace=#TextStyle# 65 | FontColor=#TextColor# 66 | X=3 67 | Y=25r 68 | H=#Radius# 69 | W=#Radius# 70 | 71 | [ConfigDesc] 72 | FontFace=#TextFont# 73 | FontSize=14 74 | StringStyle=Bold 75 | FontColor=230,230,230,240 76 | StringEffect=Shadow 77 | FontEffectColor = 0,0,0,200 78 | 79 | [InfoTitle] 80 | Meter=String 81 | FontFace=#LocalFontFace# 82 | FontSize=19 83 | StringAlign=Center 84 | StringStyle=Bold 85 | FontColor=230,230,230,240 86 | StringEffect=Shadow 87 | FontEffectColor = 0,0,0,200 88 | 89 | [InfoText] 90 | Meter=String 91 | FontFace=Monospaced 92 | FontSize=11 93 | FontColor=230,230,230,240 94 | StringEffect=Shadow 95 | FontEffectColor = 0,0,0,150 96 | -------------------------------------------------------------------------------- /@Resources/week.lua: -------------------------------------------------------------------------------- 1 | -- ## Information ################################################################### 2 | -- Filename: script.lua 3 | -- Project: GitHubCalendar 4 | -- Author: Brett Stevenson 5 | -- License: BSD 3-Clause 6 | -- Updated: Sept 26, 2016 7 | -- ############################################################################### 8 | 9 | -- ## Description ################################################################### 10 | -- A work-in-progress Lua script, intended to improve the performance/functionality of the 11 | -- GitHubCalendar Rainmeter skin by automating the creation and simplifying the modification 12 | -- and update processes. 13 | -- ############################################################################### 14 | 15 | 16 | -- ## Initialize() ################################################################## 17 | -- The Initialize() function contains code that will be executed when the skin is loaded from within Rainmeter or when major changes are made to the data of the skin. 18 | -- ############################################################################## 19 | 20 | function Initialize() 21 | local dataFile = SKIN:GetVariable('dataPath') 22 | local file = io.open(dataFile, "r") 23 | --Loop that writes the values for each block 24 | for i=1, 7 do 25 | local squareMeter = "Square" .. i 26 | SKIN:Bang("!WriteKeyValue", squareMeter, "Meter", "Bar") 27 | -- Reads values from C# txt file and stores them in lists 28 | local contribs = file:read("*line") 29 | local fill = file:read("*line") 30 | local date = file:read("*line") 31 | -- Set the X and Y position and meter style 32 | local remainder = (i-1)%7 33 | if i == 1 then 34 | SKIN:Bang("!WriteKeyValue", squareMeter, "MeterStyle", "SquareStyle") 35 | SKIN:Bang('!WriteKeyValue', squareMeter, 'X', '20') 36 | SKIN:Bang('!WriteKeyValue', squareMeter, 'Y', '24') 37 | elseif remainder == 0 then 38 | SKIN:Bang("!WriteKeyValue", squareMeter, "MeterStyle", "SquareStyle | WeekStartStyle") 39 | else 40 | SKIN:Bang("!WriteKeyValue", squareMeter, "MeterStyle", "SquareStyle") 41 | end 42 | -- Set the color of the square 43 | local color = string.sub(fill, 2) 44 | if color == "d6e685" then 45 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color1#") 46 | elseif color == "8cc665" then 47 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color2#") 48 | elseif color == "44a340" then 49 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color3#") 50 | elseif color == "1e6823" then 51 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#Color4#") 52 | else 53 | SKIN:Bang('!WriteKeyValue', squareMeter, 'SolidColor', "#EmptyColor#") 54 | end 55 | --Set the date of the square as ToolTipText 56 | --Set square to display contributions on mouse-over action 57 | if(string.len(date) >= 8) then 58 | SKIN:Bang('!WriteKeyValue', squareMeter, 'ToolTipText', date) 59 | SKIN:Bang('!WriteKeyValue', squareMeter, 'MouseOverAction', '[!SetOption Active Text "' ..contribs ..'"][!UpdateMeter Active][!Redraw]') 60 | else 61 | SKIN:Bang('!WriteKeyValue', squareMeter, 'ToolTipText', "") 62 | SKIN:Bang('!WriteKeyValue', squareMeter, 'MouseOverAction', '[!SetOption Active Text ""][!UpdateMeter Active][!Redraw]') 63 | end 64 | end 65 | file:close() 66 | end 67 | 68 | 69 | 70 | -- #### Update() #################################################################### 71 | -- The Update() function contains code that will be executed when the skin is automatically updated or 72 | -- manually refreshed, reducing the amount of work needed to update the skin. 73 | -- ############################################################################## 74 | 75 | function Update( ) 76 | print("Updating") 77 | local dataPath = SKIN:GetVariable('DataPath') 78 | local checkFile = io.open(dataPath, "r") 79 | checkFile:read("*line") 80 | checkFile:read("*line") 81 | local weekPath = SKIN:GetVariable('WeekPath') 82 | local file = io.open(weekPath, "r") 83 | for i=1, 7 do 84 | local contribs = file:read("*line") 85 | local fill = file:read("*line") 86 | local date = file:read("*line") 87 | local squareMeter = SKIN:GetMeter('Square'..i) 88 | local color = string.sub(fill, 2) 89 | if color == "d6e685" then 90 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color1#") 91 | elseif color == "8cc665" then 92 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color2#") 93 | elseif color == "44a340" then 94 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color3#") 95 | elseif color == "1e6823" then 96 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#Color4#") 97 | else 98 | SKIN:Bang('!SetOption', squareMeter, 'SolidColor', "#EmptyColor#") 99 | end 100 | --Set square to display contributions on mouse-over action and date as tooltip 101 | if(string.len(date) >= 8) then 102 | SKIN:Bang('!SetOption', squareMeter, 'ToolTipText', date) 103 | SKIN:Bang('!SetOption', squareMeter, 'MouseOverAction', '[!SetOption Active Text "'..contribs ..'"][!UpdateMeter Active][!Redraw]') 104 | else 105 | SKIN:Bang('!SetOption', squareMeter, 'ToolTipText', "") 106 | SKIN:Bang('!SetOption', squareMeter, 'MouseOverAction', '[!SetOption Active Text ""][!UpdateMeter Active][!Redraw]') 107 | end 108 | end 109 | return 1; 110 | end 111 | -------------------------------------------------------------------------------- /Config/Config.ini: -------------------------------------------------------------------------------- 1 | ;## Information ################################################################### 2 | ; Filename: Config.ini 3 | ; Project: GitHubCalendar 4 | ; Author: Brett Stevenson 5 | ; Contact: BStevensonDev@gmail.com 6 | ; Version: 1.1.3 7 | ; License: BSD 3-Clause 8 | ; Updated: Jan 3, 2017 9 | ;############################################################################### 10 | 11 | [Rainmeter] 12 | Name=Config 13 | Author=Brett Stevenson 14 | Contact=BStevensonDev@gmail.com 15 | Version=1.1.3 16 | License=BSD 3-Clause 17 | DynamicWindowSize=1 18 | Update=1000 19 | 20 | ;---------------------------------------------- 21 | ; VARIABLES 22 | 23 | [Variables] 24 | @include="#@#style.inc" 25 | WritePath="#@#config.txt" 26 | Username=Username 27 | 28 | ;---------------------------------------------- 29 | ; MEASURES 30 | 31 | [MeasureUserInput] 32 | Measure=Plugin 33 | Plugin=InputText 34 | FontSize=11 35 | FontFace=Segoe UI 36 | StringStyle=Bold 37 | SolidColor=70,70,70,175 38 | FontColor=150,150,150, 210 39 | X=226 40 | Y=257 41 | H=20 42 | W=80 43 | Command1=[!SetVariable Username "$UserInput$"][!ShowMeter MeterUsernameField][!CommandMeasure MeasureLuaScript "Write()"][!Update][!Redraw] 44 | OnDismissAction=[!ShowMeter MeterUsernameField][!Redraw] 45 | Command2=[!SetVariable numWeeks "$UserInput$"][!ShowMeter MeterSizeField][!CommandMeasure MeasureLuaScript "Write()"][!Update][!Redraw] 46 | OnDismissAction=[!ShowMeter MeterUsernameField][!Redraw] 47 | DynamicVariables=1 48 | UpdateDivider=-1 49 | FocusDismiss=1 50 | AntiAlias=1 51 | 52 | [MeasureLuaScript] 53 | Measure=Script 54 | ScriptFile="#@#Config.lua" 55 | WriteTo=#WritePath# 56 | Input=#Username# 57 | Weeks=#numWeeks# 58 | UpdateDivider=5 59 | 60 | ;---------------------------------------------- 61 | ; METERS 62 | 63 | [MeterBackground] 64 | Meter=Image 65 | ImageName="#@#images\configback.png" 66 | X=30 67 | Y=15 68 | H=450 69 | W=450 70 | 71 | [MeterDesc] 72 | Meter=String 73 | FontFace=Segoe UI 74 | FontSize=13 75 | StringStyle=Bold 76 | FontColor=230,230,230,240 77 | StringEffect=Shadow 78 | FontEffectColor = 0,0,0,200 79 | X=135 80 | Y=230 81 | Text="Enter your GitHub username: " 82 | 83 | [MeterURL] 84 | Meter=String 85 | FontFace=Segoe UI 86 | FontSize=11 87 | FontColor=230,230,230,240 88 | StringStyle=Bold 89 | StringEffect=Shadow 90 | FontEffectColor = 0,0,0,150 91 | X=169 92 | Y=266 93 | Text="github.com/ " 94 | 95 | [MeterUsernameField] 96 | Meter=String 97 | MeasureName=MeasureLuaScript 98 | FontFace=Segoe UI 99 | FontSize=11 100 | StringStyle=Bold 101 | StringEffect=Shadow 102 | SolidColor=75,75,75,195 103 | FontColor=190,190,190, 200 104 | FontEffectColor = 0,0,0,150 105 | X=89r 106 | Y=266 107 | H=20 108 | W=80 109 | LeftMouseUpAction=[!HideMeter MeterUsernameField][!CommandMeasure "MeasureUserInput" "ExecuteBatch 1"] 110 | DynamicVariables=1 111 | ClipString=1 112 | AntiAlias=1 113 | 114 | ; [MeterButton] 115 | ; Meter=Image 116 | ; ImageName=#@#images/Button.png 117 | ; ImageAlpha=210 118 | ; X=83r 119 | ; Y=404 120 | ; H=22 121 | ; W=22 122 | ; LeftMouseDownAction=[!SetOption MeterButton ImageName "#@#images/Button2.png"][!ToggleConfig "GitHubCalendar" "GitHubCalendar.ini"][!ToggleConfig "GitHubCalendar\Config" "Info.ini"] 123 | 124 | [MeterSizeText] 125 | Meter=String 126 | FontFace=Segoe UI 127 | FontSize=11 128 | FontColor=230,230,230,240 129 | StringStyle=Bold 130 | StringEffect=Shadow 131 | FontEffectColor = 0,0,0,150 132 | X=153 133 | Y=306 134 | Text=Range of calendar: 135 | 136 | [MeterSizeField] 137 | Meter=String 138 | MeasureName=MeasureLuaScript 139 | FontFace=Segoe UI 140 | FontSize=11 141 | StringStyle=Bold 142 | StringEffect=Shadow 143 | SolidColor=75,75,75,195 144 | FontColor=190,190,190, 200 145 | FontEffectColor = 0,0,0,150 146 | Text=10 147 | X=138r 148 | Y=-2r 149 | H=20 150 | W=25 151 | LeftMouseUpAction=[!HideMeter MeterSizeField][!CommandMeasure "MeasureUserInput" "ExecuteBatch 2"] 152 | DynamicVariables=1 153 | ClipString=1 154 | AntiAlias=1 155 | 156 | [MeterWeeksText] 157 | Meter=String 158 | FontSize=10 159 | FontFace=Segoe UI 160 | FontColor=230,230,230,240 161 | StringStyle=Bold 162 | StringEffect=Shadow 163 | FontEffectColor = 0,0,0,150 164 | X=28r 165 | Y=3r 166 | Text= weeks 167 | 168 | [MeterExit] 169 | Meter=Image 170 | ImageName=#@#images/close.png 171 | ImageTint=250,250,250, 200 172 | X=400 173 | Y=68 174 | H=15 175 | W=15 176 | LeftMouseDownAction=[!ToggleConfig "GitHubCalendar\Config" "Config.ini"] 177 | -------------------------------------------------------------------------------- /Config/Info.ini: -------------------------------------------------------------------------------- 1 | ;## Information ############################################################### 2 | ; Filename: Info.ini 3 | ; Project: GitHubCalendar 4 | ; Author: Brett Stevenson 5 | ; Contact: BStevensonDev@gmail.com 6 | ; Version: 1.1.3 7 | ; License: BSD 3-Clause 8 | ; Updated: Jan 3, 2017 9 | ;########################################################################### 10 | 11 | [Rainmeter] 12 | Name=Info 13 | Author=Brett Stevenson 14 | Contact=BStevensonDev@gmail.com 15 | Version=1.1.3 16 | License=BSD 3-Clause 17 | DynamicWindowSize=1 18 | Update=1000 19 | ;---------------------------------------------- 20 | ; VARIABLES 21 | 22 | [Variables] 23 | @include="#@#style.inc" 24 | 25 | ;---------------------------------------------- 26 | ; METERS 27 | 28 | [MeterBackground] 29 | Meter=Image 30 | ImageName="#@#images\info_background.png" 31 | ImageAlpha=215 32 | X=0 33 | Y=0 34 | H=410 35 | W=310 36 | 37 | [MeterTitle] 38 | Meter=String 39 | MeterStyle=InfoTitle 40 | X=152 41 | Y=17 42 | Text=INSTRUCTIONS 43 | 44 | [MeterImage] 45 | Meter=Image 46 | ImageName="#@#images\github-calendar.png" 47 | ImageAlpha=150 48 | X=65 49 | Y=62 50 | H=175 51 | W=175 52 | 53 | [MeterIconLMB] 54 | Meter=Image 55 | MeterStyle=LogoStyle 56 | X=122 57 | Y=260 58 | H=20 59 | W=20 60 | 61 | [MeterIconRMB] 62 | Meter=Image 63 | MeterStyle=LogoStyle 64 | X=134 65 | Y=320 66 | H=20 67 | W=20 68 | 69 | [MeterLMB] 70 | Meter=String 71 | MeterStyle=InfoTitle 72 | FontSize=13 73 | StringAlign=Left 74 | X=32 75 | Y=258 76 | Text=Left-Click: 77 | 78 | [MeterRMB] 79 | Meter=String 80 | MeterStyle=InfoTitle 81 | FontSize=13 82 | StringAlign=Left 83 | X=32 84 | Y=318 85 | Text=Right-Click: 86 | 87 | [MeterLMBDesc] 88 | Meter=String 89 | MeterStyle=InfoText 90 | X=37 91 | Y=283 92 | Text=Run data collection program 93 | 94 | [MeterRMBDesc] 95 | Meter=String 96 | MeterStyle=InfoText 97 | X=37 98 | Y=343 99 | Text=Update/Refresh skin display 100 | 101 | [MeterExit] 102 | Meter=Image 103 | ImageName=#@#images/exit.png 104 | ImageTint=180,180,180,255 105 | X=271 106 | Y=23 107 | H=10 108 | W=10 109 | LeftMouseDownAction=[!ToggleConfig "GitHubCalendar\Config" "Info.ini"] 110 | -------------------------------------------------------------------------------- /Documentation/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | The following is a set of guidelines for contributing to this project. These are not rules, use your best judgment and feel free to propose changes to this document in a pull request. 4 | 5 | ### Code of Conduct 6 | 7 | This project adheres to the Contributor Covenant [code of conduct](http://contributor-covenant.org/version/1/4/). By participating, you are expected to uphold this code. Please report unacceptable behavior to atom@github.com. 8 | 9 | ## How Can I Contribute? 10 | 11 | ### Reporting Bugs 12 | 13 | This section guides you through submitting a bug report for Atom. Following these guidelines helps maintainers and the community understand your report, reproduce the behavior, and find related reports. 14 | 15 | * Before creating bug reports, please check the [existing issues](http://github.com/JonSn0w/Atomic-Monokai-Syntax/issues) as you might find out that one has already been created by another user. 16 | * When you are creating a bug report, please provide a clear and descriptive title. 17 | * Please include as many details as possible in your report. Remember, in order to fix the issue, we must first be able to reproduce it. 18 | * The use of images, GIFs, or any other form of media is not only *allowed*, it's **encouraged**. 19 | * Include any relevant details about your configuration and environment. 20 | 21 | ### Enhancements & Feature Requests 22 | 23 | Users provide the best insight for improving a product. So always feel free to suggest improvements, feedback, and give the developers an idea of what new features you'd like to see in the future. 24 | **Don't forget, this is one of the greatest benefits of open-source development!** 25 | If you'd like to submit an enhancement request, please include the following information: 26 | * Current project version (check that you are using the latest version) 27 | * How would this enhancement benefit most users? 28 | * Do you have any examples of other applications that feature this enhancement? 29 | * Relevant details about your configuration and environment. 30 | * ***Note:*** Don't forget to tag your post with the *Enhancement* label. 31 | 32 | 33 | ### Pull Requests 34 | * Provide as much information as possible on the changes made to existing code. 35 | * Include thoughtfully-worded, well-structured commit messages and comments. 36 | * Include screenshots and animated GIFs in your pull request whenever possible. 37 | * When addressing an existing issue, please include an [issue mention](https://github.com/blog/957-introducing-issue-mentions) in the description of your pull request. 38 | * End files with a newline. 39 | * Avoid platform-dependent code on cross-platform applications. 40 | * Ensure that submitted code follows the style guidlines specified in the [Styleguide](#styleguide) below. 41 | 42 | 43 | ## Styleguides 44 | 45 | ### Commit Messages 46 | * Do your best to conform the tense to that of the existing commits. ("Add feature" not "Added feature" or vice versa) 47 | * Use the imperative mood ("Move cursor to..." not "Moves cursor to...") 48 | * Consider starting the commit message with an applicable emoji: 49 | * :art: `:art:` when improving the format/structure of the code 50 | * :racehorse: `:racehorse:` when improving performance 51 | * :non-potable_water: `:non-potable_water:` when plugging memory leaks 52 | * :memo: `:memo:` when writing docs 53 | * :penguin: `:penguin:` when fixing something on Linux 54 | * :apple: `:apple:` when fixing something on macOS 55 | * :checkered_flag: `:checkered_flag:` when fixing something on Windows 56 | * :bug: `:bug:` when fixing a bug 57 | * :fire: `:fire:` when removing code or files 58 | * :green_heart: `:green_heart:` when fixing the CI build 59 | * :white_check_mark: `:white_check_mark:` when adding tests 60 | * :lock: `:lock:` when dealing with security 61 | * :arrow_up: `:arrow_up:` when upgrading dependencies 62 | * :arrow_down: `:arrow_down:` when downgrading dependencies 63 | * :shirt: `:shirt:` when removing linter warnings 64 | 65 | ### Code 66 | 67 | * Use spaces around operators 68 | * `count + 1` instead of `count+1` 69 | * Use camelCase rather than underscore_case naming conventions 70 | * `myFunction` instead of `my_function` 71 | * Capitalize initialisms and acronyms in names, except for the first word, which 72 | should be lower-case: 73 | * `getURL` instead of `getUrl` 74 | * Provide comments for important or complex code 75 | * Conform your code to the existing styles to the best of your ability 76 | * Always check that your submission follows [The Boy Scout Rule](http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule) 77 | -------------------------------------------------------------------------------- /Documentation/LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Brett Stevenson 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /GitHubCalendar.ini: -------------------------------------------------------------------------------- 1 | ;## Information ################################################################ 2 | ; Filename: GitHubCalendar.ini 3 | ; Project: GitHubCalendar 4 | ; Author: Brett Stevenson 5 | ; Contact: BStevensonDev@gmail.com 6 | ; Version: v1.1.3 7 | ; License: BSD 3-Clause 8 | ; Updated: Jan 3, 2017 9 | ;############################################################################### 10 | 11 | [Rainmeter] 12 | Name=GitHubCalendar 13 | Author=Brett Stevenson 14 | Contact=BStevensonDev@gmail.com 15 | Version=v1.1.3 16 | DynamicWindowSize=1 17 | Update=1000 18 | 19 | ;------------------------------------------------------------------------------- 20 | ; VARIABLES 21 | 22 | [Variables] 23 | @include="#@#style.inc" 24 | ScraperPath="#@#GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe" 25 | DataPath="#@#data.txt" 26 | WeekPath="#@#week.txt" 27 | numWeeks=10 28 | 29 | ;------------------------------------------------------------------------------- 30 | ; MEASURES 31 | 32 | [MeasureLuaScript] 33 | Measure=Script 34 | ScriptFile="#@#script.lua" 35 | UpdateDivider=60 36 | NumWeeks=#numWeeks# 37 | 38 | ;------------------------------------------------------------------------------- 39 | ; METERS 40 | 41 | [Background] 42 | Meter=Image 43 | MeterStyle=BackgroundStyle 44 | W=((#numWeeks# + 18) + ((#numWeeks# + 1) * 12)) 45 | 46 | [MeterLogo] 47 | Meter=Image 48 | MeterStyle=LogoStyle 49 | X=(#numWeeks# * 14.2) 50 | ; Left-click runs the web scraper program and executes script.lua 51 | LeftMouseDownAction=["#ScraperPath#"] 52 | LeftMouseUpAction=[!CommandMeasure MeasureLuaScript "Initialize()"][!Redraw][!Refresh] 53 | ; Right-click re-initializes the skin by calling Initialize from script.lua 54 | RightMouseDownAction=[!Redraw][!Refresh] 55 | MouseOverAction=[!SetOption Active Text "Update"][!UpdateMeter Active][!Redraw] 56 | 57 | [Active] 58 | Meter=String 59 | MeterStyle=ActiveStyle 60 | X=(#numWeeks# * 8.5) 61 | 62 | [DayLabel1] 63 | Meter=String 64 | MeterStyle=LabelStyle 65 | Y=27 66 | Text="M" 67 | 68 | [DayLabel2] 69 | Meter=String 70 | MeterStyle=LabelStyle 71 | Text="W" 72 | 73 | [DayLabel3] 74 | Meter=String 75 | MeterStyle=LabelStyle 76 | FontSize=8 77 | X=5 78 | Text="F" 79 | 80 | 81 | ;------------------------------------------------------------------------------- 82 | ; Do not change anything below this line. They are automatically derived from the Lua script. 83 | 84 | [Square1] 85 | Meter=Bar 86 | MeterStyle=SquareStyle 87 | X=20 88 | Y=15 89 | SolidColor=239,255,158,200 90 | ToolTipText=10/30/16 91 | MouseOverAction=[!SetOption Active Text "Contributions: 3"][!UpdateMeter Active][!Redraw] 92 | [Square2] 93 | Meter=Bar 94 | MeterStyle=SquareStyle 95 | SolidColor=239,255,158,200 96 | ToolTipText=10/31/16 97 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 98 | [Square3] 99 | Meter=Bar 100 | MeterStyle=SquareStyle 101 | SolidColor=175,175,175,95 102 | ToolTipText=11/1/16 103 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 104 | [Square4] 105 | Meter=Bar 106 | MeterStyle=SquareStyle 107 | SolidColor=130,188,91,250 108 | ToolTipText=11/2/16 109 | MouseOverAction=[!SetOption Active Text "Contributions: 9"][!UpdateMeter Active][!Redraw] 110 | [Square5] 111 | Meter=Bar 112 | MeterStyle=SquareStyle 113 | SolidColor=130,188,91,250 114 | ToolTipText=11/3/16 115 | MouseOverAction=[!SetOption Active Text "Contributions: 6"][!UpdateMeter Active][!Redraw] 116 | [Square6] 117 | Meter=Bar 118 | MeterStyle=SquareStyle 119 | SolidColor=130,188,91,250 120 | ToolTipText=11/4/16 121 | MouseOverAction=[!SetOption Active Text "Contributions: 6"][!UpdateMeter Active][!Redraw] 122 | [Square7] 123 | Meter=Bar 124 | MeterStyle=SquareStyle 125 | SolidColor=239,255,158,200 126 | ToolTipText=11/5/16 127 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 128 | [Square8] 129 | Meter=Bar 130 | MeterStyle=SquareStyle | WeekStartStyle 131 | SolidColor=239,255,158,200 132 | ToolTipText=11/6/16 133 | MouseOverAction=[!SetOption Active Text "Contributions: 3"][!UpdateMeter Active][!Redraw] 134 | [Square9] 135 | Meter=Bar 136 | MeterStyle=SquareStyle 137 | SolidColor=80,155,75,250 138 | ToolTipText=11/7/16 139 | MouseOverAction=[!SetOption Active Text "Contributions: 12"][!UpdateMeter Active][!Redraw] 140 | [Square10] 141 | Meter=Bar 142 | MeterStyle=SquareStyle 143 | SolidColor=239,255,158,200 144 | ToolTipText=11/8/16 145 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 146 | [Square11] 147 | Meter=Bar 148 | MeterStyle=SquareStyle 149 | SolidColor=239,255,158,200 150 | ToolTipText=11/9/16 151 | MouseOverAction=[!SetOption Active Text "Contributions: 5"][!UpdateMeter Active][!Redraw] 152 | [Square12] 153 | Meter=Bar 154 | MeterStyle=SquareStyle 155 | SolidColor=130,188,91,250 156 | ToolTipText=11/10/16 157 | MouseOverAction=[!SetOption Active Text "Contributions: 10"][!UpdateMeter Active][!Redraw] 158 | [Square13] 159 | Meter=Bar 160 | MeterStyle=SquareStyle 161 | SolidColor=239,255,158,200 162 | ToolTipText=11/11/16 163 | MouseOverAction=[!SetOption Active Text "Contributions: 4"][!UpdateMeter Active][!Redraw] 164 | [Square14] 165 | Meter=Bar 166 | MeterStyle=SquareStyle 167 | SolidColor=130,188,91,250 168 | ToolTipText=11/12/16 169 | MouseOverAction=[!SetOption Active Text "Contributions: 10"][!UpdateMeter Active][!Redraw] 170 | [Square15] 171 | Meter=Bar 172 | MeterStyle=SquareStyle | WeekStartStyle 173 | SolidColor=130,188,91,250 174 | ToolTipText=11/13/16 175 | MouseOverAction=[!SetOption Active Text "Contributions: 9"][!UpdateMeter Active][!Redraw] 176 | [Square16] 177 | Meter=Bar 178 | MeterStyle=SquareStyle 179 | SolidColor=239,255,158,200 180 | ToolTipText=11/14/16 181 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 182 | [Square17] 183 | Meter=Bar 184 | MeterStyle=SquareStyle 185 | SolidColor=175,175,175,95 186 | ToolTipText=11/15/16 187 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 188 | [Square18] 189 | Meter=Bar 190 | MeterStyle=SquareStyle 191 | SolidColor=130,188,91,250 192 | ToolTipText=11/16/16 193 | MouseOverAction=[!SetOption Active Text "Contributions: 11"][!UpdateMeter Active][!Redraw] 194 | [Square19] 195 | Meter=Bar 196 | MeterStyle=SquareStyle 197 | SolidColor=175,175,175,95 198 | ToolTipText=11/17/16 199 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 200 | [Square20] 201 | Meter=Bar 202 | MeterStyle=SquareStyle 203 | SolidColor=10,105,6,250 204 | ToolTipText=11/18/16 205 | MouseOverAction=[!SetOption Active Text "Contributions: 17"][!UpdateMeter Active][!Redraw] 206 | [Square21] 207 | Meter=Bar 208 | MeterStyle=SquareStyle 209 | SolidColor=130,188,91,250 210 | ToolTipText=11/19/16 211 | MouseOverAction=[!SetOption Active Text "Contributions: 8"][!UpdateMeter Active][!Redraw] 212 | [Square22] 213 | Meter=Bar 214 | MeterStyle=SquareStyle | WeekStartStyle 215 | SolidColor=239,255,158,200 216 | ToolTipText=11/20/16 217 | MouseOverAction=[!SetOption Active Text "Contributions: 5"][!UpdateMeter Active][!Redraw] 218 | [Square23] 219 | Meter=Bar 220 | MeterStyle=SquareStyle 221 | SolidColor=80,155,75,250 222 | ToolTipText=11/21/16 223 | MouseOverAction=[!SetOption Active Text "Contributions: 12"][!UpdateMeter Active][!Redraw] 224 | [Square24] 225 | Meter=Bar 226 | MeterStyle=SquareStyle 227 | SolidColor=130,188,91,250 228 | ToolTipText=11/22/16 229 | MouseOverAction=[!SetOption Active Text "Contributions: 6"][!UpdateMeter Active][!Redraw] 230 | [Square25] 231 | Meter=Bar 232 | MeterStyle=SquareStyle 233 | SolidColor=239,255,158,200 234 | ToolTipText=11/23/16 235 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 236 | [Square26] 237 | Meter=Bar 238 | MeterStyle=SquareStyle 239 | SolidColor=130,188,91,250 240 | ToolTipText=11/24/16 241 | MouseOverAction=[!SetOption Active Text "Contributions: 11"][!UpdateMeter Active][!Redraw] 242 | [Square27] 243 | Meter=Bar 244 | MeterStyle=SquareStyle 245 | SolidColor=130,188,91,250 246 | ToolTipText=11/25/16 247 | MouseOverAction=[!SetOption Active Text "Contributions: 10"][!UpdateMeter Active][!Redraw] 248 | [Square28] 249 | Meter=Bar 250 | MeterStyle=SquareStyle 251 | SolidColor=239,255,158,200 252 | ToolTipText=11/26/16 253 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 254 | [Square29] 255 | Meter=Bar 256 | MeterStyle=SquareStyle | WeekStartStyle 257 | SolidColor=239,255,158,200 258 | ToolTipText=11/27/16 259 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 260 | [Square30] 261 | Meter=Bar 262 | MeterStyle=SquareStyle 263 | SolidColor=130,188,91,250 264 | ToolTipText=11/28/16 265 | MouseOverAction=[!SetOption Active Text "Contributions: 9"][!UpdateMeter Active][!Redraw] 266 | [Square31] 267 | Meter=Bar 268 | MeterStyle=SquareStyle 269 | SolidColor=130,188,91,250 270 | ToolTipText=11/29/16 271 | MouseOverAction=[!SetOption Active Text "Contributions: 6"][!UpdateMeter Active][!Redraw] 272 | [Square32] 273 | Meter=Bar 274 | MeterStyle=SquareStyle 275 | SolidColor=130,188,91,250 276 | ToolTipText=11/30/16 277 | MouseOverAction=[!SetOption Active Text "Contributions: 9"][!UpdateMeter Active][!Redraw] 278 | [Square33] 279 | Meter=Bar 280 | MeterStyle=SquareStyle 281 | SolidColor=130,188,91,250 282 | ToolTipText=12/1/16 283 | MouseOverAction=[!SetOption Active Text "Contributions: 7"][!UpdateMeter Active][!Redraw] 284 | [Square34] 285 | Meter=Bar 286 | MeterStyle=SquareStyle 287 | SolidColor=239,255,158,200 288 | ToolTipText=12/2/16 289 | MouseOverAction=[!SetOption Active Text "Contributions: 2"][!UpdateMeter Active][!Redraw] 290 | [Square35] 291 | Meter=Bar 292 | MeterStyle=SquareStyle 293 | SolidColor=10,105,6,250 294 | ToolTipText=12/3/16 295 | MouseOverAction=[!SetOption Active Text "Contributions: 20"][!UpdateMeter Active][!Redraw] 296 | [Square36] 297 | Meter=Bar 298 | MeterStyle=SquareStyle | WeekStartStyle 299 | SolidColor=239,255,158,200 300 | ToolTipText=12/4/16 301 | MouseOverAction=[!SetOption Active Text "Contributions: 4"][!UpdateMeter Active][!Redraw] 302 | [Square37] 303 | Meter=Bar 304 | MeterStyle=SquareStyle 305 | SolidColor=239,255,158,200 306 | ToolTipText=12/5/16 307 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 308 | [Square38] 309 | Meter=Bar 310 | MeterStyle=SquareStyle 311 | SolidColor=239,255,158,200 312 | ToolTipText=12/6/16 313 | MouseOverAction=[!SetOption Active Text "Contributions: 3"][!UpdateMeter Active][!Redraw] 314 | [Square39] 315 | Meter=Bar 316 | MeterStyle=SquareStyle 317 | SolidColor=175,175,175,95 318 | ToolTipText=12/7/16 319 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 320 | [Square40] 321 | Meter=Bar 322 | MeterStyle=SquareStyle 323 | SolidColor=130,188,91,250 324 | ToolTipText=12/8/16 325 | MouseOverAction=[!SetOption Active Text "Contributions: 10"][!UpdateMeter Active][!Redraw] 326 | [Square41] 327 | Meter=Bar 328 | MeterStyle=SquareStyle 329 | SolidColor=239,255,158,200 330 | ToolTipText=12/9/16 331 | MouseOverAction=[!SetOption Active Text "Contributions: 5"][!UpdateMeter Active][!Redraw] 332 | [Square42] 333 | Meter=Bar 334 | MeterStyle=SquareStyle 335 | SolidColor=239,255,158,200 336 | ToolTipText=12/10/16 337 | MouseOverAction=[!SetOption Active Text "Contributions: 5"][!UpdateMeter Active][!Redraw] 338 | [Square43] 339 | Meter=Bar 340 | MeterStyle=SquareStyle | WeekStartStyle 341 | SolidColor=130,188,91,250 342 | ToolTipText=12/11/16 343 | MouseOverAction=[!SetOption Active Text "Contributions: 6"][!UpdateMeter Active][!Redraw] 344 | [Square44] 345 | Meter=Bar 346 | MeterStyle=SquareStyle 347 | SolidColor=80,155,75,250 348 | ToolTipText=12/12/16 349 | MouseOverAction=[!SetOption Active Text "Contributions: 15"][!UpdateMeter Active][!Redraw] 350 | [Square45] 351 | Meter=Bar 352 | MeterStyle=SquareStyle 353 | SolidColor=239,255,158,200 354 | ToolTipText=12/13/16 355 | MouseOverAction=[!SetOption Active Text "Contributions: 5"][!UpdateMeter Active][!Redraw] 356 | [Square46] 357 | Meter=Bar 358 | MeterStyle=SquareStyle 359 | SolidColor=239,255,158,200 360 | ToolTipText=12/14/16 361 | MouseOverAction=[!SetOption Active Text "Contributions: 4"][!UpdateMeter Active][!Redraw] 362 | [Square47] 363 | Meter=Bar 364 | MeterStyle=SquareStyle 365 | SolidColor=239,255,158,200 366 | ToolTipText=12/15/16 367 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 368 | [Square48] 369 | Meter=Bar 370 | MeterStyle=SquareStyle 371 | SolidColor=130,188,91,250 372 | ToolTipText=12/16/16 373 | MouseOverAction=[!SetOption Active Text "Contributions: 9"][!UpdateMeter Active][!Redraw] 374 | [Square49] 375 | Meter=Bar 376 | MeterStyle=SquareStyle 377 | SolidColor=80,155,75,250 378 | ToolTipText=12/17/16 379 | MouseOverAction=[!SetOption Active Text "Contributions: 15"][!UpdateMeter Active][!Redraw] 380 | [Square50] 381 | Meter=Bar 382 | MeterStyle=SquareStyle | WeekStartStyle 383 | SolidColor=239,255,158,200 384 | ToolTipText=12/18/16 385 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 386 | [Square51] 387 | Meter=Bar 388 | MeterStyle=SquareStyle 389 | SolidColor=130,188,91,250 390 | ToolTipText=12/19/16 391 | MouseOverAction=[!SetOption Active Text "Contributions: 10"][!UpdateMeter Active][!Redraw] 392 | [Square52] 393 | Meter=Bar 394 | MeterStyle=SquareStyle 395 | SolidColor=175,175,175,95 396 | ToolTipText=12/20/16 397 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 398 | [Square53] 399 | Meter=Bar 400 | MeterStyle=SquareStyle 401 | SolidColor=239,255,158,200 402 | ToolTipText=12/21/16 403 | MouseOverAction=[!SetOption Active Text "Contributions: 3"][!UpdateMeter Active][!Redraw] 404 | [Square54] 405 | Meter=Bar 406 | MeterStyle=SquareStyle 407 | SolidColor=239,255,158,200 408 | ToolTipText=12/22/16 409 | MouseOverAction=[!SetOption Active Text "Contributions: 2"][!UpdateMeter Active][!Redraw] 410 | [Square55] 411 | Meter=Bar 412 | MeterStyle=SquareStyle 413 | SolidColor=239,255,158,200 414 | ToolTipText=12/23/16 415 | MouseOverAction=[!SetOption Active Text "Contributions: 1"][!UpdateMeter Active][!Redraw] 416 | [Square56] 417 | Meter=Bar 418 | MeterStyle=SquareStyle 419 | SolidColor=175,175,175,95 420 | ToolTipText=12/24/16 421 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 422 | [Square57] 423 | Meter=Bar 424 | MeterStyle=SquareStyle | WeekStartStyle 425 | SolidColor=175,175,175,95 426 | ToolTipText=12/25/16 427 | MouseOverAction=[!SetOption Active Text "Contributions: 0"][!UpdateMeter Active][!Redraw] 428 | [Square58] 429 | Meter=Bar 430 | MeterStyle=SquareStyle 431 | SolidColor=239,255,158,200 432 | ToolTipText=12/26/16 433 | MouseOverAction=[!SetOption Active Text "Contributions: 2"][!UpdateMeter Active][!Redraw] 434 | [Square59] 435 | Meter=Bar 436 | MeterStyle=SquareStyle 437 | SolidColor=130,188,91,250 438 | ToolTipText=12/27/16 439 | MouseOverAction=[!SetOption Active Text "Contributions: 8"][!UpdateMeter Active][!Redraw] 440 | [Square60] 441 | Meter=Bar 442 | MeterStyle=SquareStyle 443 | SolidColor=80,155,75,250 444 | ToolTipText=12/28/16 445 | MouseOverAction=[!SetOption Active Text "Contributions: 12"][!UpdateMeter Active][!Redraw] 446 | [Square61] 447 | Meter=Bar 448 | MeterStyle=SquareStyle 449 | SolidColor=130,188,91,250 450 | ToolTipText=12/29/16 451 | MouseOverAction=[!SetOption Active Text "Contributions: 7"][!UpdateMeter Active][!Redraw] 452 | [Square62] 453 | Meter=Bar 454 | MeterStyle=SquareStyle 455 | SolidColor=80,155,75,250 456 | ToolTipText=12/30/16 457 | MouseOverAction=[!SetOption Active Text "Contributions: 15"][!UpdateMeter Active][!Redraw] 458 | [Square63] 459 | Meter=Bar 460 | MeterStyle=SquareStyle 461 | SolidColor=239,255,158,200 462 | ToolTipText=12/31/16 463 | MouseOverAction=[!SetOption Active Text "Contributions: 2"][!UpdateMeter Active][!Redraw] 464 | [Square64] 465 | Meter=Bar 466 | MeterStyle=SquareStyle | WeekStartStyle 467 | SolidColor=239,255,158,200 468 | ToolTipText=1/1/17 469 | MouseOverAction=[!SetOption Active Text "Contributions: 3"][!UpdateMeter Active][!Redraw] 470 | [Square65] 471 | Meter=Bar 472 | MeterStyle=SquareStyle 473 | SolidColor=239,255,158,200 474 | ToolTipText=1/2/17 475 | MouseOverAction=[!SetOption Active Text "Contributions: 3"][!UpdateMeter Active][!Redraw] 476 | [Square66] 477 | Meter=Bar 478 | MeterStyle=SquareStyle 479 | SolidColor=175,175,175,95 480 | ToolTipText= 481 | MouseOverAction=[!SetOption Active Text ""][!UpdateMeter Active][!Redraw] 482 | [Square67] 483 | Meter=Bar 484 | MeterStyle=SquareStyle 485 | SolidColor=175,175,175,95 486 | ToolTipText= 487 | MouseOverAction=[!SetOption Active Text ""][!UpdateMeter Active][!Redraw] 488 | [Square68] 489 | Meter=Bar 490 | MeterStyle=SquareStyle 491 | SolidColor=175,175,175,95 492 | ToolTipText= 493 | MouseOverAction=[!SetOption Active Text ""][!UpdateMeter Active][!Redraw] 494 | [Square69] 495 | Meter=Bar 496 | MeterStyle=SquareStyle 497 | SolidColor=175,175,175,95 498 | ToolTipText= 499 | MouseOverAction=[!SetOption Active Text ""][!UpdateMeter Active][!Redraw] 500 | [Square70] 501 | Meter=Bar 502 | MeterStyle=SquareStyle 503 | SolidColor=175,175,175,95 504 | -------------------------------------------------------------------------------- /GitHubCalendar_v1.1.3.rmskin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tterb/GitHubCalendar/aee9972302778aec93fe9e28850ecde5301ee77e/GitHubCalendar_v1.1.3.rmskin -------------------------------------------------------------------------------- /GithubCalendar(week).ini: -------------------------------------------------------------------------------- 1 | ;## Information ################################################################### 2 | ; Filename: GitHubCalendar(week).ini 3 | ; Project: GitHubCalendar 4 | ; Author: Brett Stevenson 5 | ; Contact: BStevensonDev@gmail.com 6 | ; Version: 1.1.3 7 | ; License: BSD 3-Clause 8 | ; Updated: Oct. 09, 2016 9 | ;############################################################################### 10 | 11 | [Rainmeter] 12 | Name=GitHubCalendar(week) 13 | Author=Brett Stevenson 14 | Contact=BStevensonDev@gmail.com 15 | Version=1.1.3 16 | License=BSD 3-Clause 17 | DynamicWindowSize=1 18 | Update=1000 19 | 20 | [Metadata] 21 | Name=GitHubCalendar (week) 22 | Information=This skin displays only the current week of the GitHub contribution calendar from your profile on your desktop 23 | License=BSD 3-Clause 24 | Version=1.1.3 25 | 26 | ;-------------------------------------------------------------------------------------------- 27 | ; VARIABLES 28 | 29 | [Variables] 30 | @include="#@#style.inc" 31 | ScraperPath="#@#GitHubScraper/GitHubScraper/bin/Debug/GitHubScraper.exe" 32 | DataPath="#@#week.txt" 33 | WeekPath="#@#week.txt" 34 | 35 | ;-------------------------------------------------------------------------------------------- 36 | ; MEASURES 37 | 38 | [MeasureLuaScript] 39 | Measure=Script 40 | ScriptFile="#@#week.lua" 41 | UpdateDivider=60 42 | 43 | ;-------------------------------------------------------------------------------------------- 44 | ; METERS 45 | 46 | [Background] 47 | Meter=Image 48 | ImageName=#@#images/background.png 49 | ImageTint=0,0,0,150 50 | X=0 51 | Y=0 52 | H=150 53 | W=50 54 | 55 | [MeterLogo] 56 | Meter=Image 57 | MeterStyle=LogoStyle 58 | ; Left-click runs the web scraper program and executes script.lua 59 | LeftMouseDownAction=["#ScraperPath#"] 60 | LeftMouseUpAction=[!CommandMeasure MeasureLuaScript "Update()"][!Redraw][!Refresh] 61 | ; Right-click re-initializes the skin by calling Initialize from script.lua 62 | RightMouseDownAction=[!Redraw][!Refresh] 63 | ToolTipText=Update 64 | X=17 65 | Y=119 66 | 67 | [Active] 68 | Meter=String 69 | MeterStyle=ActiveStyle 70 | X=25 71 | Y=2 72 | FontSize=10 73 | 74 | [DayLabel1] 75 | Meter=String 76 | MeterStyle=LabelStyle 77 | Y=37 78 | Text="M" 79 | 80 | [DayLabel2] 81 | Meter=String 82 | MeterStyle=LabelStyle 83 | Text="W" 84 | 85 | [DayLabel3] 86 | Meter=String 87 | MeterStyle=LabelStyle 88 | FontSize=8 89 | X=5 90 | Text="F" 91 | 92 | 93 | ;############################################################################ 94 | ; Do not change anything below this line. They are automatically derived from the Lua script. 95 | ;############################################################################ 96 | [Square1] 97 | Meter=Bar 98 | MeterStyle=SquareStyle 99 | X=20 100 | Y=24 101 | SolidColor=155,155,155,95 102 | ToolTipText=10/2/2016 103 | MouseOverAction=[!SetOption Active Text "0"][!UpdateMeter Active][!Redraw] 104 | [Square2] 105 | Meter=Bar 106 | MeterStyle=SquareStyle 107 | SolidColor=130,188,91,250 108 | ToolTipText=10/3/2016 109 | MouseOverAction=[!SetOption Active Text "9"][!UpdateMeter Active][!Redraw] 110 | [Square3] 111 | Meter=Bar 112 | MeterStyle=SquareStyle 113 | SolidColor=130,188,91,250 114 | ToolTipText=10/4/2016 115 | MouseOverAction=[!SetOption Active Text "10"][!UpdateMeter Active][!Redraw] 116 | [Square4] 117 | Meter=Bar 118 | MeterStyle=SquareStyle 119 | SolidColor=130,188,91,250 120 | ToolTipText=10/5/2016 121 | MouseOverAction=[!SetOption Active Text "8"][!UpdateMeter Active][!Redraw] 122 | [Square5] 123 | Meter=Bar 124 | MeterStyle=SquareStyle 125 | SolidColor=239,255,158,200 126 | ToolTipText=10/6/2016 127 | MouseOverAction=[!SetOption Active Text "1"][!UpdateMeter Active][!Redraw] 128 | [Square6] 129 | Meter=Bar 130 | MeterStyle=SquareStyle 131 | SolidColor=155,155,155,95 132 | ToolTipText= 133 | MouseOverAction=[!SetOption Active Text ""][!UpdateMeter Active][!Redraw] 134 | [Square7] 135 | Meter=Bar 136 | MeterStyle=SquareStyle 137 | SolidColor=155,155,155,95 138 | ToolTipText= 139 | MouseOverAction=[!SetOption Active Text ""][!UpdateMeter Active][!Redraw] 140 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Brett Stevenson 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |   2 | ------------------------------------------------------------------------------------------------------------------------ 3 | ####      A Rainmeter skin that displays your GitHub contribution calendar on your desktop 4 | 5 |

6 | 7 | version 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |

18 | 19 |
20 |

21 | 22 |

23 |
24 |
25 | 26 | ********************************************************************************************************* 27 | 28 | ##   DESCRIPTION: 29 | This skin features a C# program, which collectively uses [Selenium Webdriver](http://www.seleniumhq.org/projects/webdriver/) and [phantomJS](http://phantomjs.org) to gather the data from the user's GitHub profile and writes it to the "data.txt" file. The data is then read by the Lua script, which provides the necessary information to the GitHubCalendar skin. 30 | The skin now also includes a second variant, featuring a more condensed layout and displays only the current weeks contributions. 31 | 32 | #### In Progress: 33 | * Improve optimization of the update processes. 34 | * Add mutable scaling functionality to calendar. 35 |
36 | 37 | ********************************************************************************************************* 38 | 39 | ##   SETUP: 40 | * This skin requires that you have  [**Rainmeter**](https://www.rainmeter.net/) installed. 41 | * Open the *.rmskin* package file to install, configure, and load the skin. 42 | * Enter your GitHub username into the newly opened Configuration window and press 'Enter'. 43 | * Then press the  button to load your GitHub Contribution Calendar. 44 | * **Enjoy!** 45 |
46 | 47 | ***Note:*** To update the skin's calendar data, left-click the in the bottom-right corner of the skin. 48 |
49 | 50 | ********************************************************************************************************* 51 | --------------------------------------------------------------------------------