| 
<?phpnamespace Jackbooted\Admin;
 
 use \Jackbooted\Config\Cfg;
 use \Jackbooted\Forms\Request;
 use \Jackbooted\Forms\Response;
 use \Jackbooted\Html\JS;
 use \Jackbooted\Html\Tag;
 use \Jackbooted\Html\WebPage;
 /**
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved.
 *
 * Written by Brett Dutton of Jackbooted Software
 * brett at brettdutton dot com
 *
 * This software is written and distributed under the GNU General Public
 * License which means that its source code is freely-distributed and
 * available to the general public.
 */
 class ImagePositionLocator extends WebPage {
 
 protected function zoom () {
 $siteUrl = Cfg::siteUrl();
 
 $html = '';
 $html .= JS::library( JS::JQUERY );
 
 // Get the current Pin
 $url = Request::get ( 'url' );
 
 $jQuery =  <<<JS
 var currentXPos = 0;
 var currentYPos = 0;
 var IE = document.all?true:false
 if (!IE) document.captureEvents(Event.MOUSEMOVE);
 document.onmousemove = getMouseXY;
 function getMouseXY(e) {
 if (IE) { // grab the x-y pos.s if browser is IE
 currentXPos = event.clientX + document.body.scrollLeft;
 currentYPos = event.clientY + document.body.scrollTop;
 } else {  // grab the x-y pos.s if browser is NS
 currentXPos = e.pageX;
 currentYPos = e.pageY;
 }
 if (currentXPos < 0) currentXPos = 0;
 if (currentYPos < 0) currentYPos = 0;
 return true;
 }
 function movePinToCursor () {
 var offs = $('#baseImage').offset();
 $('#PinTop').attr ( 'value', '' + parseInt ( currentYPos - offs.top ) );
 $('#PinLeft').attr ( 'value', '' + parseInt ( currentXPos - offs.left ) );
 }
 JS;
 
 $html .= JS::javaScript( $jQuery );
 
 $html .= Tag::img ( $siteUrl . $url,
 [ 'title' => 'Click on this image to move the Pin',
 'id' => 'baseImage',
 'onClick' => 'movePinToCursor();',
 'name' => 'voodoo_image' ] );
 $html .= '<br>X' . Tag::text ( 'PinLeft', '',  [ 'size' => 4, 'id' => 'PinLeft' ] );
 $html .= '<br>Y' . Tag::text ( 'PinTop', '',  [ 'size' => 4, 'id' => 'PinTop'  ] );
 
 return $html;
 }
 /**
 * Searches all the files in the passed directory and scans them for classes
 * @param string $classesDir
 */
 private function findImages ( $searchDir ) {
 $items =  [];
 $handle = opendir ( $searchDir );
 while ( false !== ( $file = readdir ( $handle ) ) ) {
 if ( strpos ( $file, '.' ) === 0 ) continue;
 if ( strpos ( $file, '_private' ) === 0 ) continue;
 if ( strpos ( $file, 'thumbs' ) === 0 ) continue;
 
 $fullPathName = $searchDir . '/' . $file;
 if ( is_dir ( $fullPathName ) ) $items = array_merge ( $items, $this->findImages ( $fullPathName ) );
 else if ( preg_match( '/^.*\.(jpg|jpeg|png|gif)$/i', $file ) ) $items[] = $fullPathName;
 }
 closedir ( $handle );
 return $items;
 }
 
 public function index ( ) {
 
 $sitePath = Cfg::get ( 'site_path' );
 $sitePathLen = strlen ( $sitePath );
 $resp = Response::factory()->action ( __CLASS__ . '->zoom()'  );
 
 $html = Tag::ul (  );
 foreach ( $this->findImages ( $sitePath ) as $item ) {
 $relItemName = substr ( $item, $sitePathLen );
 $html .= Tag::li ( ) .
 Tag::hRef ( '?' . $resp->set ( 'url' , $relItemName )->toUrl (), $relItemName ) .
 Tag::_li ( );
 }
 $html .= Tag::_ul (  );
 
 return $html;
 }
 }
 |