Browse Source

move terminal

windhamdavid 4 years ago
parent
commit
59c53b54ee
18 changed files with 4639 additions and 801 deletions
  1. 1 1
      archive.php
  2. 271 1
      css/front-page.css
  3. 1 1
      css/front.min.css
  4. 3 1
      css/fullcalendar.css
  5. 22 2
      front-page.php
  6. 1 1
      functions.php
  7. 1 1
      gruntfile.js
  8. 1 25
      header-home.php
  9. 310 0
      js/about.js
  10. 2649 0
      js/front-page.min.js
  11. 3 2
      js/front.min.js
  12. 60 1
      js/script.js
  13. 3 1
      js/script.min.js
  14. 535 0
      js/terminal.js
  15. 46 63
      page-about.php
  16. 1 1
      page-bio.php
  17. 729 698
      style.css
  18. 2 2
      style.min.css

+ 1 - 1
archive.php

@@ -14,7 +14,7 @@
 						<?php the_date(); ?>
 					</div>
 				</div>
-				<?php the_excerpt(); ?>
+				<?php dw_good_excerpt(110); ?>
 				<?php endwhile;
 					dw_paging_nav();
 				else :

+ 271 - 1
css/front-page.css

@@ -1,3 +1,5 @@
+/* @override http://macs.local/david/wp-content/themes/dw/css/front-page.css */
+
 html, body, div, span, object, iframe,
 h1, h2, h3, h4, h5, h6, p, blockquote, pre,
 address, 
@@ -121,4 +123,272 @@ a:active, a:focus, input {
 	  height:50px;
 	  background: #FFF;
 	}
-}
+}
+
+.modal-open {
+  overflow: hidden;
+}
+.modal {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1050;
+  display: none;
+  overflow: hidden;
+  -webkit-overflow-scrolling: touch;
+  outline: 0;
+}
+.modal.fade .modal-dialog {
+  -webkit-transition: -webkit-transform .3s ease-out;
+       -o-transition:      -o-transform .3s ease-out;
+          transition:         transform .3s ease-out;
+  -webkit-transform: translate3d(0, -25%, 0);
+       -o-transform: translate3d(0, -25%, 0);
+          transform: translate3d(0, -25%, 0);
+}
+.modal.in .modal-dialog {
+  -webkit-transform: translate3d(0, 0, 0);
+       -o-transform: translate3d(0, 0, 0);
+          transform: translate3d(0, 0, 0);
+}
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 10px;
+}
+.modal-content {
+  position: relative;
+  background-color: #fff;
+  -webkit-background-clip: padding-box;
+          background-clip: padding-box;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, .2);
+  border-radius: 6px;
+  outline: 0;
+  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000;
+}
+.modal-backdrop.fade {
+  filter: alpha(opacity=0);
+  opacity: 0;
+}
+.modal-backdrop.in {
+  filter: alpha(opacity=50);
+  opacity: .5;
+}
+.modal-header {
+  min-height: 16.42857143px;
+  padding: 15px;
+  border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+  margin-top: -2px;
+}
+.modal-title {
+  margin: 0;
+  line-height: 1.42857143;
+}
+.modal-body {
+  position: relative;
+  padding: 15px;
+}
+.modal-footer {
+  padding: 15px;
+  text-align: right;
+  border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+  margin-bottom: 0;
+  margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+@media (min-width: 768px) {
+  .modal-dialog {
+    width: 600px;
+    margin: 30px auto;
+  }
+  .modal-content {
+    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+  }
+  .modal-sm {
+    width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg {
+    width: 777px;
+  }
+}
+
+/*============================================
+					Intro 
+==============================================*/
+
+@keyframes blink {
+  0% { opacity: 0; }
+  25% { opacity: 1; }
+  50% { opacity: 1; }
+  100% { opacity: 0; }
+}
+@-webkit-keyframes blink {
+  0% { opacity: 0; }
+  25% { opacity: 1; }
+  50% { opacity: 1; }
+  100% { opacity: 0; }
+}
+@-ms-keyframes blink {
+  0% { opacity: 0; }
+  25% { opacity: 1; }
+  50% { opacity: 1; }
+  100% { opacity: 0; }
+}
+@-moz-keyframes blink {
+  0% { opacity: 0; }
+  25% { opacity: 1; }
+  50% { opacity: 1; }
+  100% { opacity: 0; }
+}
+.welcome::after {
+  visibility: visible;
+  content: '';
+  background-color:green;
+  opacity: 0;
+  display: inline-block;
+  position: relative;
+  width: 0.2em;
+  height: 1em;
+  top: 5px;
+  margin-left: 0;
+  margin-bottom: 2px;
+	-webkit-animation: blink 1s 20;
+	-moz-animation: blink 1s 20;
+	animation: blink 1s 20;
+}
+.welcome-back-text::after {
+  visibility: visible;
+  content: '';
+  background-color:green;
+  opacity: 0;
+  display: inline-block;
+  position: relative;
+  width: 0.2em;
+  height: 1em;
+  top: 5px;
+  margin-left: 0;
+  margin-bottom: 2px;
+	-webkit-animation: blink 1s 3;
+	-moz-animation: blink 1s 3;
+	animation: blink 1s 3;
+}
+.welcome-back {
+	text-align: left;
+	min-height: 300px;
+	padding: 50px 25px;
+	font-size: 18px;
+	font-family: monospace;
+	color: #34F743;
+	background: transparent url('../img/terminal.svg');
+	background-size: cover;
+  border-radius: 18px;
+}
+.terminal-welcome .modal-content {
+	margin: 0 0 100px;
+	border: none;
+	box-shadow:none;
+	background-color: transparent !important;
+	text-align: lef;
+}
+.terminal {
+	margin-top:30px;
+}
+
+.terminal .modal-content {
+	margin: 0 0 100px;
+	border: none;
+	box-shadow:none;
+	background-color: transparent !important;
+}
+[contenteditable] {outline: none;}
+.typed-cursor{
+	display: none;
+}
+.thermo {
+	font-family: monospace;
+	font-size: 18px !important;
+}
+.thermo span.prompt {
+	color: #389436;
+}
+.thermo p.input {
+	font-size: 18px;
+	font-family: monospace;
+	line-height: 11px !important;
+	margin: 10px 0;
+}
+.thermo p.response {
+	font-size: 18px;
+	line-height: 11px !important;
+	margin: 0px;
+	color:#34F743;
+}
+.thermo span.u {
+	color: #389436;
+}
+.thermo span.at {
+	color: #38BBC6;
+}
+.thermo span.mee {
+	color: #389436;
+}
+.thermo-intro span.prompt {
+	color: #389436;
+}
+.thermo-intro p.input {
+	font-size: 18px;
+	font-family: monospace;
+	line-height: 11px !important;
+	margin: 10px 0;
+}
+.thermo-intro p.response {
+	font-size: 18px;
+	line-height: 11px !important;
+	margin: 0px;
+	color:#34F743;
+}
+.thermo-intro span.u {
+	color: #389436;
+}
+.thermo-intro span.at {
+	color: #38BBC6;
+}
+.thermo-intro span.mee {
+	color: #389436;
+}

File diff suppressed because it is too large
+ 1 - 1
css/front.min.css


+ 3 - 1
css/fullcalendar.css

@@ -1,5 +1,7 @@
 /* @override http://macs.local/david/wp-content/themes/dw/css/fullcalendar.css */
 
+/* @override http://macs.local/david/wp-content/themes/dw/css/fullcalendar.css */
+
 /*
  * FullCalendar v2.1.1 Stylesheet
  * Docs & License: http://arshaw.com/fullcalendar/
@@ -588,7 +590,7 @@ a.fc-more:hover {
 
 .fc-toolbar h2 {
 	margin: 0;
-	font-size: 21px;
+	font-size: 17px;
 	color: #777;
 }
 

File diff suppressed because it is too large
+ 22 - 2
front-page.php


+ 1 - 1
functions.php

@@ -59,7 +59,7 @@ function dw_scripts() {
 		wp_enqueue_script( 'smooth', get_template_directory_uri() . '/js/smooth.js', 'jquery', '', true );
 		wp_enqueue_script( 'scripts', get_template_directory_uri() . '/js/scripts.js', 'jquery', '', true );
 		//wp_enqueue_script( 'scriptmin', get_template_directory_uri() . '/js/script.min.js', 'jquery', '', true );
-		wp_enqueue_script( 'init', get_template_directory_uri() . '/js/init.js', 'jquery', '', true );
+		wp_enqueue_script( 'init', get_template_directory_uri() . '/js/about.js', 'jquery', '', true );
 		//wp_enqueue_script( 'init', get_template_directory_uri() . '/js/init.min.js', 'jquery', '', true );
 	}
 	

+ 1 - 1
gruntfile.js

@@ -33,7 +33,7 @@ module.exports = function(grunt) {
 				dest: 'js/scripts-o.js',
 			},
 			disto: {
-				src: ['js/jquery-2.1.1.min.js', 'js/svg-morpheus.js', 'js/messenger.min.js', 'js/front-page.js'],
+				src: ['js/jquery-2.1.1.min.js', 'js/svg-morpheus.js', 'js/messenger.min.js', 'js/bootstrap.js', 'js/terminal.js', 'js/front-page.js'],
 				dest: 'js/front-page.min.js',
 			}
 		},

+ 1 - 25
header-home.php

@@ -15,31 +15,7 @@
 </head>
 <body>
 <?php get_template_part('loader') ?>
-<div class="modal fade terminal-welcome" tabindex="-1" role="dialog" aria-labelledby="welcome" aria-hidden="true">
-	<div class="modal-dialog modal-lg">
-		<div class="modal-content">
-			<div class="welcome-back">
-				<div class="screen-reader">
-					<h1>Hello,</h1>
-					<h3>Welcome to my little corner of the internet.</h3>		
-					<h4>It's very nice to have you here!</h4>
-				</div>
-				<div class="welcome"></div>
-				<div class="thermo-intro"></div>
-			</div>
-		</div>
-	</div>
-</div>
-<div class="modal fade terminal" tabindex="-1" role="dialog" aria-labelledby="welcomeback" aria-hidden="true">
-	<div class="modal-dialog modal-lg">
-		<div class="modal-content">
-			<div class="welcome-back">
-				<div class="welcome-back-text"></div>
-				<div class="thermo"></div>
-			</div>
-		</div>
-	</div>
-</div>
+
 <header id="header">
 	<div id="nav">
 		<div class="navbar navbar-fixed-top">

+ 310 - 0
js/about.js

@@ -0,0 +1,310 @@
+new WOW().init();
+
+jQuery(document).ready(function($) {
+	
+$(window).bind('load', function() {
+	$('#loader').fadeOut(700);
+});
+
+$(function () {
+  $('[data-toggle="tooltip"]').tooltip()
+})
+
+
+var person = localStorage.getItem('person');
+
+
+/*============================================
+		     Navigation 
+==============================================*/
+
+$('.nav-toggle').on('touchstart click', function(e) {
+	e.preventDefault();
+	$( this ).toggleClass( 'active' );
+});
+
+$('#nav').affix({
+	//offset: {top: $('.intro').height()-$('.navbar').height()}
+});	
+
+$(function dw_hidenav() {
+	var headerHeight = $('.navbar').height();
+	$(window).on('scroll', { previousTop: 0 },
+		function() {
+		var currentTop = $(window).scrollTop();
+		if (currentTop < this.previousTop) {
+			if (currentTop > 0 && $('.navbar').hasClass('fixed')) {
+					$('.navbar').addClass('visible');
+					$('.site-title a').removeClass('light');
+				} else {
+					$('.navbar').removeClass('visible fixed');
+					$('.site-title a').addClass('light');
+				}
+		} 
+		else {
+			$('.navbar').removeClass('visible');
+			if (currentTop > headerHeight && !$('.navbar').hasClass('fixed')) $('.navbar').addClass('fixed');
+		}
+		this.previousTop = currentTop;
+		}  
+	);
+});
+
+
+/*============================================
+		      Carousel 
+==============================================*/
+
+$('#caro-lead').carousel({
+	interval: 5777,
+	wrap: true,
+	pause: false
+});
+
+function dw_caro(){
+	$('#caro-lead').carousel({
+		interval: 5777,
+		wrap: true,
+		pause: false
+	});
+	var vidout = document.getElementById('tv');
+    vidout.play();
+}
+
+$('#caro-lead').on('slide.bs.carousel', function(event) {
+	$('.carousel-caption').fadeIn(600);
+	var consta = $(event.target);
+	setTimeout(function() {
+		if (consta.find('.item.active').data('id') === 1) {	
+			$('#tv').removeClass('unblur').addClass('blur');
+			var anistars = new DrawFillSVG({elementId: 'sites'});
+			anistars.replay();
+			$('#tv').delay(100).queue(function(pauseit){
+				var vidin = document.getElementById('tv');
+			    vidin.pause();
+			    pauseit();
+			});
+		}
+		if (consta.find('.item.active').data('id') === 2) {	
+			$('#tv').removeClass('unblur').addClass('blur');
+			var anibrain = new DrawFillSVG({elementId: 'brain'});
+			anibrain.replay();
+			$('#tv').delay(100).queue(function(pauseit){
+				var vidin = document.getElementById('tv');
+			    vidin.pause();
+			    pauseit();
+			});
+		}
+		if (consta.find('.item.active').data('id') === 3) {	
+			$('.leader').delay(100).queue(function(closeit){
+				dw_caro_hide();
+			    closeit();
+			});
+		}
+	}, 10);
+});
+
+function dw_caro_hide(){
+    $('.leader').fadeTo(500,0, function() {
+
+		$('#caro-lead').carousel('pause');
+    })
+}
+
+$('#caro-lead').on('slid.bs.carousel', function() {
+	$('.carousel-caption').fadeOut(600);
+	$('#tv').delay(3200).queue(function(playit){
+		$('#tv').addClass('unblur').removeClass('blur');
+		var vidout = document.getElementById('tv');
+	    vidout.play();
+	    playit();
+	});
+});
+
+$('.caro-grad').appear();
+$('.caro-grad').one('appear', dw_appear);
+function dw_appear() {
+	$('#caro').carousel({
+		interval: 5555,
+		wrap: false,
+		pause: false
+	});
+	var anima = new DrawFillSVG({elementId: 'sv'});
+	anima.replay();
+};
+
+$(document).bind('keyup', function(e) {
+    if(e.which === 39){
+		//$('#caro-lead').carousel('next');
+		$('#caro').carousel('next');
+    }
+    else if(e.which === 37){
+		//$('#caro-lead').carousel('prev');
+		$('#caro').carousel('prev');
+    }
+});
+
+
+
+/*============================================
+		      SVG Animate
+==============================================*/
+
+$('#caro').on('slid.bs.carousel', function() {
+	$('.active .animac').removeClass('hide-svg fade-svg');
+	var animac = new DrawFillSVG({elementId: 'svg-mac'});
+	var animac1 = new DrawFillSVG({elementId: 'svg-imac'});
+	var animac2 = new DrawFillSVG({elementId: 'svg'});
+	animac.replay();
+	animac1.replay();
+	animac2.replay();
+});
+
+$('#caro').on('slide.bs.carousel', function() {
+	$('.active #svg-imac.bg').attr('class', 'svg screen');
+	$('.active .animac').addClass('fade-svg').delay(1000).queue(function(hideit){
+	    $(this).addClass('hide-svg');
+	    hideit();
+	});
+});
+
+$('#caro').on('slid.bs.carousel', function() {
+	$('.active #svg-imac.screen').delay(2500).queue(function(screenit){
+	    $(this).attr('class', 'bg');
+	    screenit();
+	});
+});
+
+
+/*============================================
+		      Form
+==============================================*/
+
+$('#commentform').validate({
+	rules: {
+		author: {
+			required: true,
+			minlength: 2
+		},
+		email: {
+			required: true,
+			email: true
+		},
+		comment: {
+			required: true,
+			minlength: 3
+		}
+	},
+	messages: {
+		author: 'Please enter in your name.',
+		email: 'Please enter a valid email address.',
+		comment: 'Nothing to Say?'
+	},
+	errorElement: 'div',
+	errorPlacement: function(error, element) {
+		element.before(error);
+	} 
+});
+
+
+/*============================================
+		      SmoothState 
+==============================================*/
+
+
+		
+/*============================================
+		      Calendar
+==============================================*/	
+
+$('.calendar').fullCalendar ({
+	firstDay : 1,
+	height: 345,
+	events: [
+			{
+				title: 'Project',
+				start: '2014-09-27',
+				end: '2014-10-02'
+			},
+			{
+				title: 'Conf',
+				start: '2014-10-11',
+				end: '2014-10-13',
+				borderColor: 'red'
+			},
+			{
+				title: 'off',
+				start: '2014-10-13',
+				end: '2014-10-16'	
+			},
+			{
+				title: 'Contract',
+				start: '2014-10-16',
+				end: '2014-10-31'
+			},
+			{
+				title: 'Contract',
+				start: '2014-11-03',
+				end: '2014-11-22'
+			},
+			{
+				title: 'Project',
+				start: '2014-12-01',
+				end: '2014-12-06'
+			},
+			{
+				title: 'Project',
+				start: '2014-12-08',
+				end: '2014-12-13'
+			},
+			{
+				title: 'Holiday',
+				start: '2014-12-22',
+				end: '2015-01-05',
+				borderColor: 'red'
+			},
+			{
+				title: 'Project',
+				start: '2015-01-06',
+				end: '2015-01-25'
+			},
+			{
+				title: 'Project',
+				start: '2015-01-27',
+				end: '2015-02-14'
+			},
+			{
+				title: 'Holiday',
+				start: '2015-02-14',
+				end: '2015-02-19',
+				borderColor: 'red'
+			},
+			{
+				title: 'Project',
+				start: '2015-02-19',
+				end: '2015-03-07'
+			},
+			{
+				title: 'Contract',
+				start: '2015-03-10',
+				end: '2015-04-04',
+				borderColor: 'blue'
+			},
+			{
+				title: 'Holiday',
+				start: '2015-04-04',
+				end: '2015-04-11',
+				borderColor: 'red'
+			},
+			{
+				title: 'Contract',
+				start: '2015-04-11',
+				end: '2015-05-16',
+				borderColor: 'blue'
+			}
+	]
+});
+
+
+		
+});

File diff suppressed because it is too large
+ 2649 - 0
js/front-page.min.js


File diff suppressed because it is too large
+ 3 - 2
js/front.min.js


File diff suppressed because it is too large
+ 60 - 1
js/script.js


File diff suppressed because it is too large
+ 3 - 1
js/script.min.js


+ 535 - 0
js/terminal.js

@@ -0,0 +1,535 @@
+// ------------- JQUERY TYPED.JS -------------------------------------------- //
+// ============ https://github.com/mattboldt/typed.js/ ====================== //
+// -------------------------------------------------------------------------- //
+
+!function($){
+    "use strict";
+    var Typed = function(el, options){
+        this.el = $(el);
+        this.options = $.extend({}, $.fn.typed.defaults, options);
+        this.baseText = this.el.text() || this.el.attr('placeholder') || '';
+        this.typeSpeed = this.options.typeSpeed;
+        this.startDelay = this.options.startDelay;
+        this.backSpeed = this.options.backSpeed;
+        this.backDelay = this.options.backDelay;
+        this.strings = this.options.strings;
+        this.strPos = 0;
+        this.arrayPos = 0;
+        this.stopNum = 0;
+        this.loop = this.options.loop;
+        this.loopCount = this.options.loopCount;
+        this.curLoop = 0;
+        this.stop = false;
+        this.showCursor = this.isInput ? false : this.options.showCursor;
+        this.cursorChar = this.options.cursorChar;
+        this.isInput = this.el.is('input');
+        this.attr = this.options.attr || (this.isInput ? 'placeholder' : null);
+        this.build();
+    };
+
+        Typed.prototype =  {
+            constructor: Typed
+            , init: function(){
+                // begin the loop w/ first current string (global self.string)
+                // current string will be passed as an argument each time after this
+                var self = this;
+                self.timeout = setTimeout(function() {
+                    // Start typing
+                    self.typewrite(self.strings[self.arrayPos], self.strPos);
+                }, self.startDelay);
+            }
+            , build: function(){
+                // Insert cursor
+                if (this.showCursor === true){
+                  this.cursor = $("<span class=\"typed-cursor\">" + this.cursorChar + "</span>");
+                  this.el.after(this.cursor);
+                }
+                this.init();
+            }
+
+            , typewrite: function(curString, curStrPos){
+                if(this.stop === true)
+                   return;
+                var humanize = Math.round(Math.random() * (100 - 30)) + this.typeSpeed;
+                var self = this;
+
+                // ------------- optional ------------- //
+                // backpaces a certain string faster
+                // ------------------------------------ //
+                // if (self.arrayPos == 1){
+                //  self.backDelay = 50;
+                // }
+                // else{ self.backDelay = 500; }
+
+                // contain typing function in a timeout humanize'd delay
+                self.timeout = setTimeout(function() {
+                    // check for an escape character before a pause value
+                    // format: \^\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^
+                    // single ^ are removed from string
+                    var charPause = 0;
+                    var substr = curString.substr(curStrPos);
+                    if (substr.charAt(0) === '^') {
+                        var skip = 1;  // skip atleast 1
+                        if(/^\^\d+/.test(substr)) {
+                           substr = /\d+/.exec(substr)[0];
+                           skip += substr.length;
+                           charPause = parseInt(substr);
+                        }
+
+                        // strip out the escape character and pause value so they're not printed
+                        curString = curString.substring(0,curStrPos)+curString.substring(curStrPos+skip);
+                    }
+
+                    // timeout for any pause after a character
+                    self.timeout = setTimeout(function() {
+                        if(curStrPos === curString.length) {
+                           // fires callback function
+                           self.options.onStringTyped(self.arrayPos);
+
+                            // is this the final string
+                           if(self.arrayPos === self.strings.length-1) {
+                              // animation that occurs on the last typed string
+                              self.options.callback();
+
+                              self.curLoop++;
+
+                              // quit if we wont loop back
+                              if(self.loop === false || self.curLoop === self.loopCount)
+                                 return;
+                           }
+
+                           self.timeout = setTimeout(function(){
+                              self.backspace(curString, curStrPos);
+                           }, self.backDelay);
+                        } else {
+
+                           /* call before functions if applicable */
+                           if(curStrPos === 0)
+                              self.options.preStringTyped(self.arrayPos);
+
+                           // start typing each new char into existing string
+                           // curString: arg, self.baseText: original text inside element
+                           var nextString = self.baseText + curString.substr(0, curStrPos+1);
+                           if (self.attr) {
+                            self.el.attr(self.attr, nextString);
+                           } else {
+                            self.el.text(nextString);
+                           }
+
+                           // add characters one by one
+                           curStrPos++;
+                           // loop the function
+                           self.typewrite(curString, curStrPos);
+                        }
+                    // end of character pause
+                    }, charPause);
+
+                // humanized value for typing
+                }, humanize);
+
+            }
+
+            , backspace: function(curString, curStrPos){
+                // exit when stopped
+                if (this.stop === true) {
+                   return;
+                }
+
+                // varying values for setTimeout during typing
+                // can't be global since number changes each time loop is executed
+                var humanize = Math.round(Math.random() * (100 - 30)) + this.backSpeed;
+                var self = this;
+
+                self.timeout = setTimeout(function() {
+
+                    // ----- this part is optional ----- //
+                    // check string array position
+                    // on the first string, only delete one word
+                    // the stopNum actually represents the amount of chars to
+                    
+// ------------- CUSTOM OPTIONS --------------------------------------------- //
+// ========================================================================== //
+// -------------------------------------------------------------------------- //
+                    if (self.arrayPos == 1) {
+						self.stopNum = 17;
+						self.backDelay = 500;
+					}
+					else if (self.arrayPos == 2) {
+						self.stopNum = 54; 
+					}
+					else{self.stopNum = 0;}
+
+                    // ----- continue important stuff ----- //
+                    // replace text with base text + typed characters
+                    var nextString = self.baseText + curString.substr(0, curStrPos);
+                    if (self.attr) {
+                     self.el.attr(self.attr, nextString);
+                    } else {
+                     self.el.text(nextString);
+                    }
+
+                    // if the number (id of character in current string) is
+                    // less than the stop number, keep going
+                    if (curStrPos > self.stopNum){
+                        // subtract characters one by one
+                        curStrPos--;
+                        // loop the function
+                        self.backspace(curString, curStrPos);
+                    }
+                    // if the stop number has been reached, increase
+                    // array position to next string
+                    else if (curStrPos <= self.stopNum) {
+                        self.arrayPos++;
+
+                        if(self.arrayPos === self.strings.length) {
+                           self.arrayPos = 0;
+                           self.init();
+                        } else
+                            self.typewrite(self.strings[self.arrayPos], curStrPos);
+                    }
+
+                // humanized value for typing
+                }, humanize);
+
+            }
+
+            // Start & Stop currently not working
+
+            // , stop: function() {
+            //     var self = this;
+
+            //     self.stop = true;
+            //     clearInterval(self.timeout);
+            // }
+
+            // , start: function() {
+            //     var self = this;
+            //     if(self.stop === false)
+            //        return;
+
+            //     this.stop = false;
+            //     this.init();
+            // }
+
+            // Reset and rebuild the element
+            , reset: function(){
+                var self = this;
+                clearInterval(self.timeout);
+                var id = this.el.attr('id');
+                this.el.after('<span id="' + id + '"/>')
+                this.el.remove();
+                this.cursor.remove();
+                // Send the callback
+                self.options.resetCallback();
+            }
+
+        };
+
+    $.fn.typed = function (option) {
+        return this.each(function () {
+          var $this = $(this)
+            , data = $this.data('typed')
+            , options = typeof option == 'object' && option;
+          if (!data) $this.data('typed', (data = new Typed(this, options)));
+          if (typeof option == 'string') data[option]();
+        });
+    };
+
+    $.fn.typed.defaults = {
+        strings: ["These are the default values...", "You know what you should do?", "Use your own!", "Have a great day!"],
+        // typing speed
+        typeSpeed: 0,
+        // time before typing starts
+        startDelay: 0,
+        // backspacing speed
+        backSpeed: 0,
+        // time before backspacing
+        backDelay: 500,
+        // loop
+        loop: false,
+        // false = infinite
+        loopCount: false,
+        // show cursor
+        showCursor: true,
+        // character for cursor
+        cursorChar: "|",
+        // attribute to type (null == text)
+        attr: null,
+        // call when done callback function
+        callback: function() {},
+        // starting callback function before each string
+        preStringTyped: function() {},
+        //callback for every typed string
+        onStringTyped: function() {},
+        // callback for reset
+        resetCallback: function() {}
+    };
+
+
+}(window.jQuery);
+
+
+// ------------- jQuery Cookie Plugin v1.4.1 -------------------------------- //
+// ============ https://github.com/carhartl/jquery-cookie =================== //
+// -------------------------------------------------------------------------- //
+
+
+(function (factory) {
+	if (typeof define === 'function' && define.amd) {
+		// AMD
+		define(['jquery'], factory);
+	} else if (typeof exports === 'object') {
+		// CommonJS
+		factory(require('jquery'));
+	} else {
+		// Browser globals
+		factory(jQuery);
+	}
+}(function ($) {
+
+	var pluses = /\+/g;
+
+	function encode(s) {
+		return config.raw ? s : encodeURIComponent(s);
+	}
+
+	function decode(s) {
+		return config.raw ? s : decodeURIComponent(s);
+	}
+
+	function stringifyCookieValue(value) {
+		return encode(config.json ? JSON.stringify(value) : String(value));
+	}
+
+	function parseCookieValue(s) {
+		if (s.indexOf('"') === 0) {
+			// This is a quoted cookie as according to RFC2068, unescape...
+			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+		}
+
+		try {
+			// Replace server-side written pluses with spaces.
+			// If we can't decode the cookie, ignore it, it's unusable.
+			// If we can't parse the cookie, ignore it, it's unusable.
+			s = decodeURIComponent(s.replace(pluses, ' '));
+			return config.json ? JSON.parse(s) : s;
+		} catch(e) {}
+	}
+
+	function read(s, converter) {
+		var value = config.raw ? s : parseCookieValue(s);
+		return $.isFunction(converter) ? converter(value) : value;
+	}
+
+	var config = $.cookie = function (key, value, options) {
+
+		// Write
+
+		if (arguments.length > 1 && !$.isFunction(value)) {
+			options = $.extend({}, config.defaults, options);
+
+			if (typeof options.expires === 'number') {
+				var days = options.expires, t = options.expires = new Date();
+				t.setTime(+t + days * 864e+5);
+			}
+
+			return (document.cookie = [
+				encode(key), '=', stringifyCookieValue(value),
+				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+				options.path    ? '; path=' + options.path : '',
+				options.domain  ? '; domain=' + options.domain : '',
+				options.secure  ? '; secure' : ''
+			].join(''));
+		}
+
+		// Read
+
+		var result = key ? undefined : {};
+
+		// To prevent the for loop in the first place assign an empty array
+		// in case there are no cookies at all. Also prevents odd result when
+		// calling $.cookie().
+		var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+		for (var i = 0, l = cookies.length; i < l; i++) {
+			var parts = cookies[i].split('=');
+			var name = decode(parts.shift());
+			var cookie = parts.join('=');
+
+			if (key && key === name) {
+				// If second argument (value) is a function it's a converter...
+				result = read(cookie, value);
+				break;
+			}
+
+			// Prevent storing a cookie that we couldn't decode.
+			if (!key && (cookie = read(cookie)) !== undefined) {
+				result[name] = cookie;
+			}
+		}
+
+		return result;
+	};
+
+	config.defaults = {};
+
+	$.removeCookie = function (key, options) {
+		if ($.cookie(key) === undefined) {
+			return false;
+		}
+
+		// Must not alter options, thus extending a fresh object...
+		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
+		return !$.cookie(key);
+	};
+
+}));
+
+jQuery(document).ready(function($) {
+	
+/*============================================
+		      Welcome Cookies
+==============================================*/
+
+$(function dw_set_cookie() {
+	var COOKIE = 'windhamdavid-cookie';
+	var dwcookie = $.cookie(COOKIE);
+	if (dwcookie == null) {
+		$.cookie(COOKIE, 'yum-cookies', { expires: 7, path: '/'});
+		$('.terminal-welcome').modal('show');	
+		$('.welcome').typed({
+			strings: ['Hey,', 'Hello,\n^10Welcome to ^10my domain ^10...^10', 'Hello, \nWelcome to my little corner of the internet. \n^10It is nice to ', 'Hello, \nWelcome to my little corner of the internet. \nWhat is your name?^200\n'],
+			typeSpeed: 30,
+			backSpeed: 50,
+			startDelay: 0,
+			backDelay: 0,
+			loop: false,
+			loopCount: false,
+			attr: null,
+			callback: function(){
+				dw_terminal();
+			 }
+		});
+	}
+	else {
+		$('.terminal').modal('show');
+		if (localStorage.getItem('person') === null) {
+			var person = 'anonymous person';
+		}
+		else {
+			var person = localStorage.getItem('person');
+		}
+		$('.welcome-back-text').typed({
+			strings: ['...', 'Welcome back ' +person],
+			typeSpeed: 30,
+			backSpeed: 10,
+			startDelay: 0,
+			backDelay: 100,
+			loop: false,
+			loopCount: false,
+			attr: null,
+			callback: function(){	
+				dw_terminal();	
+			 }
+		});
+	}
+});
+
+
+/*============================================
+		      Terminal
+==============================================*/
+(function ($){
+	$.fn.cli = function(handler, prompt, effect){
+		if (!prompt) prompt = '<span class="u">you</span><span class="at">@</span><span class="mee">david</span>&nbsp;&gt;&nbsp;';
+		if (!effect) effect = $.fn.text;
+		return this.each(function(){
+			var self = $(this);
+			function newline(){
+				self.
+				 append('<p class=input><span class=prompt>'+prompt+'</span><span  style=outline:none contenteditable></span></p>');
+				try {
+					$('[contenteditable]', self)[0].focus();
+				}catch(e){
+				}
+			}
+			newline();
+			self.on('keydown', '[contenteditable]', function(evt){
+				if (evt.keyCode === 13){
+					$(this).removeAttr('contenteditable');
+					effect.call($('<p class=response>').appendTo(self),handler(this.textContent || this.innerText));
+					newline();
+					return false;
+				}
+			});
+		});
+	};
+})(jQuery);
+
+function dw_shift() {
+	$('.terminal-welcome').delay(5500).queue(function(thanks){
+	    $(this).modal('hide');
+	    thanks();
+	});
+}
+function dw_contact() {
+	$('.terminal-welcome').delay(2500).queue(function(thanks){
+	    window.location.assign("/contact/");
+	});
+}
+
+
+function dw_terminal(){
+	function type(text){
+		var span = $('<span>').appendTo(this).after('<span id="blinker" style="background:green">&nbsp;&nbsp;</span>');
+		var style = $('<style>p.input {visibility: hidden} p.input.old {visibility: visible}</style>').appendTo('head');
+		$('p.input').addClass('old');
+		var progress = 0;
+		var timer = setInterval (function(){
+			span.text(text.substr(0, progress++));
+			if (progress > text.length){
+				$('#blinker').remove();
+				style.remove();
+				$('[contenteditable]')[0].focus();
+				clearInterval(timer);
+			}
+		},100);
+	}
+	$('.thermo-intro').cli(function(text){
+		if (text.length > 1) {
+			localStorage.setItem('person', text),
+			dw_shift();
+		};
+		return 'I will close this terminal now. Thank You ' +text;
+		}, null, type);
+	$('.thermo').cli(function(text){
+		if (/exit/i.test(text)) {
+			$('.terminal').modal('hide');
+		}
+		if (/contact/i.test(text))  {
+			return "loading...",
+			dw_contact();
+		};
+		if (/help/i.test(text)) return "I need somebody!";
+		if (/hello/i.test(text)) return "Hello to you!";
+		if (/what/i.test(text)) return "This is a website silly human";
+		if (/and/i.test(text)) return "and what?";
+		if (/who/i.test(text)) return "David A. Windham";
+		if (/when/i.test(text)) return "Yesterday";
+		if (/how/i.test(text)) return "JavaScript is a dynamic computer programming language";
+		if (/why/i.test(text)) return "For fun";
+		if (/you/i.test(text)) return "your mama";
+		if (/cd ../i.test(text)) return "Oh, I see";
+		if (/thermonuclear/i.test(text)) return "Wouldn't you prefer a nice game of chess?";
+		if (text.length < 3) return "type 'exit' to close";
+		return 'command not found: '+text;
+		}, null, type);
+	$('p.input').on('touchstart click', function(e) {
+		e.preventDefault();
+		$('[contenteditable]')[0].focus();
+	});
+}
+
+});
+
+

+ 46 - 63
page-about.php

@@ -4,7 +4,7 @@ Template Name: Home
 */
 
 get_header('home'); ?>
-	<video id="tv" preload="none" loop="loop" poster="<?php echo get_template_directory_uri();?>/img/tv.jpg">
+	<video id="tv" autostart="false" preload="none" loop="loop" poster="<?php echo get_template_directory_uri();?>/img/tv.jpg">
 	     <source src="<?php echo get_template_directory_uri();?>/img/tv.mp4" type="video/mp4">
 	     <source src="<?php echo get_template_directory_uri();?>/img/tv.webm" type="video/webm">
 	</video>
@@ -20,7 +20,7 @@ get_header('home'); ?>
 				<div class="item web" data-id="2">
 					<div class="container">
 						<h1 class="light super cm-sans">There are 1,028,932,208</h1>
-						<h2 class="light cm-concrete">Web Sites on the Internet <small>(October 2014)</small></h2>
+						<h2 class="light cm-concrete">Web Sites on the Internet</h2>
 						<svg id="sites" width="300px" viewBox="0 0 300 200">
 						</svg>
 					</div>
@@ -62,61 +62,14 @@ get_header('home'); ?>
 			</div>
 		</div>
 	</div>
-	<div class="container-fluid leader-gap">
-		<div class="container">
-			<div class="row">
-				
-			</div>
-		</div>
-	</div>
-	<div class="container-fluid posts-front">
-		<div class="container">
-			<h3 class="light cm-sans wow fadeIn" data-wow-offset="600">Desk:</h3>
-			<div class="row">
-				<div class="col-sm-4 wow fadeInLeft" data-wow-offset="500">
-					<article id="main" class="home">
-						<?php query_posts('showposts=1'); ?>
-						<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
-						<div class="entry-content">
-							<h4><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'daw' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h4>
-							<?php dw_good_excerpt(110); ?>
-						</div>
-						<?php endwhile; ?>
-					</article>
-				</div>
-				<div class="col-sm-4 wow fadeInUp" data-wow-offset="500">
-					<article id="main" class="home">
-						<?php query_posts('showposts=1&offset=1'); ?>
-						<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
-						<div class="entry-content">
-							<h4><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'daw' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h4>
-							<?php dw_good_excerpt(110); ?>
-						</div>
-						<?php endwhile; ?>
-					</article>
-				</div>
-				<div class="col-sm-4 wow fadeInRight" data-wow-offset="500">
-					<article id="main" class="home">
-						<?php query_posts('showposts=1&offset=2'); ?>
-						<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
-						<div class="entry-content">
-							<h4><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'daw' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h4>
-							<?php dw_good_excerpt(110); ?>
-						</div>
-						<?php endwhile; ?>
-					</article>
-				</div>
-			</div>
-		</div>
-	</div>
 	<div class="container-fluid dark about">
-		<div class="container light">
+		<div class="container">
 			<div class="row dim">
 				<div class="col-sm-6">
 					<h4 class="light">Who</h4>
-						<p><img class="me" src="<?php echo get_template_directory_uri();?>/img/me.png">
-							Hello People of the Internet. As you may have discerned, my name is David Windham. Usually when I fill in a bio on a page, I just write 'something else' because I'm not fond of describing myself. I'm a just a simple man living in South Carolina. Here is a <a href="bio">Bio</a> and <a href="CV">CV</a>
-						</p>
+					<p><img class="me" src="<?php echo get_template_directory_uri();?>/img/me.png">
+						Hello People of the Internet. As you may have discerned, my name is David Windham. Usually when I fill in a bio on a page, I just write 'something else' because I'm not fond of describing myself. I'm a just a simple man living in South Carolina. Here is a <a href="bio">Bio</a> and <a href="CV">CV</a>
+					</p>
 				</div>
 				<div class="col-xs-6">
 					<div class="row">
@@ -125,8 +78,7 @@ get_header('home'); ?>
 							<p>Developer, Designer, Programmer, Artist, Illustrator, Problem Solver, Team Player, Creative, Innovative, Critical, Persistant, Motivated, Productive, Detail Oriented, Responsive, and Occasionally On Task.<p>
 						</div>
 						<div class="col-sm-5">
-							<h4 class="light">How</h4>
-							<div class="table-responsive">
+							<div class="table-responsive icon-grid">
 							  <table class="table table-condensed icons" style><tbody>
 									<tr>
 										<td><a href="#" data-toggle="tooltip" title="Ubuntu"><span style="color:#DD4814" class="icon-ubuntu fa-2x"></span></a></td>
@@ -146,9 +98,9 @@ get_header('home'); ?>
 									<tr>
 										<td><a href="#" data-toggle="tooltip" title="Javascript"><span style="color:#F0DB4F" class="icon-javascript fa-2x"></span></a></td>
 										<td><a href="#" data-toggle="tooltip" title="HTML"><span style="color:#E44D26;padding-top:7px;" class="fa fa-2x fa-html5"></span></a></td>
+										<td><a href="#" data-toggle="tooltip" title="Python"><span style="color:#306998" class="icon-python fa-2x"></span></a></td>
 										<td><a href="#" data-toggle="tooltip" title="PHP"><span style="color:#8892BF" class="icon-php fa-2x"></span></a></td>
 										<td><a href="#" data-toggle="tooltip" title="Ruby"><span style="color:#B10F01" class="icon-ruby fa-2x"></span></a></td>
-										<td><a href="#" data-toggle="tooltip" title="Python"><span style="color:#306998" class="icon-python fa-2x"></span></a></td>
 									</tr>		
 								</tbody></table>
 							</div>
@@ -156,15 +108,10 @@ get_header('home'); ?>
 					</div>
 				</div>
 			</div>
-		</div>
-	</div>
-	
-	<div class="container-full dark">
-		<div class="container">
 			<div class="row">
 				<div class="col-sm-8">
 					<h4 class="light">Why <small>(<i>You'll have to tell me</i>)</small></h3>
-					<form action="//davidawindham.us1.list-manage.com/subscribe/post?u=f581cb29340364ff0a4421d5c&amp;id=d7b8f624d3" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
+					<form action="/" method="post" id="about-form" name="about-form" class="about-form validate" target="_blank" novalidate>
 						<div class="form-row texts">
 							<label class='text-field'>
 								<input type="text" value="" name="FNAME" class="required" id="mce-FNAME" placeholder='First' required>
@@ -197,9 +144,19 @@ get_header('home'); ?>
 							<input type="text" name="b_f581cb29340364ff0a4421d5c_d7b8f624d3" tabindex="-1" value="">
 						</div>
 						<div class="actions">
-							<button type="submit" class="submit btn default" value="Conctact" name="contact" id="contact">Contact</button>
+							<button type="submit" class="submit btn default btn-primary" value="Conctact" name="contact" id="contact">Contact</button>
 						</div>
 					</form>
+					<div class="row where">
+						<div class="col-sm-6">
+							<h4 class="light">Where</h3>
+							<p class="dim">I prefer to meet in person whenever possible and am available to travel. I travel out of the Greenville or Charlotte International Airports.</p>
+						</div>
+						<div class="col-sm-6">
+							<h4 class="light">How</h3>
+							<p class="dim">Please see the '<a href="<?php echo home_url( '/' ); ?>work">How I Work</a>' page, which provides details on rates, contracts, and other procedures.</p>
+						</div>
+					</div>
 				</div>
 				<div class="col-sm-4">
 					<h4 class="light">When</h4>
@@ -208,4 +165,30 @@ get_header('home'); ?>
 			</div>
 		</div>
 	</div>
+	<div class="container-fluid posts-front">
+		<div class="container">
+			<h4 class="light wow fadeIn" data-wow-offset="100"><em>Updates</em></h5>
+			<div class="row updates">
+				<div class="col-sm-6 wow fadeInLeft">
+					<article id="main" class="home">
+						<h4><a href="<?php echo home_url( '/' ); ?>studio" title="">Studio:</a></h4>
+						<?php query_posts('category_name=studio&showposts=3'); ?>
+						<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
+						<h5><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'daw' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h5>
+						<?php endwhile; ?>
+					</article>
+				</div>
+				<div class="col-sm-6 wow fadeInUp">
+					<article id="main" class="home">
+						<h4><a href="<?php echo home_url( '/' ); ?>desk" title="">Desk:</a></h4>
+						<?php query_posts('cat=-48&showposts=3'); ?>
+						<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
+						<h5><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'daw' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h5>
+						<?php endwhile; ?>
+					</article>
+				</div>
+			</div>
+		</div>
+	</div>
+
 <?php get_footer('home'); ?>

+ 1 - 1
page-bio.php

@@ -8,7 +8,7 @@
 					<div class="date">
 						<p>&nbsp</p>
 					</div>
-					<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="About" rel="bookmark"><em>About</em></a></h2>
+					<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="About" rel="bookmark"><em>Bio</em></a></h2>
 					<div class="row">
 						<div class="col-md-6">
 							<img src="<?php echo get_template_directory_uri();?>/img/david.jpg"/>

File diff suppressed because it is too large
+ 729 - 698
style.css


File diff suppressed because it is too large
+ 2 - 2
style.min.css