Commit f45b86e5 authored by Thimo Kraemer's avatar Thimo Kraemer

Add new file

parent ca01b738
<?php
/*
* kss.php - Server-side KSS library
*
* Copyright (c) 2017 joonis new media
* Author: Thimo Kraemer <thimo.kraemer@joonis.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
Usage:
// Load the server-side KSS library
require 'kss.php';
// Create a response instance
$kss = new KSSResponse();
// Add a command
$kss->addCommand('setNodeAttr', '#my-selector', array(
'name' => 'foo',
'value' => 'bar',
));
// Or via dynamic method
$kss->setNodeAttr('#my-selector', array(
'name' => 'foo',
'value' => 'bar',
));
// Commands that do not require a selector
$kss->addCommand('alert', array(
'message' => 'Hello!',
));
// Or via dynamic method
$kss->alert(array(
'message' => 'Hello!',
));
// Finally send the KSS response as JSON
$kss->send();
// Or return it within an RPC service
return $kss->response;
*/
class KSSResponse
{
function __construct($encoding='utf-8')
{
$this->encoding = $encoding;
$this->response = array('commands' => array());
}
// Add a new KSS command
// Either: addCommand('actionName', 'selector', array('param1'=>'value1'))
// Or: addCommand('actionName', array('param1'=>'value1'))
// Or: addCommand('actionName')
function addCommand($action, ...$args)
{
if (count($args) == 1)
{
if (is_array($args[0])) // -> params
{
array_unshift($args, null);
}
else // string -> selector
{
array_push($args, null);
}
}
$this->response['commands'][] = array(
'action' => $action,
'selector' => $args[0],
'params' => $args[1],
);
}
// Add a new KSS command via dynamic method
// Either: actionName('selector', array('param1'=>'value1'))
// Or: actionName(array('param1'=>'value1'))
// Or: actionName()
function __call($action, $args)
{
$this->addCommand($action, ...$args);
}
function __toString()
{
return json_encode($this->response);
}
// Send the KSS response out to the browser
function send()
{
header('Content-Type: application/json; charset='.$this->encoding);
$response = (string)$this;
header('Content-Length: '.strlen($response));
echo $response;
}
}
?>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment