- Прежде всего вам стоит подтянуть свой английский, особенно письменный. Вы будете работать с другими разработчиками, и если вы не будете относиться серьезно к чистоте терминов - возникнут ненужные сложности в коммуникации и понимании. Стоит научиться не делать не только письменных, но и концептуальных ошибок:
- lenght, а length
- lengthScale, а lastNumber (scale вообще про масштаб, и измеряется от 1±).
- не numberInACircle, а numberIsInsideCircle, а еще лучше inset (см. пункт 5)
- не idElement, а elementId, а еще лучше element (см. пункт 5)
- canvasDrow, но numbersDraw
- numberstap, valueFalseNum, valueFalsePer
- Посмотрите на примеры хорошего кода: tooltip, spinner и прочие. Вы заметите, что у этого кода есть особенности:
- в нем присутствуют jsdoc аннотации
- в нем краткие методы, вмещающиеся на 1 экран
- код сгруппирован по логическим блокам для удобства чтения
- код прогнан по jshint.
-
Вам необязательно было дублировать код для jquery - достаточно было сделать обертку над gauge.js. Пример в dropzone.
-
Изучите, как устроен package.json, как его создавать, для чего в нем те или иные поля, как использовать npm. Возможно вы откроете для себя, что вам не нужен grunt для минимизации js-файлов.
- Все, что вы поместили в
dependencies, следовало поместить вdevDependencies- теперь все ваши grunt-зависимости будут устанавливаться вместе с вашим плагином, хотя они никому не нужны для использования.
- Проектирование API. Почитайте статью по проектированию API.
- Конструктор должен уметь инициализировать любой переданный элемент с любыми переданными опциями:
new Gauge(element, options). Тогда отпала бы надобность вidElement, a о внутреннем canvas пользователю вообще знать ни к чему. - Старайтесь не помещать в опции настройки, касающиеся стилей -
fonts,arrowColor,diameter,canvasSize. Если это возможно поместить в css - помещайте это туда. Вашего случая это касается косвенно, ноdiameter,canvasSize,fontиcolorможно было автоматически брать из стиля элемента, на котором инициализируется gauge. - Опции следует стараться делать максимально гибкими и простыми для конечного пользователя, а не максимально детальными. В частности, достаточно было иметь
valuesсо списком значений, которые расставить по шкале, чем плеядуisPercent,firstNumber,lengthScale,percent/number step. Эти программные значения нужны вам, но пользователю вашего плагина они ни к чему. - Названия опций следует брать максимально близкими к существующим терминам из ментальной модели пользователя - не
fonts, afont, как css-свойство; неisInsideCircle, аinset, как уbox-shadow. И т. п. - Названия функций/методов должны быть глаголами.
- Приучите себя создавать README.md с обязательной ключевой фразой:
{{ title }} is a {{ what }} for {{ who for/where to use }} by {{ unique feature }} written in {{ JavaScript }}, can be used in {{ target platforms }}.
Также для самоознакомления и проверки знаний — superherojs.