|
POST
|
take a look on layer definitions property for ArcGISDynamicMapServiceLayer <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:esri="http://www.esri.com/2008/ags">
<!-- ArcGIS API 3.1 -->
<!-- Adobe SDK 4.6 -->
<s:layout>
<s:VerticalLayout paddingBottom="10"
paddingLeft="10"
paddingRight="10"
paddingTop="10"
gap="10"/>
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.events.LayerEvent;
import com.esri.ags.layers.supportClasses.LayerDefinition;
import mx.collections.ArrayCollection;
import mx.utils.StringUtil;
import spark.events.IndexChangeEvent;
[Bindable]
private var definitions:Array;
[Bindable]
private var visibleLayers:ArrayCollection = new ArrayCollection([1]);
[Bindable]
private var landuseNames:ArrayCollection = new ArrayCollection(
[
"GENERAL COMM. AND OFFICE",
"INDUSTRIAL",
"MULTI-FAMILY RESIDENTIAL",
"PARKS, CEMETERIES, ETC.",
"PUBLIC AND SEMI-PUBLIC",
"SINGLE FAMILY RESIDENTIAL",
"VACANT AND UNDEVELOPED"
]
);
[Bindable]
private var definitionConditions:ArrayCollection = new ArrayCollection(
[
"like",
"equals"
]
);
[Bindable]
private var defPart1:String = "LANDUSE_NAME";
protected function onSetDefinitionClick(event:MouseEvent):void
{
definitions = new Array(); // reset definitions
var layerDefinition:LayerDefinition = new LayerDefinition();
layerDefinition.layerId = 1; // "LandUse"
if (ddlConditions.selectedIndex == 1) // equals
{
layerDefinition.definition = StringUtil.substitute("{0} = '{1}'", defPart1, ddlValues.selectedItem);
}
else // like
{
layerDefinition.definition = StringUtil.substitute("{0} like '%{1}%'", defPart1, txtInput.text);
}
definitions.push(layerDefinition);
// set cursor busy, and restore it after update ended
map.cursorManager.setBusyCursor();
dynamicLayer.addEventListener(LayerEvent.UPDATE_END,
function onUpdateEnd(event:LayerEvent):void {
dynamicLayer.removeEventListener(LayerEvent.UPDATE_END, onUpdateEnd);
map.cursorManager.removeBusyCursor();
});
// update layer
dynamicLayer.refresh();
}
protected function onClearDefinitionClick(event:MouseEvent):void
{
definitions = null; // remove definitions
// set cursor busy, and restore it after update ended
map.cursorManager.setBusyCursor();
dynamicLayer.addEventListener(LayerEvent.UPDATE_END,
function onUpdateEnd(event:LayerEvent):void {
dynamicLayer.removeEventListener(LayerEvent.UPDATE_END, onUpdateEnd);
map.cursorManager.removeBusyCursor();
});
// update layer
dynamicLayer.refresh();
}
protected function onConditionChange(event:IndexChangeEvent):void
{
// switch inputs
if (ddlConditions.selectedIndex == 0) //like
{
txtInput.visible = txtInput.includeInLayout = true;
ddlValues.visible = ddlValues.includeInLayout = false;
}
else
{
txtInput.visible = txtInput.includeInLayout = false;
ddlValues.visible = ddlValues.includeInLayout = true;
}
}
]]>
</fx:Script>
<s:HGroup verticalAlign="middle" gap="10">
<s:Label text="{defPart1}" />
<s:DropDownList id="ddlConditions"
selectedIndex="0"
dataProvider="{definitionConditions}"
change="onConditionChange(event)"/>
<s:TextInput id="txtInput"
width="250"
text="PUBLIC"/>
<s:DropDownList id="ddlValues"
selectedIndex="0"
width="250"
dataProvider="{landuseNames}"
visible="false"
includeInLayout="false" />
<s:Button label="Set definition"
click="onSetDefinitionClick(event)" />
<s:Button label="No definition"
click="onClearDefinitionClick(event)" />
</s:HGroup>
<esri:Map id="map">
<esri:ArcGISDynamicMapServiceLayer id="dynamicLayer"
url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_LandRecords_Louisville/MapServer"
layerDefinitions="{definitions}"
visibleLayers="{visibleLayers}"/>
</esri:Map>
</s:Application>
layer definition not set with layer definition From REST API help Definition expression allows you to filter the features of individual layers in the exported map by specifying definition expressions for those layers.
... View more
01-09-2013
11:04 PM
|
0
|
0
|
303
|
|
POST
|
frank, in this sample with sources used AsyncResponder, token ...
... View more
01-09-2013
09:59 PM
|
0
|
0
|
781
|
|
POST
|
how to call ESRI sample "SOE GetElevations" demonstrates how to create own Task based on BaseTask. All the Flex API samples are also included in the Flex API Library download. how to parse It depends on your server object extension response. What is your SOE response format? JSON, xml, amf ?.. For example: this service SOE response format is JSON - must be pasrsed as JSON.
... View more
01-07-2013
11:05 PM
|
0
|
0
|
1078
|
|
POST
|
*Can I modify the speed, I mean with tweens I can set the time for the animation, that control the speed, I got that I can change the maxSegmentLenght, but I didn't get how it works. information about flash.utils.Timer in Adobe reference [/HR] *what exactly the use of the "Densify" parameters and method. from ESRI REST API help This operation densifies geometries by plotting points between existing vertices. [/HR] How it is work? What is "Densify"? Where is FLEX API reference? All ESRI help Pages in 1 😉 Good luck.
... View more
01-07-2013
03:57 AM
|
0
|
0
|
838
|
|
POST
|
Ahmed, your code compilation faults 😞 Another view to your task realization. 1 - Use ESRI geometries = no conversion between Point and MapPoint 2 - Create/Generate additioanal points for tracking. 3 - Quickly replace points of the object to move it without delay ~ animation. try it <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:esri="http://www.esri.com/2008/ags" creationComplete="onCreationComplete(event)"> <s:layout> <s:VerticalLayout gap="10" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20"/> </s:layout> <fx:Script> <![CDATA[ import com.esri.ags.Graphic; import com.esri.ags.events.PanEvent; import com.esri.ags.geometry.Polyline; import com.esri.ags.symbols.SimpleMarkerSymbol; import com.esri.ags.tasks.supportClasses.DensifyParameters; import mx.events.FlexEvent; import mx.rpc.AsyncResponder; import mx.rpc.Fault; private var points:Array = new Array(); private var moveObj:Graphic; private var moveIndex:int; private var timer:Timer; protected function onCreationComplete(event:FlexEvent):void { initMovingGraphic(); createTrackPoints(); initTimer(); } private function initMovingGraphic():void { moveObj = new Graphic(new MapPoint(-13629302.512116898, 4545949.1442212695, map.spatialReference)) moveObj.symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 9); trackLayer.add(moveObj); } private function initTimer():void { timer = new Timer(20); timer.addEventListener(TimerEvent.TIMER, onTimerTick); } private function createTrackPoints():void { var densifyParams:DensifyParameters = new DensifyParameters(); densifyParams.geometries = [trackLine]; densifyParams.maxSegmentLength = 5; geometryService.densify(densifyParams, new AsyncResponder(onDensifyResult, onDensifyFault)); } protected function onDensifyResult(result:Array, token:Object = null):void { points = new Array(); var resultLine:Polyline = result[0]; for each(var pt:MapPoint in resultLine.paths[0] ) { points.push(pt); } } protected function onDensifyFault(fault:Fault, token:Object = null):void { trace("densify faults " + fault.faultString + " " + fault.message.toString()); } protected function onMoveClick(event:MouseEvent):void { timer.stop(); moveIndex = 0; timer.start(); } protected function onTimerTick(event:TimerEvent):void { moveObj.geometry = points[moveIndex]; moveIndex++; } protected function onPauseResumeClick(event:MouseEvent):void { if (timer.running) { timer.stop(); btnPauseResume.label = "Resume"; } else { timer.start(); btnPauseResume.label = "Pause"; } } private var mustResumeTracking:Boolean = false; protected function onMapPanStart(event:PanEvent):void { if (timer.running) { timer.stop(); mustResumeTracking = true; } } protected function onMapPanEnd(event:PanEvent):void { if (mustResumeTracking) { timer.start(); mustResumeTracking = false; } } ]]> </fx:Script> <fx:Declarations> <esri:Extent id="initialExtent" xmin="-13635000" ymin="4541000" xmax="-13625000" ymax="4547000"> <esri:SpatialReference wkid="102100"/> </esri:Extent> <esri:GeometryService id="geometryService" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer" /> </fx:Declarations> <esri:Map id="map" extent="{initialExtent}" panStart="onMapPanStart(event)" panEnd="onMapPanEnd(event)"> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/> <esri:GraphicsLayer> <esri:Graphic> <esri:geometry> <esri:Polyline id="trackLine" spatialReference="{new SpatialReference(102100)}"> <fx:Array> <fx:Array> <esri:MapPoint x="-13629302.512116898" y="4545949.1442212695"/> <esri:MapPoint x="-13628433.040920155" y="4546016.026621019"/> <esri:MapPoint x="-13628327.940006264" y="4544449.067541175"/> <esri:MapPoint x="-13626541.2244701" y="4544582.832340674"/> <esri:MapPoint x="-13626665.434641063" y="4546379.102505373"/> </fx:Array> </fx:Array> </esri:Polyline> </esri:geometry> <esri:symbol> <esri:SimpleLineSymbol width="3" color="0xFF0000"/> </esri:symbol> </esri:Graphic> </esri:GraphicsLayer> <esri:GraphicsLayer id="trackLayer" /> </esri:Map> <s:HGroup gap="20" width="100%"> <s:Button label="Move" click="onMoveClick(event)"/> <s:Button id="btnPauseResume" label="Pause" click="onPauseResumeClick(event)"/> </s:HGroup> </s:Application> Good luck
... View more
01-05-2013
11:41 AM
|
0
|
0
|
838
|
|
POST
|
If you want to animate com.esri.ags.Graphic just set it as target for spark.effects.AnimateFilter Take a look on deaclarations tag and on onGridSingleClick() function code in sources of this sample. UPD: Use case: Just click on any places on map, make > 1 clicks. Each click result is MapPoint. <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:esri="http://www.esri.com/2008/ags">
<s:layout>
<s:VerticalLayout gap="10"
paddingBottom="20"
paddingLeft="20"
paddingRight="20"
paddingTop="20"/>
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.events.MapMouseEvent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.geometry.Polyline;
import mx.collections.ArrayCollection;
import spark.filters.GlowFilter;
private var _polyline:Polyline;
private var _points:Array = new Array();
private var _isPolyline:Boolean = true;
protected function onMapClick(event:MapMouseEvent):void
{
if (event)
{
_points.push(event.mapPoint);
}
if (_isPolyline) // if checkbox selected
{
if (!_polyline)
{
_polyline = new Polyline();
_polyline.spatialReference = map.spatialReference;
}
if (_points.length > 1)
{
_polyline.paths = [ _points ];
animationFilter.stop();
gLayer.clear();
var gr:Graphic = new Graphic(_polyline, sls);
gLayer.add(gr);
animationFilter.target = gr;
animationFilter.play();
}
}
else
{
animationFilter.stop();
gLayer.clear();
for each (var pt:MapPoint in _points)
{
var graphic:Graphic = new Graphic(pt, sms);
gLayer.add(graphic);
}
animationFilter.targets = ArrayCollection(gLayer.graphicProvider).toArray();
animationFilter.play();
}
}
protected function onClearClick(event:MouseEvent):void
{
animationFilter.stop();
gLayer.clear();
_polyline = null;
_points = new Array();
}
protected function onSelectionChange(event:Event):void
{
_isPolyline = box.selected;
onMapClick(null);
}
]]>
</fx:Script>
<fx:Declarations>
<s:AnimateFilter id="animationFilter"
repeatCount="0"
duration="500"
repeatBehavior="reverse"
bitmapFilter="{new spark.filters.GlowFilter()}">
<s:SimpleMotionPath property="color"
valueFrom="0x00FF00"
valueTo="0x0000FF"/>
<s:SimpleMotionPath property="blurX"
valueFrom="6"
valueTo="18"/>
<s:SimpleMotionPath property="blurY"
valueFrom="6"
valueTo="18"/>
</s:AnimateFilter>
<esri:Extent id="initialExtent"
xmin="-13635000"
ymin="4541000"
xmax="-13625000"
ymax="4547000">
<esri:SpatialReference wkid="102100"/>
</esri:Extent>
<esri:SimpleLineSymbol id="sls"
width="3"
color="0xFF0000"/>
<esri:SimpleMarkerSymbol id="sms"
color="0xFF0000" />
</fx:Declarations>
<s:CheckBox id="box"
label="Line / Point"
selected="true"
change="onSelectionChange(event)" />
<esri:Map id="map"
extent="{initialExtent}"
mapMouseDown="onMapClick(event)">
<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
<esri:GraphicsLayer id="gLayer" />
</esri:Map>
<s:Button label="Clear"
click="onClearClick(event)"/>
</s:Application>
... View more
01-03-2013
10:16 PM
|
0
|
0
|
838
|
|
POST
|
In Tour de FLEX web edition choose "Data Visualization". UPD Using multiple data series ... Charts that are subclasses of the CartesianChart class let you mix different data series in the same chart control. You can create a column chart with a trend line running through it or mix any data series with any other similar series. You can use any combination of the following series objects in a CartesianChart control: AreaSeries BarSeries BubbleSeries CandlestickSeries ColumnSeries HLOCSeries LineSeries PlotSeries ...
... View more
12-17-2012
11:26 PM
|
0
|
0
|
738
|
|
POST
|
Google search video results for "arcgis api for flex getting started" http://video.esri.com
... View more
12-05-2012
11:36 PM
|
0
|
0
|
659
|
|
POST
|
For ms.controls.ProgressBar you can change it's interface by customizing skins [ATTACH=CONFIG]19740[/ATTACH] (copy skins to your app and customize them) <mx:ProgressBar id="progressBar1" barSkin="your.company.assets.skins.MyProgressBarSkin" ... or change it's interface by customizing css styles <fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @namespace mx "library://ns.adobe.com/flex/mx"; .progressBarSyle { /* TODO: define style here */ } </fx:Style> ... <mx:ProgressBar id="progressBar2" styleName="progressBarSyle" Good luck
... View more
12-05-2012
11:21 PM
|
0
|
0
|
1085
|
|
POST
|
You must handle map zoom end handler, or any other way handle (listen each layer update end) map fully updated after you change extent. In this code look at: map.addEventListener(ZoomEvent.ZOOM_END, onMapZoomEnd); If map extent not changed - call function exports map image. If map extent changed - wait until map zoomed, call function exports map image. <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:esri="http://www.esri.com/2008/ags"
xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- ArcGIS API for FLEX 3.0 -->
<!-- Adobe SDK 4.6 -->
<s:layout>
<s:VerticalLayout paddingBottom="20"
paddingLeft="20"
paddingRight="20"
paddingTop="20"/>
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.events.DrawEvent;
import com.esri.ags.events.ZoomEvent;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.symbols.SimpleFillSymbol;
import com.esri.ags.symbols.SimpleLineSymbol;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.core.UIComponent;
import mx.events.CloseEvent;
import mx.graphics.codec.PNGEncoder;
private const FILE_NAME:String = "screen.png";
private var mapExtent:Extent;
private var bitmapData:BitmapData;
private var logoBitmapData:BitmapData;
/**
* Save as png clicked
*/
protected function onSaveAsPng(event:MouseEvent):void
{
trace("Save button clicked");
var printableExtent:Extent = getDrawnExtent();
var readyToPrint:Boolean = true;
if (printableExtent)
{
mapExtent = map.extent;
map.extent = printableExtent;
map.addEventListener(ZoomEvent.ZOOM_END, onMapZoomEnd);
}
else
{
saveMapImage();
}
}
/**
* Map zoom endend
*/
protected function onMapZoomEnd(event:ZoomEvent):void
{
trace("Map zoom ended")
map.removeEventListener(ZoomEvent.ZOOM_END, onMapZoomEnd);
// user action needed (mouse click or key press) to call FileReference.save() method
Alert.show("Do you really want to print?", "Ready to print", Alert.YES | Alert.NO, null, onAlertClose);
}
/**
* Confirmation dialog close handler
*/
protected function onAlertClose(event:CloseEvent):void
{
trace("Confirmation dialog closed");
if (event.detail == Alert.YES)
{
saveMapImage();
}
else
{
// restore map state
showComponents();
}
}
/**
* @private
*/
private function saveMapImage():void
{
trace("Image export started");
var fileReference:FileReference = new FileReference();
hideComponents();
// add listeners to show zoom slider after execution
fileReference.addEventListener(Event.COMPLETE, fileSaveComplete);
fileReference.addEventListener(Event.CANCEL, fileSaveCancel);
try
{
var mapComponent:UIComponent = map as UIComponent;
var exportData:BitmapData = getBitmapData(mapComponent);
if (exportData)
{
// encode to PNG format
var pngEncoder:PNGEncoder = new PNGEncoder();
var byteArray:ByteArray = pngEncoder.encode(exportData);
// open dialog box
fileReference.save(byteArray, FILE_NAME);
exportData = null;
bitmapData = null;
}
}
catch (ioError:IllegalOperationError)
{
trace(ioError.getStackTrace());
}
catch (error:Error)
{
trace(error.getStackTrace());
}
}
/**
* get bitmap data from IBitmapDrawable component
*/
private function getBitmapData(uiComponent:UIComponent):BitmapData
{
try
{
// map image size
var mapWidth:Number = uiComponent.width;
var mapHeigth:Number = uiComponent.height;
// get flash map bitmap data
bitmapData = new BitmapData(mapWidth, mapHeigth);
var matrix:Matrix = new Matrix();
bitmapData.draw(uiComponent, matrix);
// logo image size
var logoWidth:Number = logo.width;
var logoHeigth:Number = logo.height;
// get logo bitmap data
logoBitmapData = new BitmapData(logoWidth, logoHeigth);
logoBitmapData.draw(logo, matrix);
// calculate logo left-top position on map
var logoX:Number = mapWidth - logoWidth - 10;
var logoY:Number = 10;
var point:Point = new Point(logoX, logoY);
var mult:uint = 0x100; // 100% (256) RGBA channels multipliers
bitmapData.merge(logoBitmapData, logoBitmapData.rect, point, mult, mult, mult, mult);
}
catch (error:Error)
{
trace(error.getStackTrace());
}
return bitmapData;
}
/**
* Hide crosshair, logo, scalebar ...
*/
private function hideComponents():void
{
// TODO: complete code
// force UIComponent update/redraw
map.validateNow();
}
/**
* Restore hidden map components: crosshair, logo, scalebar ...
* Restore map extent.
*/
private function showComponents():void
{
// TODO: complete code
// restore map extent
map.extent = mapExtent;
mapExtent = null;
}
/**
* @return extent of drawn graphic
*/
private function getDrawnExtent():Extent
{
var graphicProvider:ArrayCollection = graphicsLayer.graphicProvider as ArrayCollection;
if (graphicProvider && graphicProvider.length > 0)
{
var graphic:Graphic = graphicProvider.getItemAt(0) as Graphic;
var geometry:Geometry = graphic.geometry;
graphicsLayer.clear();
return geometry.extent;
}
else
{
trace("Graphics provider is empty");
return null;
}
}
/**
* Draw button clicked
*/
protected function onActivateDrawTool(event:MouseEvent):void
{
trace("Draw button clicked");
graphicsLayer.clear();
drawTool.activate(DrawTool.EXTENT);
drawTool.fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_NULL, 0, 0, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0, 1, 2));
}
/**
* Drawing ended
*/
protected function onDrawEnd(event:DrawEvent):void
{
trace("Drawing ended");
drawTool.deactivate();
}
/**
* File upload/download canceled by user
*/
protected function fileSaveCancel(event:Event):void
{
showComponents();
}
/**
* File upload/download completed
*/
protected function fileSaveComplete(event:Event):void
{
showComponents();
}
]]>
</fx:Script>
<fx:Declarations>
<esri:DrawTool id="drawTool"
drawEnd="onDrawEnd(event)"
graphicsLayer="{graphicsLayer}"
map="{map}"/>
</fx:Declarations>
<s:HGroup width="100%">
<mx:Image id="logo"
source="http://edn.esri.com/common/style/images/esriLogoSm.gif" />
<s:Button label="Save as PNG"
click="onSaveAsPng(event)" />
<s:Button label="Draw printable Extent"
click="onActivateDrawTool(event)" />
</s:HGroup>
<esri:Map id="map">
<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
<esri:GraphicsLayer id="graphicsLayer" />
</esri:Map>
</s:Application> Good luck
... View more
12-02-2012
10:52 PM
|
0
|
0
|
314
|
|
POST
|
http://json.org/ - scroll page down and you'll see JSON utilities links for C#. UPD ArcObjects Help for Java - com/esri/arcgis/server/json package ArcObjects API Reference for .NET - JSONObject Class
... View more
11-25-2012
09:22 PM
|
0
|
0
|
4059
|
|
POST
|
I checked all the services and everything is Ok! [ATTACH=CONFIG]19500[/ATTACH] - Service does not exist or is inaccessible.
... View more
11-24-2012
10:50 AM
|
0
|
0
|
1067
|
|
POST
|
ArcGISDynamicMapServiceLayer # imageFormat The output image type. Valid types are: png8 | png24 | png32 | jpg | gif. Only png and gif formats support transparency. The default value is png8. This property can be used as the source for data binding. ArcGIS Server REST API # Export Map (Operation) # format The format of the exported image. The default format is png. Values: png | png8 | png24 | jpg | pdf | bmp | gif | svg | png32 1 - So when you add imageFormat="png32" to ArcGISDynamicMapServiceLayer tag you can see layers with the same transparency as they are in ArcMap [ATTACH=CONFIG]19475[/ATTACH] 2 - If layers in ArcMap are not transparent play with alpha property of ArcGISDynamicMapServiceLayer component.
... View more
11-22-2012
01:47 AM
|
0
|
0
|
344
|
|
POST
|
1 - Create own print preview - something like this. 2 - Here is the topic with similar problem and solution. 3 - Maybe I'm behind the reality, but recently Firefox could not print flash content. Here is description. P.S. Opera, Safari ... call default system printing dialog without preview (like IE & FF), so if you want to call print preview window via some javascript - be ready to write script for each browser. Good luck.
... View more
11-13-2012
09:53 PM
|
0
|
0
|
654
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 12-03-2017 11:25 PM | |
| 1 | 10-06-2016 11:49 PM | |
| 2 | 06-07-2012 01:38 AM | |
| 1 | 06-03-2012 09:42 PM |
| Online Status |
Offline
|
| Date Last Visited |
11-11-2020
02:23 AM
|