Merge branch '0.7' of github.com:deployd/deployd into 0.7

This commit is contained in:
Ritchie Martori
2012-11-15 11:56:12 -08:00
7 changed files with 86 additions and 138 deletions

View File

@@ -1,89 +1,9 @@
# History
## 0.6.8
- Fixed CORS incorrectly requiring a referer header
- Added `dpd.once(name, fn)` function to execute a realtime handler exactly once
- Added `dpd.off(name, [fn])` function to remove a realtime handler
- Added `dpd.socketReady(fn)` function to listen for the built-in `connect` event
- Added `dpd.socket` property to provide direct access to socket.io.
- Fixed bug where username and password could be updated by an unauthenticated put.
- Usernames and passwords can be updated only by that user's session, a root session, or an internal request.
- Made `data` folder smaller by default in `development` environment
- Added `cancelIf()`, `cancelUnless()`, `errorIf()`, and `errorUnless()` functions to event API for more declarative events
- Added `hasErrors()` function to event API
- Added `isMe()` function to event API
- Fixed external prototype bug causing custom external prototypes to fail
- Removed docs from repository. They are now available at http://docs.deployd.com or https://github.com/deployd/docs.
## 0.6.7
- Added new data editor
- Fixed major bug where calling error() would not always cancel the request
- Fixed bug where PUT would fail without an error if you provided a query
- Changed root behavior - no longer ignores cancel() in events
- Fixed bugs preventing events from being `emit()`ed to users in certain connection states
- Fixed bug where boolean query values (?bool=true) were not treated as booleans
- Fixed unnecessary error when parsing JSON body
- Added more intelligent body parsing
- Added `changed()` method in collection events
- Added `previous` object in collection events
- Fixed `dpd showkey` prompt for missing keys.json
## 0.6.6
- Added CORS support
- Exposed the server object to modules as `process.server`
- Fixed a rare bug where the first request after a login would not be authenticated
- Fixed minor bug when loading only node modules
## 0.6.5
- Fixed `process.send` bug
- Remote DB Authentication
## 0.6.4
- Fixed incorrect Content-Length response header.
## 0.6.3
- Removed dependency on jQuery for dpd.js
- JSON-formatted "bad credentials" login error
- Improved error reporting on CLI when port is in use
- If in development mode, and no port has been specifically requested, CLI will retry with up to 5 different ports
- Fixed "no open connections" bug on startup
- Renamed `Db.connect()` to `Db.create()`
- Db connections are now lazy and only occur once a request is made
- Added 500 and 404 error pages
- Added module domain error handling for better module errors
- Added automatic reloading on error
- Dropped support for node 0.6
## 0.6.2
- Fixed rare but annoying bug where server would crash for no good reason ("Cannot set headers") on a request
## 0.6.1
- Bumped the default recursion limit to 2 levels
- Fixed rare case where a resource's dashboard would not load
- Fixed user events
- Fixed several validation bugs
- In a UserCollection /users/me will return 204 instead of 401
## 0.6.0
## 0.7.0
### Breaking Changes
- Restructured Deployd app folder structure. Let us know if you need to migrate any 0.5 apps.
- Changed the "email" property of a UserCollection to "username", in order to be less opinionated about user logic.
### New Features
- Rebuilt the dashboard
- You can now manage resources from any page on the dashboard. Navigation has also been improved
- You can now reorder properties in a collection
- Added custom resource API. You can now write your own resources and include them in your app. See the [docs] for examples and reference.
### Major Bugfixes
- Fixed bug where your session could get elevated to root after using the Dashboard (causing cancel() in events to be ignored)
### Major Bugfixes

View File

@@ -73,7 +73,7 @@ exports.build = function(server, session, stack) {
, query: options.query
, body: options.body
, session: session
, isRoot: session.isRoot
, isRoot: session && session.isRoot
, internal: true
, headers: {}
, on: function() {}

View File

@@ -42,10 +42,21 @@
</ul>
</div>
</div>
<div id="resources-empty" class="alert alert-info hide">Add a resource to get started</div>
<div id="resources-empty" class="dashboard-sidebar-info hide">Add a resource to get started</div>
<ul class="nav nav-stacked type-icons" id="resource-sidebar">
</ul>
</div>
<div id="modules" class="well hide">
<div class="section-header">
<h3>Modules</h3>
<a class="btn btn-success" href="#add-module-modal" data-toggle="modal">
<i class="icon-white icon-plus"></i>
</a>
</div>
<div id="modules-empty" class="dashboard-sidebar-info">No modules are installed</div>
<ul class="nav nav-stacked type-icons hide" id="module-sidebar">
</ul>
</div>
</div>
<div id="main-container">
<{ if (render.bodyHtml) { }>
@@ -54,6 +65,20 @@
</div>
</div>
<div id="add-module-modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="addModuleModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3 id="addModuleModalLabel">Installing Modules</h3>
</div>
<div class="modal-body">
<p>You can install modules for Deployd by using <a target="_blank" href="https://npmjs.org/">npm</a> or by downloading them into your <code>node_modules</code> folder. For more details, see <a target="_blank" href="http://docs.deployd.com/docs/using-modules/installing-modules.md">the Deployd documentation</a>.</p>
<p>For a list of official modules for Deployd, check out the <a target="_blank" href="http://docs.deployd.com/modules">modules</a> page of the documentation.</p>
</div>
<div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
<script type="text/html" id="resource-sidebar-template">
<% var type = types[resource.type]; %>
<% var isCurrent = resource.id === Context.resourceId %>
@@ -101,6 +126,8 @@
</div>
</script>
<script type="text/javascript" src="/dashboard/js/lib/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/dashboard/js/lib/jquery.cookie.js"></script>
<script type="text/javascript" src="/dashboard/js/lib/underscore-min.js"></script>

View File

@@ -51,6 +51,10 @@ body {
#resource-sidebar-container {
width: 250px;
margin-right: 10px;
.well {
margin-bottom: 20px;
}
}
#main-container {
@@ -85,8 +89,11 @@ body {
margin-bottom: 10px;
}
#resources-empty {
margin-bottom: 0;
.dashboard-sidebar-info {
margin-top: 20px;
text-align: center;
font-style: italic;
margin-bottom: 0px;
}
.two-column-container {

View File

@@ -125,11 +125,8 @@ textarea {
/* Makes inputs behave like true block-level elements */
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
@@ -1995,7 +1992,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
border: 1px solid #cccccc;
border-bottom-color: #b3b3b3;
-webkit-border-radius: 4px;
@@ -2108,7 +2105,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#429e96', endColorstr='#428f9e', GradientType=0);
border-color: #428f9e #428f9e #2b5e68;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-primary:hover,
.btn-primary:active,
@@ -2133,7 +2130,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fe7f1c', endColorstr='#cc5a01', GradientType=0);
border-color: #cc5a01 #cc5a01 #803801;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-warning:hover,
.btn-warning:active,
@@ -2158,7 +2155,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8b0e0c', endColorstr='#8b0e0c', GradientType=0);
border-color: #8b0e0c #8b0e0c #450706;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-danger:hover,
.btn-danger:active,
@@ -2183,7 +2180,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#668731', endColorstr='#82ac3f', GradientType=0);
border-color: #82ac3f #82ac3f #58742a;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-success:hover,
.btn-success:active,
@@ -2208,7 +2205,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#429e96', endColorstr='#59bab1', GradientType=0);
border-color: #59bab1 #59bab1 #3a8c85;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-info:hover,
.btn-info:active,
@@ -2233,7 +2230,7 @@ table .span24 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);
border-color: #222222 #222222 #000000;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-inverse:hover,
.btn-inverse:active,
@@ -2849,7 +2846,7 @@ input[type="submit"].btn.btn-mini {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#363535', endColorstr='#363535', GradientType=0);
border-color: #363535 #363535 #0f0f0f;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
@@ -3764,11 +3761,8 @@ a.thumbnail:hover {
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-webkit-transition: width 0.6s ease;
@@ -4089,11 +4083,8 @@ body {
min-height: 100%;
width: 100%;
min-width: 1000px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-flex: 1;
@@ -4111,6 +4102,9 @@ body {
width: 250px;
margin-right: 10px;
}
#resource-sidebar-container .well {
margin-bottom: 20px;
}
#main-container {
box-flex: 1;
-moz-box-flex: 1;
@@ -4170,8 +4164,11 @@ body {
margin-top: 0;
margin-bottom: 10px;
}
#resources-empty {
margin-bottom: 0;
.dashboard-sidebar-info {
margin-top: 20px;
text-align: center;
font-style: italic;
margin-bottom: 0px;
}
.two-column-container {
display: box;
@@ -4180,11 +4177,8 @@ body {
display: -ms-box;
display: -o-box;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
@@ -4551,7 +4545,7 @@ li.L9 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
border: 1px solid #cccccc;
border-bottom-color: #b3b3b3;
-webkit-border-radius: 4px;
@@ -4598,11 +4592,8 @@ li.L9 {
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
background-image: linear-gradient(top, #ffffff, #e6e6e6);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
border: 1px solid #cccccc;
border-bottom-color: #b3b3b3;
-webkit-border-radius: 4px;
@@ -4626,7 +4617,7 @@ li.L9 {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#429e96', endColorstr='#428f9e', GradientType=0);
border-color: #428f9e #428f9e #2b5e68;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.confirmation .actions button.ok:hover,
.confirmation .actions button.ok:active,
@@ -4853,12 +4844,12 @@ li.L9 {
-moz-backface-visibility: hidden;
}
.card .back {
-webkit-transform: rotatey(180deg);
-moz-transform: rotatey(180deg);
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
}
.card.flipped .wrapper {
-webkit-transform: rotatey(180deg);
-moz-transform: rotatey(180deg);
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
}
/* sideflip effect */
.card.sideflip .wrapper {
@@ -4866,8 +4857,8 @@ li.L9 {
-moz-transform-origin: right center;
}
.card.sideflip.flipped .wrapper {
-webkit-transform: translatex(-100%) rotatey(180deg);
-moz-transform: translatex(-100%) rotatey(180deg);
-webkit-transform: translateX(-100%) rotateY(180deg);
-moz-transform: translateX(-100%) rotateY(180deg);
}
body {
background: url(../img/outlets.png) #030202;
@@ -4969,7 +4960,7 @@ td {
vertical-align: middle !important;
}
#resource-sidebar,
#pre-resource-sidebar {
#module-sidebar #pre-resource-sidebar {
min-width: 150px;
margin-bottom: 0;
-webkit-border-radius: 10px 10px 10px 10px;
@@ -4977,12 +4968,12 @@ td {
border-radius: 10px 10px 10px 10px;
}
#resource-sidebar i,
#pre-resource-sidebar i {
#module-sidebar #pre-resource-sidebar i {
position: relative;
top: -2px;
}
#resource-sidebar li,
#pre-resource-sidebar li {
#module-sidebar #pre-resource-sidebar li {
position: relative;
padding: 10px;
-webkit-box-shadow: inset 3px 3px 40px rgba(0, 0, 0, 0.37);
@@ -4995,7 +4986,7 @@ td {
border-right: solid 1px #030202;
}
#resource-sidebar li .options,
#pre-resource-sidebar li .options {
#module-sidebar #pre-resource-sidebar li .options {
visibility: hidden;
position: absolute;
right: 8px;
@@ -5003,20 +4994,20 @@ td {
padding: 8px;
}
#resource-sidebar li .options:hover .caret,
#pre-resource-sidebar li .options:hover .caret {
#module-sidebar #pre-resource-sidebar li .options:hover .caret {
border-top-color: #ffffff;
}
#resource-sidebar li .options .caret,
#pre-resource-sidebar li .options .caret {
#module-sidebar #pre-resource-sidebar li .options .caret {
border-top-color: #838181;
opacity: 1;
}
#resource-sidebar li:hover .options,
#pre-resource-sidebar li:hover .options {
#module-sidebar #pre-resource-sidebar li:hover .options {
visibility: visible;
}
#resource-sidebar li li,
#pre-resource-sidebar li li {
#module-sidebar #pre-resource-sidebar li li {
padding: 5px;
-webkit-box-shadow: none;
-moz-box-shadow: none;
@@ -5026,12 +5017,12 @@ td {
margin-right: 14px;
}
#resource-sidebar li li i,
#pre-resource-sidebar li li i {
#module-sidebar #pre-resource-sidebar li li i {
position: relative;
top: -1px;
}
#resource-sidebar a,
#pre-resource-sidebar a {
#module-sidebar #pre-resource-sidebar a {
font-weight: bold;
font-size: 10px;
text-transform: uppercase;
@@ -5039,35 +5030,35 @@ td {
color: #838181;
}
#resource-sidebar a i,
#pre-resource-sidebar a i {
#module-sidebar #pre-resource-sidebar a i {
opacity: 0.5;
}
#resource-sidebar a:hover,
#pre-resource-sidebar a:hover {
#module-sidebar #pre-resource-sidebar a:hover {
background: none !important;
}
#resource-sidebar li.active,
#pre-resource-sidebar li.active {
#module-sidebar #pre-resource-sidebar li.active {
background: rgba(255, 255, 255, 0.05);
}
#resource-sidebar li.active > a,
#pre-resource-sidebar li.active > a {
#module-sidebar #pre-resource-sidebar li.active > a {
color: #ffffff;
}
#resource-sidebar li.active > a i,
#pre-resource-sidebar li.active > a i {
#module-sidebar #pre-resource-sidebar li.active > a i {
opacity: 1;
}
#resource-sidebar > li.active > a,
#pre-resource-sidebar > li.active > a {
#module-sidebar #pre-resource-sidebar > li.active > a {
display: block;
}
#resource-sidebar ul,
#pre-resource-sidebar ul {
#module-sidebar #pre-resource-sidebar ul {
margin-top: 10px;
}
#resource-sidebar .nav,
#pre-resource-sidebar .nav {
#module-sidebar #pre-resource-sidebar .nav {
margin-bottom: 0;
}
#sidebar-well {

View File

@@ -104,11 +104,12 @@ td {vertical-align: middle !important;}
// END DARK
#resource-sidebar, #pre-resource-sidebar {
#resource-sidebar, #module-sidebar #pre-resource-sidebar {
min-width: 150px;
i {position: relative; top: -2px;}
margin-bottom: 0;
.border-radius(10px 10px 10px 10px);
li {
position: relative;
padding: 10px;

View File

@@ -157,6 +157,8 @@ Server.prototype.listen = function(port, host) {
process.exit(1);
} else {
server.resources = resourcesInstances;
var router = new Router(resourcesInstances, server);
server.router = router;
http.Server.prototype.listen.call(server, port || server.options.port, host || server.options.host);
}
});