정소현

new file: app.js

	new file:   bin/www
	new file:   models/boardsSchema.js
	new file:   package.json
	new file:   public/images/noImage.jpg
	new file:   "public/images/\352\263\240\354\247\204\353\247\216\353\217\204\354\213\234\353\235\2751\355\216\270.jpg"
	new file:   "public/images/\352\263\240\354\266\224\354\260\270\354\271\230\354\202\274\352\260\201\352\271\200\353\260\245.jpg"
	new file:   "public/images/\353\215\224\355\201\260)\353\266\210\352\263\240\352\270\260\354\243\274\353\250\271\353\260\2451\355\216\270.jpg"
	new file:   "public/images/\353\215\224\355\201\260)\353\266\210\355\203\200\353\212\224\353\252\205\353\236\200\353\247\210\354\232\2241\355\216\270.jpg"
	new file:   "public/images/\353\221\220\355\210\274\355\225\234\353\223\261\354\213\254\353\217\210\352\260\200\354\212\244.jpg"
	new file:   "public/images/\353\247\245\354\225\244\354\271\230\354\246\210\355\225\240\353\235\274\355\224\274\353\207\250\354\203\214\353\223\2341\355\216\270.jpg"
	new file:   "public/images/\353\260\224\353\262\240\355\201\220\355\217\255\353\246\275\353\217\204\354\213\234\353\235\275.jpg"
	new file:   "public/images/\353\271\204\353\271\224\355\226\204\354\260\270\354\271\230\354\243\274\353\250\271\353\260\245.jpg"
	new file:   "public/images/\354\212\244\355\214\270\354\203\214\353\223\234\354\234\204\354\271\230.jpg"
	new file:   "public/images/\354\225\274\354\261\204\354\260\270\354\271\230\354\202\274\352\260\201\352\271\200\353\260\245.jpg"
	new file:   "public/images/\354\226\221\353\205\220\354\210\257\353\266\210\352\260\210\353\271\204\353\247\233.jpg"
	new file:   "public/images/\354\230\254\355\217\254\354\234\2401\355\216\270.jpg"
	new file:   "public/images/\354\260\270\354\271\230\352\271\200\354\271\230\353\263\266\354\235\214.jpg"
	new file:   "public/images/\354\271\230\354\246\210\352\260\220\355\212\200\354\203\214\353\223\234\354\234\204\354\271\230.jpg"
	new file:   "public/images/\355\206\265\354\203\210\354\232\260&\354\227\220\352\267\270\354\203\220\353\237\254\353\223\234\354\203\214\353\223\234.jpg"
	new file:   "public/images/\355\230\234\353\246\254)New11\354\260\254\353\217\204\354\213\234\353\235\275.jpg"
	new file:   "public/images/\355\230\234\353\246\254)\353\202\250\353\217\204\353\226\241\352\260\210\353\271\204\353\217\204\354\213\234\353\235\275.jpg"
	new file:   "public/images/\355\230\234\353\246\254)\354\255\210\352\276\270\353\257\270\353\266\210\352\263\240\352\270\260\353\271\204\353\271\224\353\260\245.jpg"
	new file:   public/stylesheets/style.css
	new file:   routes/contents.js
	new file:   routes/index.js
	new file:   views/.DS_Store
	new file:   views/board.ejs
	new file:   views/boardDetail.ejs
	new file:   views/error.ejs
1 +var express = require('express');
2 +var path = require('path');
3 +var favicon = require('serve-favicon');
4 +var logger = require('morgan');
5 +var cookieParser = require('cookie-parser');
6 +var bodyParser = require('body-parser');
7 +
8 +var mongoose = require('mongoose'); //**** mongodb를 연결하기 위함 ****/
9 +
10 +var routes = require('./routes/index'); // 기본 설정
11 +var boards = require('./routes/contents'); //**** board는 contents.js 파일로 연결하여 라우팅 ****/
12 +
13 +
14 +var app = express();
15 +
16 +//***** connect mongodb *****/
17 +mongoose.connect('mongodb://2014104145:pw@ds163301.mlab.com:63301/foodrank/food');
18 +
19 +var db = mongoose.connection;
20 +db.on('error', console.error.bind(console, 'connection error:'));
21 +db.once('open', function() {
22 + console.log("connected");
23 +});
24 +
25 +// view engine setup
26 +app.set('views', path.join(__dirname, 'views'));
27 +app.set('view engine', 'ejs');
28 +
29 +// uncomment after placing your favicon in /public
30 +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
31 +app.use(logger('dev'));
32 +app.use(bodyParser.json());
33 +app.use(bodyParser.urlencoded({ extended: false }));
34 +app.use(cookieParser());
35 +app.use(express.static(path.join(__dirname, 'public')));
36 +
37 +app.use('/', routes);
38 +app.use('/boards', boards); //*** '/boards' 주소로 들어오면 var boards = require('./routes/contents');에서 설정한 주소로 넘어가게 됨 ***/
39 +
40 +// file upload multer
41 +//app.use(upload.array('UploadFile',10));
42 +
43 +// catch 404 and forward to error handler
44 +app.use(function(req, res, next) {
45 + var err = new Error('Not Found');
46 + err.status = 404;
47 + next(err);
48 +});
49 +
50 +
51 +// error handlers
52 +
53 +// development error handler
54 +// will print stacktrace
55 +if (app.get('env') === 'development') {
56 + app.use(function(err, req, res, next) {
57 + res.status(err.status || 500);
58 + res.render('error', {
59 + message: err.message,
60 + error: err
61 + });
62 + });
63 +}
64 +
65 +// production error handler
66 +// no stacktraces leaked to user
67 +app.use(function(err, req, res, next) {
68 + res.status(err.status || 500);
69 + res.render('error', {
70 + message: err.message,
71 + error: {}
72 + });
73 +});
74 +
75 +
76 +module.exports = app;
1 +#!/usr/bin/env node
2 +
3 +/**
4 + * Module dependencies.
5 + */
6 +
7 +var app = require('../app');
8 +var debug = require('debug')('foodrank:server');
9 +var http = require('http');
10 +
11 +/**
12 + * Get port from environment and store in Express.
13 + */
14 +
15 +var port = normalizePort(process.env.PORT || '3000');
16 +app.set('port', port);
17 +
18 +/**
19 + * Create HTTP server.
20 + */
21 +
22 +var server = http.createServer(app);
23 +
24 +/**
25 + * Listen on provided port, on all network interfaces.
26 + */
27 +
28 +server.listen(port);
29 +server.on('error', onError);
30 +server.on('listening', onListening);
31 +
32 +/**
33 + * Normalize a port into a number, string, or false.
34 + */
35 +
36 +function normalizePort(val) {
37 + var port = parseInt(val, 10);
38 +
39 + if (isNaN(port)) {
40 + // named pipe
41 + return val;
42 + }
43 +
44 + if (port >= 0) {
45 + // port number
46 + return port;
47 + }
48 +
49 + return false;
50 +}
51 +
52 +/**
53 + * Event listener for HTTP server "error" event.
54 + */
55 +
56 +function onError(error) {
57 + if (error.syscall !== 'listen') {
58 + throw error;
59 + }
60 +
61 + var bind = typeof port === 'string'
62 + ? 'Pipe ' + port
63 + : 'Port ' + port;
64 +
65 + // handle specific listen errors with friendly messages
66 + switch (error.code) {
67 + case 'EACCES':
68 + console.error(bind + ' requires elevated privileges');
69 + process.exit(1);
70 + break;
71 + case 'EADDRINUSE':
72 + console.error(bind + ' is already in use');
73 + process.exit(1);
74 + break;
75 + default:
76 + throw error;
77 + }
78 +}
79 +
80 +/**
81 + * Event listener for HTTP server "listening" event.
82 + */
83 +
84 +function onListening() {
85 + var addr = server.address();
86 + var bind = typeof addr === 'string'
87 + ? 'pipe ' + addr
88 + : 'port ' + addr.port;
89 + debug('Listening on ' + bind);
90 +}
1 +/*** 게시물 db 스키마 ***/
2 +
3 +
4 +var mongoose = require('mongoose');
5 +
6 +var boardSchema = mongoose.Schema({
7 + name: String,
8 + company: String,
9 + category: String,
10 + price: String,
11 + average:Number,
12 + comments: [{
13 + grade: Number,
14 + memo: String
15 + }]
16 +
17 +});
18 +
19 +module.exports = mongoose.model('BoardContents', boardSchema);
1 +{
2 + "name": "foodrank",
3 + "version": "0.0.0",
4 + "private": true,
5 + "scripts": {
6 + "start": "node ./bin/www"
7 + },
8 + "dependencies": {
9 + "body-parser": "~1.17.1",
10 + "cookie-parser": "~1.4.3",
11 + "debug": "~2.6.3",
12 + "ejs": "~2.5.6",
13 + "express": "~4.15.2",
14 + "mongoose": "^4.10.5",
15 + "morgan": "~1.8.1",
16 + "multer": "^1.3.0",
17 + "serve-favicon": "~2.4.2"
18 + }
19 +}
1 +/*
2 +••••••••••••••••••••••••
3 +
4 +Powered by Type & Grids™
5 +www.typeandgrids.com
6 +
7 +••••••••••••••••••••••••
8 +*/
9 +
10 +/*
11 +Responsive grid is from Skeleton by Dave Gamache
12 +www.getskeleton.com
13 +*/
14 +
15 +/*===================================================================================================
16 +Contents
17 +=====================================================================================================
18 + 1) Reset & basics
19 + 2) Basic styles
20 + 3) Typography
21 + 4) Links
22 + 5) Lists
23 + 6) Images
24 + 7) Buttons
25 + 8) Forms
26 + 9) Misc
27 + 10) Base 960 grid
28 + 11) Tablet (Portrait)
29 + 12) Mobile (Portrait)
30 + 13) Mobile (Landscape)
31 + 14) Clearing
32 + 15) Portfolio slider
33 + 16) Site styles
34 + 17) Media queries
35 + 18) Print styles
36 +*/
37 +
38 +/*===================================================================================================
39 +1) Reset & basics
40 +===================================================================================================*/
41 + html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
42 + margin: 0;
43 + padding: 0;
44 + border: 0;
45 + font-size: 100%;
46 + font: inherit;
47 + vertical-align: baseline; }
48 + article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
49 + display: block; }
50 + body {
51 + line-height: 1; }
52 + ol, ul {
53 + list-style: none; }
54 + blockquote, q {
55 + quotes: none; }
56 + blockquote:before, blockquote:after,
57 + q:before, q:after {
58 + content: '';
59 + content: none; }
60 + table {
61 + border-collapse: collapse;
62 + border-spacing: 0; }
63 +
64 +/*===================================================================================================
65 +2) Basic styles
66 +===================================================================================================*/
67 + body {
68 + background: #fff;
69 + font: 14px/21px Arial, sans-serif;
70 + color: #444;
71 + -webkit-font-smoothing: antialiased; /* Fix for webkit rendering */
72 + -webkit-text-size-adjust: 100%;
73 +
74 + -webkit-transition: background-color 0.8s ease-out;
75 + -moz-transition: background-color 0.8s ease-out;
76 + -o-transition: background-color 0.8s ease-out;
77 + transition: background-color 0.8s ease-out;
78 + }
79 +
80 +/*===================================================================================================
81 +3) Typography
82 +===================================================================================================*/
83 + h1, h2, h3, h4, h5, h6 {
84 + color: #222;
85 + font-family: Georgia, Arial, sans-serif;
86 + font-weight: normal; }
87 + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
88 + h1 { font-size: 46px; line-height: 50px; margin-bottom: 14px;}
89 + h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; }
90 + h3 { font-size: 28px; line-height: 34px; margin-bottom: 6px; }
91 + h4 { font-size: 21px; line-height: 30px; margin-bottom: 6px; }
92 + h5 { font-size: 17px; line-height: 24px; }
93 + h6 { font-size: 14px; line-height: 21px; }
94 + .subheader { color: #777; }
95 +
96 + p { margin: 0 0 20px 0; }
97 + p img { margin: 0; }
98 + p.lead { font-size: 21px; line-height: 27px; color: #777; }
99 +
100 + em { font-style: italic; }
101 + strong { font-weight: bold; color: #333; }
102 + small { font-size: 80%; }
103 +
104 + blockquote, blockquote p { font-family: Georgia, Arial, sans-serif; font-size: 14px; line-height: 1.5; font-style: italic; }
105 + blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; }
106 + blockquote cite { font-family: Arial, sans-serif; font-style: normal; font-weight: bold; display: block; padding-top: 8px; }
107 + blockquote cite:before { content: "\2014"; }
108 + /*blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; }*/
109 +
110 + hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; }
111 +
112 +/*===================================================================================================
113 +4) Links
114 +===================================================================================================*/
115 + a, a:visited { color: #333; text-decoration: underline; outline: 0; }
116 + a:hover, a:focus { color: #777; }
117 + p a, p a:visited { line-height: inherit; }
118 +
119 +/*===================================================================================================
120 +5) Lists
121 +===================================================================================================*/
122 + ul, ol { margin-bottom: 20px; }
123 + ul { list-style: none outside; }
124 + ol { list-style: decimal; }
125 + ol, ul.square, ul.circle, ul.disc { margin-left: 30px; }
126 + ul.square { list-style: square outside; }
127 + ul.circle { list-style: circle outside; }
128 + ul.disc { list-style: disc outside; }
129 + ul ul, ul ol,
130 + ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; }
131 + ul ul li, ul ol li,
132 + ol ol li, ol ul li { margin-bottom: 6px; }
133 + li { line-height: 18px; margin-bottom: 12px; }
134 + ul.large li { line-height: 21px; }
135 + li p { line-height: 21px; }
136 +
137 +/*===================================================================================================
138 +6) Images
139 +===================================================================================================*/
140 + img.scale-with-grid {
141 + max-width: 100%;
142 + height: auto; }
143 +
144 +/*===================================================================================================
145 +7) Buttons
146 +===================================================================================================*/
147 + .button,
148 + button,
149 + input[type="submit"],
150 + input[type="reset"],
151 + input[type="button"] {
152 + background: #eee; /* Old browsers */
153 + background: #eee -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */
154 + background: #eee -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */
155 + background: #eee -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */
156 + background: #eee -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */
157 + background: #eee -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */
158 + background: #eee linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */
159 + border: 1px solid #aaa;
160 + border-top: 1px solid #ccc;
161 + border-left: 1px solid #ccc;
162 + padding: 4px 12px;
163 + -moz-border-radius: 3px;
164 + -webkit-border-radius: 3px;
165 + border-radius: 3px;
166 + color: #444;
167 + display: inline-block;
168 + font-size: 11px;
169 + font-weight: bold;
170 + text-decoration: none;
171 + text-shadow: 0 1px rgba(255, 255, 255, .75);
172 + cursor: pointer;
173 + /*margin-bottom: 20px;*/
174 + line-height: normal;
175 + padding: 8px 10px;
176 + font-family: Arial, sans-serif; }
177 +
178 + .button:hover,
179 + button:hover,
180 + input[type="submit"]:hover,
181 + input[type="reset"]:hover,
182 + input[type="button"]:hover {
183 + color: #222;
184 + background: #ddd; /* Old browsers */
185 + background: #ddd -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */
186 + background: #ddd -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */
187 + background: #ddd -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */
188 + background: #ddd -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */
189 + background: #ddd -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */
190 + background: #ddd linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */
191 + border: 1px solid #888;
192 + border-top: 1px solid #aaa;
193 + border-left: 1px solid #aaa; }
194 +
195 + .button:active,
196 + button:active,
197 + input[type="submit"]:active,
198 + input[type="reset"]:active,
199 + input[type="button"]:active {
200 + border: 1px solid #666;
201 + background: #ccc; /* Old browsers */
202 + background: #ccc -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */
203 + background: #ccc -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */
204 + background: #ccc -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */
205 + background: #ccc -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */
206 + background: #ccc -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */
207 + background: #ccc linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ }
208 +
209 + .button.full-width,
210 + button.full-width,
211 + input[type="submit"].full-width,
212 + input[type="reset"].full-width,
213 + input[type="button"].full-width {
214 + width: 100%;
215 + padding-left: 0 !important;
216 + padding-right: 0 !important;
217 + text-align: center; }
218 +
219 + /* Fix for odd Mozilla border & padding issues */
220 + button::-moz-focus-inner,
221 + input::-moz-focus-inner {
222 + border: 0;
223 + padding: 0;
224 + }
225 +
226 +/*===================================================================================================
227 +8) Forms
228 +===================================================================================================*/
229 + form {
230 + margin-bottom: 20px; }
231 + fieldset {
232 + margin-bottom: 20px; }
233 + input[type="text"],
234 + input[type="password"],
235 + input[type="email"],
236 + textarea,
237 + select {
238 + border: 1px solid #ccc;
239 + padding: 6px 4px;
240 + outline: none;
241 + -moz-border-radius: 2px;
242 + -webkit-border-radius: 2px;
243 + border-radius: 2px;
244 + font: 13px Arial, sans-serif;
245 + color: #444;
246 + margin: 0;
247 + width: 210px;
248 + max-width: 100%;
249 + display: block;
250 + margin-bottom: 20px;
251 + background: #fff; }
252 + select {
253 + padding: 0; }
254 + input[type="text"]:focus,
255 + input[type="password"]:focus,
256 + input[type="email"]:focus,
257 + textarea:focus {
258 + border: 1px solid #aaa;
259 + color: #444;
260 + -moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
261 + -webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
262 + box-shadow: 0 0 3px rgba(0,0,0,.2); }
263 + textarea {
264 + min-height: 60px; }
265 + label,
266 + legend {
267 + display: block;
268 + font-weight: bold;
269 + font-size: 13px; }
270 + select {
271 + width: 220px; }
272 + input[type="checkbox"] {
273 + display: inline; }
274 + label span,
275 + legend span {
276 + font-weight: normal;
277 + font-size: 13px;
278 + color: #444; }
279 +
280 +/*===================================================================================================
281 +9) Misc
282 +===================================================================================================*/
283 + .remove-bottom { margin-bottom: 0 !important; }
284 + .half-bottom { margin-bottom: 10px !important; }
285 + .add-bottom { margin-bottom: 20px !important; }
286 +
287 +/*===================================================================================================
288 +10) Base 960 grid
289 +===================================================================================================*/
290 + .container { position: relative; width: 960px; margin: 0 auto; padding: 0; }
291 + .container .column,
292 + .container .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; }
293 + .row { margin-bottom: 20px; }
294 +
295 + /* Nested Column Classes */
296 + .column.alpha, .columns.alpha { margin-left: 0; }
297 + .column.omega, .columns.omega { margin-right: 0; }
298 +
299 + /* Base Grid */
300 + .container .one.column,
301 + .container .one.columns { width: 40px; }
302 + .container .two.columns { width: 100px; }
303 + .container .three.columns { width: 160px; }
304 + .container .four.columns { width: 220px; }
305 + .container .five.columns { width: 280px; }
306 + .container .six.columns { width: 340px; }
307 + .container .seven.columns { width: 400px; }
308 + .container .eight.columns { width: 460px; }
309 + .container .nine.columns { width: 520px; }
310 + .container .ten.columns { width: 580px; }
311 + .container .eleven.columns { width: 640px; }
312 + .container .twelve.columns { width: 700px; }
313 + .container .thirteen.columns { width: 760px; }
314 + .container .fourteen.columns { width: 820px; }
315 + .container .fifteen.columns { width: 880px; }
316 + .container .sixteen.columns { width: 940px; }
317 +
318 + .container .one-third.column { width: 300px; }
319 + .container .two-thirds.column { width: 620px; }
320 +
321 + /* Offsets */
322 + .container .offset-by-one { padding-left: 60px; }
323 + .container .offset-by-two { padding-left: 120px; }
324 + .container .offset-by-three { padding-left: 180px; }
325 + .container .offset-by-four { padding-left: 240px; }
326 + .container .offset-by-five { padding-left: 300px; }
327 + .container .offset-by-six { padding-left: 360px; }
328 + .container .offset-by-seven { padding-left: 420px; }
329 + .container .offset-by-eight { padding-left: 480px; }
330 + .container .offset-by-nine { padding-left: 540px; }
331 + .container .offset-by-ten { padding-left: 600px; }
332 + .container .offset-by-eleven { padding-left: 660px; }
333 + .container .offset-by-twelve { padding-left: 720px; }
334 + .container .offset-by-thirteen { padding-left: 780px; }
335 + .container .offset-by-fourteen { padding-left: 840px; }
336 + .container .offset-by-fifteen { padding-left: 900px; }
337 +
338 +/*===================================================================================================
339 +11) Tablet (Portrait)
340 +===================================================================================================*/
341 + /* Note: Design for a width of 768px */
342 +
343 + @media only screen and (min-width: 768px) and (max-width: 959px) {
344 + .container { width: 768px; }
345 + .container .column,
346 + .container .columns { margin-left: 10px; margin-right: 10px; }
347 + .column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; }
348 + .column.omega, .columns.omega { margin-right: 0; margin-left: 10px; }
349 + .alpha.omega { margin-left: 0; margin-right: 0; }
350 +
351 + .container .one.column,
352 + .container .one.columns { width: 28px; }
353 + .container .two.columns { width: 76px; }
354 + .container .three.columns { width: 124px; }
355 + .container .four.columns { width: 172px; }
356 + .container .five.columns { width: 220px; }
357 + .container .six.columns { width: 268px; }
358 + .container .seven.columns { width: 316px; }
359 + .container .eight.columns { width: 364px; }
360 + .container .nine.columns { width: 412px; }
361 + .container .ten.columns { width: 460px; }
362 + .container .eleven.columns { width: 508px; }
363 + .container .twelve.columns { width: 556px; }
364 + .container .thirteen.columns { width: 604px; }
365 + .container .fourteen.columns { width: 652px; }
366 + .container .fifteen.columns { width: 700px; }
367 + .container .sixteen.columns { width: 748px; }
368 +
369 + .container .one-third.column { width: 236px; }
370 + .container .two-thirds.column { width: 492px; }
371 +
372 + /* Offsets */
373 + .container .offset-by-one { padding-left: 48px; }
374 + .container .offset-by-two { padding-left: 96px; }
375 + .container .offset-by-three { padding-left: 144px; }
376 + .container .offset-by-four { padding-left: 192px; }
377 + .container .offset-by-five { padding-left: 240px; }
378 + .container .offset-by-six { padding-left: 288px; }
379 + .container .offset-by-seven { padding-left: 336px; }
380 + .container .offset-by-eight { padding-left: 384px; }
381 + .container .offset-by-nine { padding-left: 432px; }
382 + .container .offset-by-ten { padding-left: 480px; }
383 + .container .offset-by-eleven { padding-left: 528px; }
384 + .container .offset-by-twelve { padding-left: 576px; }
385 + .container .offset-by-thirteen { padding-left: 624px; }
386 + .container .offset-by-fourteen { padding-left: 672px; }
387 + .container .offset-by-fifteen { padding-left: 720px; }
388 + }
389 +
390 +/*===================================================================================================
391 +12) Mobile (Portrait)
392 +===================================================================================================*/
393 + /* Note: Design for a width of 320px */
394 +
395 + @media only screen and (max-width: 767px) {
396 + .container { width: 300px; }
397 + .container .columns,
398 + .container .column { margin: 0; }
399 +
400 + .container .one.column,
401 + .container .one.columns,
402 + .container .two.columns,
403 + .container .three.columns,
404 + .container .four.columns,
405 + .container .five.columns,
406 + .container .six.columns,
407 + .container .seven.columns,
408 + .container .eight.columns,
409 + .container .nine.columns,
410 + .container .ten.columns,
411 + .container .eleven.columns,
412 + .container .twelve.columns,
413 + .container .thirteen.columns,
414 + .container .fourteen.columns,
415 + .container .fifteen.columns,
416 + .container .sixteen.columns,
417 + .container .one-third.column,
418 + .container .two-thirds.column { width: 300px; }
419 +
420 + /* Offsets */
421 + .container .offset-by-one,
422 + .container .offset-by-two,
423 + .container .offset-by-three,
424 + .container .offset-by-four,
425 + .container .offset-by-five,
426 + .container .offset-by-six,
427 + .container .offset-by-seven,
428 + .container .offset-by-eight,
429 + .container .offset-by-nine,
430 + .container .offset-by-ten,
431 + .container .offset-by-eleven,
432 + .container .offset-by-twelve,
433 + .container .offset-by-thirteen,
434 + .container .offset-by-fourteen,
435 + .container .offset-by-fifteen { padding-left: 0; }
436 +
437 + }
438 +
439 +/*===================================================================================================
440 +13) Mobile (Landscape)
441 +===================================================================================================*/
442 + /* Note: Design for a width of 480px */
443 +
444 + @media only screen and (min-width: 480px) and (max-width: 767px) {
445 + .container { width: 420px; }
446 + .container .columns,
447 + .container .column { margin: 0; }
448 +
449 + .container .one.column,
450 + .container .one.columns,
451 + .container .two.columns,
452 + .container .three.columns,
453 + .container .four.columns,
454 + .container .five.columns,
455 + .container .six.columns,
456 + .container .seven.columns,
457 + .container .eight.columns,
458 + .container .nine.columns,
459 + .container .ten.columns,
460 + .container .eleven.columns,
461 + .container .twelve.columns,
462 + .container .thirteen.columns,
463 + .container .fourteen.columns,
464 + .container .fifteen.columns,
465 + .container .sixteen.columns,
466 + .container .one-third.column,
467 + .container .two-thirds.column { width: 420px; }
468 + }
469 +
470 +/*===================================================================================================
471 +14) Clearing
472 +===================================================================================================*/
473 + /* Self clearing goodness */
474 + .container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; }
475 +
476 + /* Use clearfix class on parent to clear nested columns, or wrap each row of columns in a <div class="row"> */
477 + .clearfix:before,
478 + .clearfix:after,
479 + .row:before,
480 + .row:after {
481 + content: '\0020';
482 + display: block;
483 + overflow: hidden;
484 + visibility: hidden;
485 + width: 0;
486 + height: 0; }
487 + .row:after,
488 + .clearfix:after {
489 + clear: both; }
490 + .row,
491 + .clearfix {
492 + zoom: 1; }
493 +
494 + /* You can also use a <br class="clear" /> to clear columns */
495 + .clear {
496 + clear: both;
497 + display: block;
498 + overflow: hidden;
499 + visibility: hidden;
500 + width: 0;
501 + height: 0;
502 + }
503 +
504 +/*===================================================================================================
505 +15) Portfolio slider
506 +===================================================================================================*/
507 + .portfolioSlider {
508 + position:relative;
509 +
510 + /* Set width and height of slider here, in px, % or em */
511 + width: 600px;
512 + height: 300px;
513 +
514 + /* Used to prevent content "jumping" on page load - this property is removed when JavaScript is loaded and slider is instantiated */
515 + overflow: hidden;
516 + }
517 +
518 + /* Slides area */
519 + .portfolioSlider .portfolioWrapper {
520 + overflow:hidden;
521 + position:relative;
522 + width:100%;
523 + height:100%;
524 + }
525 +
526 + .portfolioSlider .portfolioSlide,
527 + .portfolioSlider .portfolioWrapper {
528 + /* Bakground behind slides */
529 +
530 + background: #000000;
531 + /*
532 + background: -moz-linear-gradient(top, #111111 0%, #242424 100%);
533 + background: -webkit-linear-gradient(top, #111111 0%,#242424 100%);
534 + background: -o-linear-gradient(top, #111111 0%,#242424 100%);
535 + background: -ms-linear-gradient(top, #111111 0%,#242424 100%);
536 + background: linear-gradient(top, #111111 0%,#242424 100%);
537 + */
538 + }
539 +
540 + /* Slides holder, grabbing container */
541 + .portfolioSlider .portfolioSlidesContainer {
542 + position: relative;
543 + left: 0;
544 + top: 0 !important;
545 + list-style:none !important;
546 + margin:0 !important;
547 + padding:0 !important;
548 + border: 0 !important;
549 + }
550 +
551 + /* Slide item */
552 + .portfolioSlider .portfolioSlide {
553 + padding: 0 !important;
554 + margin: 0 !important;
555 + border: 0 !important;
556 + list-style: none !important;
557 + position:relative;
558 + float:left;
559 + overflow:hidden;
560 + }
561 +
562 + /* Arrow navigation */
563 + .portfolioSlider .arrow {
564 + /*background:url(../img/controlsSprite.png) no-repeat 0 0;*/
565 + background-color: #C00;
566 + background-repeat: no-repeat;
567 + background-position: 0 0;
568 +
569 + /* Change arrow size here */
570 + width: 45px;
571 + height: 90px;
572 + top:50%;
573 + margin-top:-45px;
574 + cursor: pointer;
575 + display: block;
576 + position: absolute;
577 + z-index:25;
578 + }
579 +
580 + .portfolioSlider .arrow:hover {
581 +
582 + }
583 + .portfolioSlider .arrow.disabled {
584 +
585 + }
586 +
587 + /* Left arrow */
588 + .portfolioSlider .arrow.left {
589 + background-position: top left;
590 + left: 0;
591 + }
592 +
593 + /* Right arrow */
594 + .portfolioSlider .arrow.right {
595 + background-position: top right;
596 + right: 0;
597 + }
598 +
599 + /* Control navigation container (bullets or thumbs) */
600 + .portfolioSlider .portfolioControlNavOverflow {
601 + width:100%;
602 + overflow:hidden;
603 + position:absolute;
604 + margin-top:-20px;
605 + z-index:25;
606 + }
607 + /* This container is inside ".portfolioControlNavContainer"
608 + and is used for auto horizontal centering */
609 + .portfolioSlider .portfolioControlNavCenterer {
610 + float: left;
611 + position: relative;
612 + left: -50%;
613 + }
614 +
615 + /* Control navigation container*/
616 + .portfolioSlider .portfolioControlNavContainer {
617 + float: left;
618 + position: relative;
619 + left: 50%;
620 + }
621 +
622 + /* Scrollable thumbnails containers */
623 + .portfolioSlider .portfolioControlNavThumbsContainer {
624 + left:0;
625 + position:relative;
626 + }
627 +
628 + .portfolioSlider .thumbsAndArrowsContainer {
629 + overflow:hidden;
630 + width: 100%;
631 + position: relative;
632 + }
633 +
634 + .portfolioSlider .portfolioControlNavOverflow.portfolioThumbs {
635 + width: auto;
636 + position: relative;
637 + overflow: hidden;
638 + margin-top:4px;
639 + }
640 +
641 + .portfolioSlider .portfolioControlNavOverflow a{
642 + background:#0C0 none no-repeat scroll 0 0;
643 + width:20px;
644 + height:20px;
645 + float:left;
646 + cursor:pointer;
647 + position:relative;
648 + display:block;
649 + text-indent: -9999px;
650 + }
651 +
652 + /* Current control navigation item */
653 + .portfolioSlider .portfolioControlNavOverflow a.current {
654 + background-color: #C00;
655 + }
656 +
657 + /* Hover state navigation item */
658 + .portfolioSlider .portfolioControlNavOverflow a:hover {
659 + background-color: #00C;
660 + }
661 +
662 + /* Thumbnails */
663 + .portfolioSlider .portfolioControlNavOverflow a.portfolioThumb{
664 + /*background: none no-repeat 0 0;*/
665 + /*background-color: ;*/
666 + width:144px;
667 + height:60px;
668 + /* thumbnails spacing, use margin-right only */
669 + margin-right:4px;
670 + }
671 +
672 + .portfolioSlider .portfolioControlNavOverflow a.portfolioThumb.current {
673 + background-position: -3px -3px !important;
674 + border:3px solid #C00 !important;
675 + width:138px;
676 + height:54px;
677 + }
678 +
679 + .portfolioSlider .portfolioControlNavOverflow a.portfolioThumb:hover {
680 + background-position: -3px -3px;
681 + border:3px solid #00C;
682 + width:138px;
683 + height:54px;
684 + }
685 +
686 + .portfolioSlider .thumbsArrow {
687 + width: 38px;
688 + height: 68px;
689 + cursor: pointer;
690 + display: block;
691 + position: relative;
692 + z-index: 25;
693 + background: #C99;
694 + }
695 +
696 + .portfolioSlider .thumbsArrow.left {
697 + float: left;
698 + }
699 +
700 + .portfolioSlider .thumbsArrow.right {
701 + float: right;
702 + }
703 +
704 + .portfolioSlider .thumbsArrow:hover {
705 +
706 + }
707 +
708 + .portfolioSlider .thumbsArrow.disabled {
709 +
710 + }
711 +
712 + /* Captions container */
713 + .portfolioSlider .portfolioCaption {
714 + z-index:20;
715 + display:block;
716 + position:absolute;
717 + left:0;
718 + top:0;
719 + /*font: normal normal normal 1em/1.5em Georgia, serif;
720 + color:#FFF; */
721 + }
722 +
723 + /* Caption item */
724 + .portfolioSlider .portfolioCaptionItem {
725 + position:absolute;
726 + left:0;
727 + top:0;
728 + margin: 0;
729 + padding: 0;
730 + }
731 +
732 + /* Loading screen */
733 + .portfolioSlider .portfolioLoadingScreen {
734 + background:#FFF;
735 + width:100%;
736 + height:100%;
737 + position:absolute;
738 + z-index:99;
739 + }
740 +
741 + /* Loading screen text ("Loading...") */
742 + .portfolioSlider .portfolioLoadingScreen p {
743 + width:100%;
744 + position:absolute;
745 + margin:0 auto;
746 + top: 45%;
747 + text-align:center;
748 + }
749 +
750 + /* Single slide image preloader */
751 + .portfolioSlider .portfolioPreloader {
752 + position: absolute;
753 + width: 30px;
754 + height: 30px;
755 + left: 50%;
756 + top: 50%;
757 + margin-left: -12px;
758 + margin-top: -12px;
759 + z-index: 0;
760 + background-image: url(slider_assets/preloader.gif);
761 + }
762 +
763 + .portfolioSlider .grab-cursor{cursor:move;}
764 + .portfolioSlider .grab-cursor{cursor:url("slider_assets/grab.png") 8 8,-moz-grab;}
765 + .portfolioSlider .grab-cursor{*cursor:url(slider_assets/grab.cur);}
766 + .portfolioSlider .grab-cursor{cursor:move\0/;} /* ie8 hack */
767 +
768 + .portfolioSlider .grabbing-cursor{cursor:move;}
769 + .portfolioSlider .grabbing-cursor{cursor:url("slider_assets/grabbing.png") 8 8,-moz-grabbing;}
770 + .portfolioSlider .grabbing-cursor{*cursor:url(slider_assets/grabbing.cur);}
771 +
772 + /* Cursor used if mouse dragging is disabled */
773 + .portfolioSlider .auto-cursor{cursor:auto;}
774 +
775 + .portfolioSlider .portfolioHtmlContent {
776 + position: absolute;
777 + top: 0;
778 + left: 0;
779 + }
780 +
781 + .portfolioSlider .non-draggable {
782 + cursor: auto;
783 + }
784 +
785 + .portfolioSlider .fade-container .portfolioSlide{
786 + position: absolute;
787 + left: 0;
788 + top: 0;
789 + list-style-type: none;
790 + margin: 0;
791 + padding: 0;
792 + z-index: 10;
793 + }
794 +
795 + .portfolioSlider .portfolioImage {
796 + max-width:none;
797 + margin:0;
798 + padding: 0 !important;
799 + border: 0 !important;
800 + }
801 +
802 + /* Customization */
803 + .projectThumbnail {
804 + cursor: pointer;
805 + }
806 +
807 + .project img.thumbnailImage {
808 + max-width: 100%;
809 + height: auto;
810 + cursor: pointer;
811 + }
812 +
813 + .portfolioSlider {
814 + width: 100%;
815 + position: absolute;
816 + left: 0;
817 + top: 0;
818 + overflow: hidden;
819 + z-index: 10;
820 + }
821 +
822 + .portfolioSliderData {
823 + display: none;
824 + overflow: hidden;
825 + }
826 +
827 + .portfolioSlidesContainer {
828 + display: block;
829 + }
830 +
831 + .first-img-preloader {
832 + position: absolute;
833 + left: 0;
834 + top: 0;
835 + z-index: 12;
836 + background: #000;
837 + /*background: rgba(0,0,0,1.0);*/
838 + /*filter:inherit;*/
839 + }
840 +
841 + .preloader-graphics {
842 + position: relative;
843 + width: 30px;
844 + height: 30px;
845 + left: 50%;
846 + top: 50%;
847 + margin-left: -12px;
848 + margin-top: -12px;
849 + z-index: 0;
850 + background-image: url(slider_assets/preloader.gif);
851 + }
852 +
853 +/*===================================================================================================
854 +16) Site styles
855 +===================================================================================================*/
856 +h1 { font-size: 48px; line-height: 1.2; }
857 +h2 { font-size: 36px; line-height: 1.2; }
858 +h3 { font-size: 24px; line-height: 1.2; }
859 +h4 { font-size: 18px; line-height: 1.2; }
860 +h5 { font-size: 14px; line-height: 1.2; }
861 +h6 { font-size: 12px; line-height: 1.2; }
862 +
863 +.currentPage, button.currentPage:hover {
864 + color: #bbb;
865 + cursor: default;
866 +}
867 +
868 +button.currentPage:hover {
869 + cursor: auto;
870 +}
871 +
872 +#sitePreloader {
873 + position: absolute;
874 + top: 0;
875 + left: 0;
876 + width: 100%;
877 + height: 100%;
878 + background-color: #000;
879 + z-index: 2;
880 +}
881 +
882 +#preloaderImage {
883 + width: 30px;
884 + margin: 100px auto;
885 +}
886 +
887 +header {
888 + padding-top: 80px;
889 + border-top: 3px solid #000;
890 +}
891 +
892 +#logo, #logoDetailView {
893 + float: left;
894 + cursor: pointer;
895 +}
896 +
897 +#logo img, #logoDetailView img {
898 + margin-top: 28px;
899 +}
900 +
901 +#logo h1, #logoDetailView h1 {
902 + font-family: Georgia, Arial, sans-serif;
903 + font-weight: normal;
904 + font-style: normal;
905 + font-size: 36px;
906 + line-height: 1.5;
907 + letter-spacing: -0.05em;
908 + text-rendering: optimizeLegibility;
909 +}
910 +
911 +#logo h2, #logoDetailView h2 {
912 + font-family: Georgia, Arial, sans-serif;
913 + font-weight: normal;
914 + font-style: italic;
915 + font-size: 16px;
916 + line-height: 1.2;
917 + letter-spacing: -0.07em;
918 + text-rendering: optimizeLegibility;
919 + margin-top: -23px;
920 +}
921 +
922 +a, button {
923 + -webkit-transition: color 0.2s ease-out;
924 + -moz-transition: color 0.2s ease-out;
925 + -o-transition: color 0.2s ease-out;
926 + transition: color 0.2s ease-out;
927 +}
928 +
929 +a, a:visited {
930 + color: #333;
931 +}
932 +
933 +a:hover, a:active, a:focus, #heroNav a:hover, #heroNav a:visited:hover, #heroNav a:active, #heroNav a:focus, #formSubmit:hover, .contentModule a:hover, .contentModule a:visited:hover, .contentModule a:active, .contentModule a:focus { color: #777777; } {
934 + color: #888;
935 +}
936 +
937 +nav {
938 + list-style: none;
939 + float: right;
940 + padding-top: 45px;
941 + margin-bottom: -30px;
942 + padding-bottom: 20px;
943 +}
944 +
945 +nav ul li {
946 + display: inline;
947 + padding-left: 26px;
948 +}
949 +
950 +nav ul li:first-child {
951 + padding-left: 0px;
952 +}
953 +
954 +nav ul li a, nav ul li a:visited, nav ul li button, nav ul li span {
955 + font-family: Arial, sans-serif;
956 + font-weight: bold;
957 + font-style: normal;
958 + font-size: 12px;
959 + line-height: 1.5;
960 + letter-spacing: 0;
961 + text-rendering: auto;
962 + text-decoration: none;
963 +}
964 +
965 +nav ul li button, .projectNav button {
966 + background: none;
967 + border: none;
968 + text-shadow: none;
969 + padding: 0;
970 +}
971 +
972 +nav ul li button {
973 + margin-bottom: 0px;
974 +}
975 +
976 +nav ul li button:hover, .projectNav button:hover {
977 + background: none;
978 + border: none;
979 +}
980 +
981 +nav ul li button:hover, nav ul li button:active, nav ul li button:focus, nav ul li a:hover, nav ul li a:active, nav ul li a:focus {
982 + color: #888;
983 + outline: 0;
984 +}
985 +
986 +#overview {
987 + padding-bottom: 10px;
988 +}
989 +
990 +#overview h3 {
991 + font-family: Georgia, Arial, sans-serif;
992 + font-weight: normal;
993 + font-style: normal;
994 + font-size: 36px;
995 + line-height: 1.2;
996 + letter-spacing: -0.04em;
997 + text-rendering: auto;
998 + color: #333;
999 + margin-top: -7px;
1000 + margin-bottom: 22px;
1001 +}
1002 +
1003 +.project {
1004 + margin-bottom: 40px;
1005 + position: relative;
1006 + overflow: hidden;
1007 +}
1008 +
1009 +.projectThumbnail {
1010 + max-width: 100%;
1011 + height: 100%;
1012 +}
1013 +
1014 +.projectThumbnail img {
1015 + display: block;
1016 +}
1017 +
1018 +.projectThumbnailHover {
1019 + background-color: #000;
1020 + background-color: rgba(0, 0, 0, 0.8);
1021 + position: absolute;
1022 + width: 100%;
1023 + height: 100%;
1024 + display: none;
1025 + z-index: 10;
1026 +}
1027 +
1028 +.projectThumbnailHover h4 {
1029 + font-family: Georgia, Arial, sans-serif;
1030 + font-weight: normal;
1031 + font-style: normal;
1032 + font-size: 24px;
1033 + line-height: 1.2;
1034 + letter-spacing: -0.05em;
1035 + text-rendering: auto;
1036 + color: #fff;
1037 + position: absolute;
1038 + margin-top: 40px;
1039 + display: none;
1040 +}
1041 +
1042 +.projectThumbnailHover h5 {
1043 + font-family: Arial, sans-serif;
1044 + font-weight: bold;
1045 + font-style: normal;
1046 + font-size: 12px;
1047 + line-height: 1.2;
1048 + letter-spacing: 0;
1049 + text-rendering: auto;
1050 + color: #fff;
1051 + position: absolute;
1052 + padding-top: 69px;
1053 + display: none;
1054 +}
1055 +
1056 +.projectInfo {
1057 + overflow: hidden;
1058 +}
1059 +
1060 +.projectInfo h4 {
1061 + font-family: Arial, sans-serif;
1062 + font-weight: bold;
1063 + font-style: normal;
1064 + font-size: 14px;
1065 + line-height: 1.2;
1066 + letter-spacing: -0.05em;
1067 + text-rendering: auto;
1068 + color: #444;
1069 + padding-top: 12px;
1070 + padding-bottom: 8px;
1071 + margin-bottom: 4px;
1072 + float: left;
1073 +}
1074 +
1075 +.projectNav {
1076 + font-family: Arial, sans-serif;
1077 + font-weight: bold;
1078 + font-style: normal;
1079 + font-size: 11px;
1080 + line-height: 1.2;
1081 + letter-spacing: 0;
1082 + text-rendering: auto;
1083 + color: #444;
1084 + border-top: 1px solid #ddd;
1085 + border-bottom: 1px solid #ddd;
1086 + height: 29px;
1087 + margin-bottom: 9px;
1088 + padding-top: 4px;
1089 + margin-top: 38px;
1090 +}
1091 +
1092 +.projectNavCounter {
1093 + font-family: Arial, sans-serif;
1094 + font-weight: bold;
1095 + font-style: normal;
1096 + font-size: 12px;
1097 + letter-spacing: 0;
1098 + text-rendering: auto;
1099 + color: #444;
1100 + font-size: 12px;
1101 + padding-top: 11px;
1102 + float: right;
1103 + text-align: right;
1104 +}
1105 +
1106 +.projectNavClose button, .projectNavButtons button, .projectNavEnlarge button {
1107 + font-family: Arial, sans-serif;
1108 + font-weight: bold;
1109 + font-style: normal;
1110 + font-size: 11px;
1111 + line-height: 1.2;
1112 + text-rendering: auto;
1113 + color: #444;
1114 + cursor: pointer;
1115 + text-transform: uppercase;
1116 + letter-spacing: 0.07em;
1117 + text-decoration: none;
1118 +}
1119 +
1120 +.projectNav button:hover, .projectNav button:active, .projectNav button:focus {
1121 + color: #777;
1122 + outline: 0;
1123 +}
1124 +
1125 +.projectNavInactive, button.projectNavInactive, button.projectNavInactive:hover, button.projectNavInactive:active {
1126 + color: #ccc;
1127 + text-decoration: none;
1128 + cursor: auto;
1129 +}
1130 +
1131 +.projectNavEnlarge {
1132 + float: left;
1133 + /*padding-left: 1px;*/
1134 + padding-top: 5px;
1135 + padding-top: 7px\9; /* IE adjustment */
1136 + width: auto;
1137 +}
1138 +
1139 +.projectNavClose {
1140 + float: right;
1141 + padding-top: 5px;
1142 + padding-top: 7px\9; /* IE adjustment */
1143 +}
1144 +
1145 +.projectNavButtons {
1146 + padding-top: 5px;
1147 + padding-top: 7px\9; /* IE adjustment */
1148 + text-align: center;
1149 +}
1150 +
1151 +/* Tweak positioning slightly in Firefox */
1152 +@-moz-document url-prefix() {
1153 + .projectNavEnlarge, .projectNavClose, .projectNavButtons {
1154 + padding-top: 7px;
1155 + }
1156 +}
1157 +
1158 +.projectInfo, .linedList {
1159 + border-bottom: 3px solid #ddd;
1160 +}
1161 +
1162 +.projectInfo p:nth-of-type(1) {
1163 + margin-top: 9px;
1164 +}
1165 +
1166 +.projectInfo p:nth-last-child(2) {
1167 + padding-bottom: 10px;
1168 + border-bottom: 1px solid #ddd;
1169 +}
1170 +
1171 +#about p, #about blockquote {
1172 + margin-bottom: 24px;
1173 +}
1174 +
1175 +p strong, .projectInfo strong {
1176 + color: #444;
1177 +}
1178 +
1179 +p, .projectInfo p, .projectInfo li {
1180 + font-family: Arial, sans-serif;
1181 + font-weight: normal;
1182 + font-style: normal;
1183 + font-size: 14px;
1184 + line-height: 1.3;
1185 + letter-spacing: 0;
1186 + text-rendering: auto;
1187 +}
1188 +
1189 +.projectInfo ul {
1190 + margin-top: -8px;
1191 + margin-bottom: 7px;
1192 +}
1193 +
1194 +.projectInfo p + ul {
1195 + margin-top: -20px;
1196 +}
1197 +
1198 +.projectInfo li, .linedList li {
1199 + border-top: 1px solid #ddd;
1200 + margin-top: 6px;
1201 + margin-bottom: -1px;
1202 + padding-top: 6px;
1203 + padding-bottom: 0px;
1204 +}
1205 +
1206 +.projectInfo li:first-child {
1207 + border-top: none;
1208 +}
1209 +
1210 +.projectInfo li:last-child {
1211 + margin-bottom: -2px;
1212 +}
1213 +
1214 +.linedList {
1215 + padding-bottom: 7px;
1216 +}
1217 +
1218 +#about img, #detailView img {
1219 + max-width: 100%;
1220 + height: auto;
1221 +}
1222 +
1223 +#detailView img {
1224 + padding-bottom: 12px;
1225 +}
1226 +
1227 +#detailViewImages {
1228 + text-align: center;
1229 +}
1230 +
1231 +#detailViewBack {
1232 + font-size: 12px;
1233 + font-weight: bold;
1234 + margin-top: -18px;
1235 +}
1236 +
1237 +#detailViewBack a {
1238 + text-decoration: none;
1239 +}
1240 +
1241 +footer {
1242 + margin-top: 0px;
1243 + margin-bottom: 40px;
1244 +}
1245 +
1246 +footer p {
1247 + font-family: Arial, sans-serif;
1248 + font-weight: normal;
1249 + font-style: normal;
1250 + font-size: 12px;
1251 + line-height: 1.4;
1252 + letter-spacing: 0;
1253 + text-rendering: auto;
1254 + color: #333;
1255 +}
1256 +
1257 +.video {
1258 + margin-bottom: 30px;
1259 +}
1260 +
1261 +#faq p:first-child, #heroNav a, #heroNav a:visited, .contentModule a, .contentModule a:visited {
1262 + color: #333333;
1263 +}
1264 +
1265 +#formField {
1266 + border: 1px solid #555555;
1267 + margin: 0;
1268 + width: 200px;
1269 + height: 20px;
1270 + display: inline;
1271 + font-family: Arial, sans-serif;
1272 + font-weight: normal;
1273 + font-style: normal;
1274 + font-size: 14px;
1275 + line-height: 1.2;
1276 + letter-spacing: 0;
1277 + text-decoration: none;
1278 + text-transform: none;
1279 + text-rendering: auto;
1280 +}
1281 +
1282 +#formSubmit {
1283 + display: inline;
1284 + padding-bottom: 0;
1285 + margin-bottom: 0;
1286 + border: none;
1287 + background: none;
1288 + padding-left: 5px;
1289 + font-family: Arial, sans-serif;
1290 + font-weight: bold;
1291 + font-style: normal;
1292 + font-size: 12px;
1293 + line-height: 1.2;
1294 + letter-spacing: 0.09em;
1295 + text-decoration: none;
1296 + text-transform: uppercase;
1297 + text-rendering: auto;
1298 + text-shadow: none;
1299 + -webkit-transition: color 0.2s ease-out;
1300 + -moz-transition: color 0.2s ease-out;
1301 + -o-transition: color 0.2s ease-out;
1302 + transition: color 0.2s ease-out;
1303 +}
1304 +
1305 +#formField, #content #heroNav ul li, #footerLinks li, #heroNav, .contentModule {
1306 + border-color: #dddddd;
1307 +}
1308 +
1309 +#formSubmit, #formField {
1310 + color: #444444;
1311 +}
1312 +
1313 +#formField {
1314 + background: #fff;
1315 +}
1316 +
1317 +#formField:focus {
1318 + background: #fff;
1319 +}
1320 +
1321 +#content img {
1322 + max-width: 100%;
1323 + height: auto;
1324 +}
1325 +
1326 +#hero {
1327 + margin-top: -15px;
1328 + margin-bottom: -1px;
1329 +}
1330 +
1331 +#heroNav {
1332 + margin-top: 20px;
1333 + padding-top: 18px;
1334 + border-top: 1px solid;
1335 + border-bottom: 1px solid;
1336 + margin-bottom: 26px;
1337 +}
1338 +
1339 +#content #heroNav ul li {
1340 + display: inline;
1341 + padding-left: 12px;
1342 + margin-left: 0;
1343 + border-right: 1px solid;
1344 + padding-right: 15px;
1345 +}
1346 +
1347 +#content #heroNav ul li:last-child {
1348 + border-right: none;
1349 + padding-right: 0;
1350 + margin-right: 0;
1351 +}
1352 +
1353 +#heroNav ul li:first-child {
1354 + padding-left: 0;
1355 + margin-left: 0;
1356 +}
1357 +
1358 +#heroNav ul {
1359 + text-align: center;
1360 + margin-bottom: 18px;
1361 +}
1362 +
1363 +#heroNav a {
1364 + font-family: Arial, sans-serif;
1365 + font-weight: bold;
1366 + font-style: normal;
1367 + font-size: 16px;
1368 + line-height: 1.2;
1369 + letter-spacing: 0;
1370 + text-decoration: underline;
1371 + text-transform: none;
1372 + text-rendering: auto;
1373 +}
1374 +
1375 +#content ul li {
1376 + list-style-type: disc;
1377 + margin-left: 30px;
1378 + margin-bottom: 10px;
1379 +}
1380 +
1381 +.contentModule ul, .contentModule ol {
1382 + padding-top: 8px;
1383 +}
1384 +
1385 +#footerLinks li {
1386 + font-weight: bold;
1387 + font-size: 12px;
1388 + display: inline;
1389 + padding-left: 12px;
1390 + margin-left: 0;
1391 + border-right: 1px solid;
1392 + padding-right: 15px;
1393 +}
1394 +
1395 +#footerLinks li:first-child {
1396 + padding-left: 0;
1397 +}
1398 +
1399 +#footerLinks li:last-child {
1400 + border-right: none;
1401 +}
1402 +
1403 +.contentModule {
1404 + margin-bottom: 22px;
1405 + padding-bottom: 6px;
1406 + border-bottom: 1px solid;
1407 +}
1408 +
1409 +.contentModule p {
1410 + margin-top: 10px;
1411 + margin-bottom: 15px;
1412 + line-height: 1.4;
1413 +}
1414 +
1415 +.contentModule li:first-child, .contentModule p:first-child {
1416 + margin-top: -3px;
1417 +}
1418 +
1419 +.contentModule:last-child {
1420 + border-bottom: none;
1421 +}
1422 +
1423 +#faq p {
1424 + margin-top: -5px;
1425 +}
1426 +
1427 +#faq p:first-child {
1428 + font-weight: bold;
1429 + margin-top: 0px;
1430 + line-height: 1.2;
1431 +}
1432 +
1433 +code {
1434 + font-family: "Courier New", Courier, monospace;
1435 + font-size: 12px;
1436 + background: #fff;
1437 + color: #000;
1438 + text-shadow: none;
1439 + padding-top: 5px;
1440 + padding-bottom: 5px;
1441 +}
1442 +
1443 +.thumbnailMask {
1444 + /*background-image: url("../images/masks/rounded.png");*/
1445 + /*
1446 + Disable pointer events to allow swipe navigation - needed to use a svg instead of a div since no versions of IE support pointer events on divs
1447 + */
1448 + pointer-events: none;
1449 + width: 460px;
1450 + height: 284px;
1451 + position: absolute;
1452 + z-index: 24;
1453 +}
1454 +
1455 +/*===================================================================================================
1456 +17) Media queries
1457 +===================================================================================================*/
1458 + /* Smaller than standard 960 (devices and browsers) */
1459 + @media only screen and (max-width: 959px) {
1460 +
1461 + nav ul li a, nav ul li button, nav ul li span, #detailViewBack {
1462 + font-size: 14px;
1463 + }
1464 +
1465 + nav {
1466 + padding-top: 45px;
1467 + }
1468 +
1469 + .thumbnailMask {
1470 + background-size: 364px 224px;
1471 + }
1472 +
1473 + }
1474 +
1475 + /* Tablet portrait size to standard 960 (devices and browsers) */
1476 + @media only screen and (min-width: 768px) and (max-width: 959px) {
1477 +
1478 + .projectThumbnailHover h4 {
1479 + font-size: 18px;
1480 + }
1481 +
1482 + .projectThumbnailHover h5 {
1483 + font-size: 11px;
1484 + padding-top: 63px;
1485 + }
1486 +
1487 + #heroNav a {
1488 + font-size: 14px;
1489 + }
1490 +
1491 + #footerLinks li {
1492 + font-size: 13px;
1493 + }
1494 +
1495 + }
1496 +
1497 + /* All mobile sizes (devices and browser) */
1498 + @media only screen and (max-width: 767px) {
1499 +
1500 + #logo h1, #logoDetailView h1 {
1501 + font-size: 30px;
1502 + line-height: 1.1;
1503 + }
1504 +
1505 + #logo h2, #logoDetailView h2 {
1506 + margin-top: -12px;
1507 + }
1508 +
1509 + header {
1510 + padding-top: 40px;
1511 + }
1512 +
1513 + nav {
1514 + float: left;
1515 + clear: both;
1516 + width: 100%;
1517 + border-top: 1px solid #ddd;
1518 + padding-top: 10px;
1519 + padding-bottom: 0px;
1520 + margin-bottom: -10px;
1521 + }
1522 +
1523 + #overview {
1524 + padding-bottom: 0px;
1525 + }
1526 +
1527 + .project {
1528 + margin-bottom: 30px;
1529 + }
1530 +
1531 + footer p {
1532 + font-size: 14px;
1533 + }
1534 +
1535 + #content #heroNav ul li {
1536 + display: block;
1537 + padding-left: 0;
1538 + margin-left: 0;
1539 + border-right: none;
1540 + line-height: 2.0;
1541 + }
1542 +
1543 + #heroNav ul {
1544 + text-align: left;
1545 + }
1546 +
1547 + #footerLinks li {
1548 + display: block;
1549 + padding-left: 0;
1550 + margin-left: 0;
1551 + border-right: none;
1552 + padding-bottom: 8px;
1553 + }
1554 +
1555 + #footerLinks ul {
1556 + text-align: left;
1557 + }
1558 +
1559 + /* Add back border to last child of first column */
1560 + .eight:nth-child(4n) .contentModule:last-child, .eight:nth-of-type(1) .contentModule:last-child {
1561 + border-bottom: 1px solid #dddddd;
1562 +
1563 + }
1564 +
1565 + .thumbnailMask {
1566 + background-size: 420px 259px;
1567 + }
1568 +
1569 + }
1570 +
1571 + /* Mobile landscape size to tablet portrait (devices and browsers) */
1572 + @media only screen and (min-width: 480px) and (max-width: 767px) {
1573 +
1574 + }
1575 +
1576 + /* Mobile portrait size to mobile landscape size (devices and browsers) */
1577 + @media only screen and (max-width: 479px) {
1578 +
1579 + #logo h1, #logoDetailView h1 {
1580 + font-size: 30px;
1581 + }
1582 +
1583 + #logo h2, #logoDetailView h2 {
1584 + font-size: 14px;
1585 + margin-top: -10px;
1586 + }
1587 +
1588 + #overview h3 {
1589 + font-size: 24px;
1590 + }
1591 +
1592 + .projectThumbnailHover h4 {
1593 + font-size: 14px;
1594 + }
1595 +
1596 + .projectThumbnailHover h5 {
1597 + font-size: 11px;
1598 + padding-top: 58px;
1599 + }
1600 +
1601 + .thumbnailMask {
1602 + background-size: 300px 185px;z
1603 + }
1604 +
1605 + }
1606 +
1607 +/*===================================================================================================
1608 +18) Print
1609 +===================================================================================================*/
1610 +@media print {
1611 + * { background: transparent !important; color: black !important; box-shadow:none !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
1612 + a, a:visited { text-decoration: underline; }
1613 + a[href]:after { content: " (" attr(href) ")"; }
1614 + abbr[title]:after { content: " (" attr(title) ")"; }
1615 + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
1616 + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
1617 + thead { display: table-header-group; } /* h5bp.com/t */
1618 + tr, img { page-break-inside: avoid; }
1619 + img { max-width: 100% !important; }
1620 + @page { margin: 0.5cm; }
1621 + p, h2, h3 { orphans: 3; widows: 3; }
1622 + h2, h3 { page-break-after: avoid; }
1623 +}
1624 +
1625 +.board_list table {
1626 + width:100%;
1627 + margin:15px 0;
1628 + border:0;
1629 +}
1630 +.board_list th {
1631 + font-weight:bold;
1632 + background-color:#d8f1fe;
1633 + color:#20a0fe
1634 +}
1635 +.board_list,.board_list th,.board_list td {
1636 + font-size:0.95em;
1637 + text-align:center;
1638 + padding:4px;
1639 + border-collapse:collapse;
1640 +}
1641 +.board_list th {
1642 + border: 1px solid #d8f1fe;
1643 + border-width:1px
1644 +}
1645 +.board_list td {
1646 + border: 1px solid #d8f1fe;
1647 + border-width:1px
1648 +}
1649 +.board_list tr {
1650 + border: 1px solid #ffffff;
1651 +}
1652 +.board_list tr:nth-child(odd){
1653 + background-color:#f7f7f7;
1654 +}
1655 +.board_list tr:nth-child(even){
1656 + background-color:#ffffff;
1657 +}
1 +var express = require('express');
2 +var BoardContents = require('../models/boardsSchema'); //db를 사용하기 위한 변수
3 +var fs = require('fs');
4 +var router = express.Router();
5 +
6 +router.get('/', function(req,res){
7 + // 처음 index로 접속 했을시 나오는 부분
8 + // db에서 게시글 리스트 가져와서 출력
9 + // pagination 추가 -> 11/17
10 + // page는 1-5까지 보여줌 -> db에서 총 갯수 잡아와서 10으로 나눠서 올림해야함
11 + // 한페이지에 10개의 게시글: limit: 10, skip: (page-1)*10 이면 될 듯
12 + // page number는 param으로 받아오기 가장 처음엔 param 없으니까 그땐 자동 1로 설정
13 +
14 + var page = req.param('page');
15 + if(page == null) {page = 1;}
16 +
17 + var skipSize = (page-1)*10;
18 + var limitSize = 10;
19 + var pageNum = 1;
20 +
21 +
22 + BoardContents.count({},function(err, totalCount){
23 + // db에서 날짜 순으로 데이터들을 가져옴
24 + if(err) throw err;
25 +
26 + pageNum = Math.ceil(totalCount/limitSize);
27 + BoardContents.find({}).sort({average:-1}).skip(skipSize).limit(limitSize).exec(function(err, pageContents) {
28 + if(err) throw err;
29 + res.render('board', {title: "Board", page : page, contents: pageContents, pagination: pageNum, searchWord: ''});
30 + });
31 + });
32 +});
33 +
34 +router.get('/search', function(req, res){
35 + // 글 검색하는 부분
36 + var search_word = req.param('searchWord');
37 + var search_company = req.param('company');
38 + var search_category = req.param('category');
39 + var searchCondition = {$regex:''};
40 + var searchCompany = {$regex:''};
41 + var searchCategory = {$regex:''};
42 +
43 + if(search_word!='')
44 + searchCondition = {$regex:search_word};
45 + if(search_company!='all')
46 + searchCompany = {$regex:search_company};
47 + if(search_category!='all')
48 + searchCategory = {$regex:search_category};
49 +
50 + var page = req.param('page');
51 + if(page == null) {page = 1;}
52 + var skipSize = (page-1)*10;
53 + var limitSize = 10;
54 + var pageNum = 1;
55 +
56 +
57 + BoardContents.count({$and:[{name:searchCondition},{company:searchCompany},{category:searchCategory}]},function(err, searchCount){
58 + if(err) throw err;
59 + pageNum = Math.ceil(searchCount/limitSize);
60 +
61 + BoardContents.find({$and:[{name:searchCondition},{company:searchCompany},{category:searchCategory}]}).sort({average:-1}).skip(skipSize).limit(limitSize).exec(function(err, searchContents){
62 + if(err) throw err;
63 +
64 + res.render('board', {title: "Board", page : page,contents: searchContents, pagination: pageNum, searchWord: search_word});
65 + });
66 + });
67 +});
68 +
69 +
70 +router.post('/', function(req, res){
71 + //field name은 form의 input file의 name과 같아야함
72 + // 글 작성하고 submit하게 되면 저장이 되는 부분
73 + // 글 수정하고 submit하면 수정된 결과가 저장되는 부분
74 + var mode = req.param('mode');
75 +
76 + var addNewName = req.body.addContentName;
77 + var addNewCompany = req.body.addContentCompany;
78 + var addNewCategory = req.body.addContentCategory;
79 + var addNewPrice = req.body.addContentPrice;
80 +
81 + if(mode == 'add') {
82 + addBoard(addNewName, addNewCompany, addNewCategory, addNewPrice);
83 + res.redirect('/boards');
84 + }
85 +});
86 +
87 +router.post('/reply', function(req, res){
88 + // 댓글 다는 부분
89 + var reply_grade = req.body.replyGrade;
90 + var reply_comment= req.body.replyComment;
91 + var reply_id = req.body.replyId;
92 +
93 + addComment(reply_id, reply_grade, reply_comment,function(){
94 + res.redirect('/boards/view?id='+reply_id);
95 + });
96 +
97 +});
98 +
99 +
100 +router.get('/view', function(req, res){
101 + // 글 보는 부분. 글 내용을 출력하고 조회수를 늘려줘야함
102 + // 댓글 페이지 추가 해줌, 5개씩 출력함
103 +
104 + var contentId = req.param('id');
105 +
106 + BoardContents.findOne({_id:contentId}, function(err, rawContent){
107 + if(err) throw err;
108 +
109 + rawContent.save(function(err){
110 + if(err) throw err;
111 +
112 + res.render('boardDetail',{title: "Board", content:rawContent});
113 + });
114 + })
115 +});
116 +
117 +
118 +
119 +module.exports = router;
120 +
121 +function addComment(id, grade, comment,callback) {
122 + BoardContents.findOne({_id: id}, function(err, rawContent){
123 + if(err) throw err;
124 + var sum = 0;
125 + rawContent.comments.unshift({grade:grade, memo: comment});
126 + for(var j = 0;j<rawContent.comments.length;j++)
127 + {
128 + sum += rawContent.comments[j].grade;
129 + }
130 + rawContent.average = sum/rawContent.comments.length;
131 + rawContent.save(function(err){
132 + if(err) throw err;
133 + else callback();
134 + });
135 + });
136 +}
137 +function addBoard(name, company, category, price){
138 +
139 + var newBoardContents = new BoardContents;
140 + newBoardContents.name = name;
141 + newBoardContents.company = company;
142 + newBoardContents.category = category;
143 + newBoardContents.price = price;
144 + newBoardContents.average = 0;
145 +
146 + newBoardContents.save(function (err) {
147 + if (err) throw err;
148 + BoardContents.findOne({_id: newBoardContents._id}, {_id: 1}, function (err, newBoardId) {
149 + if (err) throw err;
150 + })
151 + });
152 + }
1 +var express = require('express');
2 +var router = express.Router();
3 +
4 +/* GET home page. */
5 +router.get('/', function(req, res, next) {
6 + res.render('index', { title: 'Express' });
7 +});
8 +
9 +module.exports = router;
No preview for this file type
1 +<!DOCTYPE html>
2 +<html>
3 +<head>
4 + <title><%= title %></title>
5 + <link rel='stylesheet' href='/stylesheets/style.css' />
6 + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
7 +
8 + <script>
9 + $(function(){ // pagination 현재 페이지 활성화 시킴
10 + var page = location.href.split("page=")[1]; // url에 page 넘버로 구분
11 + var index = page-1; // 0부터 시작이므로 1 빼줌
12 +
13 + if(page == null) { // 메인화면에서는 page 쿼리가 없으므로 빈값일 때
14 + $(".pagination a:eq(0)").attr('class', 'current-page');
15 + }
16 +
17 + $(".pagination a:eq(" + index + ")").attr('class', 'current-page');
18 + });
19 +
20 + function searchContent() {
21 + if($('#searchWord').val == ''){
22 + alert("검색어를 입력해주세요!!!");
23 + } else {
24 + $('#searchAction').submit();
25 + }
26 + }
27 + function submitContents() {
28 + var name = $('#addContentName').val();
29 + var company = $('#addContentCompany').val();
30 + var category = $('#addContentCategory').val();
31 + var price = $('#addContentPrice').val();
32 +
33 + // 새 글 등록 시
34 + if(name == '' || company == '' || category == '' || price == '') {
35 + alert("이름, 회사, 카테고리, 가격 모두 있어야합니다.");
36 + return;
37 + } else {
38 + $('#writeAction').submit();
39 + }
40 + }
41 + </script>
42 +</head>
43 +<body>
44 +<div class="main">
45 + <a href="/boards"><h2>게시판</h2></a>
46 + <table class="board_list">
47 + <tr>
48 + <th>Rank</th>
49 + <th>Name</th>
50 + <th>Company</th>
51 + <th>Category</th>
52 + <th>Price</th>
53 + </tr>
54 + <%if(contents.length>0){%>
55 + <%var i = 0;%>
56 + <%contents.forEach(function(item){%>
57 + <%i++;%>
58 + <tr>
59 + <td class="number"><%=(page-1)*10+i%></td>
60 + <td class="name"><a href="/boards/view?id=<%=item._id%>"><%=item.name%> [<%=item.comments.length%>]&nbsp;&nbsp;</a></td>
61 + <td class="company"><%=item.company%></td>
62 + <td class="category"><%=item.category%></td>
63 + <td class="average"><%=item.average%></td>
64 + </tr>
65 + <%})%>
66 + <%} else {%>
67 + <tr>
68 + <td colspan="5">게시물이 없습니다.</td>
69 + </tr>
70 + <%}%>
71 + </table>
72 +
73 + <div class="pagination">
74 + <%
75 + if(searchWord != '') {
76 + for(var i=1; i<=pagination; i++){
77 + %>
78 + <a href="/boards/search?searchWord=<%=searchWord%>&page=<%=i%>" class="next-page"><%=i%></a>
79 + <%
80 + }
81 + } else {
82 + for(var i=1; i<=pagination; i++){
83 + %>
84 + <a href="/boards?page=<%=i%>" class="next-page"><%=i%></a>
85 + <%}}%>
86 + </div>
87 +
88 + <div class="btn_group">
89 + <div class="search">
90 + <form action="/boards/search" method="get" id="searchAction" name="searchAction">
91 + <input type="text" class="search_word" id="searchWord" name="searchWord">
92 + <input type="radio" name="company" value="CU">CU</input>
93 + <input type="radio" name="company" value="GS25">GS25</input>
94 + <input type="radio" name="company" value="SevenEleven">SevenEleven</input>
95 + <input type="radio" name="company" value="all" style="visibility:hidden" checked="true"></input>
96 + <br>
97 + <input type="radio" name="category" value="주먹밥">주먹밥</input>
98 + <input type="radio" name="category" value="샌드위치">샌드위치</input>
99 + <input type="radio" name="category" value="도시락">도시락</input>
100 + <input type="radio" name="category" value="all" style="visibility:hidden" checked="true"></input>
101 + <a href="#" onclick="searchContent();"><div class="search_btn">검색</div></a>
102 + </form>
103 + </div>
104 + </div>
105 + <!-- new content write form-->
106 + <div class="write_form">
107 + <form id="writeAction" action="/boards?mode=add" method="post">
108 + <input type="text" class="inputName" id="addContentName" name="addContentName" placeholder="name">
109 + <input type="text" class="inputCompany" id="addContentCompany" name="addContentCompany" placeholder="company">
110 + <input type="text" class="inputCategory" id="addContentCategory" name="addContentCategory" placeholder="category">
111 + <input type="text" class="inputPrice" id="addContentPrice" name="addContentPrice" placeholder="price"></textarea>
112 +
113 + <div id = "new" class="addBtngroup">
114 + <a onclick="submitContents();"><div>SUBMIT</div></a>
115 + <a onclick="cancelWriteForm('cancel');"><div>CANCEL</div></a>
116 + </div>
117 + </form>
118 + </div>
119 + <!-- write form end-->
120 +
121 +</div>
122 +</body>
123 +</html>
1 +<!DOCTYPE html>
2 +<html>
3 +<head>
4 + <title><%=title%></title>
5 + <link rel='stylesheet' href='/stylesheets/style.css' />
6 +<body>
7 +<div class="main">
8 + <a href="/boards"><h2>게시판</h2></a>
9 + <div class="content_box">
10 + <!-- content box-->
11 + <div class="content_detail">
12 +
13 + <div class="content-pic"><img src='../images/<%=content.name%>.jpg' width="340" height="340" onError="this.src='../images/noImage.jpg';"></div>
14 + <div class="content-title"><%=content.name%></div>
15 + <div class="content-info">
16 + <%=content.company%> / <%=content.category%>
17 + </div>
18 + <div class="content-text">
19 + <%=content.price%>
20 + </div>
21 + <div class="addBtngroup" style="margin-left:450px;">
22 + <a href="/boards">확인</a>
23 + </div>
24 + </div>
25 + <!-- content box end -->
26 +
27 + <!-- 혁신의 끝을 달리는 옆에서 달아주는 댓글 창-->
28 + <div class="reply">
29 + <div class="reply_form">
30 + <form id="replyAction" action="/boards/reply" method="post">
31 + <div class="reply_grade">
32 + <SELECT size=1 class="replyGrade" id="replyGrade" name="replyGrade">
33 + <OPTION VALUE=1>1</OPTION>
34 + <OPTION VALUE=2>2</OPTION>
35 + <OPTION VALUE=3>3</OPTION>
36 + <OPTION VALUE=4>4</OPTION>
37 + <OPTION VALUE=5>5</OPTION>
38 + </SELECT></div>
39 + <div class="reply_comment">
40 + <textarea class="replyComment" id="replyComment" name="replyComment" rows="3" cols="30"></textarea>
41 + </div>
42 + <input type="hidden" name="replyId" id="replyId" value="<%=content._id%>">
43 + <button type="submit">댓글 작성</button>
44 + </form>
45 + </div>
46 + <div class="reply_list">
47 + <%if(content.comments.length>0){%>
48 + <%var commentsList = content.comments;%>
49 + <%for(var i=0; i<commentsList.length; i++){%>
50 + %>
51 + <div class="reply_content">
52 + <div class="reply_info"><%=commentsList[i].grade%> / <%=commentsList[i].memo%></div>
53 + </div>
54 + <%}%>
55 + <%} else {%>
56 + <div class="reply_content">
57 + <div class="reply_info">댓글이 없습니다</div>
58 + </div>
59 + <%}%>
60 + </div>
61 +
62 + </div>
63 + <!-- end -->
64 +
65 +</div>
66 +</body>
67 +</html>
1 +<h1><%= message %></h1>
2 +<h2><%= error.status %></h2>
3 +<pre><%= error.stack %></pre>