Stat Battles
How do I make an stat battles?
What is a stat battles? How do you make a stat battles? This script and codes were developed by Ethan on 12 January 2023, Thursday.
Stat Battles - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Stat Battles</title> <link rel="stylesheet" href="css/style.css">
</head>
<body> <section ng-app=CodepenData> <div ng-controller=CodepenDataController ng-cloak> <h1> Stat <img src="//blog.codepen.io/wp-content/uploads/2012/06/Button-Fill-White-Large.png" /> Battles </h1> <div class=form ng-if=edit> <div class=input-wrap> <input placeholder="Hero 1" type=text ng-change="userChange(users[0])" ng-blur=loadUser(users[0]) ng-model=users[0].nickname /> <button ng-if=!users[0].nickname ng-click="randomUser(0)">rand</button> <button class=pos ng-if="users[0].nickname && !users[0].loaded" ng-click="loadUser(users[0])">load</button> <div class=user-thumb ng-if=users[0].loaded ng-style="{ backgroundImage: 'url(' + users[0].image_src + ')' }"></div> </div> <div class=username-error ng-if=users[0].error>{{users[0].error}}</div> <h1 class=label>vs</h1> <div class=input-wrap> <input placeholder="Hero 2" type=text ng-change="userChange(users[1])" ng-blur=loadUser(users[1]) ng-model=users[1].nickname /> <button ng-if=!users[1].nickname ng-click="randomUser(1)">rand</button> <button class=pos ng-if="users[1].nickname && !users[1].loaded" ng-click="loadUser(users[1])">load</button> <div class=user-thumb ng-if=users[1].loaded ng-style="{ backgroundImage: 'url(' + users[1].image_src + ')' }"></div> </div> <div class=username-error ng-if=users[1].error>{{users[1].error}}</div> <button class="fight button" ng-disabled="!users[0].loaded || !users[1].loaded" ng-click=loadCodepenData()>Fight!</button> </div> <div class=results ng-if="!edit"> <div ng-repeat="user in users" ng-class="{ winning: user.winning }" class=user> <h2> {{user.nicename}}<br> <small> <a href="https://codepen.io/{{user.nickname}}" target="blank">@{{user.nickname}}</a> </small> </h2> <div class=user-image-wrap> <img class=user-image ng-class="{ won: user.winning && complete, lost: !user.winning && complete }" ng-style=user.image_size ng-src={{user.image_src}} /> </div> <div class="bars"> <div bar="user.pens.length" comp="top.pens" label="Pens"></div> <div bar="user.stats.hearts" comp="top.hearts" label="Hearts"></div> <div bar="user.stats.views" comp="top.views" label="Views"></div> <div bar="user.stats.comments" comp="top.comments" label="Cmmnts"></div> <div bar="user.stats.followers" comp="top.followers" label="Fllwrs"></div> <div bar="user.stats.following" comp="top.following" label="Fllwng"></div> </div> <span class=points>{{user.points|number:0}} BP</span> <h2 class=details> <button ng-if="user.pens_loaded" ng-click="setDetailUser(user)">Details</button> <span ng-if="user.current_pen">pen #{{user.current_pen.id}}</span> </h2> </div> </div> <a class=user-detail-modal-bg href=# ng-click=resetDetailUser() ng-if=detail_user></a> <div class=user-detail-modal ng-if=detail_user> <a href=# class=user-detail-close ng-click=resetDetailUser()>Close</a> <img class=user-detail-image ng-src={{detail_user.image_src}} /> <h1> {{detail_user.nicename}}<br> <small> <a href="https://codepen.io/{{detail_user.nickname}}" target="blank">@{{detail_user.nickname}}</a> </small> </h1> <h2> {{detail_user.points|number:0}} BP | {{detail_user.pens.length|number:0}} pens<br> <small>{{detail_user.stats.followers}} Followers | {{detail_user.stats.following}} Following</small> </h2> <table> <thead> <tr> <th>Pen</th> <th>Loves</th> <th>Views</th> <th>Comments</th> </tr> </thead> <tbody> <tr ng-repeat="pen in detail_user.pens | orderBy:'-views'"> <td><a href="https://codepen.io/{{detail_user.nickname}}/pen/{{pen.id}}/" target="blank">#{{pen.id}}</a></td> <td>{{pen.loves | number: 0}}</td> <td>{{pen.views | number: 0}}</td> <td>{{pen.comments | number: 0}}</td> <tr> </tbody> </table> </div> <div ng-cloak ng-if=complete> <h2 ng-if="users[0].winning && !users[1].winning"> <a href="https://codepen.io/{{users[0].nickname}}" target="blank">{{users[0].nicename}}</a> wins with <strong>{{users[0].points|number:0}}</strong> Battle Points! </h2> <h2 ng-if="users[1].winning && !users[0].winning"> <a href="https://codepen.io/{{users[1].nickname}}" target="blank">{{users[1].nicename}}</a> wins with <strong>{{users[1].points|number:0}}</strong> Battle Points! </h2> <h2 ng-if="(!users[0].winning && !users[1].winning) || (users[0].winning && users[1].winning)"> <a href="https://codepen.io/{{user[0].nickname}}" target="blank">{{users[0].nicename}}</a> and <a href="https://codepen.io/{{user[1].nickname}}" target="blank">{{users[1].nicename}}</a> tie with <strong>{{user[0].points || 0 | number:0}}</strong> Battle Points! </h2> </div> <button ng-if=!edit class="button reset" ng-class="{ primary: complete, fight: complete }" ng-click="reset()"> <span ng-if=complete>New Battle</span> <span ng-if=!complete>Stop</span> </button> <footer ng-if="users[0].loaded && users[1].loaded"> <h3>Share this battle:</h3> <a target="blank" href="https://codepen.io/jakealbaugh/full/vOVVqG?u1={{users[0].nickname}}&u2={{users[1].nickname}}"> /pianotiles2/full/vOVVqG?u1={{users[0].nickname}}&u2={{users[1].nickname}} </a> </footer> </div>
</section> <script src='http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.min.js'></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
Stat Battles - Script Codes CSS Codes
@import url(//fonts.googleapis.com/css?family=Quicksand:400);
.user { display: block; width: 50%; box-sizing: border-box; padding: 1rem;
}
.user:first-of-type { float: left;
}
.user:last-of-type { float: right;
}
.user .user-image-wrap { width: 40%; margin: 1rem auto; padding-bottom: 50%; position: relative;
}
.user .user-image { position: absolute; width: 0%; border-radius: 50%; transition: width 150ms ease-in-out, box-shadow 500ms ease-in-out, transform 500ms cubic-bezier(0.02, 1.48, 1, 1); left: 50%; top: 50%; transform: translate(-50%, -50%); box-shadow: 0px 0px 0px 0.1rem rgba(255, 255, 255, 0.1);
}
.user .user-image.won { transform: translate(-50%, -50%) scale(1.2); box-shadow: 0px 0px 0px 0.4rem #60AE24;
}
.user .user-image.lost { transform: translate(-50%, -50%) scale(0.8); box-shadow: 0px 0px 0px 0.4rem #C44928;
}
.points { display: block; text-align: center; background: #C44928; box-sizing: border-box; border-radius: 0.125rem; padding: 0.5rem; margin: 0 0.125rem; font-weight: 400; font-size: 1.25rem;
}
.winning .points { background: #60AE24;
}
.details { width: 100%; text-align: center; margin: 1rem 0;
}
.details button { padding: 0.5rem; font-size: 1rem;
}
.details button:hover { transform: scale(1.05);
}
.details span { line-height: 38px;
}
.results { margin-bottom: 1rem;
}
.results::after { content: ""; clear: both; display: table;
}
.bars:after { content: ""; clear: both; display: table;
}
.bars .bar { display: block; width: 16.66%; float: left; font-size: 0.875rem; box-sizing: border-box; padding: 0.125rem; text-align: center;
}
.bars .bar > span { display: block; line-height: 1; margin: 0.5rem 0;
}
.bars .bar-track { position: relative; overflow: hidden; height: 120px;
}
.bars .bar-val { position: absolute; bottom: 0; top: 100%; left: 0; right: 0; transition: top 250ms ease-in-out, background 500ms ease-in-out; background: #C44928; box-sizing: border-box; border-radius: 0.125rem; padding: 0.25rem;
}
.bars .bar-val.winning { background: #60AE24;
}
[ng-controller] { max-width: 1000px; min-width: 600px; margin: 2rem auto;
}
[ng-cloak] { display: none;
}
.label { margin: 0.5em 0; font-size: 2rem;
}
.input-wrap { position: relative; width: 50%; min-width: 280px; margin: 0 auto;
}
.input-wrap input { width: 100%; display: block;
}
.input-wrap button { display: block; position: absolute; padding: 0.5rem; font-size: 1rem; top: 50%; right: 1rem; transform: translateY(-50%) scale(1);
}
.input-wrap button:hover { transform: translateY(-50%) scale(1.05);
}
.input-wrap .user-thumb { position: absolute; width: calc(60px - 1rem); height: calc(60px - 1rem); left: 1rem; top: 50%; transform: translateY(-50%); border-radius: 50%; background: black; background-size: cover; background-position: center;
}
.input-wrap .user-thumb img { width: 100%; height: auto; border-radius: 50%;
}
.username-error { color: #C44928; text-align: center; margin-top: 1em;
}
input, button { outline: none; appearance: none; border: none; box-sizing: border-box; padding: 1rem 1rem; border-radius: 0.125rem; font-family: Quicksand; font-weight: 400; font-size: 1.5rem; text-align: center;
}
.button { display: block;
}
input { background: rgba(255, 255, 255, 0.2);
}
input:focus { background: rgba(255, 255, 255, 0.4);
}
button { text-transform: uppercase; border: 1px solid rgba(255, 255, 255, 0.2); background: black; color: white;
}
button.pos { background: #60AE24;
}
.button { margin: 0 auto; width: 50%; min-width: 240px;
}
.button.fight { margin-top: 2rem; background-color: #FFBB00; animation: glow 2s ease-in-out infinite;
}
.button.fight:hover { animation: none;
}
.button.fight:disabled { opacity: 0.5; animation: none;
}
.button:hover:not(:disabled) { transform: scale(1.05);
}
@keyframes glow { 0%, 100% { box-shadow: 0px 0px 0px 0px #FFBB00; } 50% { box-shadow: 0px 0px 20px 0px #FFBB00; }
}
.user-detail-modal-bg { position: fixed; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.7);
}
.user-detail-modal-bg:hover { background: rgba(0, 0, 0, 0.3);
}
button.primary { background: #FFBB00;
}
.user-detail-modal { position: fixed; background: black; top: 10%; left: 50%; width: 600px; max-width: 90%; transform: translateX(-50%); padding: 2rem; box-sizing: border-box; border-radius: 0.125rem; border: 1px solid rgba(255, 255, 255, 0.2);
}
.user-detail-modal a { color: #FFBB00;
}
.user-detail-modal .user-detail-close { position: absolute; right: 1rem; top: 1rem;
}
.user-detail-modal .user-detail-image { width: 100px; height: auto; border-radius: 50%; display: block; margin: 0 auto 1rem; box-shadow: 0px 0px 0px 0.1rem rgba(255, 255, 255, 0.1);
}
.user-detail-modal h1 { font-size: 40px; line-height: 40px; margin: 0rem 0 1rem;
}
.user-detail-modal table { width: 100%; background: #111;
}
.user-detail-modal table tbody { height: 300px; overflow-y: auto; display: block;
}
.user-detail-modal table tr { display: flex;
}
.user-detail-modal table td, .user-detail-modal table th { flex: 1;
}
.user-detail-modal table th { background: #000; text-transform: uppercase; padding: 1em 0.5em;
}
.user-detail-modal table td { padding: 0.5em; font-family: monospace; text-align: center;
}
.user-detail-modal table tr:nth-child(even) { background: #222;
}
p { text-align: center;
}
p small { color: rgba(255, 255, 255, 0.8); font-style: italic;
}
h1, h2 { font-family: Quicksand; text-transform: uppercase; font-weight: 400; line-height: 1; text-align: center; color: #FFF;
}
h1 { margin: 3rem 0 2rem; position: relative; font-size: 50px; line-height: 50px;
}
h1 img { vertical-align: middle; width: 60px; height: auto; margin-top: -10px; z-index: -1;
}
h2 { margin-top: 0px;
}
a { text-decoration: none; color: white;
}
a:hover { color: #FFBB00;
}
footer { margin-top: 1rem; text-align: center;
}
footer a { color: #FFBB00;
}
body { font-family: Quicksand; background: #111; background: linear-gradient(bottom right, #111, #222); color: white;
}
html, body { min-height: 100%;
}
Stat Battles - Script Codes JS Codes
var app = angular.module('CodepenData', []);
app.service('CodepenDataService', [ '$q', function($q) { return { getPens: function(who,which,page) { var request = '//cpv2api.com/pens/'+which+'/'+who+'/?page='+page; var deferred_data = $q.defer(); $.ajax({ dataType: 'json', url: request, success: function (res) { if(res.data && res.data.length) { deferred_data.resolve(res.data); } else { deferred_data.reject(res); } }, error: function (err) { deferred_data.reject(err); } }); return deferred_data.promise; }, getUser: function(who) { var request = '//cpv2api.com/profile/'+who; var deferred_data = $q.defer(); $.ajax({ dataType: 'json', url: request, success: function (res) { if(res.data) { deferred_data.resolve(res.data); } else { deferred_data.reject(res); } }, error: function (err) { deferred_data.reject(err); } }); return deferred_data.promise; } } }
]);
app.directive('bar', [ function() { return { scope: { val: "=bar", comp: "=", label: "@" }, template: '<div class="bar">'+ '<div class="bar-track">'+ '<span class="bar-val"'+ 'ng-class="{winning: val == comp}"'+ 'ng-style="{\'top\': 100 - val/comp * 100 + \'%\'}">'+ '{{val|number}}</span>'+ '</div>'+ '<span>{{label}}</span>' + '</div>', link: function(scope, $el, attrs) { scope.top = scope.val/scope.comp * 100 + "%"; } } }
]);
app.controller('CodepenDataController', [ '$scope', '$http', '$timeout', 'CodepenDataService', function($scope, $http, $timeout, CodepenDataService) { $scope.edit = true; $scope.complete = false; $scope.userChange = function(user) { clearError(user); user.loaded = false; } $scope.loadUser = function(user) { if(!user.loading) { user.loading = true; if (user.nickname) getUser(user); } } var empty_user = function(username) { return { nickname: username || '', loaded: false, pens_loaded: false, pens: [], points: 0, winning: false, stats: { hearts: 0, views: 0, comments: 0 } }; }; var users_base = function() { return [ empty_user(), empty_user() ]; } var top_base = { pens: 0, hearts: 0, views: 0, comments: 0, followers: 0, following: 0 }; $scope.reset = function() { $scope.users = users_base(); $scope.top = top_base; $scope.complete = false; $scope.edit = true; checkForParams(); clearErrors(); } $scope.reset(); function checkForParams() { var username_1 = getParam('u1') || '', username_2 = getParam('u2') || ''; if(username_1) { $scope.users[0].nickname = username_1; getUser($scope.users[0]); } if(username_2) { $scope.users[1].nickname = username_2; getUser($scope.users[1]); } } function updateTops() { var u1 = $scope.users[0], u2 = $scope.users[1], top = { pens: Math.max(u1.pens.length, u2.pens.length), hearts: Math.max(u1.stats.hearts, u2.stats.hearts), views: Math.max(u1.stats.views, u2.stats.views), comments: Math.max(u1.stats.comments, u2.stats.comments), followers: Math.max(u1.stats.followers, u2.stats.followers), following: Math.max(u1.stats.following, u2.stats.following), points: Math.max(u1.points, u2.points), total_points: u1.points + u2.points } $scope.top = top; // who is winning? if(u1.points > u2.points) { u1.winning = true; u2.winning = false; } else { u1.winning = false; u2.winning = true; } } function updatePen(user, pen) { user.stats.hearts += pen.loves; user.stats.views += pen.views; user.stats.comments += pen.comments; user.pens.push(pen); } function setCurrentPen(user, pens, i) { if(i < pens.length) { user.current_pen = pens[i]; $timeout(function() { setCurrentPen(user, pens, i + 1); }, 100); } } function updateUser(user, profile) { user.stats.followers = profile.followers; user.stats.following = profile.following; user.nicename = profile.nicename; user.image_src = profile.avatar; user.loaded = true; } function checkComplete() { if ($scope.edit) { $scope.complete = false; } else if($scope.users[0].pens_loaded && $scope.users[1].pens_loaded) { $scope.complete = true; } else { $scope.complete = false; } } function getPoints(user) { var points = 0; points += user.stats.views; points += user.stats.followers * 100; points += user.stats.following * 100; points += user.pens.length * 20; points += user.stats.hearts * 100; points += user.stats.comments * 50; user.points = points / 10000; } function setImages() { var ratio_1 = $scope.users[0].points / $scope.top.total_points; var ratio_2 = $scope.users[1].points / $scope.top.total_points; $scope.users[0].image_size = { width: ratio_1 * 100 + '%' }; $scope.users[1].image_size = { width: ratio_2 * 100 + '%' }; } function getUserPens(user, page) { var getPens = CodepenDataService.getPens(user.nickname, 'public', page); getPens.then(function(pens) { setCurrentPen(user, pens, 0); $.each(pens, function() { this.views = parseInt(this.views || 0); this.loves = parseInt(this.loves || 0); this.comments = parseInt(this.comments || 0); updatePen(user,this); }); getPoints(user); updateTops(); setImages(); if(!$scope.edit) { $timeout(function() { getUserPens(user, page + 1); }, 600); } else { handleUserComplete(user, 'Cancelled'); } }, function(err) { handleUserComplete(user, err); }); } function handleUserComplete(user, message) { user.current_pen = null; if(!user.pens_loaded) user.pens_loaded = true; checkComplete(); } function getUser(user) { var getUser = CodepenDataService.getUser(user.nickname); getUser.then(function(profile) { user.loading = false; updateUser(user, profile); }, function(err) { user.loading = false; user.error = '"' + user.nickname + '" could not be found.'; console.warn(err); }); } $scope.setDetailUser = function(user) { $scope.detail_user = user; } $scope.resetDetailUser = function() { $scope.detail_user = false; } $scope.loadCodepenData = function() { $scope.edit = false; $.each($scope.users, function() { var user = this; var getting = true; getUserPens(user,1); }); }; $scope.randomUser = function(which) { $scope.users[which].nickname = randomUser(); getUser($scope.users[which]); } function clearError(user) { user.error = ""; } function clearErrors() { clearError($scope.users[0]); clearError($scope.users[1]); } function randomUser() { var users = usersList(); return users[Math.round(Math.random() * (users.length - 1))] } // top 300 users. function usersList() { return [ "thebabydino","tmrDevelops","pixelass","WhiteWolfWizard","natewiley","oknoblich","bennettfeely","jackrugile","hugo","LukyVj","towc","yoksel","dudleystorey","lukerichardville","Hornebom","netsi1964","nakome","berdejitendra","kenjiSpecial","katydecorah","rlemon","abergin","chrisgannon","ge1doot","lbebber","loktar00","Sonick","FWeinb","juanbrujo","andreasstorm","zadvorsky","tholman","Mombasa","fixcl","judag","MyXoToD","EduardoLopes","Zeaklous","HugoGiraudel","suez","grayghostvisuals","satchmorun","rileyjshaw","dope","gbnikolov","jakealbaugh","hakimel","elrumordelaluz","Mamboleoo","rachsmith","chrisota","kevinjannis","Kseso","TimPietrusky","ImagineProgramming","enxaneta","SitePoint","joshnh","KyleDavidE","brbcoding","TimLamber","raurir","rafaelcastrocouto","joe-watkins","alexsafayan","leemark","samarkandiy","motorlatitude","desandro","the_ruther4d","antoniskamamis","sdras","DonKarlssonSan","carpenumidium","ettrics","pmk","jakob-e","lonekorean","pouretrebelle","jshawl","wontem","tystrong","ScottMarshall","akwright","laviperchik","sol0mka","Pesca","mariusbalaj","spookyscary","chriscoyier","scottkellum","donovanh","GreenSock","code_dependant","zerospree","grgrdvrt","markmurray","Thibaut","unmeshpro","davatron5000","jorgeatgu","trhino","Dreamdealer","maggiben","m412c0","soulwire","32bitkid","waddington","rickyeckhardt","yukulele","egrucza","Francext","winkerVSbecks","nicolazj","schoenwaldnils","pcameron","indyplanets","EightArmsHQ","dervondenbergen","fbrz","seanseansean","mikehobizal","joshbader","zachernuk","nicoptere","noahblon","daneden","cx20","codeandcam","roborich","gastonfig","simeydotme","vineethtr","gpyne","Ruddy","wenbin5243","shubhra","hynden","acarva1","martinwolf","SaschaSigl","kaliedarik","stefanjudis","Xanmia","noeldelgado","Michiel","simurai","timohausmann","GabbeV","boltaway","pixelthing","airnan","MichaelArestad","ykob","Metty","DeptofJeffAyer","atelierbram","jjmartucci","creme","soulrider911","designcouch","ZevanRosser","dehash","geoffyuen","davilious","msurguy","hans","dissimulate","edankwan","satcy","chinchang","trajektorijus","mladen___","johnie","kman","tjoen","chrisnager","AmeliaBR","yusufbkr","jonitrythall","rachelwong","beesandtrees","jpod","cchambers","auginator","frytyler","jessenwells","robertmesserle","Oka","naoyashiga","mariosmaselli","XDBoy018","larrygeams","BrianDGLS","moklick","andytran","CrocoDillon","zessx","msval","pankajparashar","jonigiuro","MarcMalignan","jeroens","ludviglindblom","sakri","keithclark","ajerez","mallendeo","alexdevero","jurbank","brownerd","jcoulterdesign","potatoDie","shakdaniel","marian-cojoc-ro","rachelnabors","uriuriuriu","virgilpana","zachacole","bronsrobin","daless14","Elbone","ZCKVNS","vsync","pirrera","matt-west","long-lazuli","awesomephant","frxnz","Lewitje","amcharts","yy","SaraSoueidan","Aldlevine","jxnblk","icebob","PageOnline","ElmahdiMahmoud","terrymun","icutpeople","prowebix","carmination","bali_balo","fusco","jaflo","boylett","adamjld","brandonbrule","chris-creditdesign","nickmoreton","mknadler","igcorreia","scrimothy","rss","run-time","jlong","macreart","achudars","ssh","cjgammon","ControlledChaos","monstersaurous","christian-fei","captainbrosset","Funsella","kevingimbel","onediv","s","rlacorne","Yakudoo","drew_mc","shshaw","michaellee","ThisIsJohnBrown","chrislaarman","jotavejv","tdevine33","ionic","pwsm50","shadeed","georgehastings","ademilter","keithwyland","khadkamhn","rikschennink","bphillips201","zitrusfrisch","jhamon","andersschmidt","Rplus","chrishutchinson","Zaku","jsbrown","kowlor","paintbycode","ashmind","souporserious","Guilh" ] } }
]);
function getParam(name) { name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'), results = regex.exec(location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}
Developer | Ethan |
Username | pianotiles2 |
Uploaded | January 12, 2023 |
Rating | 3 |
Size | 10,854 Kb |
Views | 8,096 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Particle Swarm | 8,522 Kb |
Dot waves | 2,990 Kb |
Roblox | 22,202 Kb |
TRUMP VS CLINTON | 2,178 Kb |
Jigglypuff | 4,027 Kb |
Rainbow Messenger | 4,437 Kb |
My Homepage | 2,903 Kb |
Firework | 2,849 Kb |
Solar System | 127,035 Kb |
A Pen by Ethan | 1,358 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Classy Blockquote Styling | Andrewwright | 3,212 Kb |
Draggable directive | YahyaKacem | 2,277 Kb |
Day 1 - Portfolio | Chpecson | 3,532 Kb |
Experiments with Vertical Centering | KatieK2 | 3,924 Kb |
Chuck Norris Background | Manz | 1,967 Kb |
Shape Outside - Polygon | Stacy | 3,954 Kb |
RAQuote | Naderk007 | 4,412 Kb |
Weather App 2 | MightyJoeW | 2,877 Kb |
A Pen by Jonas Bjork | Jonasbjork | 3,115 Kb |
A form arranged using automatic placement. | Vikasford | 2,103 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!