server = $server; $this->protocolVersion = $protocolVersion; $this->headers = [ self::STATUS_CONTINUE => 'Continue', self::STATUS_SWITCHING_PROTOCOLS => 'Switching Protocols', self::STATUS_PROCESSING => 'Processing', self::STATUS_OK => 'OK', self::STATUS_CREATED => 'Created', self::STATUS_ACCEPTED => 'Accepted', self::STATUS_NON_AUTHORATIVE_INFORMATION => 'Non-Authorative Information', self::STATUS_NO_CONTENT => 'No Content', self::STATUS_RESET_CONTENT => 'Reset Content', self::STATUS_PARTIAL_CONTENT => 'Partial Content', self::STATUS_MULTI_STATUS => 'Multi-Status', // RFC 4918 self::STATUS_ALREADY_REPORTED => 'Already Reported', // RFC 5842 self::STATUS_IM_USED => 'IM Used', // RFC 3229 self::STATUS_MULTIPLE_CHOICES => 'Multiple Choices', self::STATUS_MOVED_PERMANENTLY => 'Moved Permanently', self::STATUS_FOUND => 'Found', self::STATUS_SEE_OTHER => 'See Other', self::STATUS_NOT_MODIFIED => 'Not Modified', self::STATUS_USE_PROXY => 'Use Proxy', self::STATUS_RESERVED => 'Reserved', self::STATUS_TEMPORARY_REDIRECT => 'Temporary Redirect', self::STATUS_BAD_REQUEST => 'Bad request', self::STATUS_UNAUTHORIZED => 'Unauthorized', self::STATUS_PAYMENT_REQUIRED => 'Payment Required', self::STATUS_FORBIDDEN => 'Forbidden', self::STATUS_NOT_FOUND => 'Not Found', self::STATUS_METHOD_NOT_ALLOWED => 'Method Not Allowed', self::STATUS_NOT_ACCEPTABLE => 'Not Acceptable', self::STATUS_PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required', self::STATUS_REQUEST_TIMEOUT => 'Request Timeout', self::STATUS_CONFLICT => 'Conflict', self::STATUS_GONE => 'Gone', self::STATUS_LENGTH_REQUIRED => 'Length Required', self::STATUS_PRECONDITION_FAILED => 'Precondition failed', self::STATUS_REQUEST_ENTITY_TOO_LARGE => 'Request Entity Too Large', self::STATUS_REQUEST_URI_TOO_LONG => 'Request-URI Too Long', self::STATUS_UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type', self::STATUS_REQUEST_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable', self::STATUS_EXPECTATION_FAILED => 'Expectation Failed', self::STATUS_IM_A_TEAPOT => 'I\'m a teapot', // RFC 2324 self::STATUS_UNPROCESSABLE_ENTITY => 'Unprocessable Entity', // RFC 4918 self::STATUS_LOCKED => 'Locked', // RFC 4918 self::STATUS_FAILED_DEPENDENCY => 'Failed Dependency', // RFC 4918 self::STATUS_UPGRADE_REQUIRED => 'Upgrade required', self::STATUS_PRECONDITION_REQUIRED => 'Precondition required', // draft-nottingham-http-new-status self::STATUS_TOO_MANY_REQUESTS => 'Too Many Requests', // draft-nottingham-http-new-status self::STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large', // draft-nottingham-http-new-status self::STATUS_INTERNAL_SERVER_ERROR => 'Internal Server Error', self::STATUS_NOT_IMPLEMENTED => 'Not Implemented', self::STATUS_BAD_GATEWAY => 'Bad Gateway', self::STATUS_SERVICE_UNAVAILABLE => 'Service Unavailable', self::STATUS_GATEWAY_TIMEOUT => 'Gateway Timeout', self::STATUS_HTTP_VERSION_NOT_SUPPORTED => 'HTTP Version not supported', self::STATUS_VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates', self::STATUS_INSUFFICIENT_STORAGE => 'Insufficient Storage', // RFC 4918 self::STATUS_LOOP_DETECTED => 'Loop Detected', // RFC 5842 self::STATUS_BANDWIDTH_LIMIT_EXCEEDED => 'Bandwidth Limit Exceeded', // non-standard self::STATUS_NOT_EXTENDED => 'Not extended', self::STATUS_NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required', // draft-nottingham-http-new-status ]; } /** * Gets the correct header * @param int Http::CONSTANT $status the constant from the Http class * @param \DateTime $lastModified formatted last modified date * @param string $ETag the etag * @return string */ public function getStatusHeader($status) { // we have one change currently for the http 1.0 header that differs // from 1.1: STATUS_TEMPORARY_REDIRECT should be STATUS_FOUND // if this differs any more, we want to create childclasses for this if ($status === self::STATUS_TEMPORARY_REDIRECT && $this->protocolVersion === 'HTTP/1.0') { $status = self::STATUS_FOUND; } return $this->protocolVersion . ' ' . $status . ' ' . $this->headers[$status]; } } >19 20 21 22 23 24 25 26 27 28 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery UI Draggable - Snap to element or grid</title>
<link rel="stylesheet" href="../../themes/base/jquery.ui.all.css">
<script src="../../jquery-1.4.3.js"></script>
<script src="../../ui/jquery.ui.core.js"></script>
<script src="../../ui/jquery.ui.widget.js"></script>
<script src="../../ui/jquery.ui.mouse.js"></script>
<script src="../../ui/jquery.ui.draggable.js"></script>
<link rel="stylesheet" href="../demos.css">
<style>
.draggable { width: 90px; height: 80px; padding: 5px; float: left; margin: 0 10px 10px 0; font-size: .9em; }
.ui-widget-header p, .ui-widget-content p { margin: 0; }
#snaptarget { height: 140px; }
</style>
<script>
$(function() {
$( "#draggable" ).draggable({ snap: true });
$( "#draggable2" ).draggable({ snap: ".ui-widget-header" });
$( "#draggable3" ).draggable({ snap: ".ui-widget-header", snapMode: "outer" });
$( "#draggable4" ).draggable({ grid: [ 20,20 ] });
$( "#draggable5" ).draggable({ grid: [ 80, 80 ] });
});
</script>
</head>
<body>
<div class="demo">
<div id="snaptarget" class="ui-widget-header">
<p>I'm a snap target</p>
</div>
<br clear="both" />
<div id="draggable" class="draggable ui-widget-content">
<p>Default (snap: true), snaps to all other draggable elements</p>
</div>
<div id="draggable2" class="draggable ui-widget-content">
<p>I only snap to the big box</p>
</div>
<div id="draggable3" class="draggable ui-widget-content">
<p>I only snap to the outer edges of the big box</p>
</div>
<div id="draggable4" class="draggable ui-widget-content">
<p>I snap to a 20 x 20 grid</p>
</div>
<div id="draggable5" class="draggable ui-widget-content">
<p>I snap to a 80 x 80 grid</p>
</div>
</div><!-- End demo -->
<div class="demo-description">
<p>Snap the draggable to the inner or outer boundaries of a DOM element. Use the <code>snap</code>, <code>snapMode</code> (inner, outer, both), and <code>snapTolerance</code> (distance in pixels the draggable must be from the element when snapping is invoked) options. </p>
<p>Or snap the draggable to a grid. Set the dimensions of grid cells (height and width in pixels) with the <code>grid</code> option.</p>
</div><!-- End demo-description -->
</body>
</html>