Skip to content

Description #3

@thenanox

Description

@thenanox

Im trying to make directives to work in new docular version but im not able to make description to appear into a directive I created:

This is the documentation:

/**
 * @ngdoc directive
 * @name mpGraph
 * @description
 * This component draws a basic graph.
 * Json example:
 * ```json
 * {
 * "data": [
 *     [0,3],
 *     [4,8],
 *     [8,5],
 *     [9,13]
 * ]
 * }
 * 
 * @param {string} mpGraph receive a JSON containing an array with the data in the graph. Each subrray defines the X and Y coordinates of a point.
 */

I checked the template that draws the description and its implemented with the directive:

<ng-example-container group='group' example="docDescription"></ng-example-container>

Im checking the behaviour of this directive and it seems that needs to have a ng-example or example tag into description in order to generate the description:

     .directive('ngExampleContainer', ['$compile', 'ngmarkdown', function ($compile, markdownService) {
        return {
            scope: {
                example: '=example',
                group: '='
            },
            restrict: 'E',
            link: function ($scope, $element) {
                var template = $scope.example, example, files = [], i = 0;
                if (!template) {
                    return;
                }

                if(!$scope.examples) {
                    $scope.examples = [];
                }

                example = template.match(/(<ng-example[^>]*>[\s\S]+?(?=<\/ng-example>)<\/ng-example>)/g);

                var tempTemplate = markdownService(template.replace(/(<ng-example[^>]*>[\s\S]+?(?=<\/ng-example>)<\/ng-example>)/g, function () {
                    return '\n%%NGTOKEN' + (i++) + '%%\n'
                }));

                i = 0;
                template = tempTemplate.replace(/(<p>%%NGTOKEN[0-9]+%%<\/p>)/g, function () {
                    var index = i++;
                    var exampleItem = example[index];
                    exampleItem = exampleItem.replace('<ng-example', '<ng-example example="examples[' + index + ']"')
                    return exampleItem;
                });

                i = 0;
                template = template.replace(/(<file[^>]*>[\s\S]+?(?=<\/file>)<\/file>)/g, function (content) {
                    files.push(content);
                    return '<div class="NGFILE" id="NGFILE' + (i++) + '"></div>'
                });

                if (example) {
                    example.forEach(function (example) {

                        var exampleEl = $(example);
                        var ex = {
                            deps: exampleEl.attr('deps'),
                            group: $scope.group,
                            module: exampleEl.attr('module'),
                            files: []
                        }

                        var files = example.match(/(<file[^>]*>[\s\S]+?(?=<\/file>)<\/file>)/g);

                        for (var i = 0, l = files.length; i < l; i++) {
                            var fileContent = files[i].match(/<file[^>]*>([\s\S]+)<\/file>/);

                            var child = $(files[i]);
                            var name = child.attr('name');
                            var split = name.split('.');

                            ex.files.push({
                                name: name,
                                content: fileContent[1],
                                type: split[split.length - 1]
                            });

                        }

                        $scope.examples.push(ex);
                    });

                    var compiled = $compile(template)($scope.$new());
                    compiled.each(function () {
                        if ($(this).is('.NGFILE')) {
                            var id = $(this).attr('id');
                            var index = parseInt(id.replace('NGFILE', ''), 10);
                            $(this).replaceWith($(files[index]));
                        }
                    });

                    $element.append(compiled);
                }
            }
        };
    }])

My question is, im i doing something wrong or this is not the right behaviour?

UPDATE:
I thought about the code, and maybe the last part of it should be out of if(example) ? This code block should be in every case?

                    var compiled = $compile(template)($scope.$new());
                    compiled.each(function () {
                        if ($(this).is('.NGFILE')) {
                            var id = $(this).attr('id');
                            var index = parseInt(id.replace('NGFILE', ''), 10);
                            $(this).replaceWith($(files[index]));
                        }
                    });

                    $element.append(compiled);

If i change that, it works, but im still not sure if this was a mistake or im doing it wrong.

Pull request #4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions