&"\']/', '', gps('newname'))) )
$name = gps('newname');
$css = base64_decode(fetch("css",'txp_css','name',$name));
$css = parseCSS($css);
$css = ($step == 'add_dec') ? add_declaration($css) : $css;
$css = ($step == 'del_dec') ? delete_declaration($css) : $css;
$css = ($step == 'add_sel') ? addSel($css) : $css;
$right =
hed(gTxt('all_stylesheets'),2).
css_list($name, $default_name);
$left = graf(gTxt('you_are_editing_css').br.strong(htmlspecialchars($name))).
graf(eLink('css', 'css_edit_raw', 'name', $name, gTxt('edit_raw_css'))).
graf(sLink('css', 'pour', gTxt('bulkload_existing_css')));
$out[] = startTable('css-edit', '', '', 3);
$out[] =
tr(
td(strong(gTxt('css_selector'))).
td(strong(gTxt('css_property_value')))
);
$i = -1;
foreach($css as $selector=>$propvals) {
$out[] = n.'
'.n.
td(fInput('text',++$i,$selector,'css')
.' '.aLink('css','add_dec','selector',$selector,'name',$name)
,'', 'selector','s'.$i);
if(is_array($propvals))
{
$out[] = n.t.'';
$ii = -1;
foreach($propvals as $property=>$value)
{
$out[] = fInput('text',$i.'-'.++$ii.'p',$property,'css'). ' '
.fInput('text',$i.'-'.$ii.'v',ltrim($value),'css').' '
.dLink('css','del_dec','declaration',$i.'-'.$ii,'','name',$name,1).br;
}
$out[] = ' | '.n.'
';
}
}
$out[] = tr(tdcs(fInput('submit','',gTxt('save'),'publish'),2)).
endTable().eInput('css').sInput('css_save_posted').hInput('name',$name);
echo
startTable('edit').
tr(
tdtl(
$left
).
td(
form(
graf(
gTxt('add_new_selector').': '.sp.
fInput('text','selector','','css').sp.
fInput('submit','add_sel',gTxt('submit'),'smallerbox').
eInput('css') . sInput('add_sel') . hInput('name',$name)
)
).
form(join('',$out)).
form(
graf(
gTxt('copy_css_as').sp.fInput('text', 'newname', '', 'edit').sp.
fInput('submit', 'copy', gTxt('copy'), 'smallerbox').
eInput('css').
sInput('css_copy').
hInput('oldname', $name).
hInput('name', $name)
)
)
).
tdtl(
$right
)
).
endTable();
}
//-------------------------------------------------------------
function css_edit_raw() {
global $step;
$name = gps('name');
$default_name = safe_field('css', 'txp_section', "name = 'default'");
$name = (!$name or $step == 'css_delete') ? $default_name : $name;
if (gps('copy') && trim(preg_replace('/[<>&"\']/', '', gps('newname'))) )
$name = gps('newname');
if ($step=='pour')
{
$buttons =
gTxt('name_for_this_style').': '
.fInput('text','newname','','edit','','',20).
hInput('savenew','savenew');
$thecss = '';
} else {
$buttons = '';
$thecss = base64_decode(fetch("css",'txp_css','name',$name));
}
if ($step!='pour') {
$left = graf(gTxt('you_are_editing_css').br.strong(htmlspecialchars($name))).
graf(eLink('css', 'css_edit_form', 'name', $name, gTxt('edit_css_in_form'))).
graf(sLink('css', 'pour', gTxt('bulkload_existing_css')));
$copy = gTxt('copy_css_as').sp.fInput('text', 'newname', '', 'edit').sp.
fInput('submit', 'copy', gTxt('copy'), 'smallerbox');
} else {
$left = ' ';
$copy = '';
}
$right =
hed(gTxt('all_stylesheets'),2).
css_list($name, $default_name);
echo
startTable('edit').
tr(
tdtl(
$left
).
td(
form(
graf($buttons).
''.br.
fInput('submit','',gTxt('save'),'publish').
eInput('css').sInput('css_save').
hInput('name',$name)
.$copy
)
).
tdtl(
$right
)
).
endTable().
n.'';
}
// -------------------------------------------------------------
function parseCSS($css) // parse raw css into a multidimensional array
{
$css = preg_replace("/\/\*.+\*\//Usi","",$css); // remove comments
$selectors = preg_replace('/\s+/',' ',explode("}",strip_rn($css)));
foreach($selectors as $selector) {
if(trim($selector)) {
list($keystr,$codestr) = explode("{",$selector);
if (trim($keystr)) {
$codes = explode(";",trim($codestr));
foreach ($codes as $code) {
if (trim($code)) {
list($property,$value) = explode(":",$code,2);
$out[trim($keystr)][trim($property)] = trim($value);
}
}
}
}
}
return (isset($out)) ? $out : array();
}
// -------------------------------------------------------------
function parsePostedCSS() //turn css info delivered by editor form into an array
{
$post = (MAGIC_QUOTES_GPC) ? doStrip($_POST) : $_POST;
foreach($post as $a=>$b){
if (preg_match("/^\d+$/",$a)) {
$selector = $b;
}
if (preg_match("/^\d+-\d+(?:p|v)$/",$a)) {
if(strstr($a,'p')) {
$property = $b;
} else {
if(trim($property) && trim($selector)) {
$out[$selector][$property] = $b;
}
}
}
}
return (isset($out)) ? $out : array();
}
// -------------------------------------------------------------
function css_copy()
{
extract(gpsa(array('oldname', 'newname')));
$css = doSlash(fetch('css', 'txp_css', 'name', $oldname));
$rs = safe_insert('txp_css', "css = '$css', name = '".doSlash($newname)."'");
css_edit(
gTxt('css_created', array('{name}' => $newname))
);
}
// -------------------------------------------------------------
function css_save_posted()
{
$name = gps('name');
$css = parsePostedCSS();
$css = doSlash(base64_encode(css_format($css)));
safe_update('txp_css', "css = '$css'", "name = '".doSlash($name)."'");
// update site last mod time
update_lastmod();
$message = gTxt('css_updated', array('{name}' => $name));
css_edit($message);
}
//-------------------------------------------------------------
function css_save()
{
extract(gpsa(array('name','css','savenew','newname','copy')));
$css = doSlash(base64_encode($css));
if ($savenew or $copy)
{
$newname = doSlash(trim(preg_replace('/[<>&"\']/', '', gps('newname'))));
if ($newname and safe_field('name', 'txp_css', "name = '$newname'"))
{
$message = gTxt('css_already_exists', array('{name}' => $newname));
}
elseif ($newname)
{
safe_insert('txp_css', "name = '".$newname."', css = '$css'");
// update site last mod time
update_lastmod();
$message = gTxt('css_created', array('{name}' => $newname));
}
else
{
$message = gTxt('css_name_required');
}
css_edit($message);
}
else
{
safe_update('txp_css', "css = '$css'", "name = '".doSlash($name)."'");
// update site last mod time
update_lastmod();
$message = gTxt('css_updated', array('{name}' => $name));
css_edit($message);
}
}
// -------------------------------------------------------------
function css_format($css,$out='')
{
foreach ($css as $selector => $propvals) {
$out .= n.$selector.n.'{'.n;
foreach($propvals as $prop=>$val) {
$out .= t.$prop.': '.$val.';'.n;
}
$out .= '}'.n;
}
return trim($out);
}
// -------------------------------------------------------------
function addSel($css)
{
$selector = gps('selector');
$css[$selector][' '] = '';
return $css;
}
// -------------------------------------------------------------
function add_declaration($css)
{
$selector = gps('selector');
$css[$selector][' '] = '';
return $css;
}
// -------------------------------------------------------------
function delete_declaration($css)
{
$thedec = gps('declaration');
$name = gps('name');
$i = 0;
foreach($css as $a=>$b) {
$cursel = $i++;
$ii = 0;
foreach($b as $c=>$d) {
$curdec = $ii++;
if(($cursel.'-'.$curdec)!=$thedec) {
$out[$a][$c]=$d;
}
}
}
$css = base64_encode(css_format($out));
safe_update("txp_css", "css='".doSlash($css)."'", "name='".doSlash($name)."'");
// update site last mod time
update_lastmod();
return parseCSS(base64_decode(fetch('css','txp_css','name',$name)));
}
//-------------------------------------------------------------
function css_delete()
{
$name = ps('name');
$count = safe_count('txp_section', "css = '".doSlash($name)."'");
if ($count)
{
$message = gTxt('css_used_by_section', array('{name}' => $name, '{count}' => $count));
}
else
{
safe_delete('txp_css', "name = '".doSlash($name)."'");
$message = gTxt('css_deleted', array('{name}' => $name));
}
css_edit($message);
}
?>