Commit inicial

James Peret 7 years ago
commit
5767fa7455

BIN
.DS_Store


+ 3 - 0
.bowerrc

@@ -0,0 +1,3 @@
1
+{
2
+  "directory": "bower_components"
3
+}

+ 21 - 0
.editorconfig

@@ -0,0 +1,21 @@
1
+# EditorConfig helps developers define and maintain consistent
2
+# coding styles between different editors and IDEs
3
+# editorconfig.org
4
+
5
+root = true
6
+
7
+
8
+[*]
9
+
10
+# Change these settings to your own preference
11
+indent_style = space
12
+indent_size = 2
13
+
14
+# We recommend you to keep these unchanged
15
+end_of_line = lf
16
+charset = utf-8
17
+trim_trailing_whitespace = true
18
+insert_final_newline = true
19
+
20
+[*.md]
21
+trim_trailing_whitespace = false

+ 1 - 0
.gitattributes

@@ -0,0 +1 @@
1
+* text=auto

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
1
+/node_modules
2
+/dist
3
+/.tmp
4
+/.sass-cache
5
+/bower_components

+ 6 - 0
.jscsrc

@@ -0,0 +1,6 @@
1
+{
2
+  "requireCamelCaseOrUpperCaseIdentifiers": true,
3
+  "requireCapitalizedConstructors": true,
4
+  "requireParenthesesAroundIIFE": true,
5
+  "validateQuoteMarks": "'"
6
+}

+ 16 - 0
.jshintrc

@@ -0,0 +1,16 @@
1
+{
2
+  "bitwise": true,
3
+  "browser": true,
4
+  "curly": true,
5
+  "eqeqeq": true,
6
+  "esnext": true,
7
+  "latedef": true,
8
+  "noarg": true,
9
+  "node": true,
10
+  "strict": true,
11
+  "undef": true,
12
+  "unused": true,
13
+  "globals": {
14
+    "angular": false
15
+  }
16
+}

+ 11 - 0
.yo-rc.json

@@ -0,0 +1,11 @@
1
+{
2
+  "generator-karma": {
3
+    "base-path": "../",
4
+    "frameworks": "jasmine",
5
+    "browsers": "PhantomJS",
6
+    "app-files": "app/scripts/**/*.js",
7
+    "files-comments": "bower:js,endbower",
8
+    "bower-components-path": "bower_components",
9
+    "test-files": "test/mock/**/*.js,test/spec/**/*.js"
10
+  }
11
+}

+ 483 - 0
Gruntfile.js

@@ -0,0 +1,483 @@
1
+// Generated on 2016-07-10 using generator-angular 0.15.1
2
+'use strict';
3
+
4
+// # Globbing
5
+// for performance reasons we're only matching one level down:
6
+// 'test/spec/{,*/}*.js'
7
+// use this if you want to recursively match all subfolders:
8
+// 'test/spec/**/*.js'
9
+
10
+module.exports = function (grunt) {
11
+
12
+  // Time how long tasks take. Can help when optimizing build times
13
+  require('time-grunt')(grunt);
14
+
15
+  // Automatically load required Grunt tasks
16
+  require('jit-grunt')(grunt, {
17
+    useminPrepare: 'grunt-usemin',
18
+    ngtemplates: 'grunt-angular-templates',
19
+    cdnify: 'grunt-google-cdn'
20
+  });
21
+
22
+  // Configurable paths for the application
23
+  var appConfig = {
24
+    app: require('./bower.json').appPath || 'app',
25
+    dist: 'dist'
26
+  };
27
+
28
+  // Define the configuration for all the tasks
29
+  grunt.initConfig({
30
+
31
+    // Project settings
32
+    yeoman: appConfig,
33
+
34
+    // Watches files for changes and runs tasks based on the changed files
35
+    watch: {
36
+      bower: {
37
+        files: ['bower.json'],
38
+        tasks: ['wiredep']
39
+      },
40
+      js: {
41
+        files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
42
+        tasks: ['newer:jshint:all', 'newer:jscs:all'],
43
+        options: {
44
+          livereload: '<%= connect.options.livereload %>'
45
+        }
46
+      },
47
+      jsTest: {
48
+        files: ['test/spec/{,*/}*.js'],
49
+        tasks: ['newer:jshint:test', 'newer:jscs:test', 'karma']
50
+      },
51
+      styles: {
52
+        files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
53
+        tasks: ['newer:copy:styles', 'postcss']
54
+      },
55
+      gruntfile: {
56
+        files: ['Gruntfile.js']
57
+      },
58
+      livereload: {
59
+        options: {
60
+          livereload: '<%= connect.options.livereload %>'
61
+        },
62
+        files: [
63
+          '<%= yeoman.app %>/{,*/}*.html',
64
+          '.tmp/styles/{,*/}*.css',
65
+          '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
66
+        ]
67
+      }
68
+    },
69
+
70
+    // The actual grunt server settings
71
+    connect: {
72
+      options: {
73
+        port: 9000,
74
+        // Change this to '0.0.0.0' to access the server from outside.
75
+        hostname: 'localhost',
76
+        livereload: 35729
77
+      },
78
+      livereload: {
79
+        options: {
80
+          open: true,
81
+          middleware: function (connect) {
82
+            return [
83
+              connect.static('.tmp'),
84
+              connect().use(
85
+                '/bower_components',
86
+                connect.static('./bower_components')
87
+              ),
88
+              connect().use(
89
+                '/app/styles',
90
+                connect.static('./app/styles')
91
+              ),
92
+              connect.static(appConfig.app)
93
+            ];
94
+          }
95
+        }
96
+      },
97
+      test: {
98
+        options: {
99
+          port: 9001,
100
+          middleware: function (connect) {
101
+            return [
102
+              connect.static('.tmp'),
103
+              connect.static('test'),
104
+              connect().use(
105
+                '/bower_components',
106
+                connect.static('./bower_components')
107
+              ),
108
+              connect.static(appConfig.app)
109
+            ];
110
+          }
111
+        }
112
+      },
113
+      dist: {
114
+        options: {
115
+          open: true,
116
+          base: '<%= yeoman.dist %>'
117
+        }
118
+      }
119
+    },
120
+
121
+    // Make sure there are no obvious mistakes
122
+    jshint: {
123
+      options: {
124
+        jshintrc: '.jshintrc',
125
+        reporter: require('jshint-stylish')
126
+      },
127
+      all: {
128
+        src: [
129
+          'Gruntfile.js',
130
+          '<%= yeoman.app %>/scripts/{,*/}*.js'
131
+        ]
132
+      },
133
+      test: {
134
+        options: {
135
+          jshintrc: 'test/.jshintrc'
136
+        },
137
+        src: ['test/spec/{,*/}*.js']
138
+      }
139
+    },
140
+
141
+    // Make sure code styles are up to par
142
+    jscs: {
143
+      options: {
144
+        config: '.jscsrc',
145
+        verbose: true
146
+      },
147
+      all: {
148
+        src: [
149
+          'Gruntfile.js',
150
+          '<%= yeoman.app %>/scripts/{,*/}*.js'
151
+        ]
152
+      },
153
+      test: {
154
+        src: ['test/spec/{,*/}*.js']
155
+      }
156
+    },
157
+
158
+    // Empties folders to start fresh
159
+    clean: {
160
+      dist: {
161
+        files: [{
162
+          dot: true,
163
+          src: [
164
+            '.tmp',
165
+            '<%= yeoman.dist %>/{,*/}*',
166
+            '!<%= yeoman.dist %>/.git{,*/}*'
167
+          ]
168
+        }]
169
+      },
170
+      server: '.tmp'
171
+    },
172
+
173
+    // Add vendor prefixed styles
174
+    postcss: {
175
+      options: {
176
+        processors: [
177
+          require('autoprefixer-core')({browsers: ['last 1 version']})
178
+        ]
179
+      },
180
+      server: {
181
+        options: {
182
+          map: true
183
+        },
184
+        files: [{
185
+          expand: true,
186
+          cwd: '.tmp/styles/',
187
+          src: '{,*/}*.css',
188
+          dest: '.tmp/styles/'
189
+        }]
190
+      },
191
+      dist: {
192
+        files: [{
193
+          expand: true,
194
+          cwd: '.tmp/styles/',
195
+          src: '{,*/}*.css',
196
+          dest: '.tmp/styles/'
197
+        }]
198
+      }
199
+    },
200
+
201
+    // Automatically inject Bower components into the app
202
+    wiredep: {
203
+      app: {
204
+        src: ['<%= yeoman.app %>/index.html'],
205
+        ignorePath:  /\.\.\//
206
+      },
207
+      test: {
208
+        devDependencies: true,
209
+        src: '<%= karma.unit.configFile %>',
210
+        ignorePath:  /\.\.\//,
211
+        fileTypes:{
212
+          js: {
213
+            block: /(([\s\t]*)\/{2}\s*?bower:\s*?(\S*))(\n|\r|.)*?(\/{2}\s*endbower)/gi,
214
+              detect: {
215
+                js: /'(.*\.js)'/gi
216
+              },
217
+              replace: {
218
+                js: '\'{{filePath}}\','
219
+              }
220
+            }
221
+          }
222
+      }
223
+    }, 
224
+
225
+    // Renames files for browser caching purposes
226
+    filerev: {
227
+      dist: {
228
+        src: [
229
+          '<%= yeoman.dist %>/scripts/{,*/}*.js',
230
+          '<%= yeoman.dist %>/styles/{,*/}*.css',
231
+          '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
232
+          '<%= yeoman.dist %>/styles/fonts/*'
233
+        ]
234
+      }
235
+    },
236
+
237
+    // Reads HTML for usemin blocks to enable smart builds that automatically
238
+    // concat, minify and revision files. Creates configurations in memory so
239
+    // additional tasks can operate on them
240
+    useminPrepare: {
241
+      html: '<%= yeoman.app %>/index.html',
242
+      options: {
243
+        dest: '<%= yeoman.dist %>',
244
+        flow: {
245
+          html: {
246
+            steps: {
247
+              js: ['concat', 'uglifyjs'],
248
+              css: ['cssmin']
249
+            },
250
+            post: {}
251
+          }
252
+        }
253
+      }
254
+    },
255
+
256
+    // Performs rewrites based on filerev and the useminPrepare configuration
257
+    usemin: {
258
+      html: ['<%= yeoman.dist %>/{,*/}*.html'],
259
+      css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
260
+      js: ['<%= yeoman.dist %>/scripts/{,*/}*.js'],
261
+      options: {
262
+        assetsDirs: [
263
+          '<%= yeoman.dist %>',
264
+          '<%= yeoman.dist %>/images',
265
+          '<%= yeoman.dist %>/styles'
266
+        ],
267
+        patterns: {
268
+          js: [[/(images\/[^''""]*\.(png|jpg|jpeg|gif|webp|svg))/g, 'Replacing references to images']]
269
+        }
270
+      }
271
+    },
272
+
273
+    // The following *-min tasks will produce minified files in the dist folder
274
+    // By default, your `index.html`'s <!-- Usemin block --> will take care of
275
+    // minification. These next options are pre-configured if you do not wish
276
+    // to use the Usemin blocks.
277
+    // cssmin: {
278
+    //   dist: {
279
+    //     files: {
280
+    //       '<%= yeoman.dist %>/styles/main.css': [
281
+    //         '.tmp/styles/{,*/}*.css'
282
+    //       ]
283
+    //     }
284
+    //   }
285
+    // },
286
+    // uglify: {
287
+    //   dist: {
288
+    //     files: {
289
+    //       '<%= yeoman.dist %>/scripts/scripts.js': [
290
+    //         '<%= yeoman.dist %>/scripts/scripts.js'
291
+    //       ]
292
+    //     }
293
+    //   }
294
+    // },
295
+    // concat: {
296
+    //   dist: {}
297
+    // },
298
+
299
+    imagemin: {
300
+      dist: {
301
+        files: [{
302
+          expand: true,
303
+          cwd: '<%= yeoman.app %>/images',
304
+          src: '{,*/}*.{png,jpg,jpeg,gif}',
305
+          dest: '<%= yeoman.dist %>/images'
306
+        }]
307
+      }
308
+    },
309
+
310
+    svgmin: {
311
+      dist: {
312
+        files: [{
313
+          expand: true,
314
+          cwd: '<%= yeoman.app %>/images',
315
+          src: '{,*/}*.svg',
316
+          dest: '<%= yeoman.dist %>/images'
317
+        }]
318
+      }
319
+    },
320
+
321
+    htmlmin: {
322
+      dist: {
323
+        options: {
324
+          collapseWhitespace: true,
325
+          conservativeCollapse: true,
326
+          collapseBooleanAttributes: true,
327
+          removeCommentsFromCDATA: true
328
+        },
329
+        files: [{
330
+          expand: true,
331
+          cwd: '<%= yeoman.dist %>',
332
+          src: ['*.html'],
333
+          dest: '<%= yeoman.dist %>'
334
+        }]
335
+      }
336
+    },
337
+
338
+    ngtemplates: {
339
+      dist: {
340
+        options: {
341
+          module: 'siteOficinaItapetiApp',
342
+          htmlmin: '<%= htmlmin.dist.options %>',
343
+          usemin: 'scripts/scripts.js'
344
+        },
345
+        cwd: '<%= yeoman.app %>',
346
+        src: 'views/{,*/}*.html',
347
+        dest: '.tmp/templateCache.js'
348
+      }
349
+    },
350
+
351
+    // ng-annotate tries to make the code safe for minification automatically
352
+    // by using the Angular long form for dependency injection.
353
+    ngAnnotate: {
354
+      dist: {
355
+        files: [{
356
+          expand: true,
357
+          cwd: '.tmp/concat/scripts',
358
+          src: '*.js',
359
+          dest: '.tmp/concat/scripts'
360
+        }]
361
+      }
362
+    },
363
+
364
+    // Replace Google CDN references
365
+    cdnify: {
366
+      dist: {
367
+        html: ['<%= yeoman.dist %>/*.html']
368
+      }
369
+    },
370
+
371
+    // Copies remaining files to places other tasks can use
372
+    copy: {
373
+      dist: {
374
+        files: [{
375
+          expand: true,
376
+          dot: true,
377
+          cwd: '<%= yeoman.app %>',
378
+          dest: '<%= yeoman.dist %>',
379
+          src: [
380
+            '*.{ico,png,txt}',
381
+            '*.html',
382
+            'images/{,*/}*.{webp}',
383
+            'styles/fonts/{,*/}*.*'
384
+          ]
385
+        }, {
386
+          expand: true,
387
+          cwd: '.tmp/images',
388
+          dest: '<%= yeoman.dist %>/images',
389
+          src: ['generated/*']
390
+        }, {
391
+          expand: true,
392
+          cwd: 'bower_components/bootstrap/dist',
393
+          src: 'fonts/*',
394
+          dest: '<%= yeoman.dist %>'
395
+        }]
396
+      },
397
+      styles: {
398
+        expand: true,
399
+        cwd: '<%= yeoman.app %>/styles',
400
+        dest: '.tmp/styles/',
401
+        src: '{,*/}*.css'
402
+      }
403
+    },
404
+
405
+    // Run some tasks in parallel to speed up the build process
406
+    concurrent: {
407
+      server: [
408
+        'copy:styles'
409
+      ],
410
+      test: [
411
+        'copy:styles'
412
+      ],
413
+      dist: [
414
+        'copy:styles',
415
+        'imagemin',
416
+        'svgmin'
417
+      ]
418
+    },
419
+
420
+    // Test settings
421
+    karma: {
422
+      unit: {
423
+        configFile: 'test/karma.conf.js',
424
+        singleRun: true
425
+      }
426
+    }
427
+  });
428
+
429
+
430
+  grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
431
+    if (target === 'dist') {
432
+      return grunt.task.run(['build', 'connect:dist:keepalive']);
433
+    }
434
+
435
+    grunt.task.run([
436
+      'clean:server',
437
+      'wiredep',
438
+      'concurrent:server',
439
+      'postcss:server',
440
+      'connect:livereload',
441
+      'watch'
442
+    ]);
443
+  });
444
+
445
+  grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) {
446
+    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
447
+    grunt.task.run(['serve:' + target]);
448
+  });
449
+
450
+  grunt.registerTask('test', [
451
+    'clean:server',
452
+    'wiredep',
453
+    'concurrent:test',
454
+    'postcss',
455
+    'connect:test',
456
+    'karma'
457
+  ]);
458
+
459
+  grunt.registerTask('build', [
460
+    'clean:dist',
461
+    'wiredep',
462
+    'useminPrepare',
463
+    'concurrent:dist',
464
+    'postcss',
465
+    'ngtemplates',
466
+    'concat',
467
+    'ngAnnotate',
468
+    'copy:dist',
469
+    'cdnify',
470
+    'cssmin',
471
+    'uglify',
472
+    'filerev',
473
+    'usemin',
474
+    'htmlmin'
475
+  ]);
476
+
477
+  grunt.registerTask('default', [
478
+    'newer:jshint',
479
+    'newer:jscs',
480
+    'test',
481
+    'build'
482
+  ]);
483
+};

+ 12 - 0
README.md

@@ -0,0 +1,12 @@
1
+# site-oficina-itapeti
2
+
3
+This project is generated with [yo angular generator](https://github.com/yeoman/generator-angular)
4
+version 0.15.1.
5
+
6
+## Build & development
7
+
8
+Run `grunt` for building and `grunt serve` for preview.
9
+
10
+## Testing
11
+
12
+Running `grunt test` will run the unit tests with karma.

BIN
app/.DS_Store


+ 152 - 0
app/404.html

@@ -0,0 +1,152 @@
1
+<!doctype html>
2
+<html lang="en">
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <title>Page Not Found :(</title>
6
+    <style>
7
+      ::-moz-selection {
8
+        background: #b3d4fc;
9
+        text-shadow: none;
10
+      }
11
+
12
+      ::selection {
13
+        background: #b3d4fc;
14
+        text-shadow: none;
15
+      }
16
+
17
+      html {
18
+        padding: 30px 10px;
19
+        font-size: 20px;
20
+        line-height: 1.4;
21
+        color: #737373;
22
+        background: #f0f0f0;
23
+        -webkit-text-size-adjust: 100%;
24
+        -ms-text-size-adjust: 100%;
25
+      }
26
+
27
+      html,
28
+      input {
29
+        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
30
+      }
31
+
32
+      body {
33
+        max-width: 500px;
34
+        padding: 30px 20px 50px;
35
+        border: 1px solid #b3b3b3;
36
+        border-radius: 4px;
37
+        margin: 0 auto;
38
+        box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
39
+        background: #fcfcfc;
40
+      }
41
+
42
+      h1 {
43
+        margin: 0 10px;
44
+        font-size: 50px;
45
+        text-align: center;
46
+      }
47
+
48
+      h1 span {
49
+        color: #bbb;
50
+      }
51
+
52
+      h3 {
53
+        margin: 1.5em 0 0.5em;
54
+      }
55
+
56
+      p {
57
+        margin: 1em 0;
58
+      }
59
+
60
+      ul {
61
+        padding: 0 0 0 40px;
62
+        margin: 1em 0;
63
+      }
64
+
65
+      .container {
66
+        max-width: 380px;
67
+        margin: 0 auto;
68
+      }
69
+
70
+      /* google search */
71
+
72
+      #goog-fixurl ul {
73
+        list-style: none;
74
+        padding: 0;
75
+        margin: 0;
76
+      }
77
+
78
+      #goog-fixurl form {
79
+        margin: 0;
80
+      }
81
+
82
+      #goog-wm-qt,
83
+      #goog-wm-sb {
84
+        border: 1px solid #bbb;
85
+        font-size: 16px;
86
+        line-height: normal;
87
+        vertical-align: top;
88
+        color: #444;
89
+        border-radius: 2px;
90
+      }
91
+
92
+      #goog-wm-qt {
93
+        width: 220px;
94
+        height: 20px;
95
+        padding: 5px;
96
+        margin: 5px 10px 0 0;
97
+        box-shadow: inset 0 1px 1px #ccc;
98
+      }
99
+
100
+      #goog-wm-sb {
101
+        display: inline-block;
102
+        height: 32px;
103
+        padding: 0 10px;
104
+        margin: 5px 0 0;
105
+        white-space: nowrap;
106
+        cursor: pointer;
107
+        background-color: #f5f5f5;
108
+        background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
109
+        background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
110
+        background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
111
+        background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
112
+        -webkit-appearance: none;
113
+        -moz-appearance: none;
114
+        appearance: none;
115
+      }
116
+
117
+      #goog-wm-sb:hover,
118
+      #goog-wm-sb:focus {
119
+        border-color: #aaa;
120
+        box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
121
+        background-color: #f8f8f8;
122
+      }
123
+
124
+      #goog-wm-qt:hover,
125
+      #goog-wm-qt:focus {
126
+        border-color: #105cb6;
127
+        outline: 0;
128
+        color: #222;
129
+      }
130
+
131
+      input::-moz-focus-inner {
132
+        padding: 0;
133
+        border: 0;
134
+      }
135
+    </style>
136
+  </head>
137
+  <body>
138
+    <div class="container">
139
+      <h1>Not found <span>:(</span></h1>
140
+      <p>Sorry, but the page you were trying to view does not exist.</p>
141
+      <p>It looks like this was the result of either:</p>
142
+      <ul>
143
+        <li>a mistyped address</li>
144
+        <li>an out-of-date link</li>
145
+      </ul>
146
+      <script>
147
+        var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
148
+      </script>
149
+      <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
150
+    </div>
151
+  </body>
152
+</html>

BIN
app/favicon.ico


BIN
app/images/.DS_Store


BIN
app/images/foto_01.jpg


BIN
app/images/foto_01b.jpg


BIN
app/images/foto_02.jpg


BIN
app/images/yeoman.png


+ 96 - 0
app/index.html

@@ -0,0 +1,96 @@
1
+<!doctype html>
2
+<html>
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <title></title>
6
+    <meta name="description" content="">
7
+    <meta name="viewport" content="width=device-width">
8
+    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
9
+    <!-- build:css(.) styles/vendor.css -->
10
+    <!-- bower:css -->
11
+    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
12
+    <!-- endbower -->
13
+    <!-- endbuild -->
14
+    <!-- build:css(.tmp) styles/main.css -->
15
+    <link rel="stylesheet" href="styles/main.css">
16
+    <!-- endbuild -->
17
+  </head>
18
+  <body ng-app="siteOficinaItapetiApp">
19
+    <!--[if lte IE 8]>
20
+      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
21
+    <![endif]-->
22
+
23
+    <!-- Add your site or application content here -->
24
+    <div class="header">
25
+      <div class="navbar navbar-default" role="navigation" style="margin-bottom: 0px;">
26
+        <div class="container">
27
+          <div class="navbar-header">
28
+
29
+            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#js-navbar-collapse">
30
+              <span class="sr-only">Toggle navigation</span>
31
+              <span class="icon-bar"></span>
32
+              <span class="icon-bar"></span>
33
+              <span class="icon-bar"></span>
34
+            </button>
35
+
36
+            <a class="navbar-brand" href="#/">Oficina Itapeti</a>
37
+          </div>
38
+
39
+          <div class="collapse navbar-collapse" id="js-navbar-collapse">
40
+
41
+            <ul class="nav navbar-nav">
42
+              <li class="active"><a href="#/">Home</a></li>
43
+              <li><a ng-href="#/sobre">Sobre</a></li>
44
+              <li><a ng-href="#/servicos">Serviços</a></li>
45
+              <li><a ng-href="https://www.instagram.com/oficina.itapeti/" target="_blank">Portfolio</a></li>
46
+              <li><a ng-href="#/contato">Contato</a></li>
47
+            </ul>
48
+          </div>
49
+        </div>
50
+      </div>
51
+    </div>
52
+
53
+    <div ng-view=""></div>
54
+
55
+    <div class="footer" ng-controller="FooterCtrl">
56
+      <div class="container">
57
+        <p>&copy; Oficina Itapeti {{date | date:'yyyy'}}</p>
58
+      </div>
59
+    </div>
60
+
61
+
62
+    <!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
63
+     <script>
64
+       !function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){
65
+       (A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g),
66
+       r=n.getElementsByTagName(g)[0],a.src=u,r.parentNode.insertBefore(a,r)
67
+       }(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
68
+
69
+       ga('create', 'UA-XXXXX-X');
70
+       ga('send', 'pageview');
71
+    </script>
72
+
73
+    <!-- build:js(.) scripts/vendor.js -->
74
+    <!-- bower:js -->
75
+    <script src="bower_components/jquery/dist/jquery.js"></script>
76
+    <script src="bower_components/angular/angular.js"></script>
77
+    <script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
78
+    <script src="bower_components/angular-animate/angular-animate.js"></script>
79
+    <script src="bower_components/angular-aria/angular-aria.js"></script>
80
+    <script src="bower_components/angular-cookies/angular-cookies.js"></script>
81
+    <script src="bower_components/angular-messages/angular-messages.js"></script>
82
+    <script src="bower_components/angular-resource/angular-resource.js"></script>
83
+    <script src="bower_components/angular-route/angular-route.js"></script>
84
+    <script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
85
+    <script src="bower_components/angular-touch/angular-touch.js"></script>
86
+    <!-- endbower -->
87
+    <!-- endbuild -->
88
+
89
+        <!-- build:js({.tmp,app}) scripts/scripts.js -->
90
+        <script src="scripts/app.js"></script>
91
+        <script src="scripts/controllers/main.js"></script>
92
+        <script src="scripts/controllers/footer.js"></script>
93
+        <script src="scripts/controllers/about.js"></script>
94
+        <!-- endbuild -->
95
+</body>
96
+</html>

+ 4 - 0
app/robots.txt

@@ -0,0 +1,4 @@
1
+# robotstxt.org
2
+
3
+User-agent: *
4
+Disallow:

+ 47 - 0
app/scripts/app.js

@@ -0,0 +1,47 @@
1
+'use strict';
2
+
3
+/**
4
+ * @ngdoc overview
5
+ * @name siteOficinaItapetiApp
6
+ * @description
7
+ * # siteOficinaItapetiApp
8
+ *
9
+ * Main module of the application.
10
+ */
11
+angular
12
+  .module('siteOficinaItapetiApp', [
13
+    'ngAnimate',
14
+    'ngAria',
15
+    'ngCookies',
16
+    'ngMessages',
17
+    'ngResource',
18
+    'ngRoute',
19
+    'ngSanitize',
20
+    'ngTouch'
21
+  ])
22
+  .config(function ($routeProvider) {
23
+    $routeProvider
24
+      .when('/', {
25
+        templateUrl: 'views/main.html',
26
+        controller: 'MainCtrl',
27
+        controllerAs: 'main'
28
+      })
29
+      .when('/sobre', {
30
+        templateUrl: 'views/sobre.html',
31
+        controller: 'AboutCtrl',
32
+        controllerAs: 'about'
33
+      })
34
+      .when('/servicos', {
35
+        templateUrl: 'views/servicos.html',
36
+        controller: 'AboutCtrl',
37
+        controllerAs: 'about'
38
+      })
39
+      .when('/contato', {
40
+        templateUrl: 'views/contato.html',
41
+        controller: 'AboutCtrl',
42
+        controllerAs: 'about'
43
+      })
44
+      .otherwise({
45
+        redirectTo: '/'
46
+      });
47
+  });

+ 17 - 0
app/scripts/controllers/about.js

@@ -0,0 +1,17 @@
1
+'use strict';
2
+
3
+/**
4
+ * @ngdoc function
5
+ * @name siteOficinaItapetiApp.controller:AboutCtrl
6
+ * @description
7
+ * # AboutCtrl
8
+ * Controller of the siteOficinaItapetiApp
9
+ */
10
+angular.module('siteOficinaItapetiApp')
11
+  .controller('AboutCtrl', function () {
12
+    this.awesomeThings = [
13
+      'HTML5 Boilerplate',
14
+      'AngularJS',
15
+      'Karma'
16
+    ];
17
+  });

+ 13 - 0
app/scripts/controllers/footer.js

@@ -0,0 +1,13 @@
1
+'use strict';
2
+
3
+/**
4
+ * @ngdoc function
5
+ * @name siteOficinaItapetiApp.controller:MainCtrl
6
+ * @description
7
+ * # MainCtrl
8
+ * Controller of the siteOficinaItapetiApp
9
+ */
10
+angular.module('siteOficinaItapetiApp')
11
+  .controller('FooterCtrl', ['$scope', function ($scope) {
12
+    $scope.date = new Date();
13
+  }]);

+ 17 - 0
app/scripts/controllers/main.js

@@ -0,0 +1,17 @@
1
+'use strict';
2
+
3
+/**
4
+ * @ngdoc function
5
+ * @name siteOficinaItapetiApp.controller:MainCtrl
6
+ * @description
7
+ * # MainCtrl
8
+ * Controller of the siteOficinaItapetiApp
9
+ */
10
+angular.module('siteOficinaItapetiApp')
11
+  .controller('MainCtrl', function () {
12
+    this.awesomeThings = [
13
+      'HTML5 Boilerplate',
14
+      'AngularJS',
15
+      'Karma'
16
+    ];
17
+  });

+ 100 - 0
app/styles/main.css

@@ -0,0 +1,100 @@
1
+.browsehappy {
2
+  margin: 0.2em 0;
3
+  background: #ccc;
4
+  color: #000;
5
+  padding: 0.2em 0;
6
+}
7
+
8
+body {
9
+  padding: 0;
10
+}
11
+
12
+/* Everything but the jumbotron gets side spacing for mobile first views */
13
+.header,
14
+.marketing,
15
+.footer {
16
+  padding-left: 15px;
17
+  padding-right: 15px;
18
+}
19
+
20
+/* Custom page header */
21
+.header {
22
+  margin-bottom: 0px;
23
+  position: fixed;
24
+  top: 0;
25
+  left: 0;
26
+  width: 100%;
27
+  border-radius: 0px;
28
+  z-index: 10;
29
+}
30
+/* Make the masthead heading the same height as the navigation */
31
+.header h3 {
32
+  margin-top: 0;
33
+  margin-bottom: 0;
34
+  line-height: 40px;
35
+  padding-bottom: 19px;
36
+}
37
+
38
+/* Custom page footer */
39
+.footer {
40
+  padding-top: 19px;
41
+  color: #777;
42
+  border-top: 1px solid #e5e5e5;
43
+}
44
+
45
+.container-narrow > hr {
46
+  margin: 30px 0;
47
+}
48
+
49
+/* Main marketing message and sign up button */
50
+.jumbotron {
51
+  text-align: center;
52
+  border-bottom: 1px solid #e5e5e5;
53
+}
54
+.jumbotron .btn {
55
+  font-size: 21px;
56
+  padding: 14px 24px;
57
+}
58
+
59
+/* Supporting marketing content */
60
+.marketing {
61
+  margin: 40px 0;
62
+}
63
+.marketing p + h4 {
64
+  margin-top: 28px;
65
+}
66
+
67
+.carousel-inner img {
68
+  width: 100%;
69
+}
70
+
71
+.carousel-control {
72
+  width: 5%;
73
+}
74
+
75
+/* Responsive: Portrait tablets and up */
76
+@media screen and (min-width: 768px) {
77
+  .container {
78
+    max-width: 730px;
79
+  }
80
+
81
+  .navbar {
82
+      border-radius: 0px;
83
+  }
84
+
85
+  /* Remove the padding we set earlier */
86
+  .header,
87
+  .marketing,
88
+  .footer {
89
+    padding-left: 0;
90
+    padding-right: 0;
91
+  }
92
+  /* Space out the masthead */
93
+  .header {
94
+    margin-bottom: 0px;
95
+  }
96
+  /* Remove the bottom border on the jumbotron for visual effect */
97
+  .jumbotron {
98
+    border-bottom: 0;
99
+  }
100
+}

BIN
app/views/.DS_Store


+ 8 - 0
app/views/contato.html

@@ -0,0 +1,8 @@
1
+<div class="container" style="margin-top: 70px;">
2
+  <div class="jumbotron">
3
+    <h1>Contato</h1>
4
+    <p class="lead">
5
+      Deixe uma mensagem ou envie um email para <a href="mailto:oficina.itapeti@gmail.com">oficina.itapeti@gmail.com</a>
6
+    </p>
7
+  </div>
8
+</div>

+ 28 - 0
app/views/main.html

@@ -0,0 +1,28 @@
1
+
2
+
3
+<div class="container-fluid" style="padding-left: 0px; padding-right: 0px; margin-top: 50px;">
4
+  <div style="position: absolute; width: 100%">
5
+    <div class="container">
6
+      <h1>Desenvolvimento de projetos</h1>
7
+      <p>Desenho tecnico de peças, produção e finalização.</p>
8
+    </div>
9
+  </div>
10
+  <img src="images/foto_01.jpg" alt="..." style="width: 100%;">
11
+</div>
12
+
13
+<div class="container">
14
+  <h1 class="page-header">Ultimos Trabalhos</h1>
15
+  <div class="row">
16
+    <div class="col-md-4">
17
+
18
+      <div class="thumbnail">
19
+        <img src="https://igcdn-photos-g-a.akamaihd.net/hphotos-ak-xtf1/t51.2885-15/s750x750/sh0.08/e35/13531879_1642116086107934_817408069_n.jpg?ig_cache_key=MTI4MzQ3OTYyMDQ5NDk1NzU5Mw%3D%3D.2" alt="...">
20
+        <div class="caption">
21
+          <h3>Quadcoptero</h3>
22
+          <p>...</p>
23
+          <p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#" class="btn btn-default" role="button">Button</a></p>
24
+        </div>
25
+      </div>
26
+    </div>
27
+  </div>
28
+</div>

+ 16 - 0
app/views/servicos.html

@@ -0,0 +1,16 @@
1
+<div class="container" style="margin-top: 70px;">
2
+  <div class="row">
3
+    <div class="col-md-6">
4
+      <h2>Corte Laser</h2>
5
+    </div>
6
+    <div class="col-md-6">
7
+      <h2>Impressão 3D</h2>
8
+    </div>
9
+    <div class="col-md-6">
10
+      <h2>Uzinagem</h2>
11
+    </div>
12
+    <div class="col-md-6">
13
+      <h2>Projeto</h2>
14
+    </div>
15
+  </div>
16
+</div>

+ 10 - 0
app/views/sobre.html

@@ -0,0 +1,10 @@
1
+<div class="container" style="margin-top: 70px;">
2
+  <div class="jumbotron">
3
+    <h1>Sobre</h1>
4
+    <p class="lead">
5
+      <img src="images/yeoman.png" alt="I'm Yeoman"><br>
6
+      Always a pleasure scaffolding your apps.
7
+    </p>
8
+    <p><a class="btn btn-lg btn-success" ng-href="#/">Splendid!<span class="glyphicon glyphicon-ok"></span></a></p>
9
+  </div>
10
+</div>

+ 30 - 0
bower.json

@@ -0,0 +1,30 @@
1
+{
2
+  "name": "site-oficina-itapeti",
3
+  "version": "0.0.0",
4
+  "dependencies": {
5
+    "angular": "^1.4.0",
6
+    "bootstrap": "^3.2.0",
7
+    "angular-animate": "^1.4.0",
8
+    "angular-aria": "^1.4.0",
9
+    "angular-cookies": "^1.4.0",
10
+    "angular-messages": "^1.4.0",
11
+    "angular-resource": "^1.4.0",
12
+    "angular-route": "^1.4.0",
13
+    "angular-sanitize": "^1.4.0",
14
+    "angular-touch": "^1.4.0"
15
+  },
16
+  "devDependencies": {
17
+    "angular-mocks": "^1.4.0"
18
+  },
19
+  "appPath": "app",
20
+  "moduleName": "siteOficinaItapetiApp",
21
+  "overrides": {
22
+    "bootstrap": {
23
+      "main": [
24
+        "less/bootstrap.less",
25
+        "dist/css/bootstrap.css",
26
+        "dist/js/bootstrap.js"
27
+      ]
28
+    }
29
+  }
30
+}

+ 43 - 0
package.json

@@ -0,0 +1,43 @@
1
+{
2
+  "name": "siteoficinaitapeti",
3
+  "private": true,
4
+  "devDependencies": {
5
+    "autoprefixer-core": "^5.2.1",
6
+    "grunt": "^0.4.5",
7
+    "grunt-angular-templates": "^0.5.7",
8
+    "grunt-concurrent": "^1.0.0",
9
+    "grunt-contrib-clean": "^0.6.0",
10
+    "grunt-contrib-concat": "^0.5.0",
11
+    "grunt-contrib-connect": "^0.9.0",
12
+    "grunt-contrib-copy": "^0.7.0",
13
+    "grunt-contrib-cssmin": "^0.12.0",
14
+    "grunt-contrib-htmlmin": "^0.4.0",
15
+    "grunt-contrib-imagemin": "^1.0.0",
16
+    "grunt-contrib-jshint": "^0.11.0",
17
+    "grunt-contrib-uglify": "^0.7.0",
18
+    "grunt-contrib-watch": "^0.6.1",
19
+    "grunt-filerev": "^2.1.2",
20
+    "grunt-google-cdn": "^0.4.3",
21
+    "grunt-jscs": "^1.8.0",
22
+    "grunt-newer": "^1.1.0",
23
+    "grunt-ng-annotate": "^0.9.2",
24
+    "grunt-postcss": "^0.5.5",
25
+    "grunt-svgmin": "^2.0.0",
26
+    "grunt-usemin": "^3.0.0",
27
+    "grunt-wiredep": "^2.0.0",
28
+    "jasmine-core": "^2.4.1",
29
+    "jit-grunt": "^0.9.1",
30
+    "jshint-stylish": "^1.0.0",
31
+    "karma": "^1.1.1",
32
+    "karma-jasmine": "^1.0.2",
33
+    "karma-phantomjs-launcher": "^1.0.1",
34
+    "phantomjs-prebuilt": "^2.1.7",
35
+    "time-grunt": "^1.0.0"
36
+  },
37
+  "engines": {
38
+    "node": ">=0.10.0"
39
+  },
40
+  "scripts": {
41
+    "test": "karma start test/karma.conf.js"
42
+  }
43
+}

+ 18 - 0
test/.jshintrc

@@ -0,0 +1,18 @@
1
+{
2
+  "bitwise": true,
3
+  "browser": true,
4
+  "curly": true,
5
+  "eqeqeq": true,
6
+  "esnext": true,
7
+  "jasmine": true,
8
+  "latedef": true,
9
+  "noarg": true,
10
+  "node": true,
11
+  "strict": true,
12
+  "undef": true,
13
+  "unused": true,
14
+  "globals": {
15
+    "angular": false,
16
+    "inject": false
17
+  }
18
+}

+ 83 - 0
test/karma.conf.js

@@ -0,0 +1,83 @@
1
+// Karma configuration
2
+// Generated on 2016-07-10
3
+
4
+module.exports = function(config) {
5
+  'use strict';
6
+
7
+  config.set({
8
+    // enable / disable watching file and executing tests whenever any file changes
9
+    autoWatch: true,
10
+
11
+    // base path, that will be used to resolve files and exclude
12
+    basePath: '../',
13
+
14
+    // testing framework to use (jasmine/mocha/qunit/...)
15
+    // as well as any additional frameworks (requirejs/chai/sinon/...)
16
+    frameworks: [
17
+      'jasmine'
18
+    ],
19
+
20
+    // list of files / patterns to load in the browser
21
+    files: [
22
+      // bower:js
23
+      'bower_components/jquery/dist/jquery.js',
24
+      'bower_components/angular/angular.js',
25
+      'bower_components/bootstrap/dist/js/bootstrap.js',
26
+      'bower_components/angular-animate/angular-animate.js',
27
+      'bower_components/angular-aria/angular-aria.js',
28
+      'bower_components/angular-cookies/angular-cookies.js',
29
+      'bower_components/angular-messages/angular-messages.js',
30
+      'bower_components/angular-resource/angular-resource.js',
31
+      'bower_components/angular-route/angular-route.js',
32
+      'bower_components/angular-sanitize/angular-sanitize.js',
33
+      'bower_components/angular-touch/angular-touch.js',
34
+      'bower_components/angular-mocks/angular-mocks.js',
35
+      // endbower
36
+      'app/scripts/**/*.js',
37
+      'test/mock/**/*.js',
38
+      'test/spec/**/*.js'
39
+    ],
40
+
41
+    // list of files / patterns to exclude
42
+    exclude: [
43
+    ],
44
+
45
+    // web server port
46
+    port: 8080,
47
+
48
+    // Start these browsers, currently available:
49
+    // - Chrome
50
+    // - ChromeCanary
51
+    // - Firefox
52
+    // - Opera
53
+    // - Safari (only Mac)
54
+    // - PhantomJS
55
+    // - IE (only Windows)
56
+    browsers: [
57
+      'PhantomJS'
58
+    ],
59
+
60
+    // Which plugins to enable
61
+    plugins: [
62
+      'karma-phantomjs-launcher',
63
+      'karma-jasmine'
64
+    ],
65
+
66
+    // Continuous Integration mode
67
+    // if true, it capture browsers, run tests and exit
68
+    singleRun: false,
69
+
70
+    colors: true,
71
+
72
+    // level of logging
73
+    // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
74
+    logLevel: config.LOG_INFO,
75
+
76
+    // Uncomment the following lines if you are using grunt's server to run the tests
77
+    // proxies: {
78
+    //   '/': 'http://localhost:9000/'
79
+    // },
80
+    // URL root prevent conflicts with the site root
81
+    // urlRoot: '_karma_'
82
+  });
83
+};

+ 23 - 0
test/spec/controllers/about.js

@@ -0,0 +1,23 @@
1
+'use strict';
2
+
3
+describe('Controller: AboutCtrl', function () {
4
+
5
+  // load the controller's module
6
+  beforeEach(module('siteOficinaItapetiApp'));
7
+
8
+  var AboutCtrl,
9
+    scope;
10
+
11
+  // Initialize the controller and a mock scope
12
+  beforeEach(inject(function ($controller, $rootScope) {
13
+    scope = $rootScope.$new();
14
+    AboutCtrl = $controller('AboutCtrl', {
15
+      $scope: scope
16
+      // place here mocked dependencies
17
+    });
18
+  }));
19
+
20
+  it('should attach a list of awesomeThings to the scope', function () {
21
+    expect(AboutCtrl.awesomeThings.length).toBe(3);
22
+  });
23
+});

+ 23 - 0
test/spec/controllers/main.js

@@ -0,0 +1,23 @@
1
+'use strict';
2
+
3
+describe('Controller: MainCtrl', function () {
4
+
5
+  // load the controller's module
6
+  beforeEach(module('siteOficinaItapetiApp'));
7
+
8
+  var MainCtrl,
9
+    scope;
10
+
11
+  // Initialize the controller and a mock scope
12
+  beforeEach(inject(function ($controller, $rootScope) {
13
+    scope = $rootScope.$new();
14
+    MainCtrl = $controller('MainCtrl', {
15
+      $scope: scope
16
+      // place here mocked dependencies
17
+    });
18
+  }));
19
+
20
+  it('should attach a list of awesomeThings to the scope', function () {
21
+    expect(MainCtrl.awesomeThings.length).toBe(3);
22
+  });
23
+});