var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
var rightAnswer = "http://www.acedarspoon.com/wp-content/uploads/2012/12/IMG_67321.jpg";
$scope.answers = [
"http://childadolescentweightmanagement.files.wordpress.com/2012/07/juicy-chicken-burger-pic-19-hamburger-ideas4.jpg",
"http://static.parade.condenast.com/wp-content/uploads/2013/07/hot-dog-ftr.jpg",
rightAnswer,
"http://onpasture.com/wp-content/uploads/2014/04/13-08-08_015226_cbeer.jpg",
"http://www.nextnature.net/wp-content/uploads/2013/02/cheetos-engineered-to-be-addicting-530x353.jpg",
"http://img.wikinut.com/img/185rwtkbn410xfa5/jpeg/0/Mars-Bar-Krispie-Cakes.jpeg",
]
$scope.answer = function(){
if($scope.demoForm.$valid){
if($scope.selection == rightAnswer)
$scope.correct = true;
else
$scope.wrong = true;
}
}
});
app.directive('itemSelector', function factory(){
return {
templateUrl: "itemSelectorTemplate.html",
replace: true,
transclude: true,
restrict: "E",
require: 'ngModel',
scope: {
list: "=",
model: "=ngModel"
},
link: function linking(scope, element, attr, ctrl){
scope.tries = 5;
scope.select = function(item){
ctrl.$setViewValue(item);
}
ctrl.$viewChangeListeners.push(function(){
scope.tries --;
})
}
}
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<link data-require="bootstrap-css@3.1.1" data-semver="3.1.1" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.0-beta.9/angular.js" data-semver="1.3.0-beta.9"></script>
<script data-require="jquery@*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script data-require="bootstrap@*" data-semver="3.1.1" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl" class="container">
<div class="page-header">
<h3>Custom inputs <small>Angular forms</small></h3>
</div>
<form role="form" name="demoForm" ng-submit="answer()" ng-hide="correct || wrong">
<div class="alert alert-info">
<span class="glyphicon glyphicon-question-sign"></span>
What is making me thirsty?
</div>
<div class="form-group" ng-class="{'has-error': !demoForm.mail.$valid}">
<item-selector list="answers" ng-model="selection" name="ans" required>
<div class="button">
<img src="{{item}}" class="img-thumbnail">
<a href="" ng-click="select(item)" class="btn btn-primary">
Select
</a>
</div>
</item-selector>
<span class="help-block" ng-show="demoForm.ans.$error.required">Hint - It's salty</span>
</div>
<button type="submit" class="btn btn-primary" ng-disabled="!demoForm.$valid">Answer</button>
</form>
<div ng-show="correct">
<h3>You are correct!</h3>
<img src="{{selection}}" class="img-thumbnail">
<h2>These pretzels are making me thirsty!</h2>
<a href="?">Reset</a>
</div>
<div ng-show="wrong">
<h3>You are incorrect!</h3>
<img src="{{selection}}" class="img-thumbnail">
<h2>These pretzels are making me thirsty!</h2>
<a href="?">Reset</a>
</div>
</body>
</html>
.item-selector ul {
max-height: 300px;
overflow:auto;
}
.item-selector ul li{
padding: 5px 10px;
}
.item-selector ul li .thumbnail{
padding: 0 !important;
margin: 0 !important;
}
.item-selector ul li .thumbnail.empty {
font-size: 25px;
text-align: center;
line-height: 50px;
}
.selected {
width: 121px;
}
.button {
position: relative;
}
.button .btn {
position: absolute;
bottom: 0;
right: 0;
z-index: 1;
}
.button img {
width: 121px;
}
<div class="btn-group item-selector">
<button type="button" class="btn btn-default dropdown-toggle" ng-disabled="tries==0" data-toggle="dropdown">
<span ng-if="!model">
I don't know... <span class="caret"></span>
</span>
<span ng-if="model">
<img src="{{model}}" class="selected"> <span class="caret"></span>
</span>
</button>
<p class="text-muted">You've got {{tries || 'no'}} more tries</p>
<ul class="dropdown-menu" role="menu">
<li>
<a href="" ng-click="select(null)" class="thumbnail empty">
<span class="glyphicon glyphicon-ban-circle"></span>
</a>
</li>
<li ng-repeat="item in list" ng-transclude></li>
</ul>
</div>