| <?xml version="1.0" encoding="utf-8"?> |
| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| |
| --> |
| <windows:AnimatedPanelWindow 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:c="com.flexcapacitor.views.windows.*" |
| xmlns:handlers="com.flexcapacitor.handlers.*" |
| xmlns:fc="com.flexcapacitor.effects.popup.*" |
| xmlns:windows="com.flexcapacitor.views.windows.*" |
| |
| title="Contact" |
| creationComplete="creationCompleteHandler(event)" |
| stateChangeComplete="stateChangeCompleteHandler(event)" |
| height.bug="450" |
| > |
| |
| <fx:Style> |
| @namespace s "library://ns.adobe.com/flex/spark"; |
| @namespace c "com.flexcapacitor.controls.*"; |
| @namespace mx "library://ns.adobe.com/flex/mx"; |
| @namespace handlers "com.flexcapacitor.handlers.*"; |
| @namespace fc "com.flexcapacitor.effects.popup.*"; |
| |
| </fx:Style> |
| |
| <fx:Script> |
| <![CDATA[ |
| import com.flexcapacitor.controller.Radiate; |
| import com.flexcapacitor.status.StatusManager; |
| |
| import mx.core.mx_internal; |
| import mx.events.FlexEvent; |
| import mx.events.ValidationResultEvent; |
| import mx.managers.PopUpManager; |
| import mx.rpc.events.FaultEvent; |
| import mx.rpc.events.ResultEvent; |
| import mx.validators.EmailValidator; |
| |
| use namespace mx_internal; |
| |
| public static const BUG:String = "bug"; |
| public static const FEATURE:String = "feature"; |
| |
| [Bindable] |
| public var os:String; |
| |
| [Bindable] |
| public var browser:String; |
| |
| [Bindable] |
| public var player:String; |
| |
| [Bindable] |
| public var manufacturer:String; |
| |
| [Bindable] |
| public var cpu:String; |
| |
| [Bindable] |
| public var isDebugger:Boolean; |
| |
| [Bindable] |
| public var language:String; |
| |
| [Bindable] |
| public var supports32bit:String; |
| |
| [Bindable] |
| public var supports64bit:String; |
| |
| [Bindable] |
| public var touchscreenType:String; |
| |
| [Bindable] |
| public var isDebugSWF:Boolean; |
| |
| [Bindable] |
| public var flexSDK:String; |
| |
| protected function getPropertiesInfo():void { |
| |
| var cap:Object = Capabilities; |
| os = Capabilities.os; |
| manufacturer = Capabilities.manufacturer; |
| player = Capabilities.version; |
| isDebugger = Capabilities.isDebugger; |
| language = Capabilities.language; |
| |
| // in the future we should load in the swf in question |
| // and get the sdk version and if its a debug swf |
| //flexSDK = mx_internal::Version; |
| isDebugSWF = false; //new Error().getStackTrace().search(/:[0-9]+]$/m) > -1; |
| |
| |
| if (Object(Capabilities).hasOwnProperty("cpuArchitecture")) { |
| cpu = Capabilities['cpuArchitecture']; |
| } |
| else { |
| cpu = ""; |
| } |
| |
| if (Object(Capabilities).hasOwnProperty("supports32BitProcesses")) { |
| supports32bit = Capabilities['supports32BitProcesses']; |
| supports64bit = Capabilities['supports64BitProcesses']; |
| } |
| else { |
| supports32bit = ""; |
| supports64bit = ""; |
| } |
| |
| if (Object(Capabilities).hasOwnProperty("touchscreenType")) { |
| touchscreenType = Capabilities['touchscreenType']; |
| } |
| else { |
| touchscreenType = ""; |
| } |
| |
| if (ExternalInterface.available) { |
| browser = ExternalInterface.call("eval", "navigator.userAgent"); |
| } |
| else { |
| browser = Capabilities.playerType; |
| } |
| } |
| |
| protected function featureRadioGroup_changeHandler(event:Event):void { |
| if (featureRadioButton.selected) { |
| currentState = FEATURE; |
| } |
| else { |
| currentState = BUG; |
| } |
| } |
| |
| |
| protected function sendButton_clickHandler():void { |
| var message:Object = new Object(); |
| var validResultEvent:ValidationResultEvent = emailValidator.validate(emailText.text); |
| //var validEmail:Boolean = emailValidator.validate(emailText.text); |
| |
| if (validResultEvent.results && validResultEvent.results.length!=0) { |
| //infoLabel.text = "Please enter a valid email before sending a message."; |
| infoLabel.text = validResultEvent.message; |
| return; |
| } |
| |
| if (messageTextArea.text=="" || messageTextArea.text.length<6) { |
| //StatusManager.show("Please enter a message."); |
| infoLabel.text = "Please enter a message"; |
| return; |
| } |
| |
| getPropertiesInfo(); |
| |
| message.os = os; |
| message.browser = browser; |
| message.player = player; |
| message.manufacturer = manufacturer; |
| message.cpu = cpu; |
| message.isDebugger = isDebugger; |
| message.language = language; |
| message.supports32bit = supports32bit; |
| message.supports64bit = supports64bit; |
| message.touchscreen = touchscreenType; |
| |
| message.email = emailText.text=="" ? emailText.prompt : emailText.text; |
| |
| if (currentState==BUG) { |
| message.message = bugMessageTextArea.text; |
| } |
| else if (currentState==FEATURE) { |
| message.message = messageTextArea.text; |
| } |
| |
| feedbackService.send(message); |
| } |
| |
| protected function feedbackService_resultHandler(event:ResultEvent):void { |
| var result:String = event.result as String; |
| //StatusManager.show("Message sent!", 3000, false, null, false, .75); |
| //nameText.text = ""; |
| //emailText.prompt = emailText.text!="" ? emailText.text : emailText.prompt; |
| //emailText.text = ""; |
| |
| if (currentState==BUG) { |
| bugMessageTextArea.text = bugText; |
| } |
| else if (currentState==FEATURE) { |
| messageTextArea.text = ""; |
| } |
| |
| if (result && result.indexOf("Mail sent")!=-1) { |
| playSentSuccessfulMessage(); |
| } |
| |
| } |
| |
| |
| protected function feedbackService_faultHandler(event:FaultEvent):void { |
| infoLabel.text = "An error occurred! Message may not have been sent. Please email contact@radii8.com."; |
| //StatusManager.show("An error occurred! Message may not have been sent. \n\n" + event.fault.message); |
| Radiate.log.error(event.fault.message); |
| } |
| |
| /** |
| * Sets the action to deleted, the label to deleted and closes the window after a second. |
| * */ |
| public function playSentSuccessfulMessage():void { |
| //infoLabel.text = "Sent!"; |
| //action = "Sent"; |
| |
| StatusManager.show("Message sent!", 1000, false, null, false, .20); |
| closePopUp.startDelay = 1000; |
| closePopUp.play(); |
| } |
| |
| protected function cancelButton_clickHandler(event:MouseEvent):void {
|
| callLater(PopUpManager.removePopUp, [this]); |
| } |
| |
| protected function creationCompleteHandler(event:FlexEvent):void {
|
| radiate = Radiate.getInstance(); |
| |
| if (radiate.isUserLoggedIn) { |
| emailText.text = radiate.userEmail; |
| } |
| |
| if (currentState==BUG) { |
| bugMessageTextArea.text = bugText; |
| //helpTextArea.text = bugExampleText; |
| } |
| else { |
| //messageTextArea.text = bugText; |
| //messageTextArea.text = bugExampleText; |
| }
|
| } |
| |
| protected function stateChangeCompleteHandler(event:FlexEvent):void { |
| |
| if (currentState==BUG && bugMessageTextArea.text=="") { |
| bugMessageTextArea.text = bugText; |
| addMoveEffect(); |
| PopUpManager.centerPopUp(this); |
| } |
| else { |
| PopUpManager.centerPopUp(this); |
| }
|
| } |
| |
| ]]> |
| </fx:Script> |
| |
| <fx:Declarations> |
| |
| <fx:String id="action"></fx:String> |
| |
| <fc:ClosePopUp id="closePopUp" popUp="{this}" /> |
| </fx:Declarations> |
| |
| |
| <fx:Declarations> |
| <mx:EmailValidator id="emailValidator" /> |
| |
| <s:RadioButtonGroup id="featureRadioGroup" |
| change="featureRadioGroup_changeHandler(event)"/> |
| |
| <s:HTTPService id="feedbackService" |
| method="POST" |
| fault="feedbackService_faultHandler(event)" |
| result="feedbackService_resultHandler(event)" |
| url="http://www.radii8.com/support.php"/> |
| |
| <fx:String id="bugText"> |
| <![CDATA[Summary: |
| |
| |
| Steps to reproduce: |
| 1. |
| 2. |
| 3. |
| |
| Expected Result: |
| |
| |
| Actual Result: |
| |
| |
| ]]></fx:String> |
| |
| <fx:String id="bugExampleText"> |
| <![CDATA[Summarize the problem and list the steps to reproduce. |
| |
| Steps to reproduce: |
| 1. Add a button to the stage |
| 2. Set color on the button to red in the properties panel |
| |
| Expected Result: |
| Button text is red |
| |
| Actual Result: |
| Button text is blue]]></fx:String> |
| </fx:Declarations> |
| |
| <windows:states> |
| <s:State name="feature"/> |
| <s:State name="bug"/> |
| </windows:states> |
| |
| <s:VGroup left="15" |
| top="20" |
| right="20" |
| bottom="20" |
| gap="10" |
| > |
| |
| <s:HGroup left="0" right="0" |
| width="100%" |
| clipAndEnableScrolling="true" |
| paddingRight="10" |
| verticalAlign="middle" |
| > |
| |
| <s:Label text="Send as many feature request and bug reports as you like."/> |
| |
| <s:Spacer width="100%"/> |
| |
| <s:RadioButton id="featureRadioButton" |
| label="Feature" |
| group="{featureRadioGroup}" |
| selected="true" |
| /> |
| <s:RadioButton id="booleanDisabledRadioButton" |
| label="Bug" |
| group="{featureRadioGroup}" |
| /> |
| |
| </s:HGroup> |
| |
| <s:HGroup verticalAlign="middle"> |
| <s:Label text="Your email:"/> |
| |
| <s:TextInput id="emailText" |
| minWidth="250" |
| focusAlpha="0" |
| borderColor="#cccccc" |
| /> |
| </s:HGroup> |
| |
| <s:HGroup left="0" right="0" |
| width="100%" height="100%" |
| clipAndEnableScrolling="true" |
| paddingRight="10" |
| verticalAlign="middle" |
| > |
| <s:TextArea id="messageTextArea" |
| focusColor="#585858" |
| focusAlpha="0" |
| width="100%" height="100%" |
| borderColor="#cccccc" |
| paddingTop="8" |
| paddingBottom="8" |
| prompt="Enter your feature and click send" |
| includeIn="feature" |
| > |
| </s:TextArea> |
| |
| <s:TextArea id="bugMessageTextArea" |
| focusColor="#585858" |
| focusAlpha="0" |
| width="100%" height="100%" |
| borderColor="#cccccc" |
| paddingTop="8" |
| paddingBottom="8" |
| includeIn="bug" |
| > |
| <s:keyFocusChange> |
| event.preventDefault(); |
| event.currentTarget.insertText("\t"); |
| </s:keyFocusChange> |
| <s:prompt>Summarize the problem and list the steps to reproduce.</s:prompt> |
| </s:TextArea> |
| |
| <!--<s:TextArea id="helpTextArea" |
| focusColor="#585858" |
| focusAlpha="0" |
| width="50%" height="100%" |
| borderColor="#cccccc" |
| borderVisible="false" |
| paddingTop="8" |
| paddingBottom="8" |
| editable="false" |
| includeIn="bug" |
| fontStyle="italic" |
| color="#585858" |
| > |
| <s:text></s:text> |
| </s:TextArea>--> |
| </s:HGroup> |
| |
| <s:HGroup width="100%" horizontalAlign="right" verticalAlign="baseline"> |
| <s:Label id="infoLabel" text="" /> |
| <s:Spacer width="100%"/> |
| <s:Button id="cancelButton" label="Cancel" click="cancelButton_clickHandler(event)" /> |
| <s:Button label="Send" click="sendButton_clickHandler()" /> |
| </s:HGroup> |
| |
| </s:VGroup> |
| |
| |
| </windows:AnimatedPanelWindow> |