{"action":"created","comment":{"url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/comments/235704577","pull_request_review_id":177630341,"id":235704577,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNTcwNDU3Nw==","diff_hunk":"@@ -0,0 +1,321 @@\n+# Basics\n+\n+When you learn new language, you always start with basics: pronunciation, spelling, fundamental vocabulary, general rules of constructing sentences and expressing your thoughts. The same applies to any programming language, where you learn its commands, arguments, syntax and all the rules that make it logical.\n+\n+G1ANT.Language is no different, so before you start creating robots, you must know the foundations, on which you can build your scripts. We will guide you through language basics and present you with the elementary tools, which help you in writing your code.\n+\n+## Workspace\n+\n+G1ANT.Robot program offers you powerful and convenient tools to help you master all aspects of programming in G1ANT.Language.\n+\n+### Suggestions and Tooltips\n+\n+The script editor is equipped with IntelliSense technology, which gives you suggestions while you type. It’s an extremely comfortable and productive variation of an interactive help.\n+\n+How does it work? When you start typing, IntelliSense looks for matches in the G1ANT.Language dictionary and displays them in a drop-down list. A description of the selected item appears in a tooltip — a small box to the right with a brief explanation of what a particular function does.\n+\n+For example, start typing `program` in the script editor. With every letter, the suggested list of matching entries narrows down: five items in the list after you type “p”, then just three, when you press “r”, and when you reach “g”, there’s only `program` left to choose. But IntelliSense doesn’t stop there: after selecting an item from the suggested options, you are prompted with further language elements — arguments then their values. In case of the `program` command, when you pick it and press space, you will see a list of nine arguments available for that command along with their descriptions in tooltips:\n+\n+![](.gitbook/assets/.gitbook/assets/suggestions1.png)\n+\n+![](.gitbook/assets/.gitbook/assets/suggestions2.png)\n+\n+This way, not only you don’t make obvious typo mistakes, but also create code with correct syntax and learn how to use G1ANT.Language efficiently.\n+\n+Remember that whenever the list with suggestions disappears, you can reactivate it by pressing **Alt** key.\n+\n+### Panels\n+\n+Panels are another helpful and handy element of G1ANT.Robot user interface. We described them in detail in the [other part](g1ant.robot-window/panels.md) of this manual, so you can learn about them there. In a nutshell, these are lists of objects available in G1ANT.Language (there are panels containing other information, but we won’t discuss them now). You can have them displayed, so that you will see what commands (and their arguments), structures, variables and symbols you have at your disposal and fingers.\n+\n+### Keyboard shortcuts\n+\n+They help you to work faster — simple as that. Instead of moving around menus and clicking, use keystroke combinations to get what you want in a fraction of time. Keyboard shortcuts for menu items are shown next to them in the menus, and next to special characters in Symbols panel. For example, instead of navigating to `Edit/Find` menu for a Find tool, you can simply press **Ctrl+F** keys.\n+\n+You can also find all [common keyboard shortcuts](appendices/common-keyboard-shortcuts.md) (typical for Windows and its applications) as well as [Windows key shortcuts](appendices/windows-key-shortcuts.md) in our Appendices section.\n+\n+## Language Syntax\n+\n+G1ANT.Language syntax is pure and simple:\n+\n+```G1ANT\n+command argument value \n+```\n+\n+As you can see, you always start with a command followed by its argument and then a value of that argument. Compare this with natural language: if you say *“pass this to me”*, “pass” would be a command, “this” — an argument, “to me” — value.\n+\n+Now, let’s learn who is who — or rather what is what.\n+\n+### Command\n+\n+Is an instruction given by a user telling the robot to do something — for example, run a program or perform keyboard or mouse action. You could compare commands to verbs in natural language.\n+\n+A command can be simple, one-word, like `dialog` or extended, like `selenium.open`. Two-word commands separated with a dot in the middle belong to a family of commands. It means that there are other commands starting with `selenium.` and their suffix (the part following the dot) expresses certain activity: `open`, `newtab` ,`switch`.\n+\n+Each family of commands has its special ‘activities’. Once you start typing the command inside the script editor window, a list of available activities will pop up, as you can see below:\n+\n+![](.gitbook/assets/selenium.png)\n+\n+### Argument\n+\n+A command needs to know, what exactly it is supposed to do. So, you must provide some information — and this data is called an *argument*. For example, when you type `program`, the robot will suggest you next input in a drop-down list and the first item will be `name`. It is an argument for the `program` command followed with a name of the program to be launched. So, if you wanted the robot to open Notepad, you would write `program name notepad` — remember the “command argument value” rule?\n+\n+### Value\n+\n+The content of a field or a variable is called a *value*. It can refer to alphabetic as well as numeric data. For example, in the expression\n+\n+```G1ANT\n+selenium.open type ‴firefox‴ url ‴google.com‴ result ♥google\n+```\n+\n+the elements `‴firefox‴` and `‴google.com‴` are values. Note that text values are embraced with triple prime characters available by pressing **Ctrl+'** (apostrophe) keyboard shortcut or by clicking the text symbol icon on the toolbar.\n+\n+Values always belong to one type of structures, [variables](), and they can be any text, numbers and a mixture of both (URL address, for instance). Values are strictly related to their arguments.\n+\n+### Examples\n+\n+In the following example the golden “command-argument-value” rule is a bit twisted:\n+\n+```G1ANT\n+text.read c:\\Users\\♥USERNAME\\Desktop\\g1ant.txt result ♥g1\n+```\n+\n+The `text.read` command is immediately followed by a value (`c:\\Users\\♥USERNAME\\Desktop\\g1ant.txt`), not an argument. It’s because some argument names can be omitted, since they are obvious and mandatory. In this case, the missing argument name is `filename`, which is followed by a value with the name of a file to open. Then, there is the `result` argument and its `♥g1` value.\n+\n+Other examples of arguments that can be skipped and replaced by their values, include `name` for the `program` command (which specifies the program to be launched) or `title` for the `window`command (which specifies the title of the window to focus on):\n+\n+`program notepad` instead of `program name notepad`\n+\n+`window *chrome` instead of `window title *chrome`\n+\n+Note the asterisk before `chrome`: it serves as a wildcard for all characters preceding the word “chrome”, so that any Google Chrome browser window would be selected no matter what its full title is.\n+\n+## Using Variables\n+\n+Since we are talking basics, we have to mention this: variables. And even if you have experiences with programming languages, and therefore you surely know what a variable is, there’s one small and lovely thing you need to know about it in G1ANT.Language.\n+\n+### What Is a Variable?\n+\n+A variable is like a named box or a container, which can store values that may change (or vary — hence the name) during the program execution. A variable named, say, *number* can be equal to 1, 20, 0.18 or other number you put in it. A variable can also contain text or other types of data, including formatted ones like date.\n+\n+### How To Use It?\n+\n+Here in G1ANT we love variables and we decided to show our affection by adding hearts to them. So, if you want to declare or use a variable, you have to insert a heart symbol followed by the name of a variable: `♥number`.\n+\n+The special character ♥ is the prefix for all variables in G1ANT.Language. You can enter this symbol by pressing **Ctrl+4**, clicking on its icon in the toolbar or selecting it from `Insert/♥ Variable` menu. For those more experienced: it's like `$` in PHP language.\n+\n+### Example\n+\n+Copy and paste this code into the script editor, then run the robot by pressing **F9** key or clicking Run ![img](.gitbook/assets/run.jpg) icon on the toolbar:\n+\n+```G1ANT\n+♥number = 2\n+♥total = ♥number + ♥number\n+dialog ♥total\n+```\n+\n+You will see a dialog box displaying `4`. In the first line you defined a `♥number` variable equal to `2`. In the next line you defined a `♥total` variable, which is a sum of two `♥number` variables. Since 2 and 2 make 4, the `dialog` command will bring up a dialog box showing `4` as the value of the `♥total` variable.\n+\n+Now you know what a variable is and how to generally use it in G1ANT.Language. And not only just that: you also used the `dialog` command to bring up a dialog box with a message. It’s about time to move on to more exciting stuff involving interaction with user interface.\n+\n+## Using UI Commands\n+\n+As an RPA software, G1ANT.Robot has to deal with the user interface of the host operating system, pretending to be a human sitting in the front of a PC. It includes many commands designed to mimic user activity in Windows and its applications. For example, the robot can launch programs, open dialog boxes, ask user for some input, select application windows, enter keystrokes, move mouse cursor and many more.\n+\n+For the purpose of this introductory guide, let’s take a look at the most fundamental UI commands in G1ANT.Language: `dialog` and `dialog.ask`, `keyboard`, `mouse.`, `program` and `window`.\n+\n+### Show Me a Dialog\n+\n+Whenever you want to display some information to users, or ask them for some input, the `dialog` and `dialog.ask` commands come in handy. \n+\n+Their usage is simple and self-explanatory: you just enter the `dialog` command followed by text or a variable to be displayed or, in case of `dialog.ask` command, by a message to a user and then a variable, in which you want to store the user input.\n+\n+Type in or copy/paste this script:\n+\n+```G1ANT\n+dialog.ask message ‴What is your favorite number?‴ result ♥number\n+dialog message ‴Your favorite number is: ♥number‴\n+```\n+\n+While typing, you will see suggestions and tooltips from IntelliSense, including the triple quote characters, in which you insert your text messages.\n+\n+The first line tells the robot to display a dialog box asking you for your favorite number. Your answer will be stored in a variable called `♥number`. After clicking OK button in this dialog, the robot executes the next line and brings up another dialog box. It will display a message along with the value of the `♥number` variable — the favorite number you have just entered in the previous dialog.\n+\n+### Key To Program’s Success\n+\n+Most of the times when you robotize things rather than displaying robot’s dialog boxes you want to provide some keyboard input into applications you automate. Whether it’s a filename to be entered into the app’s Open dialog box, a text that needs to be inserted in a document, or an action performed with a common keyboard shortcut such as pasting from clipboard with **Ctrl+V**, you will make use of the `keyboard` command. But in order to actually see the results, you either have to launch a program, in which you will enter keystrokes with the `keyboard` command, or select one of the open windows.\n+\n+Try this script:\n+\n+\n+```G1ANT\n+program notepad\n+keyboard ‴Hello! I'm a robot.‴\n+```\n+\n+The first line opens Windows Notepad and the second line enters a text into it.\n+\n+In case of the `program` command, the most obvious argument is a _name_ of the program to be launched by the robot. This name can be given in a short form such as `notepad`, `calc`, `chrome`, `word` (provided that these programs are installed in the system) or with a full path to the executable file, eg. `‴C:\\Program Files\\Internet Explorer\\iexplore.exe‴` (again, note the triple prime character `‴` embracing the path — it's a special sign used in G1ANT.Robot for values containing spaces; to enter it, press **Ctrl** and apostrophe **'** key).\n+\n+Sending keyboard inputs to a program is easy and requires the `keyboard` command followed by the text to be entered or keyboard shorG1ANTtcuts/function keys to be mimicked by the robot.\n+\n+But what if you wanted to make the robot write the text from the example above in two lines instead of just one? Like this:\n+\n+**Hello!**\n+**I’m a robot.**\n+\n+The answer is simple: in the next line after your existing `program notepad` command, you would type\n+\n+```G1ANT\n+keyboard ‴Hello!⋘enter⋙I'm a robot.‴\n+```\n+\n+Did you notice `⋘enter⋙`? These triple quotation angles (available with **Ctrl+<** and **Ctrl+>** keyboard shortcuts or from the toolbar) indicate a function key or a keyboard shortcut — **Enter** key in this example.\n+\n+The `keyboard` command is not that primitive as you might think. Well, it is, considering the way it works, but these simple keyboard inputs are much more powerful when you start using keyboard shortcuts. Why? Because every program uses keyboard alternatives for its menus, tools and functions. You only need to find them and pass to your robot.\n+\n+Let's go back to your simple Notepad robot. Its code looks like this:\n+\n+```G1ANT\n+program notepad\n+keyboard ‴Hello!⋘enter⋙I'm a robot.‴\n+```\n+\n+Now you could use common Windows shortcuts such as **Ctrl+C** (copy to clipboard), **Ctrl+S** (save to a file) or **Alt+F4** (close program) to make the robot perform respective tasks. But Notepad allows you to do many other things: all of its tools are accessible with keyboard alternatives, which show up after pressing **Alt** key.\n+\n+Run your robot by pressing **F9**. With Notepad open, you can investigate available keyboard options: press **Alt** key and look at the menu bar. First menu item, `File`, is depressed and all menu items have one letter in their names underlined. Now you can use arrow keys to navigate through menus or press the underlined letter to select a desired menu item. Fo example, if you wanted to activate word wrapping option, which is available in the `Format` menu, you would have to press **O** key (the underlined letter of the Format menu), then **W** in the dropped-down Format menu to select the `Word Wrap` item. The robot command sequence for these keystrokes would look like this:\n+\n+```G1ANT\n+keyboard ⋘alt+o⋙w\n+```\n+\n+Let's make something more powerful and robotized out of these keyboard inputs: select all notepad content and change its font size to 20. The keyboard shortcuts sequence would be:\n+\n+1. Press **Alt+F** to open the `Format` menu.\n+2. Press **O** to select Font tool and bring up its dialog.\n+3. Press **Tab** twice to navigate to the font size box.\n+4. Enter the value of **20**.\n+\n+The robot code would be as follows:\n+\n+```G1ANT\n+keyboard ⋘alt+o⋙f⋘tab 2⋙20⋘enter⋙\n+```\n+\n+You can use such combination of keyboard shortcuts and keystrokes to perform more advanced editing — for example, to find and replace some words or phrases. Say, you would want to change all instances of *robot* in your Notepad text into *G1ANT.Robot*:\n+\n+1. Bring up the Replace tool with **Ctrl+H**.\n+2. In the Replace dialog, enter **robot** in the `Find` box and **G1ANT.Robot** in the `Replace` box.\n+3. Apply changes by pressing **Replace All** button.\n+4. Close the dialog with **Alt+F4**.\n+\n+This translates into the following code in G1ANT.Robot language:\n+\n+```G1ANT\n+keyboard ⋘ctrl+h⋙robot⋘tab⋙G1ANT.Robot⋘alt+a⋙⋘alt+f4⋙\n+```\n+\n+After all operations, it would be nice to save changes to a text file named *robot.txt* in a deafult location and close Notepad:\n+\n+```G1ANT\n+keyboard ⋘ctrl+s⋙robot⋘enter⋙⋘alt+f4⋙\n+```\n+\n+Now, add the lines for changing the font, replacing words and saving a file to your first code:\n+\n+```G1ANT\n+program notepad\n+keyboard ‴Hello!⋘enter⋙I'm a robot.‴\n+keyboard ⋘alt+o⋙f⋘tab 2⋙20⋘enter⋙\n+keyboard ⋘ctrl+h⋙robot⋘tab⋙G1ANT.Robot⋘alt+a⋙⋘alt+f4⋙\n+keyboard ⋘ctrl+s⋙robot⋘enter⋙⋘alt+f4⋙\n+```\n+\n+Run your robot with **F9** and enjoy its work.\n+\n+### Of Mice and Windows\n+\n+One keyboard to rule them all — right, but what would a computer be without a mouse? Mouse is often an indispensable device to support the user interface. G1ANT.Robot is aware of this and offers you `mouse.` family of commands to include mouse actions in your robot scripts.\n+\n+There are three variations of the `mouse.` command:\n+\n+1. `mouse.click` sends a cursor to the specified position and performs one of three available mouse click types:\n+\n+   - `down` for clicking and holding down the mouse button (e.g. when starting selection or drawing),\n+   - `up` for releasing the mouse button (e.g. when the selection or drawing ends),\n+   - `press` for a simple click.\n+\n+   You can specify which mouse button has to be pressed with the `button` argument and how many times it should be clicked with the `count` argument.\n+\n+2. `mouse.wheel` sends a cursor to the specified position and performs one of two available mouse wheel moves:\n+\n+   - `verticalsteps` defines vertical wheel movement (positive number for up, negative for down),\n+   - `horizontalsteps` defines horizontal wheel movement (positive number for right, negative for left).\n+\n+3. `mouse.move`, as its name implies, merely moves the cursor to the specified position.\n+\n+All of the `mouse.` family of commands shares also `position` and `relative` arguments.  `position` needs a value representing pixel coordinates and `relative` defines if these coordinates are relative to the upper left corner of the active window (by default) or absolute on the screen (measured from its bottom left corner).\n+\n+Since we are here with coordinates relative to the active window, it’s necessary to tell the robot, which window should be active for mouse actions. Otherwise, in case a wrong window would be active, the relative position of the cursor could lead to unpredictable results.\n+\n+The command responsible for selecting a proper window is — guess what? — the `window` command. Not only it brings focus to the window specified by the `title` argument, but it can also set this window’s size (`maximized`, `minimized` or `restored` from minimized) with the `style` argument.\n+\n+Let’s see `window` and `mouse.` commands in action. For example, you want to select some text in an application. It could be a PDF file with content you can select with a mouse, but not with a keyboard, or part of an email in a browser window. The algorithm for this process would look like that:\n+\n+1. Select the desired window.\n+2. Move the cursor to the starting point of the text.\n+3. Press down the left mouse button and start dragging the cursor over the desired area.\n+4. Release the mouse button.\n+5. Copy the selected text.\n+6. Paste it to the target application.\n+\n+For the purpose of this exercise, we will stick to the good old Notepad and the previous example. Assume you have an open Notepad window with *“Hello! I’m a robot.”* in it. Let’s try to select *“a robot”* with `mouse.` commands.\n+\n+First, you have to select the right window:\n+\n+```G1ANT\n+window *notepad\n+```\n+\n+> This command will work correctly only when there’s just one Notepad window open. If you have more of them, you must precisely specify the window you want to use, e.g. `window ‴Untitled - Notepad‴`. The full list of open windows titles is available in [All Windows](g1ant.robot-window/auxiliary-windows/all-windows.md) tool (`Tools/Window` menu or **Ctrl+W**).\n+\n+With Notepad window selected, tell the robot to move the cursor close to the letter “a”, click and start selecting.\n+\n+Wait, how can you determine the mouse cursor position? Don’t worry, we have you covered: use the [Mouse Position](g1ant.robot-window/auxiliary-windows/mouse-position.md) tool (`Insert/Mouse Position` menu or **Ctrl+E**) after you type the `mouse.click` command. Answer “No” in the dialog box, since you want a relative coordinates, point your cursor to the right place and click. The tool will insert the resulting position as an argument for you:\n+\n+```G1\n+mouse.click ⟦point⟧41⫽70 type down\n+```\n+\n+> Note that your coordinate values can be a bit different from the ones given here.\n+\n+Confused with the lack of the `button` argument? You probably expected `mouse.click ⟦point⟧41⫽70 button left type down`, didn’t you? Well, you could use it, but it may be skipped in this case, because `left` is the default value. Likewise, if you wanted just to make a mouse click, you could also skip the `type` argument — `press` is its default value.\n+\n+Now you should tell the robot to move the mouse cursor to the end of the “robot” word and stop selection by releasing the mouse button. Again, use the Mouse Position tool to insert the right coordinates:\n+\n+```G1\n+mouse.click ⟦point⟧98⫽71 type up\n+```\n+\n+OK, you have your text selected. Now copy it and paste somewhere else — in another Notepad window, for example:\n+\n+```G1ANT\n+keyboard ⋘CTRL+C⋙\n+program notepad\n+keyboard ⋘CTRL+V⋙\n+```\n+\n+And that’s it! Your whole script should look like this:\n+\n+```G1\n+window *notepad","path":"g1ant-language/language-basics.md","position":311,"original_position":311,"commit_id":"a5b635580b7ef1113fbc8e8adfa29b82391f2d24","original_commit_id":"a5b635580b7ef1113fbc8e8adfa29b82391f2d24","user":{"login":"Vegebutcher","id":907743,"node_id":"MDQ6VXNlcjkwNzc0Mw==","avatar_url":"https://avatars0.githubusercontent.com/u/907743?v=4","gravatar_id":"","url":"https://api.github.com/users/Vegebutcher","html_url":"https://github.com/Vegebutcher","followers_url":"https://api.github.com/users/Vegebutcher/followers","following_url":"https://api.github.com/users/Vegebutcher/following{/other_user}","gists_url":"https://api.github.com/users/Vegebutcher/gists{/gist_id}","starred_url":"https://api.github.com/users/Vegebutcher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vegebutcher/subscriptions","organizations_url":"https://api.github.com/users/Vegebutcher/orgs","repos_url":"https://api.github.com/users/Vegebutcher/repos","events_url":"https://api.github.com/users/Vegebutcher/events{/privacy}","received_events_url":"https://api.github.com/users/Vegebutcher/received_events","type":"User","site_admin":false},"body":":+1: ","created_at":"2018-11-22T12:15:03Z","updated_at":"2018-11-22T12:15:04Z","html_url":"https://github.com/G1ANT-Robot/G1ANT.Manual/pull/14#discussion_r235704577","pull_request_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/comments/235704577"},"html":{"href":"https://github.com/G1ANT-Robot/G1ANT.Manual/pull/14#discussion_r235704577"},"pull_request":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14"}},"in_reply_to_id":235682466},"pull_request":{"url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14","id":232748896,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMyNzQ4ODk2","html_url":"https://github.com/G1ANT-Robot/G1ANT.Manual/pull/14","diff_url":"https://github.com/G1ANT-Robot/G1ANT.Manual/pull/14.diff","patch_url":"https://github.com/G1ANT-Robot/G1ANT.Manual/pull/14.patch","issue_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/14","number":14,"state":"open","locked":false,"title":"basics chapter","user":{"login":"Vegebutcher","id":907743,"node_id":"MDQ6VXNlcjkwNzc0Mw==","avatar_url":"https://avatars0.githubusercontent.com/u/907743?v=4","gravatar_id":"","url":"https://api.github.com/users/Vegebutcher","html_url":"https://github.com/Vegebutcher","followers_url":"https://api.github.com/users/Vegebutcher/followers","following_url":"https://api.github.com/users/Vegebutcher/following{/other_user}","gists_url":"https://api.github.com/users/Vegebutcher/gists{/gist_id}","starred_url":"https://api.github.com/users/Vegebutcher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vegebutcher/subscriptions","organizations_url":"https://api.github.com/users/Vegebutcher/orgs","repos_url":"https://api.github.com/users/Vegebutcher/repos","events_url":"https://api.github.com/users/Vegebutcher/events{/privacy}","received_events_url":"https://api.github.com/users/Vegebutcher/received_events","type":"User","site_admin":false},"body":"Basics of tools and language","created_at":"2018-11-21T17:39:30Z","updated_at":"2018-11-22T12:15:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"121a08203ae8129dc61605235f6872839a1b46fe","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ChrisPrusik","id":6046340,"node_id":"MDQ6VXNlcjYwNDYzNDA=","avatar_url":"https://avatars0.githubusercontent.com/u/6046340?v=4","gravatar_id":"","url":"https://api.github.com/users/ChrisPrusik","html_url":"https://github.com/ChrisPrusik","followers_url":"https://api.github.com/users/ChrisPrusik/followers","following_url":"https://api.github.com/users/ChrisPrusik/following{/other_user}","gists_url":"https://api.github.com/users/ChrisPrusik/gists{/gist_id}","starred_url":"https://api.github.com/users/ChrisPrusik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChrisPrusik/subscriptions","organizations_url":"https://api.github.com/users/ChrisPrusik/orgs","repos_url":"https://api.github.com/users/ChrisPrusik/repos","events_url":"https://api.github.com/users/ChrisPrusik/events{/privacy}","received_events_url":"https://api.github.com/users/ChrisPrusik/received_events","type":"User","site_admin":false},{"login":"lfronczyk","id":44808880,"node_id":"MDQ6VXNlcjQ0ODA4ODgw","avatar_url":"https://avatars2.githubusercontent.com/u/44808880?v=4","gravatar_id":"","url":"https://api.github.com/users/lfronczyk","html_url":"https://github.com/lfronczyk","followers_url":"https://api.github.com/users/lfronczyk/followers","following_url":"https://api.github.com/users/lfronczyk/following{/other_user}","gists_url":"https://api.github.com/users/lfronczyk/gists{/gist_id}","starred_url":"https://api.github.com/users/lfronczyk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lfronczyk/subscriptions","organizations_url":"https://api.github.com/users/lfronczyk/orgs","repos_url":"https://api.github.com/users/lfronczyk/repos","events_url":"https://api.github.com/users/lfronczyk/events{/privacy}","received_events_url":"https://api.github.com/users/lfronczyk/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14/commits","review_comments_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14/comments","review_comment_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/comments{/number}","comments_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/14/comments","statuses_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/statuses/a5b635580b7ef1113fbc8e8adfa29b82391f2d24","head":{"label":"G1ANT-Robot:feature/7030-basics","ref":"feature/7030-basics","sha":"a5b635580b7ef1113fbc8e8adfa29b82391f2d24","user":{"login":"G1ANT-Robot","id":40540714,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNTQwNzE0","avatar_url":"https://avatars0.githubusercontent.com/u/40540714?v=4","gravatar_id":"","url":"https://api.github.com/users/G1ANT-Robot","html_url":"https://github.com/G1ANT-Robot","followers_url":"https://api.github.com/users/G1ANT-Robot/followers","following_url":"https://api.github.com/users/G1ANT-Robot/following{/other_user}","gists_url":"https://api.github.com/users/G1ANT-Robot/gists{/gist_id}","starred_url":"https://api.github.com/users/G1ANT-Robot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/G1ANT-Robot/subscriptions","organizations_url":"https://api.github.com/users/G1ANT-Robot/orgs","repos_url":"https://api.github.com/users/G1ANT-Robot/repos","events_url":"https://api.github.com/users/G1ANT-Robot/events{/privacy}","received_events_url":"https://api.github.com/users/G1ANT-Robot/received_events","type":"Organization","site_admin":false},"repo":{"id":135175308,"node_id":"MDEwOlJlcG9zaXRvcnkxMzUxNzUzMDg=","name":"G1ANT.Manual","full_name":"G1ANT-Robot/G1ANT.Manual","private":false,"owner":{"login":"G1ANT-Robot","id":40540714,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNTQwNzE0","avatar_url":"https://avatars0.githubusercontent.com/u/40540714?v=4","gravatar_id":"","url":"https://api.github.com/users/G1ANT-Robot","html_url":"https://github.com/G1ANT-Robot","followers_url":"https://api.github.com/users/G1ANT-Robot/followers","following_url":"https://api.github.com/users/G1ANT-Robot/following{/other_user}","gists_url":"https://api.github.com/users/G1ANT-Robot/gists{/gist_id}","starred_url":"https://api.github.com/users/G1ANT-Robot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/G1ANT-Robot/subscriptions","organizations_url":"https://api.github.com/users/G1ANT-Robot/orgs","repos_url":"https://api.github.com/users/G1ANT-Robot/repos","events_url":"https://api.github.com/users/G1ANT-Robot/events{/privacy}","received_events_url":"https://api.github.com/users/G1ANT-Robot/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/G1ANT-Robot/G1ANT.Manual","description":null,"fork":false,"url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual","forks_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/forks","keys_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/keys{/key_id}","collaborators_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/teams","hooks_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/hooks","issue_events_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/events{/number}","events_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/events","assignees_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/assignees{/user}","branches_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/branches{/branch}","tags_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/tags","blobs_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/refs{/sha}","trees_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/trees{/sha}","statuses_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/statuses/{sha}","languages_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/languages","stargazers_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/stargazers","contributors_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/contributors","subscribers_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/subscribers","subscription_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/subscription","commits_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/commits{/sha}","git_commits_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/commits{/sha}","comments_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/comments{/number}","issue_comment_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/comments{/number}","contents_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/contents/{+path}","compare_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/compare/{base}...{head}","merges_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/merges","archive_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/downloads","issues_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues{/number}","pulls_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls{/number}","milestones_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/milestones{/number}","notifications_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/labels{/name}","releases_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/releases{/id}","deployments_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/deployments","created_at":"2018-05-28T14:56:00Z","updated_at":"2018-11-19T13:24:27Z","pushed_at":"2018-11-21T17:39:30Z","git_url":"git://github.com/G1ANT-Robot/G1ANT.Manual.git","ssh_url":"git@github.com:G1ANT-Robot/G1ANT.Manual.git","clone_url":"https://github.com/G1ANT-Robot/G1ANT.Manual.git","svn_url":"https://github.com/G1ANT-Robot/G1ANT.Manual","homepage":"http://beta.g1ant.com","size":1386,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":3,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":2,"open_issues":3,"watchers":1,"default_branch":"develop"}},"base":{"label":"G1ANT-Robot:develop","ref":"develop","sha":"4464099beff1c0f337755c4091db46834eed1216","user":{"login":"G1ANT-Robot","id":40540714,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNTQwNzE0","avatar_url":"https://avatars0.githubusercontent.com/u/40540714?v=4","gravatar_id":"","url":"https://api.github.com/users/G1ANT-Robot","html_url":"https://github.com/G1ANT-Robot","followers_url":"https://api.github.com/users/G1ANT-Robot/followers","following_url":"https://api.github.com/users/G1ANT-Robot/following{/other_user}","gists_url":"https://api.github.com/users/G1ANT-Robot/gists{/gist_id}","starred_url":"https://api.github.com/users/G1ANT-Robot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/G1ANT-Robot/subscriptions","organizations_url":"https://api.github.com/users/G1ANT-Robot/orgs","repos_url":"https://api.github.com/users/G1ANT-Robot/repos","events_url":"https://api.github.com/users/G1ANT-Robot/events{/privacy}","received_events_url":"https://api.github.com/users/G1ANT-Robot/received_events","type":"Organization","site_admin":false},"repo":{"id":135175308,"node_id":"MDEwOlJlcG9zaXRvcnkxMzUxNzUzMDg=","name":"G1ANT.Manual","full_name":"G1ANT-Robot/G1ANT.Manual","private":false,"owner":{"login":"G1ANT-Robot","id":40540714,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwNTQwNzE0","avatar_url":"https://avatars0.githubusercontent.com/u/40540714?v=4","gravatar_id":"","url":"https://api.github.com/users/G1ANT-Robot","html_url":"https://github.com/G1ANT-Robot","followers_url":"https://api.github.com/users/G1ANT-Robot/followers","following_url":"https://api.github.com/users/G1ANT-Robot/following{/other_user}","gists_url":"https://api.github.com/users/G1ANT-Robot/gists{/gist_id}","starred_url":"https://api.github.com/users/G1ANT-Robot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/G1ANT-Robot/subscriptions","organizations_url":"https://api.github.com/users/G1ANT-Robot/orgs","repos_url":"https://api.github.com/users/G1ANT-Robot/repos","events_url":"https://api.github.com/users/G1ANT-Robot/events{/privacy}","received_events_url":"https://api.github.com/users/G1ANT-Robot/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/G1ANT-Robot/G1ANT.Manual","description":null,"fork":false,"url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual","forks_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/forks","keys_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/keys{/key_id}","collaborators_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/teams","hooks_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/hooks","issue_events_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/events{/number}","events_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/events","assignees_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/assignees{/user}","branches_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/branches{/branch}","tags_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/tags","blobs_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/refs{/sha}","trees_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/trees{/sha}","statuses_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/statuses/{sha}","languages_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/languages","stargazers_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/stargazers","contributors_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/contributors","subscribers_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/subscribers","subscription_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/subscription","commits_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/commits{/sha}","git_commits_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/git/commits{/sha}","comments_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/comments{/number}","issue_comment_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/comments{/number}","contents_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/contents/{+path}","compare_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/compare/{base}...{head}","merges_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/merges","archive_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/downloads","issues_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues{/number}","pulls_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls{/number}","milestones_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/milestones{/number}","notifications_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/labels{/name}","releases_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/releases{/id}","deployments_url":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/deployments","created_at":"2018-05-28T14:56:00Z","updated_at":"2018-11-19T13:24:27Z","pushed_at":"2018-11-21T17:39:30Z","git_url":"git://github.com/G1ANT-Robot/G1ANT.Manual.git","ssh_url":"git@github.com:G1ANT-Robot/G1ANT.Manual.git","clone_url":"https://github.com/G1ANT-Robot/G1ANT.Manual.git","svn_url":"https://github.com/G1ANT-Robot/G1ANT.Manual","homepage":"http://beta.g1ant.com","size":1386,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":3,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":2,"open_issues":3,"watchers":1,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14"},"html":{"href":"https://github.com/G1ANT-Robot/G1ANT.Manual/pull/14"},"issue":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/14"},"comments":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/issues/14/comments"},"review_comments":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14/comments"},"review_comment":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/pulls/14/commits"},"statuses":{"href":"https://api.github.com/repos/G1ANT-Robot/G1ANT.Manual/statuses/a5b635580b7ef1113fbc8e8adfa29b82391f2d24"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Vegebutcher"}}