<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<!------ Include the above in your HEAD tag ---------->
<!DOCTYPE html><html lang='en' class=''>
<head><script src='//production-assets.codepen.io/assets/editor/live/console_runner-079c09a0e3b9ff743e39ee2d5637b9216b3545af0de366d4b9aad9dc87e26bfd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/events_runner-73716630c22bbc8cff4bd0f07b135f00a0bdc5d14629260c3ec49e5606f98fdd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/css_live_reload_init-2c0dc5167d60a5af3ee189d570b1835129687ea2a61bee3513dee3a50c115a77.js'></script><meta charset='UTF-8'><meta name="robots" content="noindex"><link rel="shortcut icon" type="image/x-icon" href="//production-assets.codepen.io/assets/favicon/favicon-8ea04875e70c4b0bb41da869e81236e54394d63638a1ef12fa558a4a835f1164.ico" /><link rel="mask-icon" type="" href="//production-assets.codepen.io/assets/favicon/logo-pin-f2d2b6d2c61838f7e76325261b7195c27224080bc099486ddd6dccb469b8e8e6.svg" color="#111" /><link rel="canonical" href="https://codepen.io/andrewarchi/pen/qdBVrM?limit=all&page=23&q=code" />
<script src='https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js'></script>
<style class="cp-pen-styles">@import url(https://fonts.googleapis.com/css?family=Roboto:500);
@import url(https://fonts.googleapis.com/css?family=Inconsolata);
.container {
  margin: 0 5%;
}
body {
  font-family: sans-serif;
}
.codetabs-header > ul:before, .codetabs-header > ul:after {
  content: " ";
  display: table;
}
.codetabs-header > ul:after {
  clear: both;
}
.codetabs-header > ul {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.codetabs-header > ul > li {
  display: block;
  float: left;
}
.codetabs-header > ul > li > a {
  display: block;
  padding: 6px 16px;
  color: #fff;
  text-decoration: none;
  position: relative;
}
.codetabs-header > ul > li > a:hover, .codetabs-header > ul > li > a:focus {
  background-color: #4a4a4a;
}
.codetabs-header > ul > li.active > a, .codetabs-header > ul > li.active > a:hover, .codetabs-header > ul > li.active > a:focus {
  cursor: default;
  background-color: #303030;
}
.codetabs-header > ul > li.active > a:before, .codetabs-header > ul > li.active > a:hover:before, .codetabs-header > ul > li.active > a:focus:before {
  content: "";
  bottom: -5px;
  left: calc(50% - 6px);
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-top: 6px solid #303030;
}
.codetabs-header > ul > li.codebox-html.active > a, .codetabs-header > ul > li.codebox-html.active > a:hover, .codetabs-header > ul > li.codebox-html.active > a:focus {
  background-color: #e44d26;
}
.codetabs-header > ul > li.codebox-html.active > a:before, .codetabs-header > ul > li.codebox-html.active > a:hover:before, .codetabs-header > ul > li.codebox-html.active > a:focus:before {
  border-top-color: #e44d26;
}
.codetabs-header > ul > li.codebox-css.active > a, .codetabs-header > ul > li.codebox-css.active > a:hover, .codetabs-header > ul > li.codebox-css.active > a:focus {
  background-color: #0270ba;
}
.codetabs-header > ul > li.codebox-css.active > a:before, .codetabs-header > ul > li.codebox-css.active > a:hover:before, .codetabs-header > ul > li.codebox-css.active > a:focus:before {
  border-top-color: #0270ba;
}
.codetabs-header > ul > li.codebox-javascript.active > a, .codetabs-header > ul > li.codebox-javascript.active > a:hover, .codetabs-header > ul > li.codebox-javascript.active > a:focus {
  background-color: #f7df1e;
}
.codetabs-header > ul > li.codebox-javascript.active > a:before, .codetabs-header > ul > li.codebox-javascript.active > a:hover:before, .codetabs-header > ul > li.codebox-javascript.active > a:focus:before {
  border-top-color: #f7df1e;
}
.codetabs-header > ul > li.codebox-php.active > a, .codetabs-header > ul > li.codebox-php.active > a:hover, .codetabs-header > ul > li.codebox-php.active > a:focus {
  background-color: #6082bb;
}
.codetabs-header > ul > li.codebox-php.active > a:before, .codetabs-header > ul > li.codebox-php.active > a:hover:before, .codetabs-header > ul > li.codebox-php.active > a:focus:before {
  border-top-color: #6082bb;
}
.codetabs-header > ul > li.codebox-java.active > a, .codetabs-header > ul > li.codebox-java.active > a:hover, .codetabs-header > ul > li.codebox-java.active > a:focus {
  background-color: #f89820;
}
.codetabs-header > ul > li.codebox-java.active > a:before, .codetabs-header > ul > li.codebox-java.active > a:hover:before, .codetabs-header > ul > li.codebox-java.active > a:focus:before {
  border-top-color: #f89820;
}
.codetabs-header > ul > li.codebox-csharp.active > a, .codetabs-header > ul > li.codebox-csharp.active > a:hover, .codetabs-header > ul > li.codebox-csharp.active > a:focus {
  background-color: #68217a;
}
.codetabs-header > ul > li.codebox-csharp.active > a:before, .codetabs-header > ul > li.codebox-csharp.active > a:hover:before, .codetabs-header > ul > li.codebox-csharp.active > a:focus:before {
  border-top-color: #68217a;
}
.codebox {
  margin-bottom: 16px;
}
.codebox-header, .codetabs-header {
  font-family: 'Roboto', sans-serif;
  font-size: 16px;
  color: #fff;
  background: #575757;
}
.codebox-header {
  padding: 6px 16px;
}
.codebox-header.codebox-html {
  background-color: #e44d26;
}
.codebox-header.codebox-css {
  background-color: #0270ba;
}
.codebox-header.codebox-javascript {
  background-color: #f7df1e;
}
.codebox-header.codebox-php {
  background-color: #6082bb;
}
.codebox-header.codebox-java {
  background-color: #f89820;
}
.codebox-header.codebox-csharp {
  background-color: #68217a;
}
.codebox-content {
  padding: 16px;
  font-family: Inconsolata, monospaced;
  font-size: 14px;
  color: #fff;
  background-color: #3d3d3d;
}
.codebox-content pre {
  margin: 0;
}
.codebox-content .codetab-content {
  display: none;
}
.codebox-content .codetab-content.active {
  display: block;
}
/*
Railscasts-like style (c) Visoft, Inc. (Damien White)
*/
/*.hljs {
  display: block;
  overflow-x: auto;
  padding: 0.5em;
  background: #232323;
  color: #e6e1dc;
  -webkit-text-size-adjust: none;
}*/
.hljs-comment,
.hljs-javadoc,
.hljs-shebang {
  color: #bc9458;
  font-style: italic;
}
.hljs-keyword,
.ruby .hljs-function .hljs-keyword,
.hljs-request,
.hljs-status,
.nginx .hljs-title,
.method,
.hljs-list .hljs-title {
  color: #c26230;
}
.hljs-string,
.hljs-number,
.hljs-regexp,
.hljs-tag .hljs-value,
.hljs-cdata,
.hljs-filter .hljs-argument,
.hljs-attr_selector,
.apache .hljs-cbracket,
.hljs-date,
.tex .hljs-command,
.asciidoc .hljs-link_label,
.markdown .hljs-link_label {
  color: #a5c261;
}
.hljs-subst {
  color: #519f50;
}
.hljs-tag,
.hljs-tag .hljs-keyword,
.hljs-tag .hljs-title,
.hljs-doctype,
.hljs-sub .hljs-identifier,
.hljs-pi,
.input_number {
  color: #e8bf6a;
}
.hljs-identifier {
  color: #d0d0ff;
}
.hljs-class .hljs-title,
.hljs-type,
.smalltalk .hljs-class,
.hljs-javadoctag,
.hljs-yardoctag,
.hljs-phpdoc,
.hljs-dartdoc {
  text-decoration: none;
}
.hljs-constant,
.hljs-name {
  color: #da4939;
}
.hljs-symbol,
.hljs-built_in,
.ruby .hljs-symbol .hljs-string,
.ruby .hljs-symbol .hljs-identifier,
.asciidoc .hljs-link_url,
.markdown .hljs-link_url,
.hljs-attribute {
  color: #6d9cbe;
}
.asciidoc .hljs-link_url,
.markdown .hljs-link_url {
  text-decoration: underline;
}
.hljs-params,
.hljs-variable,
.clojure .hljs-attribute {
  color: #d0d0ff;
}
.css .hljs-tag,
.hljs-rule .hljs-property,
.hljs-pseudo,
.tex .hljs-special {
  color: #cda869;
}
.css .hljs-class {
  color: #9b703f;
}
.hljs-rule .hljs-keyword {
  color: #c5af75;
}
.hljs-rule .hljs-value {
  color: #cf6a4c;
}
.css .hljs-id {
  color: #8b98ab;
}
.hljs-annotation,
.apache .hljs-sqbracket,
.nginx .hljs-built_in {
  color: #9b859d;
}
.hljs-preprocessor,
.hljs-preprocessor *,
.hljs-pragma {
  color: #8996a8 !important;
}
.hljs-hexcolor,
.css .hljs-value .hljs-number {
  color: #a5c261;
}
.hljs-title,
.hljs-decorator,
.css .hljs-function {
  color: #ffc66d;
}
.diff .hljs-header,
.hljs-chunk {
  background-color: #2f33ab;
  color: #e6e1dc;
  display: inline-block;
  width: 100%;
}
.diff .hljs-change {
  background-color: #4a410d;
  color: #f8f8f8;
  display: inline-block;
  width: 100%;
}
.hljs-addition {
  background-color: #144212;
  color: #e6e1dc;
  display: inline-block;
  width: 100%;
}
.hljs-deletion {
  background-color: #600;
  color: #e6e1dc;
  display: inline-block;
  width: 100%;
}
.coffeescript .javascript,
.javascript .xml,
.tex .hljs-formula,
.xml .javascript,
.xml .vbscript,
.xml .css,
.xml .hljs-cdata {
  opacity: 0.7;
}
</style></head><body>
<div ng-app="app" ng-controller="CodeCtrl" class="container">
  <h1>Source Code Boxes Using Angular</h1>
  <h2>Tabbed Code Boxes</h2>
  <codetabs>
    <codetab ng-repeat="item in code" title="{{item.title}}" language="{{item.language}}" source="item.source"></codetab>
  </codetabs>
  <h2>Seperate Code Boxes</h2>
  <codebox ng-repeat="item in code | limitTo: 3" title="{{item.title}}" language="{{item.language}}" source="item.source"></codebox>
  <h2>Custom Named Code Tabs</h2>
  <codetabs>
    <codetab ng-repeat="item in code | limitTo: 3" title="Tab {{$index + 1}}" language="{{item.language}}" source="item.source"></codetab>
  </codetabs>
</div>
<script src='//production-assets.codepen.io/assets/common/stopExecutionOnTimeout-b2a7b3fe212eaa732349046d8416e00a9dec26eb7fd347590fbced3ab38af52e.js'></script><script src='//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js'></script><script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/93930/highlight.pack.js'></script><script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/93930/angular-highlightjs.min.js'></script>
<script >angular.module('app', ['hljs'])
.controller('CodeCtrl', ['$scope', function($scope) {
  $scope.code = [
    { language: 'html', source: '<p>Hello World!</p>' },
    { language: 'css', source: 'p:after { content: "Hello World"; }' },
    { title: 'JS', language: 'javascript', source: 'alert(\'Hello World!\');' },
    { language: 'php', source: '<!--?php echo="Hello World!" ?-->' },
    { language: 'java', source: 'System.out.println("Hello World!");' },
    { title: 'C#', language: 'csharp', source: 'Console.WriteLine("Hello World!");' },
  ];
}])
.directive('codebox', function() {
  return {
    restrict: 'EA',
    replace: true,
    template:
      '<div class="codebox">' +
      '  <div class="codebox-header codebox-{{language | lowercase}}">{{title || (language | uppercase)}}</div>' +
      '  <div class="codebox-content">' +
      '  <hljs language="{{language | lowercase}}" source="source"><ng-transclude></ng-transclude></hljs>' +
      '  </div>' +
      '</div>',
    scope: {
      title: '@',
      language: '@',
      source: '='
    }
  };
})
//http://jsfiddle.net/Wijmo/ywUYQ/
.directive('codetabs', function() {
  return {
    restrict: 'EA',
    transclude: true,
    scope: {},
    controller: ['$scope', function($scope) {
      var tabs = $scope.tabs = [];
      
      $scope.select = function(tab) {
        angular.forEach(tabs, function(tab) {
          tab.selected = false;
        });
        tab.selected = true;
      }
 
      this.addPane = function(tab) {
        if (tabs.length == 0) { $scope.select(tab); }
        tabs.push(tab);
      }
    }],
    template:
      '<div class="codebox">' +
      '  <div class="codetabs-header">' +
      '    <ul>' +
      '      <li ng-repeat="tab in tabs" ng-class="{active: tab.selected}" class="codebox-{{tab.language | lowercase}}">'+
      '        <a href="" ng-click="select(tab)">{{tab.title || (tab.language | uppercase)}}</a>' +
      '      </li>' +
      '    </ul>' +
      '  </div>' +
      '  <div class="codebox-content" ng-transclude></div>' +
      '</div>',
    replace: true
  };
}).
directive('codetab', function() {
  return {
    require: '^codetabs',
    restrict: 'EA',
    transclude: true,
    scope: {
      title: '@',
      language: '@',
      source: '='
    },
    link: function(scope, element, attrs, tabsCtrl) {
      tabsCtrl.addPane(scope);
    },
    template:
      //'<div class="codetab-content" ng-class="{active: selected}" ng-transclude></div>',
      '<div class="codetab-content" ng-class="{active: selected}">' +
      //'  <pre><code data-language="{{language | lowercase}}">{{source}}</code></pre>' +
      '  <hljs language="{{language | lowercase}}" source="source"><ng-transclude></ng-transclude></hljs>' +
      '</div>',
    replace: true
  };
})
//# sourceURL=pen.js
</script>
</body></html>