Known issue: apim dependencies are not satisfying. Waiting for apim fixmerge-requests/1/head
@ -1,53 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
~ Copyright (c) 2015, WSO2 Inc. (http:www.wso2.org) All Rights Reserved.
|
||||
~
|
||||
~ WSO2 Inc. 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.
|
||||
-->
|
||||
|
||||
<EnterpriseMobilityManager>
|
||||
|
||||
<DeviceMonitorFrequency>60000</DeviceMonitorFrequency>
|
||||
|
||||
<iOSEMMConfigurations>
|
||||
<!-- iOS EMM endpoint urls -->
|
||||
<iOSEnrollURL>https://192.168.1.2:9443/emm/scep</iOSEnrollURL>
|
||||
<iOSProfileURL>https://192.168.1.2:9443/emm/profile</iOSProfileURL>
|
||||
<iOSCheckinURL>https://192.168.1.2:9443/emm/checkin</iOSCheckinURL>
|
||||
<iOSServerURL>https://192.168.1.2:9443/emm/server</iOSServerURL>
|
||||
|
||||
<!-- post url for device tokens -->
|
||||
<TokenURL>http://192.168.1.2:9763/emm/api/devices/iostokenregister</TokenURL>
|
||||
|
||||
<EmmKeystore>
|
||||
<!-- EMM Keystore file location-->
|
||||
<EMMKeystoreLocation>${carbon.home}/repository/resources/security/wso2emm.jks</EMMKeystoreLocation>
|
||||
<!-- EMM Keystore type (JKS/PKCS12 etc.)-->
|
||||
<EMMKeystoreType>JKS</EMMKeystoreType>
|
||||
<!-- EMM Keystore password-->
|
||||
<EMMKeystorePassword>wso2carbon</EMMKeystorePassword>
|
||||
<!-- Certificate authority certificate alias -->
|
||||
<EMMCACertAlias>cacert</EMMCACertAlias>
|
||||
<!-- Certificate authority private key password -->
|
||||
<EMMCAPrivateKeyPassword>cacert</EMMCAPrivateKeyPassword>
|
||||
<!-- Registration authority certificate alias -->
|
||||
<EMMRACertAlias>racert</EMMRACertAlias>
|
||||
<!-- Registration authority private key password -->
|
||||
<EMMRAPrivateKeyPassword>racert</EMMRAPrivateKeyPassword>
|
||||
</EmmKeystore>
|
||||
</iOSEMMConfigurations>
|
||||
|
||||
</EnterpriseMobilityManager>
|
@ -0,0 +1,49 @@
|
||||
<ServiceProvider>
|
||||
<ApplicationID>2</ApplicationID>
|
||||
<ApplicationName>wso2_sp_dashboard</ApplicationName>
|
||||
<Description>Default Service Provider</Description>
|
||||
<InboundAuthenticationConfig>
|
||||
<InboundAuthenticationRequestConfigs>
|
||||
<InboundAuthenticationRequestConfig>
|
||||
<InboundAuthKey>wso2.my.dashboard</InboundAuthKey>
|
||||
<InboundAuthType>samlsso</InboundAuthType>
|
||||
<Properties></Properties>
|
||||
</InboundAuthenticationRequestConfig>
|
||||
</InboundAuthenticationRequestConfigs>
|
||||
</InboundAuthenticationConfig>
|
||||
<LocalAndOutBoundAuthenticationConfig>
|
||||
<AuthenticationSteps>
|
||||
<AuthenticationStep>
|
||||
<StepOrder>1</StepOrder>
|
||||
<LocalAuthenticatorConfigs>
|
||||
<LocalAuthenticatorConfig>
|
||||
<Name>BasicAuthenticator</Name>
|
||||
<DisplayName>basicauth</DisplayName>
|
||||
<IsEnabled>true</IsEnabled>
|
||||
</LocalAuthenticatorConfig>
|
||||
</LocalAuthenticatorConfigs>
|
||||
<!-- FederatedIdentityProviders>
|
||||
<IdentityProvider>
|
||||
<IdentityProviderName>facebook</IdentityProviderName>
|
||||
<IsEnabled>true</IsEnabled>
|
||||
<DefaultAuthenticatorConfig>
|
||||
<FederatedAuthenticatorConfig>
|
||||
<Name>FacebookAuthenticator</Name>
|
||||
<IsEnabled>true</IsEnabled>
|
||||
</FederatedAuthenticatorConfig>
|
||||
</DefaultAuthenticatorConfig>
|
||||
</IdentityProvider>
|
||||
</FederatedIdentityProviders -->
|
||||
<SubjectStep>true</SubjectStep>
|
||||
<AttributeStep>true</AttributeStep>
|
||||
</AuthenticationStep>
|
||||
</AuthenticationSteps>
|
||||
</LocalAndOutBoundAuthenticationConfig>
|
||||
<RequestPathAuthenticatorConfigs></RequestPathAuthenticatorConfigs>
|
||||
<InboundProvisioningConfig></InboundProvisioningConfig>
|
||||
<OutboundProvisioningConfig></OutboundProvisioningConfig>
|
||||
<ClaimConfig>
|
||||
<AlwaysSendMappedLocalSubjectId>true</AlwaysSendMappedLocalSubjectId>
|
||||
</ClaimConfig>
|
||||
<PermissionAndRoleConfig></PermissionAndRoleConfig>
|
||||
</ServiceProvider>
|
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!-- ~ Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights
|
||||
Reserved. ~ ~ WSO2 Inc. 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. -->
|
||||
|
||||
<ApplicationAuthentication xmlns="http://wso2.org/projects/carbon/application-authentication.xml">
|
||||
|
||||
<JDBCPersistenceManager>
|
||||
<DataSource>
|
||||
<!-- Include a data source name (jndiConfigName) from the set of data
|
||||
sources defined in master-datasources.xml -->
|
||||
<!--Name>jdbc/WSO2_IDP_DB</Name-->
|
||||
<Name>jdbc/WSO2CarbonDB</Name>
|
||||
</DataSource>
|
||||
</JDBCPersistenceManager>
|
||||
|
||||
<!--
|
||||
ProxyMode allows framework to operate in either 'smart' mode
|
||||
or 'dumb' mode.
|
||||
smart = both local and federated authentication is supported
|
||||
dumb = only federated authentication is supported
|
||||
-->
|
||||
<ProxyMode>smart</ProxyMode>
|
||||
|
||||
<!--
|
||||
AuthenticationEndpointURL is location of the web app containing
|
||||
the authentication related pages
|
||||
-->
|
||||
<AuthenticationEndpointURL>/sso/login</AuthenticationEndpointURL>
|
||||
|
||||
<!--
|
||||
Extensions allow extending the default behaviour of the authentication
|
||||
process.
|
||||
-->
|
||||
<Extensions>
|
||||
<RequestCoordinator>org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator</RequestCoordinator>
|
||||
<AuthenticationRequestHandler>org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler</AuthenticationRequestHandler>
|
||||
<LogoutRequestHandler>org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultLogoutRequestHandler</LogoutRequestHandler>
|
||||
<StepBasedSequenceHandler>org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler</StepBasedSequenceHandler>
|
||||
<RequestPathBasedSequenceHandler>org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultRequestPathBasedSequenceHandler</RequestPathBasedSequenceHandler>
|
||||
<StepHandler>org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler</StepHandler>
|
||||
<HomeRealmDiscoverer>org.wso2.carbon.identity.application.authentication.framework.handler.hrd.impl.DefaultHomeRealmDiscoverer</HomeRealmDiscoverer>
|
||||
<ClaimHandler>org.wso2.carbon.identity.application.authentication.framework.handler.claims.impl.DefaultClaimHandler</ClaimHandler>
|
||||
<ProvisioningHandler>org.wso2.carbon.identity.application.authentication.framework.handler.provisioning.impl.DefaultProvisioningHandler</ProvisioningHandler>
|
||||
</Extensions>
|
||||
|
||||
<!--
|
||||
AuthenticatorNameMappings allow specifying an authenticator
|
||||
against a pre-defined alias (which will be used by other components.
|
||||
E.g. Application Mgt component). This enables the usage of a custom
|
||||
authenticator in place of an authenticator that gets packed with the
|
||||
distribution.
|
||||
-->
|
||||
<AuthenticatorNameMappings>
|
||||
<AuthenticatorNameMapping name="BasicAuthenticator" alias="basic" />
|
||||
<AuthenticatorNameMapping name="OAuthRequestPathAuthenticator" alias="oauth-bearer" />
|
||||
<AuthenticatorNameMapping name="BasicAuthRequestPathAuthenticator" alias="basic-auth" />
|
||||
<AuthenticatorNameMapping name="IWAAuthenticator" alias="iwa" />
|
||||
<AuthenticatorNameMapping name="SAMLSSOAuthenticator" alias="samlsso" />
|
||||
<AuthenticatorNameMapping name="OpenIDConnectAuthenticator" alias="openidconnect" />
|
||||
<AuthenticatorNameMapping name="OpenIDAuthenticator" alias="openid" />
|
||||
<AuthenticatorNameMapping name="PassiveSTSAuthenticator" alias="passive-sts" />
|
||||
</AuthenticatorNameMappings>
|
||||
|
||||
<!--
|
||||
AuthenticatorConfigs allow specifying various configurations needed
|
||||
by the authenticators by using any number of \'Parameter\' elements
|
||||
E.g.
|
||||
<AuthenticatorConfig name="CustomAuthenticator" enabled="true" />
|
||||
<Parameter name="paramName1">paramValue</Parameter>
|
||||
<Parameter name="paramName2">paramValue</Parameter>
|
||||
</AuthenticatorConfig>
|
||||
-->
|
||||
<AuthenticatorConfigs>
|
||||
<AuthenticatorConfig name="BasicAuthenticator" enabled="true" />
|
||||
<AuthenticatorConfig name="OAuthRequestPathAuthenticator" enabled="true" />
|
||||
<AuthenticatorConfig name="BasicAuthRequestPathAuthenticator" enabled="true" />
|
||||
<AuthenticatorConfig name="SAMLSSOAuthenticator" enabled="true">
|
||||
<!--Parameter name="SAMLSSOManager">org.wso2.carbon.identity.application.authenticator.samlsso.manager.DefaultSAMLSSOManager</Parameter-->
|
||||
</AuthenticatorConfig>
|
||||
<AuthenticatorConfig name="OpenIDConnectAuthenticator" enabled="true">
|
||||
<!--Parameter name="IDTokenHandler">org.wso2.carbon.identity.application.authenticator.oidc.DefaultIDTokenHandler</Parameter-->
|
||||
<!--Parameter name="ClaimsRetriever">org.wso2.carbon.identity.application.authenticator.oidc.OIDCUserInfoClaimsRetriever</Parameter-->
|
||||
</AuthenticatorConfig>
|
||||
<AuthenticatorConfig name="OpenIDAuthenticator" enabled="true">
|
||||
<Parameter name="LoginPage">/authenticationendpoint/login.do</Parameter>
|
||||
<Parameter name="TrustStorePath">/repository/resources/security/client-truststore.jks</Parameter>
|
||||
<Parameter name="TrustStorePassword">wso2carbon</Parameter>
|
||||
<!--Parameter name="OpenIDManager">org.wso2.carbon.identity.application.authenticator.openid.manager.DefaultOpenIDManager</Parameter>
|
||||
<Parameter name="AttributesRequestor">org.wso2.carbon.identity.application.authenticator.openid.manager.SampleAttributesRequestor</Parameter-->
|
||||
</AuthenticatorConfig>
|
||||
</AuthenticatorConfigs>
|
||||
|
||||
<!--
|
||||
Sequences allow specifying authentication flows for different
|
||||
registered applications. \'default\' sequence is taken if an
|
||||
application specific sequence doesn't exist in this file or
|
||||
in the Application Mgt module.
|
||||
-->
|
||||
<Sequences>
|
||||
<!-- Default Sequence. This is mandatory -->
|
||||
<Sequence appId="default">
|
||||
<Step order="1">
|
||||
<Authenticator name="BasicAuthenticator"/>
|
||||
</Step>
|
||||
</Sequence>
|
||||
</Sequences>
|
||||
|
||||
<ServiceProvidersManagement>
|
||||
<ApplicationDAO>org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl</ApplicationDAO>
|
||||
<OAuthOIDCClientDAO>org.wso2.carbon.identity.application.mgt.dao.impl.OAuthApplicationDAOImpl</OAuthOIDCClientDAO>
|
||||
<SAMLClientDAO>org.wso2.carbon.identity.application.mgt.dao.impl.SAMLApplicationDAOImpl</SAMLClientDAO>
|
||||
<SystemIDPDAO>org.wso2.carbon.identity.application.mgt.dao.impl.IdentityProviderDAOImpl</SystemIDPDAO>
|
||||
<ClaimDialect>http://wso2.org/claims</ClaimDialect>
|
||||
</ServiceProvidersManagement>
|
||||
|
||||
</ApplicationAuthentication>
|
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
~ Copyright 2005-2013 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed 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.
|
||||
-->
|
||||
|
||||
<Authenticators>
|
||||
<Authenticator name="BasicAuthenticator" disabled="false" factor="1">
|
||||
<Status value="10" loginPage="/sso/login" />
|
||||
</Authenticator>
|
||||
</Authenticators>
|
@ -0,0 +1,52 @@
|
||||
<!--
|
||||
~ Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
~
|
||||
~ WSO2 Inc. 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.
|
||||
-->
|
||||
<SSOIdentityProviderConfig>
|
||||
<TenantRegistrationPage>https://stratos-local.wso2.com/carbon/tenant-register/select_domain.jsp</TenantRegistrationPage>
|
||||
<ServiceProviders>
|
||||
<ServiceProvider>
|
||||
<Issuer>store</Issuer>
|
||||
<AssertionConsumerService>https://localhost:9443/store/acs</AssertionConsumerService>
|
||||
<SignResponse>true</SignResponse>
|
||||
<CustomLoginPage>/store/login.jag</CustomLoginPage>
|
||||
</ServiceProvider>
|
||||
<ServiceProvider>
|
||||
<Issuer>social</Issuer>
|
||||
<AssertionConsumerService>https://localhost:9443/social/acs</AssertionConsumerService>
|
||||
<SignResponse>true</SignResponse>
|
||||
<CustomLoginPage>/social/login</CustomLoginPage>
|
||||
</ServiceProvider>
|
||||
<ServiceProvider>
|
||||
<Issuer>publisher</Issuer>
|
||||
<AssertionConsumerService>https://localhost:9443/publisher/acs</AssertionConsumerService>
|
||||
<SignResponse>true</SignResponse>
|
||||
<CustomLoginPage>/publisher/controllers/login.jag</CustomLoginPage>
|
||||
</ServiceProvider>
|
||||
<ServiceProvider>
|
||||
<Issuer>emm</Issuer>
|
||||
<AssertionConsumerService>https://localhost:9443/emm/acs</AssertionConsumerService>
|
||||
<SignResponse>true</SignResponse>
|
||||
<CustomLoginPage>/emm/login</CustomLoginPage>
|
||||
</ServiceProvider>
|
||||
<ServiceProvider>
|
||||
<Issuer>mam</Issuer>
|
||||
<AssertionConsumerService>https://localhost:9443/mam/acs</AssertionConsumerService>
|
||||
<SignResponse>true</SignResponse>
|
||||
<CustomLoginPage>/mam/login</CustomLoginPage>
|
||||
</ServiceProvider>
|
||||
</ServiceProviders>
|
||||
</SSOIdentityProviderConfig>
|
@ -0,0 +1,26 @@
|
||||
CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE
|
||||
(
|
||||
ID INT(11) auto_increment NOT NULL,
|
||||
NAME VARCHAR(300) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DM_DEVICE
|
||||
(
|
||||
ID INT auto_increment NOT NULL,
|
||||
DESCRIPTION TEXT NULL DEFAULT NULL,
|
||||
NAME VARCHAR(100) NULL DEFAULT NULL,
|
||||
DATE_OF_ENROLLMENT BIGINT NULL DEFAULT NULL,
|
||||
DATE_OF_LAST_UPDATE BIGINT NULL DEFAULT NULL,
|
||||
OWNERSHIP VARCHAR(45) NULL DEFAULT NULL,
|
||||
STATUS VARCHAR(15) NULL DEFAULT NULL,
|
||||
DEVICE_TYPE_ID INT(11) NULL DEFAULT NULL,
|
||||
DEVICE_IDENTIFICATION VARCHAR(300) NULL DEFAULT NULL,
|
||||
OWNER VARCHAR(45) NULL DEFAULT NULL,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (ID),
|
||||
CONSTRAINT fk_DM_DEVICE_DM_DEVICE_TYPE2 FOREIGN KEY (DEVICE_TYPE_ID )
|
||||
REFERENCES DM_DEVICE_TYPE (ID ) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
);
|
||||
-- TO:DO - Remove this INSERT sql statement.
|
||||
Insert into DM_DEVICE_TYPE (NAME) VALUES ('android');
|
@ -0,0 +1,35 @@
|
||||
-- -----------------------------------------------------
|
||||
-- Table `DM_DEVICE_TYPE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `DM_DEVICE_TYPE` (
|
||||
`ID` INT(11) NOT NULL ,
|
||||
`NAME` VARCHAR(300) NULL DEFAULT NULL ,
|
||||
PRIMARY KEY (`ID`) )
|
||||
ENGINE = InnoDB
|
||||
DEFAULT CHARACTER SET = latin1;
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `DM_DEVICE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `DM_DEVICE` (
|
||||
`ID` VARCHAR(20) NOT NULL ,
|
||||
`DESCRIPTION` TEXT NULL DEFAULT NULL ,
|
||||
`NAME` VARCHAR(100) NULL DEFAULT NULL ,
|
||||
`DATE_OF_ENROLLMENT` DATETIME NULL DEFAULT NULL ,
|
||||
`DATE_OF_LAST_UPDATE` DATETIME NULL DEFAULT NULL ,
|
||||
`OWNERSHIP` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`STATUS` VARCHAR(15) NULL DEFAULT NULL ,
|
||||
`DEVICE_TYPE_ID` INT(11) NULL DEFAULT NULL ,
|
||||
`DEVICE_IDENTIFICATION` VARCHAR(300) NULL DEFAULT NULL ,
|
||||
`OWNER` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
TENANT_ID INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (`ID`) ,
|
||||
INDEX `fk_DM_DEVICE_DM_DEVICE_TYPE2_idx` (`DEVICE_TYPE_ID` ASC) ,
|
||||
CONSTRAINT `fk_DM_DEVICE_DM_DEVICE_TYPE2`
|
||||
FOREIGN KEY (`DEVICE_TYPE_ID` )
|
||||
REFERENCES `DM_DEVICE_TYPE` (`ID` )
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION)
|
||||
ENGINE = InnoDB
|
||||
DEFAULT CHARACTER SET = latin1;
|
@ -0,0 +1,82 @@
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_DEVICE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_DEVICE` (
|
||||
`MOBILE_DEVICE_ID` VARCHAR(45) NOT NULL ,
|
||||
`REG_ID` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`IMEI` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`IMSI` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`OS_VERSION` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`VENDOR` VARCHAR(45) NULL DEFAULT NULL ,
|
||||
`LATITUDE` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`LONGITUDE` VARCHAR(45) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`MOBILE_DEVICE_ID`) );
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_FEATURE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_FEATURE` (
|
||||
`FEATURE_ID` INT NOT NULL AUTO_INCREMENT ,
|
||||
`CODE` VARCHAR(45) NOT NULL ,
|
||||
`NAME` VARCHAR(100) NULL ,
|
||||
`DESCRIPTION` VARCHAR(200) NULL ,
|
||||
PRIMARY KEY (`FEATURE_ID`) );
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_OPERATION`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_OPERATION` (
|
||||
`OPERATION_ID` INT NOT NULL AUTO_INCREMENT ,
|
||||
`FEATURE_CODE` VARCHAR(45) NOT NULL ,
|
||||
`CREATED_DATE` BIGINT NULL ,
|
||||
PRIMARY KEY (`OPERATION_ID`));
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_DEVICE_OPERATION_MAPPING`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_DEVICE_OPERATION_MAPPING` (
|
||||
`DEVICE_ID` VARCHAR(45) NOT NULL ,
|
||||
`OPERATION_ID` INT NOT NULL ,
|
||||
`SENT_DATE` BIGINT NULL ,
|
||||
`RECEIVED_DATE` BIGINT NULL ,
|
||||
PRIMARY KEY (`DEVICE_ID`, `OPERATION_ID`) ,
|
||||
CONSTRAINT `fk_MBL_DEVICE_OPERATION_MBL_DEVICE`
|
||||
FOREIGN KEY (`DEVICE_ID` )
|
||||
REFERENCES `MBL_DEVICE` (`MOBILE_DEVICE_ID` )
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION,
|
||||
CONSTRAINT `fk_MBL_DEVICE_OPERATION_MBL_OPERATION1`
|
||||
FOREIGN KEY (`OPERATION_ID` )
|
||||
REFERENCES `MBL_OPERATION` (`OPERATION_ID` )
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION);
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_OPERATION_PROPERTY`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_OPERATION_PROPERTY` (
|
||||
`OPERATION_ID` INT NOT NULL ,
|
||||
`PROPERTY` VARCHAR(45) NOT NULL ,
|
||||
`VALUE` TEXT NULL ,
|
||||
PRIMARY KEY (`OPERATION_ID`, `PROPERTY`) ,
|
||||
CONSTRAINT `fk_MBL_OPERATION_PROPERTY_MBL_OPERATION1`
|
||||
FOREIGN KEY (`OPERATION_ID` )
|
||||
REFERENCES `MBL_OPERATION` (`OPERATION_ID` )
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION);
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_FEATURE_PROPERTY`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_FEATURE_PROPERTY` (
|
||||
`PROPERTY` VARCHAR(45) NOT NULL ,
|
||||
`FEATURE_ID` VARCHAR(45) NOT NULL ,
|
||||
PRIMARY KEY (`PROPERTY`) ,
|
||||
CONSTRAINT `fk_MBL_FEATURE_PROPERTY_MBL_FEATURE1`
|
||||
FOREIGN KEY (`FEATURE_ID` )
|
||||
REFERENCES `MBL_FEATURE` (`FEATURE_ID` )
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION);
|
@ -0,0 +1,99 @@
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_DEVICE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_DEVICE` (
|
||||
`MOBILE_DEVICE_ID` VARCHAR(45) NOT NULL,
|
||||
`REG_ID` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`IMEI` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`IMSI` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`OS_VERSION` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`DEVICE_MODEL` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`VENDOR` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`LATITUDE` VARCHAR(45) NULL DEFAULT NULL,
|
||||
`LONGITUDE` VARCHAR(45) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`MOBILE_DEVICE_ID`))
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_FEATURE`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_FEATURE` (
|
||||
`FEATURE_ID` INT NOT NULL AUTO_INCREMENT,
|
||||
`CODE` VARCHAR(45) NULL,
|
||||
`NAME` VARCHAR(100) NULL,
|
||||
`DESCRIPTION` VARCHAR(200) NULL,
|
||||
PRIMARY KEY (`FEATURE_ID`))
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_OPERATION`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_OPERATION` (
|
||||
`OPERATION_ID` INT NOT NULL AUTO_INCREMENT,
|
||||
`FEATURE_CODE` VARCHAR(45) NULL,
|
||||
`CREATED_DATE` INT NULL,
|
||||
PRIMARY KEY (`OPERATION_ID`))
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_DEVICE_OPERATION_MAPING`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_DEVICE_OPERATION_MAPPING` (
|
||||
`DEVICE_ID` VARCHAR(45) NOT NULL,
|
||||
`OPERATION_ID` INT NOT NULL,
|
||||
`SENT_DATE` INT NULL,
|
||||
`RECEIVED_DATE` INT NULL,
|
||||
PRIMARY KEY (`DEVICE_ID`, `OPERATION_ID`),
|
||||
INDEX `fk_MBL_DEVICE_OPERATION_MBL_OPERATION1_idx` (`OPERATION_ID` ASC),
|
||||
CONSTRAINT `fk_MBL_DEVICE_OPERATION_MBL_DEVICE`
|
||||
FOREIGN KEY (`DEVICE_ID`)
|
||||
REFERENCES `MBL_DEVICE` (`MOBILE_DEVICE_ID`)
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION,
|
||||
CONSTRAINT `fk_MBL_DEVICE_OPERATION_MBL_OPERATION1`
|
||||
FOREIGN KEY (`OPERATION_ID`)
|
||||
REFERENCES `MBL_OPERATION` (`OPERATION_ID`)
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION)
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_OPERATION_PROPERTY`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_OPERATION_PROPERTY` (
|
||||
`OPERATION_PROPERTY_ID` INT NOT NULL AUTO_INCREMENT,
|
||||
`OPERATION_ID` INT NULL,
|
||||
`PROPERTY_ID` INT NULL,
|
||||
`VALUE` TEXT NULL,
|
||||
PRIMARY KEY (`OPERATION_PROPERTY_ID`),
|
||||
INDEX `fk_MBL_OPERATION_PROPERTY_MBL_OPERATION1_idx` (`OPERATION_ID` ASC),
|
||||
CONSTRAINT `fk_MBL_OPERATION_PROPERTY_MBL_OPERATION1`
|
||||
FOREIGN KEY (`OPERATION_ID`)
|
||||
REFERENCES `MBL_OPERATION` (`OPERATION_ID`)
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION)
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
-- -----------------------------------------------------
|
||||
-- Table `MBL_FEATURE_PROPERTY`
|
||||
-- -----------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `MBL_FEATURE_PROPERTY` (
|
||||
`PROPERTY_ID` INT NOT NULL AUTO_INCREMENT,
|
||||
`PROPERTY` VARCHAR(100) NULL,
|
||||
`FEATURE_ID` VARCHAR(45) NULL,
|
||||
PRIMARY KEY (`PROPERTY_ID`),
|
||||
INDEX `fk_MBL_FEATURE_PROPERTY_MBL_FEATURE1_idx` (`FEATURE_ID` ASC),
|
||||
CONSTRAINT `fk_MBL_FEATURE_PROPERTY_MBL_FEATURE1`
|
||||
FOREIGN KEY (`FEATURE_ID`)
|
||||
REFERENCES `MBL_FEATURE` (`FEATURE_ID`)
|
||||
ON DELETE NO ACTION
|
||||
ON UPDATE NO ACTION)
|
||||
ENGINE = InnoDB;
|
||||
|
||||
|
||||
|
@ -0,0 +1,50 @@
|
||||
<!--
|
||||
~ Copyright (c) 2005-2010, WSO2 Inc. (http://wso2.com) All Rights Reserved.
|
||||
~
|
||||
~ WSO2 Inc. 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.
|
||||
~
|
||||
-->
|
||||
|
||||
<project name="publish assests" default="help" basedir=".">
|
||||
<target name="help">
|
||||
<echo>
|
||||
ant publish
|
||||
</echo>
|
||||
</target>
|
||||
|
||||
|
||||
|
||||
<property name="jar.dir" value="../../lib"/>
|
||||
|
||||
|
||||
|
||||
<target name="publish">
|
||||
<java fork="true" classname="org.wso2.store.component.client.ArtifactPublisher">
|
||||
<classpath>
|
||||
<path location="${jar.dir}/asset-client-1.0-SNAPSHOT-jar-with-dependencies.jar"/>
|
||||
</classpath>
|
||||
<arg value="${host}"/>
|
||||
<arg value="${port}"/>
|
||||
<arg value="${user}"/>
|
||||
<arg value="${pwd}"/>
|
||||
<arg value="${context}"/>
|
||||
<arg value="${user.dir}"/>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
|
||||
|
||||
|
||||
</project>
|
@ -0,0 +1,162 @@
|
||||
<!--
|
||||
~ Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
~
|
||||
~ WSO2 Inc. 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.
|
||||
-->
|
||||
<resource path="/repository/dashboards" isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<children>
|
||||
<resource path="/repository/dashboards/governance"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<children>
|
||||
<resource path="/repository/dashboards/governance/gadgets"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<children>
|
||||
<resource path="/repository/dashboards/governance/gadgets/10"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="gadgetUrl">
|
||||
/registry/resource/_system/config/repository/dashboards/gadgets/impact-analysis.xml
|
||||
</property>
|
||||
</properties>
|
||||
<children>
|
||||
<resource
|
||||
path="/repository/dashboards/governance/gadgets/10/gadgetprefs"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="gadgetUserPrefs-10" />
|
||||
</properties>
|
||||
<children />
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
<resource path="/repository/dashboards/governance/gadgets/20"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="gadgetUrl">/carbon/impactAnalysis/impact.xml</property>
|
||||
</properties>
|
||||
<children>
|
||||
<resource
|
||||
path="/repository/dashboards/governance/gadgets/20/gadgetprefs"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="gadgetUserPrefs-20" />
|
||||
</properties>
|
||||
<children />
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
<resource path="/repository/dashboards/governance/gadgets/30"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="gadgetUrl">
|
||||
/registry/resource/_system/config/repository/dashboards/gadgets/life-cycle-info.xml
|
||||
</property>
|
||||
</properties>
|
||||
<children>
|
||||
<resource
|
||||
path="/repository/dashboards/governance/gadgets/30/gadgetprefs"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="gadgetUserPrefs-30" />
|
||||
</properties>
|
||||
<children />
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
<resource path="/repository/dashboards/governance/nextGadgetId"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="nextGadgetId">200</property>
|
||||
</properties>
|
||||
<children />
|
||||
</resource>
|
||||
<resource path="/repository/dashboards/governance/tabs"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="nextTabId">200</property>
|
||||
<property key="currentTabLayout">0,3</property>
|
||||
</properties>
|
||||
<children>
|
||||
<resource path="/repository/dashboards/governance/tabs/0"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="tabTitle">Impact Data</property>
|
||||
</properties>
|
||||
<children>
|
||||
<resource
|
||||
path="/repository/dashboards/governance/tabs/0/currentGadgetLayout"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="currentGadgetLayout">{"layout":[{"id":"","width":"50%","layout":[{"id":"10","type":"gadget"}],"type":"columnContainer"},{"id":"","width":"50%","layout":[{"id":"20","type":"gadget"}],"type":"columnContainer"}]}</property>
|
||||
</properties>
|
||||
<children />
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
<resource path="/repository/dashboards/governance/tabs/3"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="tabTitle">Lifecycle Data</property>
|
||||
</properties>
|
||||
<children>
|
||||
<resource
|
||||
path="/repository/dashboards/governance/tabs/3/currentGadgetLayout"
|
||||
isCollection="true">
|
||||
<mediaType />
|
||||
<description />
|
||||
<properties>
|
||||
<property key="currentGadgetLayout">G1#30</property>
|
||||
</properties>
|
||||
<children />
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
</children>
|
||||
</resource>
|
||||
|
@ -0,0 +1,63 @@
|
||||
body {
|
||||
background-color: white;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
font-family: "Lucida Grande","Lucida Sans","Microsoft Sans Serif", "Lucida Sans Unicode","Verdana","Sans-serif","trebuchet ms" !important;
|
||||
color: #111;
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:normal;
|
||||
line-height:1.25em;
|
||||
}
|
||||
.main-table {
|
||||
border: 0px;
|
||||
padding: 0px;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 0px;
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
.main-table thead tr th{
|
||||
padding: 0px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
border: 0px;
|
||||
}
|
||||
.main-table tbody tr td {
|
||||
padding: 0px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
border: 0px;
|
||||
}
|
||||
.main-table tr td {
|
||||
padding: 0px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
border: 0px;
|
||||
}
|
||||
.tablib_selected {
|
||||
color: #2F7ABD;
|
||||
font-weight: normal;
|
||||
}
|
||||
.pleaseText {
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
.titleText {
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
select {
|
||||
font-size: 10px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
input {
|
||||
font-size: 10px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
span.userNameText {
|
||||
font-size: 11px;
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
div#help-wrapper {
|
||||
background-color:white;
|
||||
color:#111111;
|
||||
font-family:"Lucida Grande","Lucida Sans","Microsoft Sans Serif","Lucida Sans Unicode","Verdana","Sans-serif","trebuchet ms";
|
||||
font-size:12px;
|
||||
font-size-adjust:none;
|
||||
font-stretch:normal;
|
||||
font-style:normal;
|
||||
font-variant:normal;
|
||||
font-weight:normal;
|
||||
line-height:1.25em;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
div#help-wrapper p {
|
||||
margin-left:0;
|
||||
margin-right:0;
|
||||
}
|
||||
td {
|
||||
}
|
||||
a:link {
|
||||
}
|
||||
a:visited {
|
||||
}
|
||||
a:hover {
|
||||
}
|
||||
a:active {
|
||||
}
|
||||
div#help-wrapper h1 {
|
||||
color:#F47B20;
|
||||
font-size:16px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
div#help-wrapper h2 {
|
||||
color:#111111;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
}
|
||||
a img {
|
||||
border:0 none;
|
||||
}
|
||||
table.styled {
|
||||
border:0 solid #CCCCCC;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
table.styled tr td {
|
||||
border:1px solid #CCCCCC;
|
||||
padding:3px;
|
||||
}
|
||||
table.styled tr td.subHeader {
|
||||
border:0 solid #CCCCCC;
|
||||
font-size:125%;
|
||||
font-weight:bold;
|
||||
padding-bottom:5px;
|
||||
padding-top:10px;
|
||||
}
|
||||
|
@ -0,0 +1,184 @@
|
||||
function urlDecode(str) {
|
||||
str = str.replace(new RegExp('\\+', 'g'), ' ');
|
||||
return unescape(str);
|
||||
}
|
||||
function urlEncode(str) {
|
||||
str = escape(str);
|
||||
str = str.replace(new RegExp('\\+', 'g'), '%2B');
|
||||
return str.replace(new RegExp('%20', 'g'), '+');
|
||||
}
|
||||
|
||||
var END_OF_INPUT = -1;
|
||||
|
||||
var base64Chars = new Array(
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
||||
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
|
||||
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
|
||||
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
|
||||
'w', 'x', 'y', 'z', '0', '1', '2', '3',
|
||||
'4', '5', '6', '7', '8', '9', '+', '/'
|
||||
);
|
||||
|
||||
var reverseBase64Chars = new Array();
|
||||
for (var i = 0; i < base64Chars.length; i++) {
|
||||
reverseBase64Chars[base64Chars[i]] = i;
|
||||
}
|
||||
|
||||
var base64Str;
|
||||
var base64Count;
|
||||
function setBase64Str(str) {
|
||||
base64Str = str;
|
||||
base64Count = 0;
|
||||
}
|
||||
function readBase64() {
|
||||
if (!base64Str) return END_OF_INPUT;
|
||||
if (base64Count >= base64Str.length) return END_OF_INPUT;
|
||||
var c = base64Str.charCodeAt(base64Count) & 0xff;
|
||||
base64Count++;
|
||||
return c;
|
||||
}
|
||||
function encodeBase64(str) {
|
||||
setBase64Str(str);
|
||||
var result = '';
|
||||
var inBuffer = new Array(3);
|
||||
var lineCount = 0;
|
||||
var done = false;
|
||||
while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT) {
|
||||
inBuffer[1] = readBase64();
|
||||
inBuffer[2] = readBase64();
|
||||
result += (base64Chars[ inBuffer[0] >> 2 ]);
|
||||
if (inBuffer[1] != END_OF_INPUT) {
|
||||
result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
|
||||
if (inBuffer[2] != END_OF_INPUT) {
|
||||
result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
|
||||
result += (base64Chars [inBuffer[2] & 0x3F]);
|
||||
} else {
|
||||
result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
|
||||
result += ('=');
|
||||
done = true;
|
||||
}
|
||||
} else {
|
||||
result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
|
||||
result += ('=');
|
||||
result += ('=');
|
||||
done = true;
|
||||
}
|
||||
lineCount += 4;
|
||||
if (lineCount >= 76) {
|
||||
result += ('\n');
|
||||
lineCount = 0;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function readReverseBase64() {
|
||||
if (!base64Str) return END_OF_INPUT;
|
||||
while (true) {
|
||||
if (base64Count >= base64Str.length) return END_OF_INPUT;
|
||||
var nextCharacter = base64Str.charAt(base64Count);
|
||||
base64Count++;
|
||||
if (reverseBase64Chars[nextCharacter]) {
|
||||
return reverseBase64Chars[nextCharacter];
|
||||
}
|
||||
if (nextCharacter == 'A') return 0;
|
||||
}
|
||||
return END_OF_INPUT;
|
||||
}
|
||||
|
||||
function ntos(n) {
|
||||
n = n.toString(16);
|
||||
if (n.length == 1) n = "0" + n;
|
||||
n = "%" + n;
|
||||
return unescape(n);
|
||||
}
|
||||
|
||||
function decodeBase64(str) {
|
||||
setBase64Str(str);
|
||||
var result = "";
|
||||
var inBuffer = new Array(4);
|
||||
var done = false;
|
||||
while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
|
||||
&& (inBuffer[1] = readReverseBase64()) != END_OF_INPUT) {
|
||||
inBuffer[2] = readReverseBase64();
|
||||
inBuffer[3] = readReverseBase64();
|
||||
result += ntos((((inBuffer[0] << 2) & 0xff) | inBuffer[1] >> 4));
|
||||
if (inBuffer[2] != END_OF_INPUT) {
|
||||
result += ntos((((inBuffer[1] << 4) & 0xff) | inBuffer[2] >> 2));
|
||||
if (inBuffer[3] != END_OF_INPUT) {
|
||||
result += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3]));
|
||||
} else {
|
||||
done = true;
|
||||
}
|
||||
} else {
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
|
||||
function toHex(n) {
|
||||
var result = ''
|
||||
var start = true;
|
||||
for (var i = 32; i > 0;) {
|
||||
i -= 4;
|
||||
var digit = (n >> i) & 0xf;
|
||||
if (!start || digit != 0) {
|
||||
start = false;
|
||||
result += digitArray[digit];
|
||||
}
|
||||
}
|
||||
return (result == '' ? '0' : result);
|
||||
}
|
||||
|
||||
function pad(str, len, pad) {
|
||||
var result = str;
|
||||
for (var i = str.length; i < len; i++) {
|
||||
result = pad + result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function encodeHex(str) {
|
||||
var result = "";
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
result += pad(toHex(str.charCodeAt(i) & 0xff), 2, '0');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
var hexv = {
|
||||
"00":0,"01":1,"02":2,"03":3,"04":4,"05":5,"06":6,"07":7,"08":8,"09":9,"0A":10,"0B":11,"0C":12,"0D":13,"0E":14,"0F":15,
|
||||
"10":16,"11":17,"12":18,"13":19,"14":20,"15":21,"16":22,"17":23,"18":24,"19":25,"1A":26,"1B":27,"1C":28,"1D":29,"1E":30,"1F":31,
|
||||
"20":32,"21":33,"22":34,"23":35,"24":36,"25":37,"26":38,"27":39,"28":40,"29":41,"2A":42,"2B":43,"2C":44,"2D":45,"2E":46,"2F":47,
|
||||
"30":48,"31":49,"32":50,"33":51,"34":52,"35":53,"36":54,"37":55,"38":56,"39":57,"3A":58,"3B":59,"3C":60,"3D":61,"3E":62,"3F":63,
|
||||
"40":64,"41":65,"42":66,"43":67,"44":68,"45":69,"46":70,"47":71,"48":72,"49":73,"4A":74,"4B":75,"4C":76,"4D":77,"4E":78,"4F":79,
|
||||
"50":80,"51":81,"52":82,"53":83,"54":84,"55":85,"56":86,"57":87,"58":88,"59":89,"5A":90,"5B":91,"5C":92,"5D":93,"5E":94,"5F":95,
|
||||
"60":96,"61":97,"62":98,"63":99,"64":100,"65":101,"66":102,"67":103,"68":104,"69":105,"6A":106,"6B":107,"6C":108,"6D":109,"6E":110,"6F":111,
|
||||
"70":112,"71":113,"72":114,"73":115,"74":116,"75":117,"76":118,"77":119,"78":120,"79":121,"7A":122,"7B":123,"7C":124,"7D":125,"7E":126,"7F":127,
|
||||
"80":128,"81":129,"82":130,"83":131,"84":132,"85":133,"86":134,"87":135,"88":136,"89":137,"8A":138,"8B":139,"8C":140,"8D":141,"8E":142,"8F":143,
|
||||
"90":144,"91":145,"92":146,"93":147,"94":148,"95":149,"96":150,"97":151,"98":152,"99":153,"9A":154,"9B":155,"9C":156,"9D":157,"9E":158,"9F":159,
|
||||
"A0":160,"A1":161,"A2":162,"A3":163,"A4":164,"A5":165,"A6":166,"A7":167,"A8":168,"A9":169,"AA":170,"AB":171,"AC":172,"AD":173,"AE":174,"AF":175,
|
||||
"B0":176,"B1":177,"B2":178,"B3":179,"B4":180,"B5":181,"B6":182,"B7":183,"B8":184,"B9":185,"BA":186,"BB":187,"BC":188,"BD":189,"BE":190,"BF":191,
|
||||
"C0":192,"C1":193,"C2":194,"C3":195,"C4":196,"C5":197,"C6":198,"C7":199,"C8":200,"C9":201,"CA":202,"CB":203,"CC":204,"CD":205,"CE":206,"CF":207,
|
||||
"D0":208,"D1":209,"D2":210,"D3":211,"D4":212,"D5":213,"D6":214,"D7":215,"D8":216,"D9":217,"DA":218,"DB":219,"DC":220,"DD":221,"DE":222,"DF":223,
|
||||
"E0":224,"E1":225,"E2":226,"E3":227,"E4":228,"E5":229,"E6":230,"E7":231,"E8":232,"E9":233,"EA":234,"EB":235,"EC":236,"ED":237,"EE":238,"EF":239,
|
||||
"F0":240,"F1":241,"F2":242,"F3":243,"F4":244,"F5":245,"F6":246,"F7":247,"F8":248,"F9":249,"FA":250,"FB":251,"FC":252,"FD":253,"FE":254,"FF":255
|
||||
};
|
||||
|
||||
function decodeHex(str) {
|
||||
str = str.toUpperCase().replace(new RegExp("s/[^0-9A-Z]//g"));
|
||||
var result = "";
|
||||
var nextchar = "";
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
nextchar += str.charAt(i);
|
||||
if (nextchar.length == 2) {
|
||||
result += ntos(hexv[nextchar]);
|
||||
nextchar = "";
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 601 B |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,223 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Module>
|
||||
<ModulePrefs title="Service Impact" height="300"
|
||||
description="Shows all dependencies and used-by associations of a particular service"
|
||||
author="Tharindu Mathew" author_email="carbon-dev@wso2.org"
|
||||
author_affiliation="WSO2" author_location="Colombo, Sri Lanka">
|
||||
<Require feature="setprefs" />
|
||||
<Require feature="tabs" />
|
||||
<Require feature="dynamic-height" />
|
||||
<Require feature="views" />
|
||||
</ModulePrefs>
|
||||
<UserPref name="selection" display_name="selection"
|
||||
default_value="[]" datatype="list" required="true"></UserPref>
|
||||
<UserPref name="selectedFlag" default_value="false" datatype="bool" required="true"></UserPref>
|
||||
<Content type="html" view="default, home">
|
||||
<![CDATA[
|
||||
|
||||
|
||||
<script type="text/javascript" src="js/wso2vis.js"></script>
|
||||
<!--<script type="text/javascript" src="js/jit.js"></script>-->
|
||||
<style>
|
||||
div#qTip {
|
||||
padding: 3px;
|
||||
border: 1px solid #666;
|
||||
border-right-width: 2px;
|
||||
border-bottom-width: 2px;
|
||||
display: none;
|
||||
background: #999;
|
||||
color: #FFF;
|
||||
font: bold 10px Verdana, Arial, sans-serif;
|
||||
text-align: left;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="css/gadgets.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="css/help.css"/>
|
||||
|
||||
<div id="filter" style="margin:0 auto; text-align:center;width:300px;"></div>
|
||||
|
||||
<div id="infovis" style="margin:0 auto; text-align:center;height:300px;width:300px"></div>
|
||||
<div id="log"></div>
|
||||
<div id="error"></div>
|
||||
<script type="text/javascript">
|
||||
var dataProvider = new wso2vis.p.ProviderGETJSON("carbon/gauges/gadgets/flash/flashdata-ajaxprocessor.jsp?funcName=getImpactAnalysis");
|
||||
// var dataFilter = new wso2vis.f.BasicFilter(["services", "service"], ["@name"]);
|
||||
|
||||
|
||||
|
||||
function pullData() {
|
||||
dataProvider.pullData();
|
||||
var prefs = new gadgets.Prefs();
|
||||
var filterSelection = dataFilter.filterArray();
|
||||
prefs.set("selection", filterSelection);
|
||||
prefs.set("selectedFlag", true);
|
||||
gadgets.window.adjustHeight(300);
|
||||
setTimeout("gadgets.window.adjustHeight(300)",100);
|
||||
}
|
||||
var dataFilter = new wso2vis.f.form.Select()
|
||||
.canvas("filter")
|
||||
.dataField(["children"])
|
||||
.dataLabel(["name"])
|
||||
.defaultText("- Select Service -");
|
||||
|
||||
dataFilter.onChange = function(text) {
|
||||
pullData();
|
||||
};
|
||||
|
||||
function errorMsg() {
|
||||
return "No services present";
|
||||
}
|
||||
var init = function () {
|
||||
var treeDiv = document.getElementById("infovis");
|
||||
var logDiv = document.getElementById("log");
|
||||
var spaceTree = new wso2vis.s.chart.raphael.DependencyTree(treeDiv,"Dependency Tree","Used to show data in tree structures");
|
||||
spaceTree.dataField(["children"])
|
||||
.dataLabel(["name"])
|
||||
.width(500)
|
||||
.height(300)
|
||||
.nodelength(80)
|
||||
.nodeheight(15)
|
||||
.sx(50)
|
||||
.sy(800);
|
||||
|
||||
// var spaceTree = new wso2vis.s.chart.infovis.SpaceTree(logDiv,"infovis","Dependency Tree","Impact Analysis of Services");
|
||||
// spaceTree.dataField(["children"])
|
||||
// .dataLabel(["name"])
|
||||
// .width(300)
|
||||
// .height(300)
|
||||
// .msgDiv("error");
|
||||
|
||||
|
||||
spaceTree.messageInterceptFunction = errorMsg;
|
||||
spaceTree.load();
|
||||
|
||||
|
||||
//spaceTree.onTooltip = barTooltip;
|
||||
//spaceTree.onClick = barClick;
|
||||
|
||||
dataProvider.addDataReceiver(dataFilter);
|
||||
dataFilter.addDataReceiver(spaceTree);
|
||||
|
||||
|
||||
var prefs = new gadgets.Prefs();
|
||||
if (prefs.getBool("selectedFlag")) {
|
||||
dataFilter.filterArray(prefs.getArray("selection"));
|
||||
}
|
||||
dataProvider.initialize();
|
||||
dataFilter.load();
|
||||
gadgets.window.adjustHeight(300);
|
||||
|
||||
setTimeout("gadgets.window.adjustHeight(300)",100);
|
||||
}
|
||||
|
||||
|
||||
gadgets.util.registerOnLoadHandler(init);
|
||||
|
||||
</script>
|
||||
|
||||
]]>
|
||||
|
||||
</Content>
|
||||
<Content type="html" view="canvas">
|
||||
<![CDATA[
|
||||
|
||||
|
||||
<script type="text/javascript" src="js/wso2vis.js"></script>
|
||||
<!--<script type="text/javascript" src="js/jit.js"></script>-->
|
||||
<style>
|
||||
div#qTip {
|
||||
padding: 3px;
|
||||
border: 1px solid #666;
|
||||
border-right-width: 2px;
|
||||
border-bottom-width: 2px;
|
||||
display: none;
|
||||
background: #999;
|
||||
color: #FFF;
|
||||
font: bold 10px Verdana, Arial, sans-serif;
|
||||
text-align: left;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="css/gadgets.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="css/help.css"/>
|
||||
|
||||
<div id="filter" style="margin:0 auto; text-align:center;width:300px;">Available Services : </div>
|
||||
|
||||
<div id="infovis" style="margin:0 auto; text-align:center;height:300px;width:1000px"></div>
|
||||
<div id="log"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataProvider = new wso2vis.p.ProviderGETJSON("carbon/gauges/gadgets/flash/flashdata-ajaxprocessor.jsp?funcName=getImpactAnalysis");
|
||||
// var dataFilter = new wso2vis.f.BasicFilter(["services", "service"], ["@name"]);
|
||||
|
||||
|
||||
|
||||
function pullData() {
|
||||
dataProvider.pullData();
|
||||
var prefs = new gadgets.Prefs();
|
||||
var filterSelection = dataFilter.filterArray();
|
||||
prefs.set("selection", filterSelection);
|
||||
prefs.set("selectedFlag", true);
|
||||
gadgets.window.adjustHeight(300);
|
||||
setTimeout("gadgets.window.adjustHeight(300)",100);
|
||||
}
|
||||
var dataFilter = new wso2vis.f.form.Select()
|
||||
.canvas("filter")
|
||||
.dataField(["children"])
|
||||
.dataLabel(["name"])
|
||||
.defaultText("- Select Service -");
|
||||
|
||||
dataFilter.onChange = function(text) {
|
||||
pullData();
|
||||
};
|
||||
|
||||
var init = function () {
|
||||
var treeDiv = document.getElementById("infovis");
|
||||
var logDiv = document.getElementById("log");
|
||||
var spaceTree = new wso2vis.s.chart.raphael.DependencyTree(treeDiv,"Dependency Tree","Used to show data in tree structures");
|
||||
spaceTree.dataField(["children"])
|
||||
.dataLabel(["name"])
|
||||
.width(1000)
|
||||
.height(300)
|
||||
.nodelength(80)
|
||||
.nodeheight(15)
|
||||
.sx(50)
|
||||
.sy(800);
|
||||
|
||||
// var spaceTree = new wso2vis.s.chart.infovis.SpaceTree(logDiv,"infovis","Dependency Tree","Impact Analysis of Services");
|
||||
// spaceTree.dataField(["children"])
|
||||
// .dataLabel(["name"])
|
||||
// .width(300)
|
||||
// .height(300)
|
||||
// .msgDiv("error");
|
||||
spaceTree.load();
|
||||
|
||||
|
||||
//spaceTree.onTooltip = barTooltip;
|
||||
//spaceTree.onClick = barClick;
|
||||
|
||||
dataProvider.addDataReceiver(dataFilter);
|
||||
dataFilter.addDataReceiver(spaceTree);
|
||||
|
||||
|
||||
var prefs = new gadgets.Prefs();
|
||||
if (prefs.getBool("selectedFlag")) {
|
||||
dataFilter.filterArray(prefs.getArray("selection"));
|
||||
}
|
||||
dataProvider.initialize();
|
||||
dataFilter.load();
|
||||
}
|
||||
|
||||
|
||||
gadgets.util.registerOnLoadHandler(init);
|
||||
</script>
|
||||
|
||||
]]>
|
||||
|
||||
</Content>
|
||||
|
||||
</Module>
|
||||
|
@ -0,0 +1,23 @@
|
||||
|
||||
var countGraph;
|
||||
|
||||
function isNumeric(sText){
|
||||
var validChars = "0123456789.";
|
||||
var isNumber = true;
|
||||
var character;
|
||||
for (var i = 0; i < sText.length && isNumber == true; i++) {
|
||||
character = sText.charAt(i);
|
||||
if (validChars.indexOf(character) == -1) {
|
||||
isNumber = false;
|
||||
}
|
||||
}
|
||||
return isNumber;
|
||||
}
|
||||
|
||||
function initCountGraph(memoryXScale) {
|
||||
if (memoryXScale < 1 || !isNumeric(memoryXScale)) {
|
||||
return;
|
||||
}
|
||||
countGraph = new carbonGraph(memoryXScale);
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
// Memory
|
||||
var endpointInvocationGraph;
|
||||
|
||||
function initStats(memoryXScale) {
|
||||
if (memoryXScale != null) {
|
||||
initReqCountGraphs(memoryXScale);
|
||||
} else {
|
||||
initReqCountGraphs(30);
|
||||
}
|
||||
}
|
||||
|
||||
function isNumeric(sText){
|
||||
var validChars = "0123456789.";
|
||||
var isNumber = true;
|
||||
var character;
|
||||
for (var i = 0; i < sText.length && isNumber == true; i++) {
|
||||
character = sText.charAt(i);
|
||||
if (validChars.indexOf(character) == -1) {
|
||||
isNumber = false;
|
||||
}
|
||||
}
|
||||
return isNumber;
|
||||
}
|
||||
|
||||
function initReqCountGraphs(memoryXScale) {
|
||||
if (memoryXScale < 1 || !isNumeric(memoryXScale)) {
|
||||
return;
|
||||
}
|
||||
endpointInvocationGraph = new carbonGraph(memoryXScale);
|
||||
}
|
||||
|
@ -0,0 +1,785 @@
|
||||
// Copyright 2006 Google Inc.
|
||||
//
|
||||
// Licensed 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.
|
||||
|
||||
|
||||
// Known Issues:
|
||||
//
|
||||
// * Patterns are not implemented.
|
||||
// * Radial gradient are not implemented. The VML version of these look very
|
||||
// different from the canvas one.
|
||||
// * Clipping paths are not implemented.
|
||||
// * Coordsize. The width and height attribute have higher priority than the
|
||||
// width and height style values which isn't correct.
|
||||
// * Painting mode isn't implemented.
|
||||
// * Canvas width/height should is using content-box by default. IE in
|
||||
// Quirks mode will draw the canvas using border-box. Either change your
|
||||
// doctype to HTML5
|
||||
// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
|
||||
// or use Box Sizing Behavior from WebFX
|
||||
// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
|
||||
// * Optimize. There is always room for speed improvements.
|
||||
|
||||
// only add this code if we do not already have a canvas implementation
|
||||
if (!window.CanvasRenderingContext2D) {
|
||||
|
||||
(function () {
|
||||
|
||||
// alias some functions to make (compiled) code shorter
|
||||
var m = Math;
|
||||
var mr = m.round;
|
||||
var ms = m.sin;
|
||||
var mc = m.cos;
|
||||
|
||||
// this is used for sub pixel precision
|
||||
var Z = 10;
|
||||
var Z2 = Z / 2;
|
||||
|
||||
var G_vmlCanvasManager_ = {
|
||||
init: function (opt_doc) {
|
||||
var doc = opt_doc || document;
|
||||
if (/MSIE/.test(navigator.userAgent) && !window.opera) {
|
||||
var self = this;
|
||||
doc.attachEvent("onreadystatechange", function () {
|
||||
self.init_(doc);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
init_: function (doc) {
|
||||
if (doc.readyState == "complete") {
|
||||
// create xmlns
|
||||
if (!doc.namespaces["g_vml_"]) {
|
||||
doc.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml");
|
||||
}
|
||||
|
||||
// setup default css
|
||||
var ss = doc.createStyleSheet();
|
||||
ss.cssText = "canvas{display:inline-block;overflow:hidden;" +
|
||||
// default size is 300x150 in Gecko and Opera
|
||||
"text-align:left;width:300px;height:150px}" +
|
||||
"g_vml_\\:*{behavior:url(#default#VML)}";
|
||||
|
||||
// find all canvas elements
|
||||
var els = doc.getElementsByTagName("canvas");
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
if (!els[i].getContext) {
|
||||
this.initElement(els[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
fixElement_: function (el) {
|
||||
// in IE before version 5.5 we would need to add HTML: to the tag name
|
||||
// but we do not care about IE before version 6
|
||||
var outerHTML = el.outerHTML;
|
||||
|
||||
var newEl = el.ownerDocument.createElement(outerHTML);
|
||||
// if the tag is still open IE has created the children as siblings and
|
||||
// it has also created a tag with the name "/FOO"
|
||||
if (outerHTML.slice(-2) != "/>") {
|
||||
var tagName = "/" + el.tagName;
|
||||
var ns;
|
||||
// remove content
|
||||
while ((ns = el.nextSibling) && ns.tagName != tagName) {
|
||||
ns.removeNode();
|
||||
}
|
||||
// remove the incorrect closing tag
|
||||
if (ns) {
|
||||
ns.removeNode();
|
||||
}
|
||||
}
|
||||
el.parentNode.replaceChild(newEl, el);
|
||||
return newEl;
|
||||
},
|
||||
|
||||
/**
|
||||
* Public initializes a canvas element so that it can be used as canvas
|
||||
* element from now on. This is called automatically before the page is
|
||||
* loaded but if you are creating elements using createElement you need to
|
||||
* make sure this is called on the element.
|
||||
* @param {HTMLElement} el The canvas element to initialize.
|
||||
* @return {HTMLElement} the element that was created.
|
||||
*/
|
||||
initElement: function (el) {
|
||||
el = this.fixElement_(el);
|
||||
el.getContext = function () {
|
||||
if (this.context_) {
|
||||
return this.context_;
|
||||
}
|
||||
return this.context_ = new CanvasRenderingContext2D_(this);
|
||||
};
|
||||
|
||||
// do not use inline function because that will leak memory
|
||||
el.attachEvent('onpropertychange', onPropertyChange);
|
||||
el.attachEvent('onresize', onResize);
|
||||
|
||||
var attrs = el.attributes;
|
||||
if (attrs.width && attrs.width.specified) {
|
||||
// TODO: use runtimeStyle and coordsize
|
||||
// el.getContext().setWidth_(attrs.width.nodeValue);
|
||||
el.style.width = attrs.width.nodeValue + "px";
|
||||
} else {
|
||||
el.width = el.clientWidth;
|
||||
}
|
||||
if (attrs.height && attrs.height.specified) {
|
||||
// TODO: use runtimeStyle and coordsize
|
||||
// el.getContext().setHeight_(attrs.height.nodeValue);
|
||||
el.style.height = attrs.height.nodeValue + "px";
|
||||
} else {
|
||||
el.height = el.clientHeight;
|
||||
}
|
||||
//el.getContext().setCoordsize_()
|
||||
return el;
|
||||
}
|
||||
};
|
||||
|
||||
function onPropertyChange(e) {
|
||||
var el = e.srcElement;
|
||||
|
||||
switch (e.propertyName) {
|
||||
case 'width':
|
||||
el.style.width = el.attributes.width.nodeValue + "px";
|
||||
el.getContext().clearRect();
|
||||
break;
|
||||
case 'height':
|
||||
el.style.height = el.attributes.height.nodeValue + "px";
|
||||
el.getContext().clearRect();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function onResize(e) {
|
||||
var el = e.srcElement;
|
||||
if (el.firstChild) {
|
||||
el.firstChild.style.width = el.clientWidth + 'px';
|
||||
el.firstChild.style.height = el.clientHeight + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
G_vmlCanvasManager_.init();
|
||||
|
||||
// precompute "00" to "FF"
|
||||
var dec2hex = [];
|
||||
for (var i = 0; i < 16; i++) {
|
||||
for (var j = 0; j < 16; j++) {
|
||||
dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);
|
||||
}
|
||||
}
|
||||
|
||||
function createMatrixIdentity() {
|
||||
return [
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
}
|
||||
|
||||
function matrixMultiply(m1, m2) {
|
||||
var result = createMatrixIdentity();
|
||||
|
||||
for (var x = 0; x < 3; x++) {
|
||||
for (var y = 0; y < 3; y++) {
|
||||
var sum = 0;
|
||||
|
||||
for (var z = 0; z < 3; z++) {
|
||||
sum += m1[x][z] * m2[z][y];
|
||||
}
|
||||
|
||||
result[x][y] = sum;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function copyState(o1, o2) {
|
||||
o2.fillStyle = o1.fillStyle;
|
||||
o2.lineCap = o1.lineCap;
|
||||
o2.lineJoin = o1.lineJoin;
|
||||
o2.lineWidth = o1.lineWidth;
|
||||
o2.miterLimit = o1.miterLimit;
|
||||
o2.shadowBlur = o1.shadowBlur;
|
||||
o2.shadowColor = o1.shadowColor;
|
||||
o2.shadowOffsetX = o1.shadowOffsetX;
|
||||
o2.shadowOffsetY = o1.shadowOffsetY;
|
||||
o2.strokeStyle = o1.strokeStyle;
|
||||
o2.arcScaleX_ = o1.arcScaleX_;
|
||||
o2.arcScaleY_ = o1.arcScaleY_;
|
||||
}
|
||||
|
||||
function processStyle(styleString) {
|
||||
var str, alpha = 1;
|
||||
|
||||
styleString = String(styleString);
|
||||
if (styleString.substring(0, 3) == "rgb") {
|
||||
var start = styleString.indexOf("(", 3);
|
||||
var end = styleString.indexOf(")", start + 1);
|
||||
var guts = styleString.substring(start + 1, end).split(",");
|
||||
|
||||
str = "#";
|
||||
for (var i = 0; i < 3; i++) {
|
||||
str += dec2hex[Number(guts[i])];
|
||||
}
|
||||
|
||||
if ((guts.length == 4) && (styleString.substr(3, 1) == "a")) {
|
||||
alpha = guts[3];
|
||||
}
|
||||
} else {
|
||||
str = styleString;
|
||||
}
|
||||
|
||||
return [str, alpha];
|
||||
}
|
||||
|
||||
function processLineCap(lineCap) {
|
||||
switch (lineCap) {
|
||||
case "butt":
|
||||
return "flat";
|
||||
case "round":
|
||||
return "round";
|
||||
case "square":
|
||||
default:
|
||||
return "square";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class implements CanvasRenderingContext2D interface as described by
|
||||
* the WHATWG.
|
||||
* @param {HTMLElement} surfaceElement The element that the 2D context should
|
||||
* be associated with
|
||||
*/
|
||||
function CanvasRenderingContext2D_(surfaceElement) {
|
||||
this.m_ = createMatrixIdentity();
|
||||
|
||||
this.mStack_ = [];
|
||||
this.aStack_ = [];
|
||||
this.currentPath_ = [];
|
||||
|
||||
// Canvas context properties
|
||||
this.strokeStyle = "#000";
|
||||
this.fillStyle = "#000";
|
||||
|
||||
this.lineWidth = 1;
|
||||
this.lineJoin = "miter";
|
||||
this.lineCap = "butt";
|
||||
this.miterLimit = Z * 1;
|
||||
this.globalAlpha = 1;
|
||||
this.canvas = surfaceElement;
|
||||
|
||||
var el = surfaceElement.ownerDocument.createElement('div');
|
||||
el.style.width = surfaceElement.clientWidth + 'px';
|
||||
el.style.height = surfaceElement.clientHeight + 'px';
|
||||
el.style.overflow = 'hidden';
|
||||
el.style.position = 'absolute';
|
||||
surfaceElement.appendChild(el);
|
||||
|
||||
this.element_ = el;
|
||||
this.arcScaleX_ = 1;
|
||||
this.arcScaleY_ = 1;
|
||||
}
|
||||
|
||||
var contextPrototype = CanvasRenderingContext2D_.prototype;
|
||||
contextPrototype.clearRect = function() {
|
||||
this.element_.innerHTML = "";
|
||||
this.currentPath_ = [];
|
||||
};
|
||||
|
||||
contextPrototype.beginPath = function() {
|
||||
// TODO: Branch current matrix so that save/restore has no effect
|
||||
// as per safari docs.
|
||||
|
||||
this.currentPath_ = [];
|
||||
};
|
||||
|
||||
contextPrototype.moveTo = function(aX, aY) {
|
||||
this.currentPath_.push({type: "moveTo", x: aX, y: aY});
|
||||
this.currentX_ = aX;
|
||||
this.currentY_ = aY;
|
||||
};
|
||||
|
||||
contextPrototype.lineTo = function(aX, aY) {
|
||||
this.currentPath_.push({type: "lineTo", x: aX, y: aY});
|
||||
this.currentX_ = aX;
|
||||
this.currentY_ = aY;
|
||||
};
|
||||
|
||||
contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
|
||||
aCP2x, aCP2y,
|
||||
aX, aY) {
|
||||
this.currentPath_.push({type: "bezierCurveTo",
|
||||
cp1x: aCP1x,
|
||||
cp1y: aCP1y,
|
||||
cp2x: aCP2x,
|
||||
cp2y: aCP2y,
|
||||
x: aX,
|
||||
y: aY});
|
||||
this.currentX_ = aX;
|
||||
this.currentY_ = aY;
|
||||
};
|
||||
|
||||
contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
|
||||
// the following is lifted almost directly from
|
||||
// http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
|
||||
var cp1x = this.currentX_ + 2.0 / 3.0 * (aCPx - this.currentX_);
|
||||
var cp1y = this.currentY_ + 2.0 / 3.0 * (aCPy - this.currentY_);
|
||||
var cp2x = cp1x + (aX - this.currentX_) / 3.0;
|
||||
var cp2y = cp1y + (aY - this.currentY_) / 3.0;
|
||||
this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, aX, aY);
|
||||
};
|
||||
|
||||
contextPrototype.arc = function(aX, aY, aRadius,
|
||||
aStartAngle, aEndAngle, aClockwise) {
|
||||
aRadius *= Z;
|
||||
var arcType = aClockwise ? "at" : "wa";
|
||||
|
||||
var xStart = aX + (mc(aStartAngle) * aRadius) - Z2;
|
||||
var yStart = aY + (ms(aStartAngle) * aRadius) - Z2;
|
||||
|
||||
var xEnd = aX + (mc(aEndAngle) * aRadius) - Z2;
|
||||
var yEnd = aY + (ms(aEndAngle) * aRadius) - Z2;
|
||||
|
||||
// IE won't render arches drawn counter clockwise if xStart == xEnd.
|
||||
if (xStart == xEnd && !aClockwise) {
|
||||
xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
|
||||
// that can be represented in binary
|
||||
}
|
||||
|
||||
this.currentPath_.push({type: arcType,
|
||||
x: aX,
|
||||
y: aY,
|
||||
radius: aRadius,
|
||||
xStart: xStart,
|
||||
yStart: yStart,
|
||||
xEnd: xEnd,
|
||||
yEnd: yEnd});
|
||||
|
||||
};
|
||||
|
||||
contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
|
||||
this.moveTo(aX, aY);
|
||||
this.lineTo(aX + aWidth, aY);
|
||||
this.lineTo(aX + aWidth, aY + aHeight);
|
||||
this.lineTo(aX, aY + aHeight);
|
||||
this.closePath();
|
||||
};
|
||||
|
||||
contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
|
||||
// Will destroy any existing path (same as FF behaviour)
|
||||
this.beginPath();
|
||||
this.moveTo(aX, aY);
|
||||
this.lineTo(aX + aWidth, aY);
|
||||
this.lineTo(aX + aWidth, aY + aHeight);
|
||||
this.lineTo(aX, aY + aHeight);
|
||||
this.closePath();
|
||||
this.stroke();
|
||||
};
|
||||
|
||||
contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
|
||||
// Will destroy any existing path (same as FF behaviour)
|
||||
this.beginPath();
|
||||
this.moveTo(aX, aY);
|
||||
this.lineTo(aX + aWidth, aY);
|
||||
this.lineTo(aX + aWidth, aY + aHeight);
|
||||
this.lineTo(aX, aY + aHeight);
|
||||
this.closePath();
|
||||
this.fill();
|
||||
};
|
||||
|
||||
contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
|
||||
var gradient = new CanvasGradient_("gradient");
|
||||
return gradient;
|
||||
};
|
||||
|
||||
contextPrototype.createRadialGradient = function(aX0, aY0,
|
||||
aR0, aX1,
|
||||
aY1, aR1) {
|
||||
var gradient = new CanvasGradient_("gradientradial");
|
||||
gradient.radius1_ = aR0;
|
||||
gradient.radius2_ = aR1;
|
||||
gradient.focus_.x = aX0;
|
||||
gradient.focus_.y = aY0;
|
||||
return gradient;
|
||||
};
|
||||
|
||||
contextPrototype.drawImage = function (image, var_args) {
|
||||
var dx, dy, dw, dh, sx, sy, sw, sh;
|
||||
|
||||
// to find the original width we overide the width and height
|
||||
var oldRuntimeWidth = image.runtimeStyle.width;
|
||||
var oldRuntimeHeight = image.runtimeStyle.height;
|
||||
image.runtimeStyle.width = 'auto';
|
||||
image.runtimeStyle.height = 'auto';
|
||||
|
||||
// get the original size
|
||||
var w = image.width;
|
||||
var h = image.height;
|
||||
|
||||
// and remove overides
|
||||
image.runtimeStyle.width = oldRuntimeWidth;
|
||||
image.runtimeStyle.height = oldRuntimeHeight;
|
||||
|
||||
if (arguments.length == 3) {
|
||||
dx = arguments[1];
|
||||
dy = arguments[2];
|
||||
sx = sy = 0;
|
||||
sw = dw = w;
|
||||
sh = dh = h;
|
||||
} else if (arguments.length == 5) {
|
||||
dx = arguments[1];
|
||||
dy = arguments[2];
|
||||
dw = arguments[3];
|
||||
dh = arguments[4];
|
||||
sx = sy = 0;
|
||||
sw = w;
|
||||
sh = h;
|
||||
} else if (arguments.length == 9) {
|
||||
sx = arguments[1];
|
||||
sy = arguments[2];
|
||||
sw = arguments[3];
|
||||
sh = arguments[4];
|
||||
dx = arguments[5];
|
||||
dy = arguments[6];
|
||||
dw = arguments[7];
|
||||
dh = arguments[8];
|
||||
} else {
|
||||
throw "Invalid number of arguments";
|
||||
}
|
||||
|
||||
var d = this.getCoords_(dx, dy);
|
||||
|
||||
var w2 = sw / 2;
|
||||
var h2 = sh / 2;
|
||||
|
||||
var vmlStr = [];
|
||||
|
||||
var W = 10;
|
||||
var H = 10;
|
||||
|
||||
// For some reason that I've now forgotten, using divs didn't work
|
||||
vmlStr.push(' <g_vml_:group',
|
||||
' coordsize="', Z * W, ',', Z * H, '"',
|
||||
' coordorigin="0,0"' ,
|
||||
' style="width:', W, ';height:', H, ';position:absolute;');
|
||||
|
||||
// If filters are necessary (rotation exists), create them
|
||||
// filters are bog-slow, so only create them if abbsolutely necessary
|
||||
// The following check doesn't account for skews (which don't exist
|
||||
// in the canvas spec (yet) anyway.
|
||||
|
||||
if (this.m_[0][0] != 1 || this.m_[0][1]) {
|
||||
var filter = [];
|
||||
|
||||
// Note the 12/21 reversal
|
||||
filter.push("M11='", this.m_[0][0], "',",
|
||||
"M12='", this.m_[1][0], "',",
|
||||
"M21='", this.m_[0][1], "',",
|
||||
"M22='", this.m_[1][1], "',",
|
||||
"Dx='", mr(d.x / Z), "',",
|
||||
"Dy='", mr(d.y / Z), "'");
|
||||
|
||||
// Bounding box calculation (need to minimize displayed area so that
|
||||
// filters don't waste time on unused pixels.
|
||||
var max = d;
|
||||
var c2 = this.getCoords_(dx + dw, dy);
|
||||
var c3 = this.getCoords_(dx, dy + dh);
|
||||
var c4 = this.getCoords_(dx + dw, dy + dh);
|
||||
|
||||
max.x = Math.max(max.x, c2.x, c3.x, c4.x);
|
||||
max.y = Math.max(max.y, c2.y, c3.y, c4.y);
|
||||
|
||||
vmlStr.push("padding:0 ", mr(max.x / Z), "px ", mr(max.y / Z),
|
||||
"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",
|
||||
filter.join(""), ", sizingmethod='clip');");
|
||||
} else {
|
||||
vmlStr.push("top:", mr(d.y / Z), "px;left:", mr(d.x / Z), "px;");
|
||||
}
|
||||
|
||||
vmlStr.push(' ">' ,
|
||||
'<g_vml_:image src="', image.src, '"',
|
||||
' style="width:', Z * dw, ';',
|
||||
' height:', Z * dh, ';"',
|
||||
' cropleft="', sx / w, '"',
|
||||
' croptop="', sy / h, '"',
|
||||
' cropright="', (w - sx - sw) / w, '"',
|
||||
' cropbottom="', (h - sy - sh) / h, '"',
|
||||
' />',
|
||||
'</g_vml_:group>');
|
||||
|
||||
this.element_.insertAdjacentHTML("BeforeEnd",
|
||||
vmlStr.join(""));
|
||||
};
|
||||
|
||||
contextPrototype.stroke = function(aFill) {
|
||||
var lineStr = [];
|
||||
var lineOpen = false;
|
||||
var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);
|
||||
var color = a[0];
|
||||
var opacity = a[1] * this.globalAlpha;
|
||||
|
||||
var W = 10;
|
||||
var H = 10;
|
||||
|
||||
lineStr.push('<g_vml_:shape',
|
||||
' fillcolor="', color, '"',
|
||||
' filled="', Boolean(aFill), '"',
|
||||
' style="position:absolute;width:', W, ';height:', H, ';"',
|
||||
' coordorigin="0 0" coordsize="', Z * W, ' ', Z * H, '"',
|
||||
' stroked="', !aFill, '"',
|
||||
' strokeweight="', this.lineWidth, '"',
|
||||
' strokecolor="', color, '"',
|
||||
' path="');
|
||||
|
||||
var newSeq = false;
|
||||
var min = {x: null, y: null};
|
||||
var max = {x: null, y: null};
|
||||
|
||||
for (var i = 0; i < this.currentPath_.length; i++) {
|
||||
var p = this.currentPath_[i];
|
||||
|
||||
if (p.type == "moveTo") {
|
||||
lineStr.push(" m ");
|
||||
var c = this.getCoords_(p.x, p.y);
|
||||
lineStr.push(mr(c.x), ",", mr(c.y));
|
||||
} else if (p.type == "lineTo") {
|
||||
lineStr.push(" l ");
|
||||
var c = this.getCoords_(p.x, p.y);
|
||||
lineStr.push(mr(c.x), ",", mr(c.y));
|
||||
} else if (p.type == "close") {
|
||||
lineStr.push(" x ");
|
||||
} else if (p.type == "bezierCurveTo") {
|
||||
lineStr.push(" c ");
|
||||
var c = this.getCoords_(p.x, p.y);
|
||||
var c1 = this.getCoords_(p.cp1x, p.cp1y);
|
||||
var c2 = this.getCoords_(p.cp2x, p.cp2y);
|
||||
lineStr.push(mr(c1.x), ",", mr(c1.y), ",",
|
||||
mr(c2.x), ",", mr(c2.y), ",",
|
||||
mr(c.x), ",", mr(c.y));
|
||||
} else if (p.type == "at" || p.type == "wa") {
|
||||
lineStr.push(" ", p.type, " ");
|
||||
var c = this.getCoords_(p.x, p.y);
|
||||
var cStart = this.getCoords_(p.xStart, p.yStart);
|
||||
var cEnd = this.getCoords_(p.xEnd, p.yEnd);
|
||||
|
||||
lineStr.push(mr(c.x - this.arcScaleX_ * p.radius), ",",
|
||||
mr(c.y - this.arcScaleY_ * p.radius), " ",
|
||||
mr(c.x + this.arcScaleX_ * p.radius), ",",
|
||||
mr(c.y + this.arcScaleY_ * p.radius), " ",
|
||||
mr(cStart.x), ",", mr(cStart.y), " ",
|
||||
mr(cEnd.x), ",", mr(cEnd.y));
|
||||
}
|
||||
|
||||
|
||||
// TODO: Following is broken for curves due to
|
||||
// move to proper paths.
|
||||
|
||||
// Figure out dimensions so we can do gradient fills
|
||||
// properly
|
||||
if(c) {
|
||||
if (min.x == null || c.x < min.x) {
|
||||
min.x = c.x;
|
||||
}
|
||||
if (max.x == null || c.x > max.x) {
|
||||
max.x = c.x;
|
||||
}
|
||||
if (min.y == null || c.y < min.y) {
|
||||
min.y = c.y;
|
||||
}
|
||||
if (max.y == null || c.y > max.y) {
|
||||
max.y = c.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
lineStr.push(' ">');
|
||||
|
||||
if (typeof this.fillStyle == "object") {
|
||||
var focus = {x: "50%", y: "50%"};
|
||||
var width = (max.x - min.x);
|
||||
var height = (max.y - min.y);
|
||||
var dimension = (width > height) ? width : height;
|
||||
|
||||
focus.x = mr((this.fillStyle.focus_.x / width) * 100 + 50) + "%";
|
||||
focus.y = mr((this.fillStyle.focus_.y / height) * 100 + 50) + "%";
|
||||
|
||||
var colors = [];
|
||||
|
||||
// inside radius (%)
|
||||
if (this.fillStyle.type_ == "gradientradial") {
|
||||
var inside = (this.fillStyle.radius1_ / dimension * 100);
|
||||
|
||||
// percentage that outside radius exceeds inside radius
|
||||
var expansion = (this.fillStyle.radius2_ / dimension * 100) - inside;
|
||||
} else {
|
||||
var inside = 0;
|
||||
var expansion = 100;
|
||||
}
|
||||
|
||||
var insidecolor = {offset: null, color: null};
|
||||
var outsidecolor = {offset: null, color: null};
|
||||
|
||||
// We need to sort 'colors' by percentage, from 0 > 100 otherwise ie
|
||||
// won't interpret it correctly
|
||||
this.fillStyle.colors_.sort(function (cs1, cs2) {
|
||||
return cs1.offset - cs2.offset;
|
||||
});
|
||||
|
||||
for (var i = 0; i < this.fillStyle.colors_.length; i++) {
|
||||
var fs = this.fillStyle.colors_[i];
|
||||
|
||||
colors.push( (fs.offset * expansion) + inside, "% ", fs.color, ",");
|
||||
|
||||
if (fs.offset > insidecolor.offset || insidecolor.offset == null) {
|
||||
insidecolor.offset = fs.offset;
|
||||
insidecolor.color = fs.color;
|
||||
}
|
||||
|
||||
if (fs.offset < outsidecolor.offset || outsidecolor.offset == null) {
|
||||
outsidecolor.offset = fs.offset;
|
||||
outsidecolor.color = fs.color;
|
||||
}
|
||||
}
|
||||
colors.pop();
|
||||
|
||||
lineStr.push('<g_vml_:fill',
|
||||
' color="', outsidecolor.color, '"',
|
||||
' color2="', insidecolor.color, '"',
|
||||
' type="', this.fillStyle.type_, '"',
|
||||
' focusposition="', focus.x, ', ', focus.y, '"',
|
||||
' colors="', colors.join(""), '"',
|
||||
' opacity="', opacity, '" />');
|
||||
} else if (aFill) {
|
||||
lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, '" />');
|
||||
} else {
|
||||
lineStr.push(
|
||||
'<g_vml_:stroke',
|
||||
' opacity="', opacity,'"',
|
||||
' joinstyle="', this.lineJoin, '"',
|
||||
' miterlimit="', this.miterLimit, '"',
|
||||
' endcap="', processLineCap(this.lineCap) ,'"',
|
||||
' weight="', this.lineWidth, 'px"',
|
||||
' color="', color,'" />'
|
||||
);
|
||||
}
|
||||
|
||||
lineStr.push("</g_vml_:shape>");
|
||||
|
||||
this.element_.insertAdjacentHTML("beforeEnd", lineStr.join(""));
|
||||
|
||||
//this.currentPath_ = [];
|
||||
};
|
||||
|
||||
contextPrototype.fill = function() {
|
||||
this.stroke(true);
|
||||
};
|
||||
|
||||
contextPrototype.closePath = function() {
|
||||
this.currentPath_.push({type: "close"});
|
||||
};
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
contextPrototype.getCoords_ = function(aX, aY) {
|
||||
return {
|
||||
x: Z * (aX * this.m_[0][0] + aY * this.m_[1][0] + this.m_[2][0]) - Z2,
|
||||
y: Z * (aX * this.m_[0][1] + aY * this.m_[1][1] + this.m_[2][1]) - Z2
|
||||
}
|
||||
};
|
||||
|
||||
contextPrototype.save = function() {
|
||||
var o = {};
|
||||
copyState(this, o);
|
||||
this.aStack_.push(o);
|
||||
this.mStack_.push(this.m_);
|
||||
this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
|
||||
};
|
||||
|
||||
contextPrototype.restore = function() {
|
||||
copyState(this.aStack_.pop(), this);
|
||||
this.m_ = this.mStack_.pop();
|
||||
};
|
||||
|
||||
contextPrototype.translate = function(aX, aY) {
|
||||
var m1 = [
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[aX, aY, 1]
|
||||
];
|
||||
|
||||
this.m_ = matrixMultiply(m1, this.m_);
|
||||
};
|
||||
|
||||
contextPrototype.rotate = function(aRot) {
|
||||
var c = mc(aRot);
|
||||
var s = ms(aRot);
|
||||
|
||||
var m1 = [
|
||||
[c, s, 0],
|
||||
[-s, c, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
|
||||
this.m_ = matrixMultiply(m1, this.m_);
|
||||
};
|
||||
|
||||
contextPrototype.scale = function(aX, aY) {
|
||||
this.arcScaleX_ *= aX;
|
||||
this.arcScaleY_ *= aY;
|
||||
var m1 = [
|
||||
[aX, 0, 0],
|
||||
[0, aY, 0],
|
||||
[0, 0, 1]
|
||||
];
|
||||
|
||||
this.m_ = matrixMultiply(m1, this.m_);
|
||||
};
|
||||
|
||||
/******** STUBS ********/
|
||||
contextPrototype.clip = function() {
|
||||
// TODO: Implement
|
||||
};
|
||||
|
||||
contextPrototype.arcTo = function() {
|
||||
// TODO: Implement
|
||||
};
|
||||
|
||||
contextPrototype.createPattern = function() {
|
||||
return new CanvasPattern_;
|
||||
};
|
||||
|
||||
// Gradient / Pattern Stubs
|
||||
function CanvasGradient_(aType) {
|
||||
this.type_ = aType;
|
||||
this.radius1_ = 0;
|
||||
this.radius2_ = 0;
|
||||
this.colors_ = [];
|
||||
this.focus_ = {x: 0, y: 0};
|
||||
}
|
||||
|
||||
CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
|
||||
aColor = processStyle(aColor);
|
||||
this.colors_.push({offset: 1-aOffset, color: aColor});
|
||||
};
|
||||
|
||||
function CanvasPattern_() {}
|
||||
|
||||
// set up externs
|
||||
G_vmlCanvasManager = G_vmlCanvasManager_;
|
||||
CanvasRenderingContext2D = CanvasRenderingContext2D_;
|
||||
CanvasGradient = CanvasGradient_;
|
||||
CanvasPattern = CanvasPattern_;
|
||||
|
||||
})();
|
||||
|
||||
} // if
|
@ -0,0 +1,44 @@
|
||||
/*This js mainly concern with the data structures related to graphs*/
|
||||
function carbonGraph(xscale) {
|
||||
this.array = new Array();
|
||||
for (var i = 0; i < xscale; i++) {
|
||||
this.array[i] = [i, 0.0];
|
||||
}
|
||||
this.xscale = xscale;
|
||||
}
|
||||
|
||||
function getData() {
|
||||
return this.array;
|
||||
}
|
||||
|
||||
function addData(newValue) {
|
||||
|
||||
//shift to left
|
||||
for (var i = 0; i < this.xscale - 1; i++) {
|
||||
this.array[i] = [i,this.array[i + 1][1]]; // (x,y)
|
||||
}
|
||||
|
||||
//add the value to the last postion
|
||||
this.array[this.xscale - 1] = [this.xscale - 1,newValue];
|
||||
}
|
||||
|
||||
function graphTickGenerator() {
|
||||
var tickArray = [];
|
||||
var startTick = 10;
|
||||
var i = startTick - 1;
|
||||
var weight = this.xscale / 10;
|
||||
do {
|
||||
var t = (startTick - i) * weight - 1;
|
||||
var v = i * weight;
|
||||
if (v == 0) {
|
||||
v = "0";
|
||||
}
|
||||
tickArray.push([t, v]);
|
||||
i--;
|
||||
} while (i > -1);
|
||||
return tickArray;
|
||||
}
|
||||
|
||||
carbonGraph.prototype.get = getData;
|
||||
carbonGraph.prototype.add = addData;
|
||||
carbonGraph.prototype.tick = graphTickGenerator;
|
@ -0,0 +1,43 @@
|
||||
function clientSideInclude(id, url) {
|
||||
var req = false;
|
||||
// For Safari, Firefox, and other non-MS browsers
|
||||
if (window.XMLHttpRequest) {
|
||||
try {
|
||||
req = new XMLHttpRequest();
|
||||
} catch (e) {
|
||||
req = false;
|
||||
}
|
||||
} else if (window.ActiveXObject) {
|
||||
// For Internet Explorer on Windows
|
||||
try {
|
||||
req = new ActiveXObject("Msxml2.XMLHTTP");
|
||||
} catch (e) {
|
||||
try {
|
||||
req = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
} catch (e) {
|
||||
req = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
var element = document.getElementById(id);
|
||||
if (!element) {
|
||||
alert("Bad id " + id +
|
||||
"passed to clientSideInclude." +
|
||||
"You need a div or span element " +
|
||||
"with this id in your page.");
|
||||
return;
|
||||
}
|
||||
if (req) {
|
||||
// Synchronous request, wait till we have it all
|
||||
req.open('GET', url, false);
|
||||
req.send(null);
|
||||
element.innerHTML = req.responseText;
|
||||
} else {
|
||||
element.innerHTML =
|
||||
"Sorry, your browser does not support " +
|
||||
"XMLHTTPRequest objects. This page requires " +
|
||||
"Internet Explorer 5 or better for Windows, " +
|
||||
"or Firefox for any system, or Safari. Other " +
|
||||
"compatible browsers may also exist.";
|
||||
}
|
||||
}
|
@ -0,0 +1,601 @@
|
||||
/*
|
||||
* jQuery Form Plugin
|
||||
* version: 2.12 (06/07/2008)
|
||||
* @requires jQuery v1.2.2 or later
|
||||
*
|
||||
* Examples and documentation at: http://malsup.com/jquery/form/
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id$
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
/*
|
||||
Usage Note:
|
||||
-----------
|
||||
Do not use both ajaxSubmit and ajaxForm on the same form. These
|
||||
functions are intended to be exclusive. Use ajaxSubmit if you want
|
||||
to bind your own submit handler to the form. For example,
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#myForm').bind('submit', function() {
|
||||
$(this).ajaxSubmit({
|
||||
target: '#output'
|
||||
});
|
||||
return false; // <-- important!
|
||||
});
|
||||
});
|
||||
|
||||
Use ajaxForm when you want the plugin to manage all the event binding
|
||||
for you. For example,
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#myForm').ajaxForm({
|
||||
target: '#output'
|
||||
});
|
||||
});
|
||||
|
||||
When using ajaxForm, the ajaxSubmit function will be invoked for you
|
||||
at the appropriate time.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ajaxSubmit() provides a mechanism for immediately submitting
|
||||
* an HTML form using AJAX.
|
||||
*/
|
||||
$.fn.ajaxSubmit = function(options) {
|
||||
// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
|
||||
if (!this.length) {
|
||||
log('ajaxSubmit: skipping submit process - no element selected');
|
||||
return this;
|
||||
}
|
||||
|
||||
if (typeof options == 'function')
|
||||
options = { success: options };
|
||||
|
||||
options = $.extend({
|
||||
url: this.attr('action') || window.location.toString(),
|
||||
type: this.attr('method') || 'GET'
|
||||
}, options || {});
|
||||
|
||||
// hook for manipulating the form data before it is extracted;
|
||||
// convenient for use with rich editors like tinyMCE or FCKEditor
|
||||
var veto = {};
|
||||
this.trigger('form-pre-serialize', [this, options, veto]);
|
||||
if (veto.veto) {
|
||||
log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
|
||||
return this;
|
||||
}
|
||||
|
||||
var a = this.formToArray(options.semantic);
|
||||
if (options.data) {
|
||||
options.extraData = options.data;
|
||||
for (var n in options.data)
|
||||
a.push( { name: n, value: options.data[n] } );
|
||||
}
|
||||
|
||||
// give pre-submit callback an opportunity to abort the submit
|
||||
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
|
||||
log('ajaxSubmit: submit aborted via beforeSubmit callback');
|
||||
return this;
|
||||
}
|
||||
|
||||
// fire vetoable 'validate' event
|
||||
this.trigger('form-submit-validate', [a, this, options, veto]);
|
||||
if (veto.veto) {
|
||||
log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
|
||||
return this;
|
||||
}
|
||||
|
||||
var q = $.param(a);
|
||||
|
||||
if (options.type.toUpperCase() == 'GET') {
|
||||
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
|
||||
options.data = null; // data is null for 'get'
|
||||
}
|
||||
else
|
||||
options.data = q; // data is the query string for 'post'
|
||||
|
||||
var $form = this, callbacks = [];
|
||||
if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
|
||||
if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
|
||||
|
||||
// perform a load on the target only if dataType is not provided
|
||||
if (!options.dataType && options.target) {
|
||||
var oldSuccess = options.success || function(){};
|
||||
callbacks.push(function(data) {
|
||||
$(options.target).html(data).each(oldSuccess, arguments);
|
||||
});
|
||||
}
|
||||
else if (options.success)
|
||||
callbacks.push(options.success);
|
||||
|
||||
options.success = function(data, status) {
|
||||
for (var i=0, max=callbacks.length; i < max; i++)
|
||||
callbacks[i](data, status, $form);
|
||||
};
|
||||
|
||||
// are there files to upload?
|
||||
var files = $('input:file', this).fieldValue();
|
||||
var found = false;
|
||||
for (var j=0; j < files.length; j++)
|
||||
if (files[j])
|
||||
found = true;
|
||||
|
||||
// options.iframe allows user to force iframe mode
|
||||
if (options.iframe || found) {
|
||||
// hack to fix Safari hang (thanks to Tim Molendijk for this)
|
||||
// see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
|
||||
if ($.browser.safari && options.closeKeepAlive)
|
||||
$.get(options.closeKeepAlive, fileUpload);
|
||||
else
|
||||
fileUpload();
|
||||
}
|
||||
else
|
||||
$.ajax(options);
|
||||
|
||||
// fire 'notify' event
|
||||
this.trigger('form-submit-notify', [this, options]);
|
||||
return this;
|
||||
|
||||
|
||||
// private function for handling file uploads (hat tip to YAHOO!)
|
||||
function fileUpload() {
|
||||
var form = $form[0];
|
||||
|
||||
if ($(':input[@name=submit]', form).length) {
|
||||
alert('Error: Form elements must not be named "submit".');
|
||||
return;
|
||||
}
|
||||
|
||||
var opts = $.extend({}, $.ajaxSettings, options);
|
||||
|
||||
var id = 'jqFormIO' + (new Date().getTime());
|
||||
var $io = $('<iframe id="' + id + '" name="' + id + '" />');
|
||||
var io = $io[0];
|
||||
|
||||
if ($.browser.msie || $.browser.opera)
|
||||
io.src = 'javascript:false;document.write("");';
|
||||
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
|
||||
|
||||
var xhr = { // mock object
|
||||
responseText: null,
|
||||
responseXML: null,
|
||||
status: 0,
|
||||
statusText: 'n/a',
|
||||
getAllResponseHeaders: function() {},
|
||||
getResponseHeader: function() {},
|
||||
setRequestHeader: function() {}
|
||||
};
|
||||
|
||||
var g = opts.global;
|
||||
// trigger ajax global events so that activity/block indicators work like normal
|
||||
if (g && ! $.active++) $.event.trigger("ajaxStart");
|
||||
if (g) $.event.trigger("ajaxSend", [xhr, opts]);
|
||||
|
||||
var cbInvoked = 0;
|
||||
var timedOut = 0;
|
||||
|
||||
// add submitting element to data if we know it
|
||||
var sub = form.clk;
|
||||
if (sub) {
|
||||
var n = sub.name;
|
||||
if (n && !sub.disabled) {
|
||||
options.extraData = options.extraData || {};
|
||||
options.extraData[n] = sub.value;
|
||||
if (sub.type == "image") {
|
||||
options.extraData[name+'.x'] = form.clk_x;
|
||||
options.extraData[name+'.y'] = form.clk_y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// take a breath so that pending repaints get some cpu time before the upload starts
|
||||
setTimeout(function() {
|
||||
// make sure form attrs are set
|
||||
var t = $form.attr('target'), a = $form.attr('action');
|
||||
$form.attr({
|
||||
target: id,
|
||||
encoding: 'multipart/form-data',
|
||||
enctype: 'multipart/form-data',
|
||||
method: 'POST',
|
||||
action: opts.url
|
||||
});
|
||||
|
||||
// support timout
|
||||
if (opts.timeout)
|
||||
setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
|
||||
|
||||
// add "extra" data to form if provided in options
|
||||
var extraInputs = [];
|
||||
try {
|
||||
if (options.extraData)
|
||||
for (var n in options.extraData)
|
||||
extraInputs.push(
|
||||
$('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
|
||||
.appendTo(form)[0]);
|
||||
|
||||
// add iframe to doc and submit the form
|
||||
$io.appendTo('body');
|
||||
io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
|
||||
form.submit();
|
||||
}
|
||||
finally {
|
||||
// reset attrs and remove "extra" input elements
|
||||
$form.attr('action', a);
|
||||
t ? $form.attr('target', t) : $form.removeAttr('target');
|
||||
$(extraInputs).remove();
|
||||
}
|
||||
}, 10);
|
||||
|
||||
function cb() {
|
||||
if (cbInvoked++) return;
|
||||
|
||||
io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
|
||||
|
||||
var operaHack = 0;
|
||||
var ok = true;
|
||||
try {
|
||||
if (timedOut) throw 'timeout';
|
||||
// extract the server response from the iframe
|
||||
var data, doc;
|
||||
|
||||
doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
|
||||
|
||||
if (doc.body == null && !operaHack && $.browser.opera) {
|
||||
// In Opera 9.2.x the iframe DOM is not always traversable when
|
||||
// the onload callback fires so we give Opera 100ms to right itself
|
||||
operaHack = 1;
|
||||
cbInvoked--;
|
||||
setTimeout(cb, 100);
|
||||
return;
|
||||
}
|
||||
|
||||
xhr.responseText = doc.body ? doc.body.innerHTML : null;
|
||||
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
|
||||
xhr.getResponseHeader = function(header){
|
||||
var headers = {'content-type': opts.dataType};
|
||||
return headers[header];
|
||||
};
|
||||
|
||||
if (opts.dataType == 'json' || opts.dataType == 'script') {
|
||||
var ta = doc.getElementsByTagName('textarea')[0];
|
||||
xhr.responseText = ta ? ta.value : xhr.responseText;
|
||||
}
|
||||
else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
|
||||
xhr.responseXML = toXml(xhr.responseText);
|
||||
}
|
||||
data = $.httpData(xhr, opts.dataType);
|
||||
}
|
||||
catch(e){
|
||||
ok = false;
|
||||
$.handleError(opts, xhr, 'error', e);
|
||||
}
|
||||
|
||||
// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
|
||||
if (ok) {
|
||||
opts.success(data, 'success');
|
||||
if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
|
||||
}
|
||||
if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
|
||||
if (g && ! --$.active) $.event.trigger("ajaxStop");
|
||||
if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
|
||||
|
||||
// clean up
|
||||
setTimeout(function() {
|
||||
$io.remove();
|
||||
xhr.responseXML = null;
|
||||
}, 100);
|
||||
};
|
||||
|
||||
function toXml(s, doc) {
|
||||
if (window.ActiveXObject) {
|
||||
doc = new ActiveXObject('Microsoft.XMLDOM');
|
||||
doc.async = 'false';
|
||||
doc.loadXML(s);
|
||||
}
|
||||
else
|
||||
doc = (new DOMParser()).parseFromString(s, 'text/xml');
|
||||
return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* ajaxForm() provides a mechanism for fully automating form submission.
|
||||
*
|
||||
* The advantages of using this method instead of ajaxSubmit() are:
|
||||
*
|
||||
* 1: This method will include coordinates for <input type="image" /> elements (if the element
|
||||
* is used to submit the form).
|
||||
* 2. This method will include the submit element's name/value data (for the element that was
|
||||
* used to submit the form).
|
||||
* 3. This method binds the submit() method to the form for you.
|
||||
*
|
||||
* The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
|
||||
* passes the options argument along after properly binding events for submit elements and
|
||||
* the form itself.
|
||||
*/
|
||||
$.fn.ajaxForm = function(options) {
|
||||
return this.ajaxFormUnbind().bind('submit.form-plugin',function() {
|
||||
$(this).ajaxSubmit(options);
|
||||
return false;
|
||||
}).each(function() {
|
||||
// store options in hash
|
||||
$(":submit,input:image", this).bind('click.form-plugin',function(e) {
|
||||
var $form = this.form;
|
||||
$form.clk = this;
|
||||
if (this.type == 'image') {
|
||||
if (e.offsetX != undefined) {
|
||||
$form.clk_x = e.offsetX;
|
||||
$form.clk_y = e.offsetY;
|
||||
} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
|
||||
var offset = $(this).offset();
|
||||
$form.clk_x = e.pageX - offset.left;
|
||||
$form.clk_y = e.pageY - offset.top;
|
||||
} else {
|
||||
$form.clk_x = e.pageX - this.offsetLeft;
|
||||
$form.clk_y = e.pageY - this.offsetTop;
|
||||
}
|
||||
}
|
||||
// clear form vars
|
||||
setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
|
||||
$.fn.ajaxFormUnbind = function() {
|
||||
this.unbind('submit.form-plugin');
|
||||
return this.each(function() {
|
||||
$(":submit,input:image", this).unbind('click.form-plugin');
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* formToArray() gathers form element data into an array of objects that can
|
||||
* be passed to any of the following ajax functions: $.get, $.post, or load.
|
||||
* Each object in the array has both a 'name' and 'value' property. An example of
|
||||
* an array for a simple login form might be:
|
||||
*
|
||||
* [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
|
||||
*
|
||||
* It is this array that is passed to pre-submit callback functions provided to the
|
||||
* ajaxSubmit() and ajaxForm() methods.
|
||||
*/
|
||||
$.fn.formToArray = function(semantic) {
|
||||
var a = [];
|
||||
if (this.length == 0) return a;
|
||||
|
||||
var form = this[0];
|
||||
var els = semantic ? form.getElementsByTagName('*') : form.elements;
|
||||
if (!els) return a;
|
||||
for(var i=0, max=els.length; i < max; i++) {
|
||||
var el = els[i];
|
||||
var n = el.name;
|
||||
if (!n) continue;
|
||||
|
||||
if (semantic && form.clk && el.type == "image") {
|
||||
// handle image inputs on the fly when semantic == true
|
||||
if(!el.disabled && form.clk == el)
|
||||
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
|
||||
continue;
|
||||
}
|
||||
|
||||
var v = $.fieldValue(el, true);
|
||||
if (v && v.constructor == Array) {
|
||||
for(var j=0, jmax=v.length; j < jmax; j++)
|
||||
a.push({name: n, value: v[j]});
|
||||
}
|
||||
else if (v !== null && typeof v != 'undefined')
|
||||
a.push({name: n, value: v});
|
||||
}
|
||||
|
||||
if (!semantic && form.clk) {
|
||||
// input type=='image' are not found in elements array! handle them here
|
||||
var inputs = form.getElementsByTagName("input");
|
||||
for(var i=0, max=inputs.length; i < max; i++) {
|
||||
var input = inputs[i];
|
||||
var n = input.name;
|
||||
if(n && !input.disabled && input.type == "image" && form.clk == input)
|
||||
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
|
||||
}
|
||||
}
|
||||
return a;
|
||||
};
|
||||
|
||||
/**
|
||||
* Serializes form data into a 'submittable' string. This method will return a string
|
||||
* in the format: name1=value1&name2=value2
|
||||
*/
|
||||
$.fn.formSerialize = function(semantic) {
|
||||
//hand off to jQuery.param for proper encoding
|
||||
return $.param(this.formToArray(semantic));
|
||||
};
|
||||
|
||||
/**
|
||||
* Serializes all field elements in the jQuery object into a query string.
|
||||
* This method will return a string in the format: name1=value1&name2=value2
|
||||
*/
|
||||
$.fn.fieldSerialize = function(successful) {
|
||||
var a = [];
|
||||
this.each(function() {
|
||||
var n = this.name;
|
||||
if (!n) return;
|
||||
var v = $.fieldValue(this, successful);
|
||||
if (v && v.constructor == Array) {
|
||||
for (var i=0,max=v.length; i < max; i++)
|
||||
a.push({name: n, value: v[i]});
|
||||
}
|
||||
else if (v !== null && typeof v != 'undefined')
|
||||
a.push({name: this.name, value: v});
|
||||
});
|
||||
//hand off to jQuery.param for proper encoding
|
||||
return $.param(a);
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the value(s) of the element in the matched set. For example, consider the following form:
|
||||
*
|
||||
* <form><fieldset>
|
||||
* <input name="A" type="text" />
|
||||
* <input name="A" type="text" />
|
||||
* <input name="B" type="checkbox" value="B1" />
|
||||
* <input name="B" type="checkbox" value="B2"/>
|
||||
* <input name="C" type="radio" value="C1" />
|
||||
* <input name="C" type="radio" value="C2" />
|
||||
* </fieldset></form>
|
||||
*
|
||||
* var v = $(':text').fieldValue();
|
||||
* // if no values are entered into the text inputs
|
||||
* v == ['','']
|
||||
* // if values entered into the text inputs are 'foo' and 'bar'
|
||||
* v == ['foo','bar']
|
||||
*
|
||||
* var v = $(':checkbox').fieldValue();
|
||||
* // if neither checkbox is checked
|
||||
* v === undefined
|
||||
* // if both checkboxes are checked
|
||||
* v == ['B1', 'B2']
|
||||
*
|
||||
* var v = $(':radio').fieldValue();
|
||||
* // if neither radio is checked
|
||||
* v === undefined
|
||||
* // if first radio is checked
|
||||
* v == ['C1']
|
||||
*
|
||||
* The successful argument controls whether or not the field element must be 'successful'
|
||||
* (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
|
||||
* The default value of the successful argument is true. If this value is false the value(s)
|
||||
* for each element is returned.
|
||||
*
|
||||
* Note: This method *always* returns an array. If no valid value can be determined the
|
||||
* array will be empty, otherwise it will contain one or more values.
|
||||
*/
|
||||
$.fn.fieldValue = function(successful) {
|
||||
for (var val=[], i=0, max=this.length; i < max; i++) {
|
||||
var el = this[i];
|
||||
var v = $.fieldValue(el, successful);
|
||||
if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
|
||||
continue;
|
||||
v.constructor == Array ? $.merge(val, v) : val.push(v);
|
||||
}
|
||||
return val;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the value of the field element.
|
||||
*/
|
||||
$.fieldValue = function(el, successful) {
|
||||
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
|
||||
if (typeof successful == 'undefined') successful = true;
|
||||
|
||||
if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
|
||||
(t == 'checkbox' || t == 'radio') && !el.checked ||
|
||||
(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
|
||||
tag == 'select' && el.selectedIndex == -1))
|
||||
return null;
|
||||
|
||||
if (tag == 'select') {
|
||||
var index = el.selectedIndex;
|
||||
if (index < 0) return null;
|
||||
var a = [], ops = el.options;
|
||||
var one = (t == 'select-one');
|
||||
var max = (one ? index+1 : ops.length);
|
||||
for(var i=(one ? index : 0); i < max; i++) {
|
||||
var op = ops[i];
|
||||
if (op.selected) {
|
||||
// extra pain for IE...
|
||||
var v = $.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
|
||||
if (one) return v;
|
||||
a.push(v);
|
||||
}
|
||||
}
|
||||
return a;
|
||||
}
|
||||
return el.value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Clears the form data. Takes the following actions on the form's input fields:
|
||||
* - input text fields will have their 'value' property set to the empty string
|
||||
* - select elements will have their 'selectedIndex' property set to -1
|
||||
* - checkbox and radio inputs will have their 'checked' property set to false
|
||||
* - inputs of type submit, button, reset, and hidden will *not* be effected
|
||||
* - button elements will *not* be effected
|
||||
*/
|
||||
$.fn.clearForm = function() {
|
||||
return this.each(function() {
|
||||
$('input,select,textarea', this).clearFields();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Clears the selected form elements.
|
||||
*/
|
||||
$.fn.clearFields = $.fn.clearInputs = function() {
|
||||
return this.each(function() {
|
||||
var t = this.type, tag = this.tagName.toLowerCase();
|
||||
if (t == 'text' || t == 'password' || tag == 'textarea')
|
||||
this.value = '';
|
||||
else if (t == 'checkbox' || t == 'radio')
|
||||
this.checked = false;
|
||||
else if (tag == 'select')
|
||||
this.selectedIndex = -1;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Resets the form data. Causes all form elements to be reset to their original value.
|
||||
*/
|
||||
$.fn.resetForm = function() {
|
||||
return this.each(function() {
|
||||
// guard against an input with the name of 'reset'
|
||||
// note that IE reports the reset function as an 'object'
|
||||
if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
|
||||
this.reset();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Enables or disables any matching elements.
|
||||
*/
|
||||
$.fn.enable = function(b) {
|
||||
if (b == undefined) b = true;
|
||||
return this.each(function() {
|
||||
this.disabled = !b
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks/unchecks any matching checkboxes or radio buttons and
|
||||
* selects/deselects and matching option elements.
|
||||
*/
|
||||
$.fn.select = function(select) {
|
||||
if (select == undefined) select = true;
|
||||
return this.each(function() {
|
||||
var t = this.type;
|
||||
if (t == 'checkbox' || t == 'radio')
|
||||
this.checked = select;
|
||||
else if (this.tagName.toLowerCase() == 'option') {
|
||||
var $sel = $(this).parent('select');
|
||||
if (select && $sel[0] && $sel[0].type == 'select-one') {
|
||||
// deselect all other options
|
||||
$sel.find('option').select(false);
|
||||
}
|
||||
this.selected = select;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// helper fn for console logging
|
||||
// set $.fn.ajaxSubmit.debug to true to enable debug logging
|
||||
function log() {
|
||||
if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
|
||||
window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
|
||||
};
|
||||
|
||||
})(jQuery);
|
@ -0,0 +1,31 @@
|
||||
// Memory
|
||||
var lastMinReqCountServiceGraph;
|
||||
|
||||
function initStats(memoryXScale) {
|
||||
if (memoryXScale != null) {
|
||||
initReqCountGraphs(memoryXScale);
|
||||
} else {
|
||||
initReqCountGraphs(30);
|
||||
}
|
||||
}
|
||||
|
||||
function isNumeric(sText){
|
||||
var validChars = "0123456789.";
|
||||
var isNumber = true;
|
||||
var character;
|
||||
for (var i = 0; i < sText.length && isNumber == true; i++) {
|
||||
character = sText.charAt(i);
|
||||
if (validChars.indexOf(character) == -1) {
|
||||
isNumber = false;
|
||||
}
|
||||
}
|
||||
return isNumber;
|
||||
}
|
||||
|
||||
function initReqCountGraphs(memoryXScale) {
|
||||
if (memoryXScale < 1 || !isNumeric(memoryXScale)) {
|
||||
return;
|
||||
}
|
||||
lastMinReqCountServiceGraph = new carbonGraph(memoryXScale);
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
// Memory
|
||||
var minMaxAverageRespTimesGraphPerSvc;
|
||||
|
||||
function initStats(memoryXScale) {
|
||||
if (memoryXScale != null) {
|
||||
initReqCountGraphs(memoryXScale);
|
||||
} else {
|
||||
initReqCountGraphs(30);
|
||||
}
|
||||
}
|
||||
|
||||
function isNumeric(sText){
|
||||
var validChars = "0123456789.";
|
||||
var isNumber = true;
|
||||
var character;
|
||||
for (var i = 0; i < sText.length && isNumber == true; i++) {
|
||||
character = sText.charAt(i);
|
||||
if (validChars.indexOf(character) == -1) {
|
||||
isNumber = false;
|
||||
}
|
||||
}
|
||||
return isNumber;
|
||||
}
|
||||
|
||||
function initReqCountGraphs(memoryXScale) {
|
||||
if (memoryXScale < 1 || !isNumeric(memoryXScale)) {
|
||||
return;
|
||||
}
|
||||
minMaxAverageRespTimesGraphPerSvc = new minMaxAvgGraph(memoryXScale);
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
// Memory
|
||||
var minMaxAverageRespTimesGraph;
|
||||
|
||||
function initStats(memoryXScale) {
|
||||
if (memoryXScale != null) {
|
||||
initReqCountGraphs(memoryXScale);
|
||||
} else {
|
||||
initReqCountGraphs(30);
|
||||
}
|
||||
}
|
||||
|
||||
function isNumeric(sText){
|
||||
var validChars = "0123456789.";
|
||||
var isNumber = true;
|
||||
var character;
|
||||
for (var i = 0; i < sText.length && isNumber == true; i++) {
|
||||
character = sText.charAt(i);
|
||||
if (validChars.indexOf(character) == -1) {
|
||||
isNumber = false;
|
||||
}
|
||||
}
|
||||
return isNumber;
|
||||
}
|
||||
|
||||
function initReqCountGraphs(memoryXScale) {
|
||||
if (memoryXScale < 1 || !isNumeric(memoryXScale)) {
|
||||
return;
|
||||
}
|
||||
minMaxAverageRespTimesGraph = new minMaxAvgGraph(memoryXScale);
|
||||
}
|
||||
|
@ -0,0 +1,100 @@
|
||||
/*This js mainly concern with the data structures related to graphs*/
|
||||
function minMaxAvgGraph(xscale) {
|
||||
this.minArray = new Array();
|
||||
this.maxArray = new Array();
|
||||
this.avgArray = new Array();
|
||||
|
||||
for (var i = 0; i < xscale; i++) {
|
||||
this.minArray[i] = [i, 0.0];
|
||||
}
|
||||
for (var j = 0; j < xscale; j++) {
|
||||
this.maxArray[j] = [j, 0.0];
|
||||
}
|
||||
for (var k = 0; k < xscale; k++) {
|
||||
this.avgArray[k] = [k, 0.0];
|
||||
}
|
||||
|
||||
this.xscale = xscale;
|
||||
}
|
||||
|
||||
function getDataMin() {
|
||||
return this.minArray;
|
||||
}
|
||||
function getDataMax() {
|
||||
return this.maxArray;
|
||||
}
|
||||
function getDataAvg() {
|
||||
return this.avgArray;
|
||||
}
|
||||
|
||||
function addData(valuesString) {
|
||||
// First split and get values
|
||||
var values = valuesString.split("&");
|
||||
var minValue = values[0];
|
||||
var maxValue = values[1];
|
||||
var avgValue = values[2];
|
||||
|
||||
this.addMin(minValue);
|
||||
this.addMax(maxValue);
|
||||
this.addAvg(avgValue);
|
||||
}
|
||||
|
||||
function addDataMin(newValue) {
|
||||
|
||||
//shift to left
|
||||
for (var i = 0; i < this.xscale - 1; i++) {
|
||||
this.minArray[i] = [i,this.minArray[i + 1][1]]; // (x,y)
|
||||
}
|
||||
|
||||
//add the value to the last postion
|
||||
this.minArray[this.xscale - 1] = [this.xscale - 1,newValue];
|
||||
}
|
||||
|
||||
function addDataMax(newValue) {
|
||||
|
||||
//shift to left
|
||||
for (var i = 0; i < this.xscale - 1; i++) {
|
||||
this.maxArray[i] = [i,this.maxArray[i + 1][1]]; // (x,y)
|
||||
}
|
||||
|
||||
//add the value to the last postion
|
||||
this.maxArray[this.xscale - 1] = [this.xscale - 1,newValue];
|
||||
}
|
||||
|
||||
function addDataAvg(newValue) {
|
||||
|
||||
//shift to left
|
||||
for (var i = 0; i < this.xscale - 1; i++) {
|
||||
this.avgArray[i] = [i,this.avgArray[i + 1][1]]; // (x,y)
|
||||
}
|
||||
|
||||
//add the value to the last postion
|
||||
this.avgArray[this.xscale - 1] = [this.xscale - 1,newValue];
|
||||
}
|
||||
|
||||
function graphTickGenerator() {
|
||||
var tickArray = [];
|
||||
var startTick = 10;
|
||||
var i = startTick - 1;
|
||||
var weight = this.xscale / 10;
|
||||
do {
|
||||
var t = (startTick - i) * weight - 1;
|
||||
var v = i * weight;
|
||||
if (v == 0) {
|
||||
v = "0";
|
||||
}
|
||||
tickArray.push([t, v]);
|
||||
i--;
|
||||
} while (i > -1);
|
||||
return tickArray;
|
||||
}
|
||||
|
||||
minMaxAvgGraph.prototype.getMin = getDataMin;
|
||||
minMaxAvgGraph.prototype.getMax = getDataMax;
|
||||
minMaxAvgGraph.prototype.getAvg = getDataAvg;
|
||||
minMaxAvgGraph.prototype.add = addData;
|
||||
minMaxAvgGraph.prototype.addMin = addDataMin;
|
||||
minMaxAvgGraph.prototype.addMax = addDataMax;
|
||||
minMaxAvgGraph.prototype.addAvg = addDataAvg;
|
||||
minMaxAvgGraph.prototype.tick = graphTickGenerator;
|
||||
|
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<Module>
|
||||
<ModulePrefs
|
||||
title="Lifecycle Stage Monitor"
|
||||
height="240"
|
||||
description="Allows to monitor messages received per hour by a service"
|
||||
author="Tyrell Perera" author_email="tyrell@wso2.com" author_affiliation="WSO2"
|
||||
author_location="Colombo, Sri Lanka">
|
||||
<Require feature="setprefs"/>
|
||||
</ModulePrefs>
|
||||
<Content type="html" view="default">
|
||||
<![CDATA[
|
||||
|
||||
|
||||
<script type="text/javascript"
|
||||
src="swfobject1-5/swfobject.js"></script>
|
||||
<script type="text/javascript"
|
||||
src="js/retrieve-data.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="css/gadgets.css"/>
|
||||
|
||||
<p>Select Lifecycle: <select id="selectbox" style="text-align:left;width:200px;margin:0px auto;"
|
||||
onchange="populateChart()">
|
||||
|
||||
</select></p>
|
||||
|
||||
<div id="chart" style="text-align:center;"></div>
|
||||
<script type="text/javascript">
|
||||
if (!(navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"])){
|
||||
document.getElementById('chart').innerHTML = '<div style="padding-top:20px;margin-bottom:20px;">You need to upgrade your Adobe Flash Player to display this Gadget.</div> <a href="http://get.adobe.com/flashplayer/" target="_blank">Download it from Adobe.</a>';
|
||||
}
|
||||
</SCRIPT>
|
||||
<script type="text/javascript">
|
||||
function init() {
|
||||
var selectBox = document.getElementById('selectbox');
|
||||
var lifecycleNames = getLifeCycleNames().split(";");
|
||||
for (var i = 0; i < (lifecycleNames.length - 1); i++) {
|
||||
addOption(selectBox, lifecycleNames[i], lifecycleNames[i]);
|
||||
}
|
||||
populateChart();
|
||||
}
|
||||
function addOption(selectedBox, text, value)
|
||||
{
|
||||
var optn = document.createElement("OPTION");
|
||||
optn.text = text;
|
||||
optn.value = value;
|
||||
selectedBox.options.add(optn);
|
||||
}
|
||||
|
||||
function populateChart() {
|
||||
var select = document.getElementById('selectbox');
|
||||
var selectValue = select.options[select.selectedIndex].value;
|
||||
var so = new SWFObject("registry/resource/_system/config/repository/dashboards/gadgets/flash/open-flash-chart.swf", "chart", "300", "180", "9", "#ffffff");
|
||||
so.addVariable("data", "carbon/gauges/gadgets/flash/flashdata-ajaxprocessor.jsp?name=" + selectValue + "%26funcName=lifeCyclePieChartData");
|
||||
so.addParam("lifeCycleName", selectValue);
|
||||
so.addParam("allowScriptAccess", "sameDomain");
|
||||
so.write("chart");
|
||||
}
|
||||
gadgets.util.registerOnLoadHandler(init);
|
||||
</script>
|
||||
|
||||
]]>
|
||||
</Content>
|
||||
</Module>
|
@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Module>
|
||||
<ModulePrefs title="Resource Impact" height="300"
|
||||
description="Shows all dependencies and used-by associations of a particular resource/service"
|
||||
author="Tharindu Mathew" author_email="carbon-dev@wso2.org"
|
||||
author_affiliation="WSO2" author_location="Colombo, Sri Lanka">
|
||||
<Require feature="setprefs" />
|
||||
<Require feature="tabs" />
|
||||
<Require feature="dynamic-height" />
|
||||
<Require feature="views" />
|
||||
</ModulePrefs>
|
||||
<UserPref name="path" display_name="path"
|
||||
default_value="" datatype="string" required="true"></UserPref>
|
||||
<UserPref name="selectedFlag" default_value="false" datatype="bool" required="true"></UserPref>
|
||||
<Content type="html" view="default, home">
|
||||
<![CDATA[
|
||||
|
||||
<script language="javascript" type="text/javascript" src="js/excanvas.js"></script>
|
||||
<script type="text/javascript" src="js/wso2vis.js"></script>
|
||||
<script type="text/javascript" src="js/retrieve-data.js"></script>
|
||||
<!--<script type="text/javascript" src="js/jit.js"></script>-->
|
||||
<style>
|
||||
div#qTip {
|
||||
padding: 3px;
|
||||
border: 1px solid #666;
|
||||
border-right-width: 2px;
|
||||
border-bottom-width: 2px;
|
||||
display: none;
|
||||
background: #999;
|
||||
color: #FFF;
|
||||
font: bold 10px Verdana, Arial, sans-serif;
|
||||
text-align: left;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="css/gadgets.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="css/help.css"/>
|
||||
|
||||
<p>Path:<input id="path-text" type="text" style="width:200px;margin:0 auto;" onkeypress="handleEnter(this, event)"></input>
|
||||
<input type="button" onclick="pullData()" value="View"></input></p>
|
||||
<div id="infovis" style="margin:0 auto; text-align:center;height:270px;width:300px;"></div>
|
||||
<div id="log"></div>
|
||||
<script type="text/javascript">
|
||||
|
||||
var pullData = function() {
|
||||
var path = document.getElementById("path-text").value;
|
||||
var URL = "carbon/gauges/gadgets/flash/flashdata-ajaxprocessor.jsp?funcName=getResourceImpact&path=" + path;
|
||||
dataProvider.url = URL;
|
||||
dataProvider.initialize();
|
||||
var prefs = new gadgets.Prefs();
|
||||
|
||||
prefs.set("path", path);
|
||||
prefs.set("selectedFlag", true);
|
||||
gadgets.window.adjustHeight(300);
|
||||
setTimeout("gadgets.window.adjustHeight(300)",100);
|
||||
}
|
||||
|
||||
function handleEnter(inField, e) {
|
||||
var charCode;
|
||||
var prefs = new gadgets.Prefs();
|
||||
prefs.set("path", document.getElementById("path-text").value);
|
||||
if(e && e.which){
|
||||
charCode = e.which;
|
||||
}else if(window.event){
|
||||
e = window.event;
|
||||
charCode = e.keyCode;
|
||||
}
|
||||
|
||||
if(charCode == 13) {
|
||||
pullData();
|
||||
}
|
||||
}
|
||||
|
||||
//document.write(json);
|
||||
|
||||
|
||||
var dataProvider = new wso2vis.p.ProviderGETJSON("");
|
||||
|
||||
|
||||
|
||||
|
||||
var treeDiv = document.getElementById("infovis");
|
||||
var logDiv = document.getElementById("log");
|
||||
var hyperTree = new wso2vis.s.chart.infovis.HyperTree(logDiv,"infovis","Dependency Tree","Impact Analysis of resources");
|
||||
hyperTree.dataField(["children"])
|
||||
.dataLabel(["name"])
|
||||
.width(300)
|
||||
.height(270);
|
||||
|
||||
hyperTree.load();
|
||||
|
||||
|
||||
//spaceTree.onTooltip = barTooltip;
|
||||
//spaceTree.onClick = barClick;
|
||||
|
||||
dataProvider.addDataReceiver(hyperTree);
|
||||
var prefs = new gadgets.Prefs();
|
||||
document.getElementById("path-text").value = prefs.getString("path");
|
||||
if (prefs.getBool("selectedFlag")) {
|
||||
pullData();
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
]]>
|
||||
|
||||
</Content>
|
||||
<Content type="html" view="canvas">
|
||||
<![CDATA[
|
||||
|
||||
<script language="javascript" type="text/javascript" src="js/excanvas.js"></script>
|
||||
<script type="text/javascript" src="js/wso2vis.js"></script>
|
||||
<script type="text/javascript" src="js/retrieve-data.js"></script>
|
||||
<!--<script type="text/javascript" src="js/jit.js"></script>-->
|
||||
<style>
|
||||
div#qTip {
|
||||
padding: 3px;
|
||||
border: 1px solid #666;
|
||||
border-right-width: 2px;
|
||||
border-bottom-width: 2px;
|
||||
display: none;
|
||||
background: #999;
|
||||
color: #FFF;
|
||||
font: bold 10px Verdana, Arial, sans-serif;
|
||||
text-align: left;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="css/gadgets.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="css/help.css"/>
|
||||
|
||||
<p>Path:<input id="path-text" type="text" style="width:200px;margin:0 auto;" onkeypress="handleEnter(this, event)"></input>
|
||||
<input type="button" onclick="pullData()" value="View"></input></p>
|
||||
<div id="infovis" style="margin:0 auto; text-align:center;height:450px;width:1000px;"></div>
|
||||
<div id="log"></div>
|
||||
<script type="text/javascript">
|
||||
|
||||
var pullData = function() {
|
||||
var path = document.getElementById("path-text").value;
|
||||
var URL = "carbon/gauges/gadgets/flash/flashdata-ajaxprocessor.jsp?funcName=getResourceImpact&path=" + path;
|
||||
dataProvider.url = URL;
|
||||
dataProvider.initialize();
|
||||
var prefs = new gadgets.Prefs();
|
||||
|
||||
prefs.set("path", path);
|
||||
prefs.set("selectedFlag", true);
|
||||
gadgets.window.adjustHeight(500);
|
||||
|
||||
setTimeout("gadgets.window.adjustHeight(500)",100);
|
||||
}
|
||||
|
||||
function handleEnter(inField, e) {
|
||||
var charCode;
|
||||
var prefs = new gadgets.Prefs();
|
||||
prefs.set("path", document.getElementById("path-text").value);
|
||||
if(e && e.which){
|
||||
charCode = e.which;
|
||||
}else if(window.event){
|
||||
e = window.event;
|
||||
charCode = e.keyCode;
|
||||
}
|
||||
|
||||
if(charCode == 13) {
|
||||
pullData();
|
||||
}
|
||||
}
|
||||
|
||||
//document.write(json);
|
||||
|
||||
|
||||
var dataProvider = new wso2vis.p.ProviderGETJSON("");
|
||||
|
||||
|
||||
|
||||
var treeDiv = document.getElementById("infovis");
|
||||
var logDiv = document.getElementById("log");
|
||||
var hyperTree = new wso2vis.s.chart.infovis.HyperTree(logDiv,"infovis","Dependency Tree","Impact Analysis of resources");
|
||||
hyperTree.dataField(["children"])
|
||||
.dataLabel(["name"])
|
||||
.width(1000)
|
||||
.height(450);
|
||||
|
||||
hyperTree.load();
|
||||
|
||||
|
||||
//spaceTree.onTooltip = barTooltip;
|
||||
//spaceTree.onClick = barClick;
|
||||
|
||||
dataProvider.addDataReceiver(hyperTree);
|
||||
var prefs = new gadgets.Prefs();
|
||||
document.getElementById("path-text").value = prefs.getString("path");
|
||||
if (prefs.getBool("selectedFlag")) {
|
||||
pullData();
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
]]>
|
||||
|
||||
</Content>
|
||||
|
||||
|
||||
</Module>
|
||||
|
@ -0,0 +1,73 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>SWFObject embed by Geoff Stearns (express install) @ deconcept</title>
|
||||
<!-- SWFObject embed by Geoff Stearns geoff@deconcept.com http://blog.deconcept.com/swfobject/ -->
|
||||
<script type="text/javascript" src="swfobject.js"></script>
|
||||
<style type="text/css">
|
||||
|
||||
body {
|
||||
background-color: #eeeeee;
|
||||
font: .8em/1.3em verdana,arial,helvetica,sans-serif;
|
||||
}
|
||||
|
||||
#info {
|
||||
width: 300px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#flashcontent {
|
||||
border: solid 1px #000;
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
float: left;
|
||||
margin: 15px 20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="flashcontent">
|
||||
<strong>You need to upgrade your Flash Player</strong>
|
||||
This is replaced by the Flash content.
|
||||
Place your alternate content here and users without the Flash plugin or with
|
||||
Javascript turned off will see this. Content here allows you to leave out <code>noscript</code>
|
||||
tags. Include a link to <a href="expressinstall.html?detectflash=false">bypass the detection</a> if you wish.
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
|
||||
var so = new SWFObject("so_tester.swf", "sotester", "300", "300", "9", "#FF6600");
|
||||
so.addVariable("flashVarText", "this is passed in via FlashVars"); // this line is optional, but this example uses the variable and displays this text inside the flash movie
|
||||
so.useExpressInstall('expressinstall.swf');
|
||||
so.write("flashcontent");
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<div id="info">
|
||||
<p>
|
||||
This Flash movie was embedded using the <a href="http://blog.deconcept.com/swfobject/">SWFObject</a> embed method by <a href="http://blog.deconcept.com/">Geoff Stearns</a>.
|
||||
</p>
|
||||
<p>Other sample embeds:</p>
|
||||
<ul>
|
||||
<li><a href="swfobject.html">Basic Flash Embed with alternate content</a></li>
|
||||
<li><a href="fullpage.html">Full page Flash embed</a></li>
|
||||
<li>Basic Flash Embed with Express Install allowed</li>
|
||||
</ul>
|
||||
<p>You can also <a href="flashversion.html">view your installed Flash version</a>.</p>
|
||||
<p>
|
||||
<a href="view-source:http://blog.deconcept.com/swfobject/expressinstall.html">View source</a> (in mozilla, firefox) | <a href="swfobject_source.js">View Javascript</a>.
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://blog.deconcept.com/swfobject/swfobject1-4.zip">Download Source</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p style="clear: both;margin-left: 20px"><a href="http://validator.w3.org/check?uri=referer">Validate XHTML</a> and <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a></p>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>SWFObject embed by Geoff Stearns (show player version) @ deconcept</title>
|
||||
<!-- SWFObject embed by Geoff Stearns geoff@deconcept.com http://blog.deconcept.com/swfobject/ -->
|
||||
<script type="text/javascript" src="swfobject.js"></script>
|
||||
<style type="text/css">
|
||||
|
||||
body {
|
||||
background-color: #eeeeee;
|
||||
font: .8em/1em verdana,arial,helvetica,sans-serif;
|
||||
}
|
||||
|
||||
#info {
|
||||
width: 600px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="flashversion">
|
||||
You do not have the Flash plugin installed, or your browser does not support Javascript (you should enable it, perhaps?)
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
|
||||
var version = deconcept.SWFObjectUtil.getPlayerVersion();
|
||||
if (document.getElementById && version["major"] > 0) {
|
||||
document.getElementById('flashversion').innerHTML = "You have Flash player "+ version['major'] +"."+ version['minor'] +"."+ version['rev'] +" installed.";
|
||||
}
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
|
||||
<div id="info">
|
||||
<p>
|
||||
This page displays your current Flash player version using Javascript.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SWFObject embed by Geoff Stearns (full page) @ deconcept</title>
<!-- SWFObject embed by Geoff Stearns geoff@deconcept.com http://blog.deconcept.com/ -->
<script type="text/javascript" src="swfobject.js"></script>
<style type="text/css">
/* hide from ie on mac \*/
html {
height: 100%;
overflow: hidden;
}
#flashcontent {
height: 100%;
}
/* end hide */
body {
height: 100%;
margin: 0;
padding: 0;
background-color: #f60;
}
</style>
</head>
<body>
<div id="flashcontent">
<strong>You need to upgrade your Flash Player</strong>
This is replaced by the Flash content.
Place your alternate content here and users without the Flash plugin or with
Javascript turned off will see this. Content here allows you to leave out <code>noscript</code>
tags. Include a link to <a href="fullpage.html?detectflash=false">bypass the detection</a> if you wish.
</div>
<script type="text/javascript">
// <![CDATA[
var so = new SWFObject("so_tester.swf", "sotester", "100%", "100%", "8", "#FF6600");
so.addVariable("flashVarText", "this is passed in via FlashVars for example only");
so.addParam("scale", "noscale");
so.write("flashcontent");
// ]]>
</script>
</body>
</html>
|
@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>SWFObject embed by Geoff Stearns (basic) @ deconcept</title>
|
||||
<!-- SWFObject embed by Geoff Stearns geoff@deconcept.com http://blog.deconcept.com/swfobject/ -->
|
||||
<script type="text/javascript" src="swfobject.js"></script>
|
||||
<style type="text/css">
|
||||
|
||||
body {
|
||||
background-color: #eeeeee;
|
||||
font: .8em/1.3em verdana,arial,helvetica,sans-serif;
|
||||
}
|
||||
|
||||
#info {
|
||||
width: 300px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#flashcontent {
|
||||
border: solid 1px #000;
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
float: left;
|
||||
margin: 15px 20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="flashcontent">
|
||||
<strong>You need to upgrade your Flash Player</strong>
|
||||
This is replaced by the Flash content.
|
||||
Place your alternate content here and users without the Flash plugin or with
|
||||
Javascript turned off will see this. Content here allows you to leave out <code>noscript</code>
|
||||
tags. Include a link to <a href="swfobject.html?detectflash=false">bypass the detection</a> if you wish.
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
|
||||
var so = new SWFObject("so_tester.swf", "sotester", "300", "300", "9", "#FF6600");
|
||||
so.addVariable("flashVarText", "this is passed in via FlashVars for example only"); // this line is optional, but this example uses the variable and displays this text inside the flash movie
|
||||
so.write("flashcontent");
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<div id="info">
|
||||
<p>
|
||||
This Flash movie was embedded using the <a href="http://blog.deconcept.com/swfobject/">SWFObject</a> embed method by <a href="http://blog.deconcept.com/">Geoff Stearns</a>.
|
||||
</p>
|
||||
<p>Other sample embeds:</p>
|
||||
<ul>
|
||||
<li>Basic Flash Embed with alternate content</li>
|
||||
<li><a href="fullpage.html">Full page Flash embed</a></li>
|
||||
<li><a href="expressinstall.html">Basic Flash Embed with Express Install allowed</a></li>
|
||||
</ul>
|
||||
<p>You can also <a href="flashversion.html">view your installed Flash version</a>.</p>
|
||||
<p>
|
||||
<a href="view-source:http://blog.deconcept.com/swfobject/swfobject.html">View source</a> (in mozilla, firefox) | <a href="swfobject_source.js">View Javascript</a>.
|
||||
</p>
|
||||
<p>
|
||||
<a href="http://blog.deconcept.com/swfobject/swfobject1-4.zip">Download Source</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p style="clear: both;margin-left: 20px"><a href="http://validator.w3.org/check?uri=referer">Validate XHTML</a> and <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a></p>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
|
||||
xmlns:scxml="http://www.w3.org/2005/07/scxml">
|
||||
<xs:import namespace="http://www.w3.org/2005/07/scxml" schemaLocation="scxml.xsd"/>
|
||||
<xs:element name="aspect" type="aspectType"/>
|
||||
<xs:complexType name="aspectType">
|
||||
<xs:sequence>
|
||||
<xs:element name="configuration">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="lifecycle">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="scxml:scxml"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="audit" use="optional" type="xs:boolean"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="type" use="required" type="xs:NCName"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="class" use="required"/>
|
||||
<xs:attribute name="name" use="required" type="xs:NCName"/>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
@ -0,0 +1,6 @@
|
||||
<%@ page import="java.io.*,java.util.*" %>
|
||||
<%
|
||||
// New location to be redirected
|
||||
response.setStatus(response.SC_MOVED_TEMPORARILY);
|
||||
response.setHeader("Location", "/store");
|
||||
%>
|
@ -0,0 +1,282 @@
|
||||
/* ---------------- template styles ------------------------- */
|
||||
|
||||
table#main-table td#header {
|
||||
background-image:none !important;
|
||||
border-bottom:1px solid #CCC;
|
||||
}
|
||||
|
||||
table#main-table td#menu-panel {
|
||||
border-right: solid 1px #6F97CD;
|
||||
/*background-image: url(../images/app-server-menu-panel-bg.gif);*/
|
||||
background-position: right top;
|
||||
background-repeat: repeat-y;
|
||||
}
|
||||
|
||||
|
||||
/* ---------------- header styles ------------------ */
|
||||
div#header-div {
|
||||
background-color:#222222;
|
||||
background-image:none !important;
|
||||
}
|
||||
|
||||
div#header-div div.left-logo {
|
||||
background-image: url(../images/logo.png);
|
||||
width: 200px;
|
||||
margin:12px 20px !important;
|
||||
}
|
||||
|
||||
div#header-div div.right-logo {
|
||||
/*background-image: url( ../images/wsas-mgt-logo.gif);*/
|
||||
color: #FFF;
|
||||
font-family:Arial;
|
||||
font-size:12px;
|
||||
padding:0px !important;
|
||||
margin:18px !important;
|
||||
|
||||
}
|
||||
|
||||
div#header-div div.header-links {
|
||||
margin-top:0px;
|
||||
float:right !important;
|
||||
}
|
||||
div#header-div div.header-links div.right-links {
|
||||
margin-right: 0px;
|
||||
height: 35px;
|
||||
padding-top: 0px;
|
||||
}
|
||||
div#header-div div.header-links div.right-links ul {
|
||||
|
||||
background-position:left top;
|
||||
background-repeat:repeat-x;
|
||||
padding-top: 9px;
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
|
||||
/* ------------- menu styles ---------------------- */
|
||||
div#menu {
|
||||
}
|
||||
|
||||
div#menu ul.main {
|
||||
}
|
||||
|
||||
div#menu ul.main li {
|
||||
}
|
||||
|
||||
div#menu ul.main li.normal {
|
||||
}
|
||||
|
||||
div#menu ul.main li a.menu-home {
|
||||
color: #0067B1;
|
||||
background-image: none;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
div#menu ul.main li a.menu-home:hover {
|
||||
color: #f47b20;
|
||||
background-image: none;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
div#menu ul.main li.menu-header {
|
||||
/*background-image: url(../images/app-server-menu-header.png);*/
|
||||
background-image:none !important;
|
||||
background-position: left bottom;
|
||||
background-repeat: repeat-x;
|
||||
|
||||
border-top: 1px solid #CCC;
|
||||
border-bottom: 1px solid #CCC;
|
||||
color:#502D16 !important;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
background-color:#F3f3f3;
|
||||
font-weight:bold;
|
||||
text-transform:uppercase;
|
||||
}
|
||||
|
||||
div#menu ul.main li.menu-header img {
|
||||
margin-right:-14px;
|
||||
margin-top:7px;
|
||||
}
|
||||
div#menu ul.main li a.menu-default {
|
||||
|
||||
}
|
||||
|
||||
div#menu ul.main li a.menu-default:hover {
|
||||
background-color: #ffffff;
|
||||
border-bottom: solid 1px #CCC;
|
||||
border-top: solid 1px #CCC;
|
||||
color: #00447C;
|
||||
|
||||
}
|
||||
|
||||
div#menu ul.sub {
|
||||
}
|
||||
div#menu ul.main li.menu-disabled-link {
|
||||
background-color: #E9EDF7;
|
||||
}
|
||||
|
||||
/* -------------- child no-01 styles -------------- */
|
||||
|
||||
div#menu ul.sub li.normal {
|
||||
|
||||
}
|
||||
|
||||
div#menu ul.sub li a.menu-default {
|
||||
}
|
||||
|
||||
/* ----------- child no-01 (disabled) styles ------------------- */
|
||||
|
||||
div#menu ul.sub li a.menu-disabled-link {
|
||||
}
|
||||
|
||||
div#menu ul.sub li a.menu-disabled-link:hover {
|
||||
}
|
||||
|
||||
/* -------------- child no-02 styles -------------- */
|
||||
|
||||
div#menu ul.sub li.normal ul.sub li a.menu-default {
|
||||
|
||||
}
|
||||
|
||||
/* -------------- child no-03 styles -------------- */
|
||||
|
||||
div#menu ul.sub li.normal ul.sub li.normal ul.sub li a.menu-default {
|
||||
}
|
||||
|
||||
/* ------------- footer styles -------------------- */
|
||||
|
||||
div#footer-div div.footer-content div.poweredby {
|
||||
/*background-image: url( ../images/axis2-powered.gif);*/
|
||||
}
|
||||
|
||||
/* ---- login styles ----- */
|
||||
|
||||
|
||||
/* --------------- table styles -------------------- */
|
||||
|
||||
.tableOddRow{background-color: white;}
|
||||
.tableEvenRow{background-color: #eeeffb;}
|
||||
|
||||
.button:hover{
|
||||
/*background-image:url(../images/wsas-button-bg-hover.gif);
|
||||
border:solid 1px #9D9FA1;*/
|
||||
}
|
||||
|
||||
/* -------------- work area ---------------------- */
|
||||
|
||||
table#main-table td#middle-content {
|
||||
background-color:none !important;
|
||||
background:transparent !important;
|
||||
}
|
||||
div#middle {
|
||||
background-color:#ffffff;
|
||||
}
|
||||
div#middle h2 {
|
||||
margin-top:5px;
|
||||
}
|
||||
div#middle div#workArea {
|
||||
background-color:none !important;
|
||||
background:transparent !important;
|
||||
padding:10px;
|
||||
}
|
||||
div#workArea table.styledLeft thead th {
|
||||
/*background-image:url("../images/app-server-table-header.gif");*/
|
||||
background-image:none;
|
||||
background-color: #efd7a5;
|
||||
border-bottom:1px solid #CCC;
|
||||
border-left:1px solid #CCC;
|
||||
border-right:1px solid #CCC;
|
||||
border-top:1px solid #CCC;
|
||||
height:27px;
|
||||
line-height:25px;
|
||||
text-transform:uppercase;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
div#workArea table.styledLeft .tableOddRow {
|
||||
background-color:none !important;
|
||||
}
|
||||
|
||||
div#workArea table.styledLeft .tableEvenRow {
|
||||
background-color:none !important;
|
||||
background:none;
|
||||
}
|
||||
|
||||
|
||||
div#workArea table.styledLeft tbody tr td.middle-header {
|
||||
/*background-image:url("../images/app-server-table-header.gif");*/
|
||||
border-bottom:1px solid #A7A9AC;
|
||||
border-left:1px solid #cccccc;
|
||||
border-right:1px solid #cccccc;
|
||||
border-top:1px solid #cccccc;
|
||||
height:22px;
|
||||
line-height:22px;
|
||||
}
|
||||
div#workArea table.styledLeft tbody tr td.buttonRow {
|
||||
/*background-image:url("../images/app-server-buttonRow-bg.gif");*/
|
||||
background-color: #F5F5F6;
|
||||
padding-bottom:5px;
|
||||
padding-top:5px;
|
||||
}
|
||||
.button {
|
||||
/*background-image:url("../images/app-server-button-bg.gif");*/
|
||||
background-position:left bottom;
|
||||
border:1px solid #666666;
|
||||
padding:2px 5px;
|
||||
}
|
||||
|
||||
/** TEAGUE EDITS FOR JAGGERY SERVER ADMIN **/
|
||||
|
||||
div#header-div {
|
||||
height: 52px !important;
|
||||
}
|
||||
|
||||
.left-logo img {
|
||||
display:none !important;
|
||||
}
|
||||
|
||||
body {
|
||||
/*background-image:url("../images/bg.png");*/
|
||||
font-family:Arial !important;
|
||||
}
|
||||
|
||||
div.right-links ul a {
|
||||
|
||||
}
|
||||
a {
|
||||
color:#502D16 !important;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color:#784421 !important;
|
||||
}
|
||||
|
||||
table#main-table td#menu-panel {
|
||||
border-right: 1px solid #784421;
|
||||
}
|
||||
|
||||
div#middle h2 {
|
||||
color:#502D16 !important;
|
||||
font-weight:bold;
|
||||
padding-bottom:10px;
|
||||
border-bottom:1px solid #CCC !important;
|
||||
}
|
||||
div#features tr.feature td {
|
||||
border-top:1px solid #CCC;
|
||||
}
|
||||
|
||||
div#features tr.feature-top td {
|
||||
border-top:0px;
|
||||
}
|
||||
#main-table {
|
||||
background-color:none !important;
|
||||
|
||||
}
|
||||
|
||||
#middle {
|
||||
background:transparent !important;
|
||||
background-color:none !important;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
|
After Width: | Height: | Size: 4.0 KiB |