UNPKG

motion

Version:

motion - moving development forward

167 lines (141 loc) 5.13 kB
exports.__esModule = true; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _sbString_score = require('sb-string_score'); var _sbString_score2 = _interopRequireDefault(_sbString_score); var _humps = require('humps'); var _autocompleteStyles = require('./autocomplete-styles'); var _autocompleteStyles2 = _interopRequireDefault(_autocompleteStyles); var _helpers = require('./helpers'); 'use babel'; var STYLE_VALUE_REGEX = /['"]?(\S+)['"]?: *(['"]?([^,"]*))$/; var VIEW_NAME_REGEX = /^\s*(\$[a-zA-Z0-9]*)$/; var PREFIX_REGEX = /['"]?([a-zA-Z0-9]+)$/; var Autocomplete = (function () { function Autocomplete() { _classCallCheck(this, Autocomplete); } Autocomplete.prototype.complete = function complete(text, position, positionInfo) { if (positionInfo.active === null) { return []; } if (positionInfo.position === _helpers.POSITION_TYPE.STYLE) { return this.completeStyle(text, position); } if (positionInfo.position === _helpers.POSITION_TYPE.VIEW_JSX) { // TODO: Autocomplete jsx tags maybe? return []; } if (positionInfo.position === _helpers.POSITION_TYPE.VIEW_TOP) { return this.completeViewNames(positionInfo.active, text, position); } }; Autocomplete.prototype.completeStyle = function completeStyle(text, position) { var lineText = _helpers.getRowFromText(text, position.row).slice(0, position.column); var value = STYLE_VALUE_REGEX.exec(lineText); if (value !== null) { return this.completeStyleValue(value[1], value[2], value[3]); } else { return this.completeStyleKey(lineText); } }; Autocomplete.prototype.completeStyleKey = function completeStyleKey(lineText) { var suggestions = _autocompleteStyles2['default'].slice(); suggestions.sort(function (a, b) { return b.strength - a.strength; }); var prefix = PREFIX_REGEX.exec(lineText); prefix = prefix ? prefix[1] : ''; suggestions.forEach(function (suggestion) { suggestion.replacementPrefix = prefix; suggestion.descriptionMoreURL = 'https://developer.mozilla.org/en/docs/Web/CSS/' + _humps.decamelize(suggestion.name, { separator: '-' }); suggestion.type = 'css-key'; }); if (prefix === '') { return suggestions; } suggestions.forEach(function (suggestion) { suggestion.matchScore = _sbString_score2['default'](suggestion.name, prefix); }); suggestions.sort(function (a, b) { return b.matchScore - a.matchScore; }); return suggestions.filter(function (item) { return item.matchScore !== 0; }); }; Autocomplete.prototype.completeStyleValue = function completeStyleValue(name, prefix, scoreBase) { var suggestion = null; for (var _iterator = _autocompleteStyles2['default'], _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var entry = _ref; if (entry.name === name) { suggestion = entry; break; } } if (suggestion === null) { return []; } if (!Array.isArray(suggestion.options)) { return []; } return suggestion.options.map(function (option) { var name = String(option); return { name: name, auto: option, description: '', type: 'css-value', replacementPrefix: prefix, matchScore: _sbString_score2['default'](name, scoreBase) }; }).sort(function (a, b) { return b.matchScore - a.matchScore; }); }; Autocomplete.prototype.completeViewNames = function completeViewNames(view, text, position) { var lineText = _helpers.getRowFromText(text, position.row).slice(0, position.column); var prefix = VIEW_NAME_REGEX.exec(lineText); if (prefix === null) { // Not a view name scenario return []; } prefix = prefix[1]; var suggestions = []; for (var key in view.els) { var _name = '$' + key; suggestions.push({ name: _name, description: '', type: 'view-name', replacementPrefix: prefix, matchScore: _sbString_score2['default'](_name, prefix) }); } suggestions = suggestions.sort(function (a, b) { return b.matchScore - a.matchScore; }).filter(function (suggestion) { var key = suggestion.name.substr(1); return !(key in view.styles); }); if (prefix !== '') { suggestions = suggestions.filter(function (item) { return item.matchScore !== 0; }); } return suggestions; }; return Autocomplete; })(); exports['default'] = Autocomplete; module.exports = exports['default']; //# sourceMappingURL=autocomplete.js.map