210 lines
8.9 KiB
JavaScript
210 lines
8.9 KiB
JavaScript
|
/* ***** BEGIN LICENSE BLOCK *****
|
||
|
* Distributed under the BSD license:
|
||
|
*
|
||
|
* Copyright (c) 2010, Ajax.org B.V.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are met:
|
||
|
* * Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
* * Redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
* documentation and/or other materials provided with the distribution.
|
||
|
* * Neither the name of Ajax.org B.V. nor the
|
||
|
* names of its contributors may be used to endorse or promote products
|
||
|
* derived from this software without specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
|
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*
|
||
|
* ***** END LICENSE BLOCK ***** */
|
||
|
|
||
|
define(function(require, exports, module) {
|
||
|
"use strict";
|
||
|
|
||
|
var propertyMap = {
|
||
|
"background": {"#$0": 1},
|
||
|
"background-color": {"#$0": 1, "transparent": 1, "fixed": 1},
|
||
|
"background-image": {"url('/$0')": 1},
|
||
|
"background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1},
|
||
|
"background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2},
|
||
|
"background-attachment": {"scroll": 1, "fixed": 1},
|
||
|
"background-size": {"cover": 1, "contain": 1},
|
||
|
"background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1},
|
||
|
"background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1},
|
||
|
"border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1},
|
||
|
"border-color": {"#$0": 1},
|
||
|
"border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2},
|
||
|
"border-collapse": {"collapse": 1, "separate": 1},
|
||
|
"bottom": {"px": 1, "em": 1, "%": 1},
|
||
|
"clear": {"left": 1, "right": 1, "both": 1, "none": 1},
|
||
|
"color": {"#$0": 1, "rgb(#$00,0,0)": 1},
|
||
|
"cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1},
|
||
|
"display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1},
|
||
|
"empty-cells": {"show": 1, "hide": 1},
|
||
|
"float": {"left": 1, "right": 1, "none": 1},
|
||
|
"font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1},
|
||
|
"font-size": {"px": 1, "em": 1, "%": 1},
|
||
|
"font-weight": {"bold": 1, "normal": 1},
|
||
|
"font-style": {"italic": 1, "normal": 1},
|
||
|
"font-variant": {"normal": 1, "small-caps": 1},
|
||
|
"height": {"px": 1, "em": 1, "%": 1},
|
||
|
"left": {"px": 1, "em": 1, "%": 1},
|
||
|
"letter-spacing": {"normal": 1},
|
||
|
"line-height": {"normal": 1},
|
||
|
"list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1},
|
||
|
"margin": {"px": 1, "em": 1, "%": 1},
|
||
|
"margin-right": {"px": 1, "em": 1, "%": 1},
|
||
|
"margin-left": {"px": 1, "em": 1, "%": 1},
|
||
|
"margin-top": {"px": 1, "em": 1, "%": 1},
|
||
|
"margin-bottom": {"px": 1, "em": 1, "%": 1},
|
||
|
"max-height": {"px": 1, "em": 1, "%": 1},
|
||
|
"max-width": {"px": 1, "em": 1, "%": 1},
|
||
|
"min-height": {"px": 1, "em": 1, "%": 1},
|
||
|
"min-width": {"px": 1, "em": 1, "%": 1},
|
||
|
"overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
|
||
|
"overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
|
||
|
"overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
|
||
|
"padding": {"px": 1, "em": 1, "%": 1},
|
||
|
"padding-top": {"px": 1, "em": 1, "%": 1},
|
||
|
"padding-right": {"px": 1, "em": 1, "%": 1},
|
||
|
"padding-bottom": {"px": 1, "em": 1, "%": 1},
|
||
|
"padding-left": {"px": 1, "em": 1, "%": 1},
|
||
|
"page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
|
||
|
"page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
|
||
|
"position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1},
|
||
|
"right": {"px": 1, "em": 1, "%": 1},
|
||
|
"table-layout": {"fixed": 1, "auto": 1},
|
||
|
"text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1},
|
||
|
"text-align": {"left": 1, "right": 1, "center": 1, "justify": 1},
|
||
|
"text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1},
|
||
|
"top": {"px": 1, "em": 1, "%": 1},
|
||
|
"vertical-align": {"top": 1, "bottom": 1},
|
||
|
"visibility": {"hidden": 1, "visible": 1},
|
||
|
"white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1},
|
||
|
"width": {"px": 1, "em": 1, "%": 1},
|
||
|
"word-spacing": {"normal": 1},
|
||
|
|
||
|
// opacity
|
||
|
"filter": {"alpha(opacity=$0100)": 1},
|
||
|
|
||
|
"text-shadow": {"$02px 2px 2px #777": 1},
|
||
|
"text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1},
|
||
|
|
||
|
// border radius
|
||
|
"-moz-border-radius": 1,
|
||
|
"-moz-border-radius-topright": 1,
|
||
|
"-moz-border-radius-bottomright": 1,
|
||
|
"-moz-border-radius-topleft": 1,
|
||
|
"-moz-border-radius-bottomleft": 1,
|
||
|
"-webkit-border-radius": 1,
|
||
|
"-webkit-border-top-right-radius": 1,
|
||
|
"-webkit-border-top-left-radius": 1,
|
||
|
"-webkit-border-bottom-right-radius": 1,
|
||
|
"-webkit-border-bottom-left-radius": 1,
|
||
|
|
||
|
// dropshadows
|
||
|
"-moz-box-shadow": 1,
|
||
|
"-webkit-box-shadow": 1,
|
||
|
|
||
|
// transformations
|
||
|
"transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
|
||
|
"-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
|
||
|
"-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 }
|
||
|
};
|
||
|
|
||
|
var CssCompletions = function() {
|
||
|
|
||
|
};
|
||
|
|
||
|
(function() {
|
||
|
|
||
|
this.completionsDefined = false;
|
||
|
|
||
|
this.defineCompletions = function() {
|
||
|
//fill in missing properties
|
||
|
if (document) {
|
||
|
var style = document.createElement('c').style;
|
||
|
|
||
|
for (var i in style) {
|
||
|
if (typeof style[i] !== 'string')
|
||
|
continue;
|
||
|
|
||
|
var name = i.replace(/[A-Z]/g, function(x) {
|
||
|
return '-' + x.toLowerCase();
|
||
|
});
|
||
|
|
||
|
if (!propertyMap.hasOwnProperty(name))
|
||
|
propertyMap[name] = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.completionsDefined = true;
|
||
|
};
|
||
|
|
||
|
this.getCompletions = function(state, session, pos, prefix) {
|
||
|
if (!this.completionsDefined) {
|
||
|
this.defineCompletions();
|
||
|
}
|
||
|
|
||
|
if (state==='ruleset' || session.$mode.$id == "ace/mode/scss") {
|
||
|
//css attribute value
|
||
|
var line = session.getLine(pos.row).substr(0, pos.column);
|
||
|
if (/:[^;]+$/.test(line)) {
|
||
|
/([\w\-]+):[^:]*$/.test(line);
|
||
|
|
||
|
return this.getPropertyValueCompletions(state, session, pos, prefix);
|
||
|
} else {
|
||
|
return this.getPropertyCompletions(state, session, pos, prefix);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return [];
|
||
|
};
|
||
|
|
||
|
this.getPropertyCompletions = function(state, session, pos, prefix) {
|
||
|
var properties = Object.keys(propertyMap);
|
||
|
return properties.map(function(property){
|
||
|
return {
|
||
|
caption: property,
|
||
|
snippet: property + ': $0;',
|
||
|
meta: "property",
|
||
|
score: 1000000
|
||
|
};
|
||
|
});
|
||
|
};
|
||
|
|
||
|
this.getPropertyValueCompletions = function(state, session, pos, prefix) {
|
||
|
var line = session.getLine(pos.row).substr(0, pos.column);
|
||
|
var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1];
|
||
|
|
||
|
if (!property)
|
||
|
return [];
|
||
|
var values = [];
|
||
|
if (property in propertyMap && typeof propertyMap[property] === "object") {
|
||
|
values = Object.keys(propertyMap[property]);
|
||
|
}
|
||
|
return values.map(function(value){
|
||
|
return {
|
||
|
caption: value,
|
||
|
snippet: value,
|
||
|
meta: "property value",
|
||
|
score: 1000000
|
||
|
};
|
||
|
});
|
||
|
};
|
||
|
|
||
|
}).call(CssCompletions.prototype);
|
||
|
|
||
|
exports.CssCompletions = CssCompletions;
|
||
|
});
|