Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F34553640
generate_sprites.php
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
5 KB
Subscribers
None
generate_sprites.php
View Options
#!/usr/bin/env php
<?php
require_once
dirname
(
dirname
(
__FILE__
)).
'/__init_script__.php'
;
$args
=
new
PhutilArgumentParser
(
$argv
);
$args
->
setTagline
(
'regenerate CSS sprite sheets'
);
$args
->
setSynopsis
(
<<<EOHELP
**sprites**
Rebuild CSS sprite sheets.
EOHELP
);
$args
->
parseStandardArguments
();
$args
->
parse
(
array
(
array
(
'name'
=>
'source'
,
'param'
=>
'directory'
,
'help'
=>
'Directory with sprite sources.'
,
)
));
$srcroot
=
$args
->
getArg
(
'source'
);
if
(!
$srcroot
)
{
throw
new
Exception
(
"You must specify a source directory with '--source'."
);
}
$webroot
=
dirname
(
phutil_get_library_root
(
'phabricator'
)).
'/webroot/rsrc'
;
$webroot
=
Filesystem
::
readablePath
(
$webroot
);
function
glx
(
$x
)
{
return
(
60
+
(
48
*
$x
));
}
function
gly
(
$y
)
{
return
(
110
+
(
48
*
$y
));
}
$sheet
=
new
PhutilSpriteSheet
();
$at
=
'@'
;
$sheet
->
setCSSHeader
(
<<<EOCSS
/**
* @provides autosprite-css
* {$at}generated
*/
.autosprite {
background-image: url(/rsrc/image/autosprite.png);
background-repeat: no-repeat;
}
EOCSS
);
$menu_normal_template
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/menu_normal_1x.png'
)
->
setSourceSize
(
30
,
30
);
$menu_hover_template
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/menu_hover_1x.png'
)
->
setSourceSize
(
30
,
30
);
$menu_selected_template
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/menu_selected_1x.png'
)
->
setSourceSize
(
30
,
30
);
$menu_map
=
array
(
''
=>
$menu_normal_template
,
'-selected'
=>
$menu_selected_template
,
':hover'
=>
$menu_hover_template
,
);
$icon_map
=
array
(
'help'
=>
array
(
4
,
19
),
'settings'
=>
array
(
0
,
28
),
'logout'
=>
array
(
3
,
6
),
'notifications'
=>
array
(
5
,
20
),
'task'
=>
array
(
1
,
15
),
);
foreach
(
$icon_map
as
$icon
=>
$coords
)
{
list
(
$x
,
$y
)
=
$coords
;
foreach
(
$menu_map
as
$suffix
=>
$template
)
{
$sheet
->
addSprite
(
id
(
clone
$template
)
->
setSourcePosition
(
glx
(
$x
),
gly
(
$y
))
->
setTargetCSS
(
'.main-menu-item-icon-'
.
$icon
.
$suffix
));
}
}
$app_template_large
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/application_large_1x.png'
)
->
setSourceSize
(
60
,
60
);
$app_template_large_hover
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/application_large_hover_1x.png'
)
->
setSourceSize
(
60
,
60
);
$app_template_small
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/menu_normal_1x.png'
)
->
setSourceSize
(
30
,
30
);
$app_template_small_hover
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/menu_hover_1x.png'
)
->
setSourceSize
(
30
,
30
);
$app_template_small_selected
=
id
(
new
PhutilSprite
())
->
setSourceFile
(
$srcroot
.
'/menu_selected_1x.png'
)
->
setSourceSize
(
30
,
30
);
$app_source_map
=
array
(
'-large'
=>
array
(
$app_template_large
,
2
),
// For the application launch view, we only show hover state on the desktop
// because it looks glitchy on touch devices. We show the hover state when
// the surrounding <a> is hovered, not the icon itself.
'-large /* hover */'
=>
array
(
$app_template_large_hover
,
2
,
'.device-desktop .phabricator-application-launch-container:hover '
),
''
=>
array
(
$app_template_small
,
1
),
// Show hover state only for the desktop.
':hover'
=>
array
(
$app_template_small_hover
,
1
,
'.device-desktop '
,
),
'-selected'
=>
array
(
$app_template_small_selected
,
1
),
);
$app_map
=
array
(
'differential'
=>
array
(
9
,
1
),
'fact'
=>
array
(
2
,
4
),
'mail'
=>
array
(
0
,
1
),
'diffusion'
=>
array
(
7
,
13
),
'slowvote'
=>
array
(
1
,
4
),
'phriction'
=>
array
(
1
,
7
),
'maniphest'
=>
array
(
3
,
24
),
'flags'
=>
array
(
6
,
26
),
'settings'
=>
array
(
9
,
11
),
'applications'
=>
array
(
0
,
34
),
'default'
=>
array
(
9
,
9
),
'people'
=>
array
(
3
,
0
),
'ponder'
=>
array
(
4
,
35
),
'calendar'
=>
array
(
5
,
4
),
'files'
=>
array
(
6
,
3
),
'projects'
=>
array
(
7
,
35
),
'daemons'
=>
array
(
7
,
6
),
'herald'
=>
array
(
1
,
5
),
'countdown'
=>
array
(
7
,
5
),
'conduit'
=>
array
(
7
,
30
),
'feed'
=>
array
(
3
,
11
),
'paste'
=>
array
(
9
,
2
),
'audit'
=>
array
(
8
,
19
),
'uiexample'
=>
array
(
7
,
28
),
'phpast'
=>
array
(
6
,
31
),
'owners'
=>
array
(
5
,
32
),
'phid'
=>
array
(
9
,
25
),
'diviner'
=>
array
(
1
,
35
),
'repositories'
=>
array
(
8
,
13
),
'phame'
=>
array
(
8
,
4
),
'macro'
=>
array
(
0
,
31
),
'releeph'
=>
array
(
5
,
18
),
'drydock'
=>
array
(
5
,
25
),
);
$xadj
=
-
1
;
foreach
(
$app_map
as
$icon
=>
$coords
)
{
list
(
$x
,
$y
)
=
$coords
;
foreach
(
$app_source_map
as
$suffix
=>
$spec
)
{
list
(
$template
,
$scale
)
=
$spec
;
if
(
isset
(
$spec
[
2
]))
{
$prefix
=
$spec
[
2
];
}
else
{
$prefix
=
''
;
}
$sheet
->
addSprite
(
id
(
clone
$template
)
->
setSourcePosition
((
$xadj
+
glx
(
$x
))
*
$scale
,
gly
(
$y
)
*
$scale
)
->
setTargetCSS
(
$prefix
.
'.app-'
.
$icon
.
$suffix
));
}
}
$sheet
->
generateImage
(
$webroot
.
'/image/autosprite.png'
);
$sheet
->
generateCSS
(
$webroot
.
'/css/autosprite.css'
);
/* -( Icons Sheet )-------------------------------------------------------- */
$generator
=
new
CeleritySpriteGenerator
();
$icon_sheet
=
$generator
->
buildIconSheet
();
$icon_sheet
->
setScales
(
array
(
1
,
2
));
$icon_sheet
->
generateImage
(
$webroot
.
'/image/sprite-icon.png'
,
1
);
$icon_sheet
->
generateImage
(
$webroot
.
'/image/sprite-icon-X2.png'
,
2
);
$icon_sheet
->
generateCSS
(
$webroot
.
'/css/sprite-icon.css'
);
echo
"Done.
\n
"
;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jan 15, 9:40 PM (1 h, 26 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
8c/ac/74afc0ca322a8b6c5229e14c5d6c
Attached To
rPHAB Phabricator
Event Timeline
Log In to Comment