- Прежде всего вам стоит подтянуть свой английский, особенно письменный. Вы будете работать с другими разработчиками, и если вы не будете относиться серьезно к чистоте терминов - возникнут ненужные сложности в коммуникации и понимании. Стоит научиться не делать не только письменных, но и концептуальных ошибок:
- 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.