remove tree view stuff for now
parent
ab8baace62
commit
2fb32939af
225
src/treeView.ts
225
src/treeView.ts
|
@ -1,225 +0,0 @@
|
||||||
import {
|
|
||||||
TreeDataProvider,
|
|
||||||
TreeItem,
|
|
||||||
TreeItemCollapsibleState,
|
|
||||||
window as Window,
|
|
||||||
Command,
|
|
||||||
Event,
|
|
||||||
EventEmitter
|
|
||||||
} from 'vscode'
|
|
||||||
import { getSvgColorFromValue, createTempFile } from './util'
|
|
||||||
import dlv from 'dlv'
|
|
||||||
import * as path from 'path'
|
|
||||||
|
|
||||||
const ICONS = {
|
|
||||||
colors: 'palette.svg',
|
|
||||||
backgroundColors: 'palette.svg',
|
|
||||||
borderColors: 'palette.svg',
|
|
||||||
textColors: 'palette.svg',
|
|
||||||
svgFill: 'palette.svg',
|
|
||||||
svgStroke: 'palette.svg',
|
|
||||||
screens: 'devices.svg',
|
|
||||||
textSizes: 'format_size.svg',
|
|
||||||
fonts: 'title.svg',
|
|
||||||
fontWeights: 'format_bold.svg',
|
|
||||||
zIndex: 'layers.svg',
|
|
||||||
borderWidths: 'border_all.svg',
|
|
||||||
shadows: 'flip_to_front.svg',
|
|
||||||
borderRadius: 'rounded_corner.svg',
|
|
||||||
width: 'straighten.svg',
|
|
||||||
minWidth: 'straighten.svg',
|
|
||||||
maxWidth: 'straighten.svg',
|
|
||||||
height: 'straighten.svg',
|
|
||||||
minHeight: 'straighten.svg',
|
|
||||||
maxHeight: 'straighten.svg',
|
|
||||||
opacity: 'opacity.svg',
|
|
||||||
leading: 'format_line_spacing.svg',
|
|
||||||
backgroundSize: 'photo_size_select_large.svg',
|
|
||||||
padding: 'padding.svg',
|
|
||||||
margin: 'select_all.svg',
|
|
||||||
negativeMargin: 'select_all.svg',
|
|
||||||
tracking: 'tracking.svg',
|
|
||||||
modules: 'extension.svg',
|
|
||||||
options: 'settings.svg'
|
|
||||||
}
|
|
||||||
|
|
||||||
function configValueToString(value: any): string {
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
return value.join(', ')
|
|
||||||
}
|
|
||||||
return value.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
function isObject(val: any): boolean {
|
|
||||||
return val != null && typeof val === 'object' && Array.isArray(val) === false
|
|
||||||
}
|
|
||||||
|
|
||||||
class ConfigItem extends TreeItem {
|
|
||||||
constructor(
|
|
||||||
public label: string,
|
|
||||||
public key: string[],
|
|
||||||
public collapsibleState: TreeItemCollapsibleState,
|
|
||||||
public description?: string,
|
|
||||||
public iconPath?: string,
|
|
||||||
public command?: Command
|
|
||||||
) {
|
|
||||||
super(label, collapsibleState)
|
|
||||||
this.key = key
|
|
||||||
this.description = description
|
|
||||||
this.iconPath = iconPath
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TailwindDataProvider implements TreeDataProvider<ConfigItem> {
|
|
||||||
private _onDidChangeTreeData: EventEmitter<ConfigItem | null> = new EventEmitter<ConfigItem | null>()
|
|
||||||
readonly onDidChangeTreeData: Event<ConfigItem | null> = this
|
|
||||||
._onDidChangeTreeData.event
|
|
||||||
|
|
||||||
private config: any
|
|
||||||
|
|
||||||
constructor(public configPath: string) {
|
|
||||||
this.config = require(configPath)
|
|
||||||
}
|
|
||||||
public refresh(configPath?: string): void {
|
|
||||||
if (configPath) this.configPath = configPath
|
|
||||||
delete require.cache[this.configPath]
|
|
||||||
this.config = require(this.configPath)
|
|
||||||
this._onDidChangeTreeData.fire()
|
|
||||||
}
|
|
||||||
getTreeItem(element: ConfigItem): ConfigItem {
|
|
||||||
return element
|
|
||||||
}
|
|
||||||
async getChildren(element: ConfigItem): Promise<ConfigItem[]> {
|
|
||||||
let command = {
|
|
||||||
command: 'tailwindcss.goToDefinition',
|
|
||||||
title: 'Go To Definition'
|
|
||||||
}
|
|
||||||
if (element) {
|
|
||||||
let item = dlv(this.config, element.key)
|
|
||||||
let children = Object.keys(item).map(key => {
|
|
||||||
let isObj = isObject(item[key])
|
|
||||||
let child = new ConfigItem(
|
|
||||||
key,
|
|
||||||
element.key.concat(key),
|
|
||||||
isObj
|
|
||||||
? TreeItemCollapsibleState.Collapsed
|
|
||||||
: TreeItemCollapsibleState.None,
|
|
||||||
isObj ? undefined : configValueToString(item[key]),
|
|
||||||
undefined,
|
|
||||||
isObj
|
|
||||||
? undefined
|
|
||||||
: { ...command, arguments: [element.key.concat(key)] }
|
|
||||||
)
|
|
||||||
let color = getSvgColorFromValue(item[key])
|
|
||||||
|
|
||||||
if (color) {
|
|
||||||
return createTempFile(
|
|
||||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><rect x="3.45" y="3.45" width="9.1" height="9.1" fill="${color}" /><rect x="2.8" y="2.8" width="10.4" height="10.4" fill="none" stroke="black" stroke-width="1.3" /></svg>`,
|
|
||||||
{ postfix: '.svg' }
|
|
||||||
).then(iconPath => {
|
|
||||||
child.iconPath = iconPath
|
|
||||||
return child
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return child
|
|
||||||
})
|
|
||||||
return Promise.all(children)
|
|
||||||
}
|
|
||||||
|
|
||||||
return Object.keys(this.config)
|
|
||||||
.filter(key => ['plugins'].indexOf(key) === -1)
|
|
||||||
.map(
|
|
||||||
key =>
|
|
||||||
new ConfigItem(
|
|
||||||
key,
|
|
||||||
[key],
|
|
||||||
isObject(this.config[key])
|
|
||||||
? TreeItemCollapsibleState.Collapsed
|
|
||||||
: TreeItemCollapsibleState.None,
|
|
||||||
isObject(this.config[key])
|
|
||||||
? undefined
|
|
||||||
: configValueToString(this.config[key]),
|
|
||||||
ICONS[key]
|
|
||||||
? path.join(
|
|
||||||
__filename,
|
|
||||||
'..',
|
|
||||||
'..',
|
|
||||||
'resources',
|
|
||||||
'icons',
|
|
||||||
ICONS[key]
|
|
||||||
)
|
|
||||||
: undefined,
|
|
||||||
isObject(this.config[key])
|
|
||||||
? undefined
|
|
||||||
: { ...command, arguments: [[key]] }
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function treeDataProvider1(config): TreeDataProvider<TreeItem> {
|
|
||||||
return {
|
|
||||||
getChildren: async (element): Promise<TreeItem[]> => {
|
|
||||||
if (element) {
|
|
||||||
let child = dlv(config, element.label, {})
|
|
||||||
let items = Object.keys(child).map(key => {
|
|
||||||
let color = getSvgColorFromValue(child[key])
|
|
||||||
|
|
||||||
if (color) {
|
|
||||||
return createTempFile(
|
|
||||||
`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><rect x="3.45" y="3.45" width="9.1" height="9.1" fill="${color}" /><rect x="2.8" y="2.8" width="10.4" height="10.4" fill="none" stroke="black" stroke-width="1.3" /></svg>`,
|
|
||||||
{ postfix: '.svg' }
|
|
||||||
).then(iconPath => ({
|
|
||||||
label: key,
|
|
||||||
description: configValueToString(child[key]),
|
|
||||||
iconPath
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.resolve({
|
|
||||||
label: key,
|
|
||||||
description: configValueToString(child[key])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return Promise.all(items)
|
|
||||||
}
|
|
||||||
|
|
||||||
return Object.keys(config)
|
|
||||||
.filter(key => ['modules', 'plugins', 'options'].indexOf(key) === -1)
|
|
||||||
.map(key => ({
|
|
||||||
label: key,
|
|
||||||
collapsibleState: isObject(config[key])
|
|
||||||
? TreeItemCollapsibleState.Collapsed
|
|
||||||
: TreeItemCollapsibleState.None,
|
|
||||||
description: isObject(config[key])
|
|
||||||
? undefined
|
|
||||||
: configValueToString(config[key]),
|
|
||||||
iconPath: ICONS[key]
|
|
||||||
? path.join(
|
|
||||||
__filename,
|
|
||||||
'..',
|
|
||||||
'..',
|
|
||||||
'resources',
|
|
||||||
'icons',
|
|
||||||
ICONS[key]
|
|
||||||
)
|
|
||||||
: undefined
|
|
||||||
}))
|
|
||||||
},
|
|
||||||
getTreeItem: (element: TreeItem): TreeItem => {
|
|
||||||
return element
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createTreeView(configPath) {
|
|
||||||
let provider = new TailwindDataProvider(configPath)
|
|
||||||
let view = Window.createTreeView('tailwindcssConfigExplorer', {
|
|
||||||
treeDataProvider: provider,
|
|
||||||
showCollapseAll: true
|
|
||||||
})
|
|
||||||
view.reveal(undefined)
|
|
||||||
|
|
||||||
return () => provider.refresh()
|
|
||||||
}
|
|
31
src/util.ts
31
src/util.ts
|
@ -1,31 +0,0 @@
|
||||||
import * as fs from 'fs'
|
|
||||||
import Color from 'color'
|
|
||||||
import tmp from 'tmp'
|
|
||||||
|
|
||||||
export function createTempFile(content: string, options = {}): Promise<string> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
tmp.file(options, (err, path) => {
|
|
||||||
if (err) return reject(err)
|
|
||||||
fs.writeFile(path, content, { encoding: 'utf8' }, err => {
|
|
||||||
if (err) return reject(err)
|
|
||||||
resolve(path)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getSvgColorFromValue(value: string): string {
|
|
||||||
if (typeof value !== 'string') return null
|
|
||||||
|
|
||||||
if (value === 'transparent') {
|
|
||||||
return 'none'
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
let parsed = Color(value)
|
|
||||||
if (parsed.valpha === 0) return 'none'
|
|
||||||
return parsed.rgb().string()
|
|
||||||
} catch (err) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue