diff --git a/docs/content/guide/dev_guide.services.$location.ngdoc b/docs/content/guide/dev_guide.services.$location.ngdoc index 5bce8b0c4fbc..5174751669e7 100644 --- a/docs/content/guide/dev_guide.services.$location.ngdoc +++ b/docs/content/guide/dev_guide.services.$location.ngdoc @@ -369,8 +369,10 @@ redirect to regular / hashbang url, as this conversion happens only during parsi In this examples we use `` - + + + + # Caveats diff --git a/docs/spec/ngdocSpec.js b/docs/spec/ngdocSpec.js index 72ad69ff4442..367f91b4fbbb 100644 --- a/docs/spec/ngdocSpec.js +++ b/docs/spec/ngdocSpec.js @@ -89,6 +89,14 @@ describe('ngdoc', function() { '
\n<>\n

after

'); }); + it('should preserve the source attribute', function() { + var doc = new Doc('@description before ' + + 'lala after'); + doc.parse(); + expect(doc.description).toContain('

before

' + + '
lala

after

'); + }); + it('should preserve the jsfiddle attribute', function() { var doc = new Doc('@description before ' + 'lala after'); diff --git a/docs/src/ngdoc.js b/docs/src/ngdoc.js index c5da18e68d85..562144b517c2 100644 --- a/docs/src/ngdoc.js +++ b/docs/src/ngdoc.js @@ -117,9 +117,9 @@ Doc.prototype = { ''; }); } else if (isDocWidget('example')) { - text = text.replace(/([\s\S]*)<\/doc:source>/mi, - function(_, jsfiddle, content){ - return '
' +
+        text = text.replace(/]*)?>([\s\S]*)<\/doc:source>/mi,
+          function(_, attrs, content){
+            return '
' +
                       htmlEscape(content) +
                    '
'; }); @@ -138,11 +138,11 @@ Doc.prototype = { if (!isFullUrl) self.links.push(absUrl); - return '' - + (isAngular ? '' : '') - + (title || url).replace(/\n/g, ' ') - + (isAngular ? '' : '') - + ''; + return '' + + (isAngular ? '' : '') + + (title || url).replace(/\n/g, ' ') + + (isAngular ? '' : '') + + ''; }); text = new Showdown.converter().makeHtml(text); } @@ -157,7 +157,7 @@ Doc.prototype = { var match; var self = this; self.text.split(NEW_LINE).forEach(function(line){ - if (match = line.match(/^\s*@(\w+)(\s+(.*))?/)) { + if ((match = line.match(/^\s*@(\w+)(\s+(.*))?/))) { // we found @name ... // if we have existing name flush(); @@ -172,9 +172,9 @@ Doc.prototype = { }); flush(); this.shortName = (this.name || '').split(/[\.#]/).pop(); - this.id = this.id // if we have an id just use it - || (((this.file||'').match(/.*\/([^\/]*)\.ngdoc/)||{})[1]) // try to extract it from file name - || this.name; // default to name + this.id = this.id || // if we have an id just use it + (((this.file||'').match(/.*\/([^\/]*)\.ngdoc/)||{})[1]) || // try to extract it from file name + this.name; // default to name this.description = this.markdown(this.description); this.example = this.markdown(this.example); this['this'] = this.markdown(this['this']); @@ -182,9 +182,9 @@ Doc.prototype = { function flush() { if (atName) { - var text = trim(atText.join('\n')); + var text = trim(atText.join('\n')), match; if (atName == 'param') { - var match = text.match(/^{([^}=]+)(=)?}\s+(([^\s=]+)|\[(\S+)=([^\]]+)\])\s+(.*)/); + match = text.match(/^\{([^}=]+)(=)?\}\s+(([^\s=]+)|\[(\S+)=([^\]]+)\])\s+(.*)/); // 1 12 2 34 4 5 5 6 6 3 7 7 if (!match) { throw new Error("Not a valid 'param' format: " + text); @@ -198,7 +198,7 @@ Doc.prototype = { }; self.param.push(param); } else if (atName == 'returns') { - var match = text.match(/^{([^}=]+)}\s+(.*)/); + match = text.match(/^\{([^}=]+)\}\s+(.*)/); if (!match) { throw new Error("Not a valid 'returns' format: " + text); } @@ -207,13 +207,13 @@ Doc.prototype = { description: self.markdown(text.replace(match[0], match[2])) }; } else if(atName == 'requires') { - var match = text.match(/^([^\s]*)\s*([\S\s]*)/); + match = text.match(/^([^\s]*)\s*([\S\s]*)/); self.requires.push({ name: match[1], text: self.markdown(match[2]) }); } else if(atName == 'property') { - var match = text.match(/^{(\S+)}\s+(\S+)(\s+(.*))?/); + match = text.match(/^\{(\S+)\}\s+(\S+)(\s+(.*))?/); if (!match) { throw new Error("Not a valid 'property' format: " + text); } @@ -224,7 +224,7 @@ Doc.prototype = { }; self.properties.push(property); } else if(atName == 'eventType') { - var match = text.match(/^([^\s]*)\s+on\s+([\S\s]*)/); + match = text.match(/^([^\s]*)\s+on\s+([\S\s]*)/); self.type = match[1]; self.target = match[2]; } else { diff --git a/docs/src/templates/doc_widgets.js b/docs/src/templates/doc_widgets.js index 1890e93a2520..56ef5bcf4ffb 100644 --- a/docs/src/templates/doc_widgets.js +++ b/docs/src/templates/doc_widgets.js @@ -28,19 +28,28 @@ //jqlite instead. jqlite's find() method currently supports onlt getElementsByTagName! var example = element.find('pre').eq(0), //doc-source exampleSrc = example.text(), + showSource = example.attr('source') !== 'false', jsfiddle = example.attr('jsfiddle') || true, scenario = element.find('pre').eq(1); //doc-scenario var code = indent(exampleSrc); var tabHtml = - '
    ' + + '
      '; + + // show source tab, if not disabled + if (showSource) { + tabHtml += '
    • Source

    • ' + '
    • ' + jsFiddleButton(jsfiddle) + // may or may not have value '
    • ' + + code.hilite + ']; toolbar: false;">
'; + } + // show live preview tab + tabHtml += '
  • Live Preview

  • ' + '
  • ' + exampleSrc +'
  • '; + // show scenario tab, if present if (scenario.text()) { tabHtml += '
  • Scenario Test

  • ' + @@ -69,14 +78,14 @@ function jsFiddleButton(jsfiddle) { if (jsfiddle !== 'false') { - if(jsfiddle == true) { + if(jsfiddle === true) { //dynamically generate a fiddle var fiddleUrl = 'http://jsfiddle.net/api/post/library/pure/', fiddleSrc = exampleSrc, stripIndent = fiddleSrc.match(/^(\s*)/)[1].length; //escape closing textarea - fiddleSrc = fiddleSrc.replace(/<\/textarea>/gi,'</textarea>') + fiddleSrc = fiddleSrc.replace(/<\/textarea>/gi,'</textarea>'); //strip extra indentation fiddleSrc = fiddleSrc.replace(new RegExp('^\\s{' + stripIndent + '}', 'gm'), ''); @@ -113,12 +122,14 @@ if (!text) return text; var lines = text.split(/\r?\n/); var lineNo = []; + var i; + // remove any leading blank lines while (lines[0].match(/^\s*$/)) lines.shift(); // remove any trailing blank lines while (lines[lines.length - 1].match(/^\s*$/)) lines.pop(); var minIndent = 999; - for ( var i = 0; i < lines.length; i++) { + for (i = 0; i < lines.length; i++) { var line = lines[0]; var indent = line.match(/^\s*/)[0]; if (indent !== line && indent.length < minIndent) { @@ -126,12 +137,12 @@ } } - for ( var i = 0; i < lines.length; i++) { + for (i = 0; i < lines.length; i++) { lines[i] = ' ' + lines[i].substring(minIndent); lineNo.push(5 + i); } return {html: lines.join('\n'), hilite: lineNo.join(',') }; - }; + } var HTML_TPL = '

    Workspace Reset Instructions  ➤

    ' + @@ -199,8 +210,8 @@ if (children.length) { // load custom content angular.forEach(element.children(), function(elm) { - var elm = angular.element(elm), - id = elm.attr('id'); + elm = angular.element(elm); + var 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())); diff --git a/docs/src/templates/docs.css b/docs/src/templates/docs.css index 7f1cea8ea689..d42ec093ebaa 100644 --- a/docs/src/templates/docs.css +++ b/docs/src/templates/docs.css @@ -467,17 +467,6 @@ td.empty-corner-lt { } /* service.$location Html5 mode example */ -.html5-hashbang-example { - height: 255px; - margin-left: -40px; - padding-left: 30px; -} - -.html5-hashbang-example div { - float: left; - width: 375px; -} - .html5-hashbang-example div input { width: 360px; }