termbrowser 0.1.7b0
Terminal web browser.
License: MIT
Requires Python: >=3.6.0

# Term - terminal web browser

![term start](https://user-images.githubusercontent.com/11529502/90342254-a60aae00-dfd4-11ea-81ac-064457d04a82.gif)

Term is terminal-based web browser that only accepts files using the Term File Format. This browser is responsive to youtr terminal's sizing and is developer-focused. This browser will not render HTML or execute JavaScript. It does, however, implement a similar DOM model, and styling attributes are similar to CSS.

![term usage](https://user-images.githubusercontent.com/11529502/90342257-ab67f880-dfd4-11ea-9e8d-f34f7ba5b74e.gif)

## Using the browser
Install using this command:
```bash
pip3 install termbrowser
```

and start using this command:
```bash
term
```
or manually:
```bash
python3 -m termbrowser
```

Open links using their hotkeys ex. 1 for `[1] Link Name`

Press Escape twice to change the URL to load
Press Tab to cycle focus of input fields
Press Enter to submit an input field
Press Alt(or Option) + Q to unfocus from an input field

## Important Note
Term Browser sends requests using the header `Content-Type: Term`. Your web server can distiguish that the request is coming from the Term Browser through this header.


## File Format
Term File Format files are read line by line. The first line of any term file declares the term version to be used. Ex:

```
@termtype:m100
```

The `#` character at the start of a line is used for commenting

```
# this is a comment!
```

### Elements

There are currently 5 element types. `cont`, `text`, `link`, `input`, and `action`

Declare an element like so

```
cont

end
```

Inside of that element, you can place attributes

```
cont
	-width: 10
	-height: 5
	-border: line
end
```

A `cont` (container) is similar to a `<div>` in HTML

To specify an element's value, use `:`

```
text:Hello World!
end
# Note any spacing after the `:` is recorded ('text: Hello World!' returns a value of ' Hello World!')
```

A `text` element is similar to a `<p>` element in HTML

Input fields can be created like so:

```
input
	-submit: my-action
end
```

## Actions
Actions are blocks of code that you can write in a term file to provide interactivity to it's elements

To declare an action, use
```
action: my-action (

)
```

Values are passed to an action code block through a variable named `value`

```
input
	-submit: my-action
end
action: my-action (
	visit("http://localhost/hello?world=" + value)
)
```

## Scripting
The code executed in an action block is not of any specification or language, but is evaluated through [SimpleEval](https://pypi.org/project/simpleeval/).

See [the scripting page](SCRIPTING.md).

## Attributes
Attributes for `cont` include `width`, `height`, `border`, `direction`, and `padding`.

Attributes for `text` include `initial`, `align`, and `style`

Attributes for `link` include `url`, `align`, and `style`

Attributes for `input` include `submit`, `width`, `height`, and `padding`

All elements accept a `name` property, which gives the actions of the page access to it's attributes and value. Accessing by `name` returns the first element in-order of the tree with that name. 

## Responsiveness

Attributes that take in a mathematic value (like `padding` and `width`), can also use a percetange of the screen width or height using the `pc` keyword.

```
# A container that will take up half of the screen width
cont
	-border: line
	-width: 50pc
end
```

# Credits
Term was created by Martin Darazs

## License
MIT License