{"id":15673052,"url":"https://github.com/rajasegar/ember-docgen","last_synced_at":"2025-05-06T22:23:25.245Z","repository":{"id":57223724,"uuid":"199259440","full_name":"rajasegar/ember-docgen","owner":"rajasegar","description":"A CLI and toolbox to extract information from Ember component files for documentation generation purposes. ","archived":false,"fork":false,"pushed_at":"2023-10-16T18:18:22.000Z","size":528,"stargazers_count":15,"open_issues_count":11,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-18T01:49:14.180Z","etag":null,"topics":["cli","documentation","documentation-generator","emberjs"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rajasegar.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-28T08:00:22.000Z","updated_at":"2020-07-09T05:18:55.000Z","dependencies_parsed_at":"2024-10-23T11:05:51.533Z","dependency_job_id":null,"html_url":"https://github.com/rajasegar/ember-docgen","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajasegar%2Fember-docgen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajasegar%2Fember-docgen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajasegar%2Fember-docgen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajasegar%2Fember-docgen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rajasegar","download_url":"https://codeload.github.com/rajasegar/ember-docgen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252777439,"owners_count":21802597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","documentation","documentation-generator","emberjs"],"created_at":"2024-10-03T15:36:23.381Z","updated_at":"2025-05-06T22:23:25.218Z","avatar_url":"https://github.com/rajasegar.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"ember-docgen\n============\n\n[![Build Status](https://travis-ci.org/rajasegar/ember-docgen.svg?branch=master)](https://travis-ci.org/rajasegar/ember-docgen) \n[![Coverage Status](https://coveralls.io/repos/github/rajasegar/ember-docgen/badge.svg?branch=master)](https://coveralls.io/github/rajasegar/ember-docgen?branch=master)\n[![Version](https://img.shields.io/npm/v/ember-docgen.svg)](https://npmjs.org/package/ember-docgen)\n[![Downloads/week](https://img.shields.io/npm/dw/ember-docgen.svg)](https://npmjs.org/package/ember-docgen)\n\n\nA CLI and toolbox to extract information from Ember component files for documentation generation purposes. \n\n## Install\nInstall the npm package globally:\n\n```sh\nnpm i -g ember-docgen\n```\n\n# Usage\nUsage: ember-docgen [path...] [options]\n\n```sh\nember-docgen ~/Code/ember-styleguide/addons/components\n```\n\nA CLI and toolbox to extract information from Ember component files for documentation generation purposes.\n\n## Options:\n*  -v, --version  CLI Version\n*  --pods         Enable support for POD style components\n*  -h, --help     output usage information\n\n# From\n```js\nimport Component from '@ember/component';\nimport layout from '../templates/components/es-accordion';\nimport {\n  get,\n  getProperties,\n  set,\n} from '@ember/object';\nimport {\n  isPresent,\n} from '@ember/utils';\nimport { computed } from '@ember/object';\nimport {\n  A,\n} from '@ember/array';\n\nexport default Component.extend({\n  layout,\n\n  classNames: ['accordion-group'],\n\n  activeItem: null,\n  focusIndex: null,\n  accordionItemIndexes: null,\n\n  accordionState: computed('activeItem', 'focusIndex', function() {\n    const {\n      activeItem,\n      focusIndex,\n      actions,\n    } = getProperties(this, [\n      'activeItem',\n      'focusIndex',\n      'actions',\n    ]);\n\n    return {\n      activeItem,\n      focusIndex,\n      setActiveItem: actions.setActiveItem.bind(this),\n      setFocusIndex: actions.setFocusIndex.bind(this),\n      registerIndex: actions.registerIndex.bind(this),\n    };\n  }),\n\n  init() {\n    this._super(...arguments);\n\n    set(this, 'accordionItemIndexes', []);\n  },\n\n  keyDown(e) {\n    const keyCode = get(e, 'keyCode');\n    const focusIndex = get(this, 'focusIndex');\n\n    if (isPresent(focusIndex)) {\n      const targetIndex = this._resolveTargetItemIndex(keyCode);\n\n      set(this, 'activeItem', targetIndex);\n    }\n  },\n\n  _resolveTargetItemIndex(keyCode) {\n    const {\n      accordionItemIndexes,\n      activeItem,\n      focusIndex,\n    } = getProperties(this, [\n      'accordionItemIndexes',\n      'activeItem',\n      'focusIndex',\n    ]);\n    const first = Math.min(...accordionItemIndexes);\n    const last = Math.max(...accordionItemIndexes);\n    let itemIndexOfIndex = A(accordionItemIndexes).indexOf(activeItem);\n    let targetIndex;\n\n    switch (keyCode) {\n      case 38:\n        if (activeItem === null || itemIndexOfIndex === -1) {\n          targetIndex = focusIndex;\n        } else if (activeItem === first) {\n          targetIndex = last;\n        } else {\n          itemIndexOfIndex--\n          targetIndex = accordionItemIndexes[itemIndexOfIndex];\n        }\n        break;\n      case 40:\n        if (activeItem === null || itemIndexOfIndex === -1) {\n          targetIndex = focusIndex;\n        } else if (activeItem === last) {\n          targetIndex = first;\n        } else {\n          itemIndexOfIndex++\n          targetIndex = accordionItemIndexes[itemIndexOfIndex];\n        }\n        break;\n      case 36:\n        targetIndex = first;\n        break;\n      case 35:\n        targetIndex = last;\n        break;\n      case 13:\n      case 32:\n        if (activeItem !== focusIndex) {\n          targetIndex = focusIndex;\n        } else {\n          targetIndex = null;\n        }\n        break;\n      default:\n        targetIndex = activeItem;\n    }\n\n    return targetIndex;\n  },\n\n  actions: {\n    setActiveItem(accordionItemIndex) {\n      return set(this, 'activeItem', accordionItemIndex);\n    },\n\n    setFocusIndex(accordionItemIndex) {\n      set(this, 'focusIndex', accordionItemIndex);\n    },\n\n    registerIndex(accordionItemIndex) {\n      get(this, 'accordionItemIndexes').push(accordionItemIndex);\n    },\n  },\n});\n```\n\n# To\n```js\n\nimport Component from '@ember/component';\nimport layout from '../templates/components/es-accordion';\nimport {\n  get,\n  getProperties,\n  set,\n} from '@ember/object';\nimport {\n  isPresent,\n} from '@ember/utils';\nimport { computed } from '@ember/object';\nimport {\n  A,\n} from '@ember/array';\n\n/**\n  EsAccordion Usage:\n  @class EsAccordion\n  @namespace Components\n  @extends Ember.Component\n  @public\n*/\nexport default Component.extend({\n  layout,\n\n  classNames: ['accordion-group'],\n\n  /**\n  * activeItem\n  *\n  * @field activeItem\n  * @type null\n  * @public\n  */\n  activeItem: null,\n  /**\n  * focusIndex\n  *\n  * @field focusIndex\n  * @type null\n  * @public\n  */\n  focusIndex: null,\n  /**\n  * accordionItemIndexes\n  *\n  * @field accordionItemIndexes\n  * @type null\n  * @public\n  */\n  accordionItemIndexes: null,\n\n  /**\n  * accordionState\n  *\n  * @computed accordionState\n  */\n  accordionState: computed('activeItem', 'focusIndex', function() {\n    const {\n      activeItem,\n      focusIndex,\n      actions,\n    } = getProperties(this, [\n      'activeItem',\n      'focusIndex',\n      'actions',\n    ]);\n\n    return {\n      activeItem,\n      focusIndex,\n      setActiveItem: actions.setActiveItem.bind(this),\n      setFocusIndex: actions.setFocusIndex.bind(this),\n      registerIndex: actions.registerIndex.bind(this),\n    };\n  }),\n\n  /**\n  * init\n  *\n  * @method init\n  * @public\n  *\n  */\n  init() {\n    this._super(...arguments);\n\n    set(this, 'accordionItemIndexes', []);\n  },\n\n  /**\n  * keyDown\n  *\n  * @method keyDown\n  * @public\n  * @param {any} e\n  */\n  keyDown(e) {\n    const keyCode = get(e, 'keyCode');\n    const focusIndex = get(this, 'focusIndex');\n\n    if (isPresent(focusIndex)) {\n      const targetIndex = this._resolveTargetItemIndex(keyCode);\n\n      set(this, 'activeItem', targetIndex);\n    }\n  },\n\n  /**\n  * _resolveTargetItemIndex\n  *\n  * @method _resolveTargetItemIndex\n  * @private\n  * @param {any} keyCode\n  */\n  _resolveTargetItemIndex(keyCode) {\n    const {\n      accordionItemIndexes,\n      activeItem,\n      focusIndex,\n    } = getProperties(this, [\n      'accordionItemIndexes',\n      'activeItem',\n      'focusIndex',\n    ]);\n    const first = Math.min(...accordionItemIndexes);\n    const last = Math.max(...accordionItemIndexes);\n    let itemIndexOfIndex = A(accordionItemIndexes).indexOf(activeItem);\n    let targetIndex;\n\n    switch (keyCode) {\n      case 38:\n        if (activeItem === null || itemIndexOfIndex === -1) {\n          targetIndex = focusIndex;\n        } else if (activeItem === first) {\n          targetIndex = last;\n        } else {\n          itemIndexOfIndex--\n          targetIndex = accordionItemIndexes[itemIndexOfIndex];\n        }\n        break;\n      case 40:\n        if (activeItem === null || itemIndexOfIndex === -1) {\n          targetIndex = focusIndex;\n        } else if (activeItem === last) {\n          targetIndex = first;\n        } else {\n          itemIndexOfIndex++\n          targetIndex = accordionItemIndexes[itemIndexOfIndex];\n        }\n        break;\n      case 36:\n        targetIndex = first;\n        break;\n      case 35:\n        targetIndex = last;\n        break;\n      case 13:\n      case 32:\n        if (activeItem !== focusIndex) {\n          targetIndex = focusIndex;\n        } else {\n          targetIndex = null;\n        }\n        break;\n      default:\n        targetIndex = activeItem;\n    }\n\n    return targetIndex;\n  },\n\n  actions: {\n    /**\n    * setActiveItem\n    *\n    * @method setActiveItem\n    * @public\n    * @param {any} accordionItemIndex\n    */\n    setActiveItem(accordionItemIndex) {\n      return set(this, 'activeItem', accordionItemIndex);\n    },\n\n    /**\n    * setFocusIndex\n    *\n    * @method setFocusIndex\n    * @public\n    * @param {any} accordionItemIndex\n    */\n    setFocusIndex(accordionItemIndex) {\n      set(this, 'focusIndex', accordionItemIndex);\n    },\n\n    /**\n    * registerIndex\n    *\n    * @method registerIndex\n    * @public\n    * @param {any} accordionItemIndex\n    */\n    registerIndex(accordionItemIndex) {\n      get(this, 'accordionItemIndexes').push(accordionItemIndex);\n    },\n  },\n});\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frajasegar%2Fember-docgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frajasegar%2Fember-docgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frajasegar%2Fember-docgen/lists"}