1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
/**
* ==VimperatorPlugin==
* @name stylesheet changer
* @description enable to apply user stylesheets like Stylish
* @description-ja Stylishの様にユーザスタイルシートの適用を可能にします
* @author teramako teramako@gmail.com
* @namespace http://d.hatena.ne.jp/teramako/20080405/vimperator_plugin_stylechanger_js
* @license MPL 1.1/GPL 2.0/LGPL 2.1
* ==/VimperatorPlugin==
*
* Usage:
*
* :hi[ghlight] -> enable stylesheet
* :hi[ghlight] [on|clear|off] -> enbale/disable stylesheet
* :hi[ghlight] {alt style name} -> switch to the alternative stylesheet
*
* :colo[rschema] -> list available user stylesheets
* :colo[rschema] {styleName} -> enable the style
* :colo[rschema]! {styleName} -> disable the style
*
* {styleName} -> the name taked away from a CSS-file-name '.css' suffix
* CSS-file are put in "~/vimperator/colors" directory
*
* `colors[chema]' command is similar to Stylish
*
* Example:
*
* auto load settings
* let g:styles = "style,name"
*
*/
(function(){
commands.addUserCommand(['hi[ghlight]'],
'basic style changer',
function(arg){
if (!arg || arg == 'on'){
setStyleDisabled(false);
} else if (arg == 'clear' || arg == 'off'){
setStyleDisabled(true);
} else if ((getStylesheetList()).indexOf(arg) != -1){
stylesheetSwitchAll(window.content, arg);
setStyleDisabled(false);
}
},{
completer: function(aFilter){
var list = [
['on','enable stylesheet'],
['clear','disable stylesheet'],
['off','disable stylesheet']
];
var styles = list.concat( getStylesheetList().map(
function(elm){ return [elm,'alternative style']; }
));
if (!aFilter) return [0,styles];
var candidates = styles.filter(function(elm){return elm[0].indexOf(aFilter) == 0;});
return [0, candidates];
}
}
);
function getStylesheetList(){
var list = [];
var stylesheets = getAllStyleSheets(window.content);
stylesheets.forEach(function(style){
var media = style.media.mediaText.toLowerCase();
if (media && media.indexOf('screen') == -1 && media.indexOf('all') == -1) return;
if (style.title) list.push(style.title);
});
return list;
}
liberator.plugins.styleSheetsManger = (function(){
var sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
function init(){
if (!globalVariables.styles) return;
var list = globalVariables.styles.split(/\s*,\s*/);
for each(var item in list){
manager.load(item);
}
}
function getCSSFiles(){
var colorDir = io.getSpecialDirectory('colors');
var cssFiles = [];
if (colorDir){
cssFiles = io.readDirectory(colorDir).filter(function(file){
return /\.css$/.test(file.leafName.toLowerCase()) && !file.isDirectory() ;
});
}
return cssFiles;
}
function getURIFromName(aName){
var file = io.getSpecialDirectory('colors');
file.append(aName + '.css');
if (file.exists()) return ios.newFileURI(file);
return null;
}
var manager = {
load: function(aName){
if(!aName) return false;
var uri = getURIFromName(aName);
if (!uri) return false;
if(sss.sheetRegistered(uri, sss.USER_SHEET))
sss.unregisterSheet(uri, sss.USER_SHEET);
sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
if (options.verbose > 8)
log('Resisted colorschema '+aName);
return true;
},
unload: function(aName){
if(!aName) return false;
var uri = getURIFromName(aName);
if (!uri) return false;
if(sss.sheetRegistered(uri, sss.USER_SHEET))
sss.unregisterSheet(uri, sss.USER_SHEET);
if (options.verbose > 8)
log('Unresisted colorschema '+aName);
return true;
},
list: function(){
var str = ['<span class="hl-Title">User StyleSheet List</span>'];
var files = getCSSFiles().map(function(file){return file.leafName.replace(/\.css$/i,'');});
files.forEach(function(file,i){
var buf = ' ' + (i+1) + ' ';
if (sss.sheetRegistered(getURIFromName(file), sss.USER_SHEET)){
buf += '<span style="color:blue">*</span>';
} else {
buf += ' ';
}
str.push(buf +' ' + file);
});
echo( str.join('\n'), true);
}
};
commands.addUserCommand(['colo[rschema]'], 'set user stylesheet',
function(arg, special){
if (!arg){
manager.list();
return;
}
if (special){
manager.unload(arg) && echo('Unredisted '+arg);
} else {
manager.load(arg) && echo('Redisted '+arg);
}
},{
completer: function(filter, special){
var list = getCSSFiles().map(function(file){
var name = file.leafName.replace(/\.css$/i,'');
return [name,sss.sheetRegistered(getURIFromName(name),sss.USER_SHEET) ? '*' : ''];
});
if (!filter) return [0,list];
var candidates = [];
list.forEach(function(item){
if(item[0].toLowerCase().indexOf(filter) == 0){
candidates.push(item);
}
});
return [0,candidates];
}
}
);
init();
return manager;
})();
})();
// vim: sw=4 ts=4 sts=0 fdm=marker:
|