2010-11-06 04:12:37 +00:00
( function ( ) {
2011-01-19 23:42:11 +00:00
2010-11-10 23:31:15 +00:00
var angularJsUrl ;
var scripts = document . getElementsByTagName ( "script" ) ;
2011-02-22 22:48:53 +00:00
var angularJsRegex = /^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/ ;
2010-11-10 23:31:15 +00:00
for ( var j = 0 ; j < scripts . length ; j ++ ) {
var src = scripts [ j ] . src ;
2011-02-04 22:09:17 +00:00
if ( src && src . match ( angularJsRegex ) ) {
2011-01-18 22:15:53 +00:00
angularJsUrl = src . replace ( 'docs.angularjs.org' , 'code.angularjs.org' ) ;
2011-02-04 22:09:17 +00:00
continue ;
2010-11-10 23:31:15 +00:00
}
}
2011-01-19 23:42:11 +00:00
2010-11-06 04:12:37 +00:00
var HTML _TEMPLATE =
2010-11-10 23:31:15 +00:00
'<!doctype html>\n' +
2010-11-06 04:12:37 +00:00
'<html xmlns:ng="http://angularjs.org">\n' +
2011-01-18 21:59:55 +00:00
' <script src="' + angularJsUrl + '" ng:autobind></script>\n' +
2010-11-10 23:31:15 +00:00
' <body>\n' +
2010-11-06 04:12:37 +00:00
'_HTML_SOURCE_\n' +
2010-11-10 23:31:15 +00:00
' </body>\n' +
2010-11-06 04:12:37 +00:00
'</html>' ;
angular . widget ( 'doc:example' , function ( element ) {
this . descend ( true ) ; //compile the example code
element . hide ( ) ;
2011-02-22 22:48:53 +00:00
var example = element . find ( 'pre.doc-source' ) . eq ( 0 ) ,
2010-11-06 04:12:37 +00:00
exampleSrc = example . text ( ) ,
2011-02-22 22:48:53 +00:00
scenario = element . find ( 'pre.doc-scenario' ) . eq ( 0 ) ;
2010-11-06 04:12:37 +00:00
2010-11-10 23:31:15 +00:00
var code = indent ( exampleSrc ) ;
2011-02-01 18:01:02 +00:00
var tabHtml =
'<ul class="doc-example">' +
'<li class="doc-example-heading"><h3>Source</h3></li>' +
'<li class="doc-example-source" ng:non-bindable>' +
'<pre class="brush: js; html-script: true; highlight: [' +
code . hilite + ']; toolbar: false;"></pre></li>' +
'<li class="doc-example-heading"><h3>Live Preview</h3></li>' +
'<li class="doc-example-live">' + exampleSrc + '</li>' ;
if ( scenario . text ( ) ) {
tabHtml +=
'<li class="doc-example-heading"><h3>Scenario Test</h3></li>' +
'<li class="doc-example-scenario"><pre class="brush: js">' + scenario . text ( ) + '</pre></li>' ;
}
tabHtml +=
'</ul>' ;
var tabs = angular . element ( tabHtml ) ;
2011-01-19 23:42:11 +00:00
2010-11-10 23:31:15 +00:00
tabs . find ( 'li.doc-example-source > pre' ) . text ( HTML _TEMPLATE . replace ( '_HTML_SOURCE_' , code . html ) ) ;
2010-11-06 04:12:37 +00:00
element . html ( '' ) ;
element . append ( tabs ) ;
element . show ( ) ;
var script = ( exampleSrc . match ( /<script[^\>]*>([\s\S]*)<\/script>/ ) || [ ] ) [ 1 ] || '' ;
try {
eval ( script ) ;
} catch ( e ) {
alert ( e ) ;
}
} ) ;
2011-01-19 23:42:11 +00:00
2010-11-10 23:31:15 +00:00
function indent ( text ) {
2011-01-31 19:55:44 +00:00
if ( ! text ) return text ;
2011-04-07 19:34:34 +00:00
var lines = text . split ( /\r?\n/ ) ;
2010-11-10 23:31:15 +00:00
var lineNo = [ ] ;
2011-01-26 05:55:11 +00:00
// remove any leading blank lines
2010-11-10 23:31:15 +00:00
while ( lines [ 0 ] . match ( /^\s*$/ ) ) lines . shift ( ) ;
2011-01-26 05:55:11 +00:00
// remove any trailing blank lines
2010-11-10 23:31:15 +00:00
while ( lines [ lines . length - 1 ] . match ( /^\s*$/ ) ) lines . pop ( ) ;
2011-01-26 05:55:11 +00:00
var minIndent = 999 ;
2010-11-10 23:31:15 +00:00
for ( var i = 0 ; i < lines . length ; i ++ ) {
2011-01-26 05:55:11 +00:00
var line = lines [ 0 ] ;
var indent = line . match ( /^\s*/ ) [ 0 ] ;
if ( indent !== line && indent . length < minIndent ) {
minIndent = indent . length ;
}
}
for ( var i = 0 ; i < lines . length ; i ++ ) {
lines [ i ] = ' ' + lines [ i ] . substring ( minIndent ) ;
lineNo . push ( 5 + i ) ;
2010-11-10 23:31:15 +00:00
}
return { html : lines . join ( '\n' ) , hilite : lineNo . join ( ',' ) } ;
} ;
2011-01-19 23:42:11 +00:00
2011-05-23 22:49:33 +00:00
var HTML _TPL =
'<a ng:init="showInstructions = {show}" ng:show="!showInstructions" ng:click="showInstructions = true" href>Show Instructions</a>' +
'<div ng:controller="TutorialInstructionsCtrl" ng:show="showInstructions">' +
'<div class="tabs-nav">' +
'<ul>' +
'</ul>' +
'</div>' +
'<div class="tabs-content"><div class="tabs-content-inner">' +
'</div></div>' +
'</div>' ;
var HTML _NAV = '<li ng:class="currentCls(\'{id}\')"><a ng:click="select(\'{id}\')" href>{title}</a></li>' ;
var HTML _CONTENT = '<div ng:show="selected==\'{id}\'">{content}</div>' ;
var DEFAULT _NAV =
'<li ng:class="currentCls(\'git-mac\')"><a ng:click="select(\'git-mac\')" href>Git on Mac/Linux</a></li>' +
'<li ng:class="currentCls(\'git-win\')"><a ng:click="select(\'git-win\')" href>Git on Windows</a></li>' +
'<li ng:class="currentCls(\'ss-mac\')"><a ng:click="select(\'ss-mac\')" href>Snapshots on Mac/Linux</a></li>' +
'<li ng:class="currentCls(\'ss-win\')"><a ng:click="select(\'ss-win\')" href>Snapshots on Windows</a></li>' ;
var DEFAULT _CONTENT =
'<div ng:show="selected==\'git-mac\'">' +
'<ol>' +
'<li><p>Reset the workspace to step {step}.</p>' +
'<pre><code> git checkout -f step-{step}</code></pre></li>' +
'<li><p>Refresh your browser or check the app out on <a href="http://angular.github.com/angular-phonecat/step-{step}/app">anglar\'s server</a>.</p></li>' +
'</ol>' +
'</div>' +
'<div ng:show="selected==\'git-win\'">' +
'<ol>' +
'<li><p>Reset the workspace to step {step}.</p>' +
'<pre><code> git checkout -f step-{step}</code></pre></li>' +
'<li><p>Refresh your browser or check the app out on <a href="http://angular.github.com/angular-phonecat/step-{step}/app">anglar\'s server</a>.</p></li>' +
'</ol>' +
'</div>' +
'<div ng:show="selected==\'ss-mac\'">' +
'<ol>' +
'<li><p>Reset the workspace to step {step}.</p>' +
'<pre><code> ./goto_step.sh {step}</code></pre></li>' +
'<li><p>Refresh your browser or check the app out on <a href="http://angular.github.com/angular-phonecat/step-{step}/app">anglar\'s server</a>.</p></li>' +
'</ol>' +
'</div>' +
'<div ng:show="selected==\'ss-win\'">' +
'<ol>' +
'<li><p>Reset the workspace to step {step}.</p>' +
'<pre><code> ./goto_step.bat {step}</code></pre></li>' +
'<li><p>Refresh your browser or check the app out on <a href="http://angular.github.com/angular-phonecat/step-{step}/app">anglar\'s server</a>.</p></li>' +
'</ol>' +
'</div>' ;
angular . widget ( 'doc:tutorial-instructions' , function ( element ) {
element . hide ( ) ;
this . descend ( true ) ;
var tabs = angular . element ( HTML _TPL . replace ( '{show}' , element . attr ( 'show' ) || 'false' ) ) ,
nav = tabs . find ( '.tabs-nav ul' ) ,
content = tabs . find ( '.tabs-content-inner' ) ,
children = element . children ( ) ;
if ( children . length ) {
// load custom content
angular . forEach ( element . children ( ) , function ( elm ) {
var elm = angular . element ( elm ) ,
id = elm . attr ( 'id' ) ;
nav . append ( HTML _NAV . replace ( '{title}' , elm . attr ( 'title' ) ) . replace ( /\{id\}/g , id ) ) ;
content . append ( HTML _CONTENT . replace ( '{id}' , id ) . replace ( '{content}' , elm . html ( ) ) ) ;
} ) ;
} else {
// default
nav . append ( DEFAULT _NAV ) ;
content . append ( DEFAULT _CONTENT . replace ( /\{step\}/g , element . attr ( 'step' ) ) ) ;
}
element . html ( '' ) ;
element . append ( tabs ) ;
element . show ( ) ;
} ) ;
2011-01-19 23:42:11 +00:00
} ) ( ) ;