<<<<<<< HEAD
Protobox is a layer on top of vagrant and a web GUI to setup virtual machines for web development. A single YAML document controls everything that is installed on the virtual machine. You can install popular languages, software, and even popular web applications or your own private GIT repositories with a simple on/off toggle in YAML. You can read more about why this was developed in our about document or on our website at getprotobox.com.
Open terminal and run the following:
gem install protobox && protobox init
Then run vagrant up
and follow the protobox instructions on screen.
Protobox can also be installed other ways, click here to check out alternative installation options.
The protobox configuration file is found at data/config/common.yml
. You can easily install new services by setting install: 1
under any of the software in the configuration file. Alternatively you can drag and drop your yml file to make changes with our web gui at getprotobox.com.
Protobox has built in support for the following functionality:
- Vast Module Selection: Protobox comes bundled with 15+ of the most common modules that PHP developer use everyday.
- Application Installing: Set the path to a git repo (public or private) or a composer project and upon vagrant up it will be installed for you.
- User Preferences: Upon boot up your dot files in data/dot will be copied to the virtual machine.
- SSH Keys: Place your ssh keys in the data/ssh and reference them from the configuration file to be copied to the virtual machine to easily access any remote servers or github.
- SQL Import: You can add any sql files in data/sql and reference them in the configuration file to be imported upon the bootup of the virtual machine.
- Mailcatching: The mailcatcher package can catch any mail leaving the system for debugging and testing.
- Ansible: Protobox is built using ansible. It's simplicity, yaml format, and agent operation make for a very powerful combination. Why Ansible?.
Protobox has built in support for any OS, common web servers, and languages. See the full list by reading the modules document or on our website at getprotobox.com.
Protobox has built in support for popular applications. See the full list by reading the applications document or on our website at getprotobox.com.
Check out our roadmap for upcoming features and how to help.
Use GitHub Issues to file a bug report or new feature request. Please open a issue prior to opening a pull request to make sure it is something we can merge. The roadmap can be determined by looking at issues tagged as featured request
.
Use GitHub Issues or #protobox on irc.freenode.net.
Protobox was developed by Patrick Heeney and inspired by the puphpet project. A special thanks goes out to our contributors for helping grow this project. Protobox is also made possible by the best orchestration engine in existence: ansible.
Protobox is licensed under the MIT license.
The most powerful Sticky library available for React!
- Must be located in the Baltimore, MD/Washington, DC area
- If interested, send your resume and/or a link to your github profile to [email protected]
- Fully-nestable, allowing you to build awesome layouts with familiar syntax
- Sane defaults so you spend less time configuring
- Allows multiple Sticky elements on the page at once with compositional awareness!
npm install react-sticky
Tip: run npm build
to build the compressed UMD version suitable for inclusion via CommonJS, AMD, and even good old fashioned <script>
tags (available as ReactSticky
).
It all starts with a <StickyContainer />
. This is basically a plain ol' <div />
with a React-managed padding-top
css attribute. As you scroll down the page, all <Sticky />
tags within
will be constrained to the bounds of its closest <StickyContainer />
parent.
The elements you actually want to "stick" should be wrapped in the <Sticky />
tag. The full list of props are available below, but typical usage will look something like so:
app.jsx
import React from 'react';
import { StickyContainer, Sticky } from 'react-sticky';
...
class App extends React.Component ({
render() {
return (
...
<StickyContainer>
...
<Sticky>
<header>
...
</header>
</Sticky>
...
</StickyContainer>
...
);
},
});
When the "stickiness" becomes activated, the following inline style rules are applied to the Sticky element:
position: fixed;
top: 0;
left: 0;
width: < width is inherited from the closest StickyContainer >
Note that the calculation of the Sticky element's height does not currently take margins into account. If you have margins on this element it may result in unexpected behavior.
<StickyContainer />
passes along all props you provide to it without interference. That's right - no restrictions - go nuts!
In the event that you wish to override the style rules applied, simply pass in the style object as a prop:
app.jsx
<StickyContainer>
<Sticky stickyStyle={customStyleObject}>
<header />
</Sticky>
</StickyContainer>
Note: You likely want to avoid messing with the following attributes in your stickyStyle: left
, top
, and width
.
You can also specify a class name to be applied when the element becomes sticky:
app.jsx
<StickyContainer>
...
<Sticky stickyClassName={customClassName}>
<header />
</Sticky>
...
</StickyContainer>
Sticky state will be triggered when the top of the element is topOffset
pixels from the top of the closest <StickyContainer />
. Positive numbers give the impression of a lazy sticky state, whereas negative numbers are more eager in their attachment.
app.jsx
<StickyContainer>
...
<Sticky topOffset={80}>
<SomeChild />
</Sticky>
...
</StickyContainer>
The above would result in an element that becomes sticky once its top is greater than or equal to 80px away from the top of the <StickyContainer />
.
Sticky state will be triggered when the bottom of the element is bottomOffset
pixels from the bottom of the closest <StickyContainer />
.
app.jsx
<StickyContainer>
...
<Sticky bottomOffset={80}>
<SomeChild />
</Sticky>
...
</StickyContainer>
You can specify a class name that would be applied to the resulting element:
app.jsx
<StickyContainer>
...
<Sticky className={className}>
<header />
</Sticky>
...
</StickyContainer>
You can also specify a style object that would be applied to the resulting element:
app.jsx
<StickyContainer>
...
<Sticky style={{background: 'red'}}>
<header />
</Sticky>
</StickyContainer>
Note: In the event that stickyStyle
rules conflict with style
rules, stickyStyle
rules take precedence ONLY while sticky state is active.
Use the onStickyStateChange prop to fire a callback function when the sticky state changes:
app.jsx
<StickyContainer>
...
<Sticky onStickyStateChange={this.handleStickyStateChange}>
<header />
</Sticky
...
</StickyContainer>
Use the isActive prop to manually turn sticky on or off:
app.jsx
<StickyContainer>
...
<Sticky isActive={false}>
<header />
</Sticky
...
</StickyContainer>
MIT
b680b4e3a76990ae0c78461a8f5b97e07c89a7db