+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.node</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.node.resources</artifactId>
- <version>${node.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.node.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
-
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="node"/>
- <property name="url" value="/src/app/node"/>
- <property name="directory" value="/node"/>
- <property name="requireJs" value="app/node/nodes.module"/>
- <property name="angularJs" value="app.nodes"/>
- </bean>
-</blueprint>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.common.sigmatopology</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.common.sigmatopology.resources</artifactId>
- <version>${yangvisualizer.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.common.sigmatopology.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="sigmatopology"/>
- <property name="url" value="/src/common/sigmatopology"/>
- <property name="directory" value="/sigmatopology"/>
- <property name="requireJs" value="common/sigmatopology/sigmatopology.module"/>
- <property name="angularJs" value="app.common.sigmatopology"/>
- </bean>
-</blueprint>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.topology</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.topology.resources</artifactId>
- <version>${topology.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.topology.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
-
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="topology"/>
- <property name="url" value="/src/app/topology"/>
- <property name="directory" value="/topology"/>
- <property name="requireJs" value="app/topology/topology.module"/>
- <property name="angularJs" value="app.topology"/>
- </bean>
-</blueprint>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.yangman</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.yangman.resources</artifactId>
- <version>${yangman.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.yangman.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="yangman"/>
- <property name="url" value="/src/app/yangman"/>
- <property name="directory" value="/yangman"/>
- <property name="requireJs" value="app/yangman/main"/>
- <property name="angularJs" value="app.yangman"/>
- </bean>
-</blueprint>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.yangui</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.yangui.resources</artifactId>
- <version>${yangui.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.yangui.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="yangui"/>
- <property name="url" value="/src/app/yangui"/>
- <property name="directory" value="/yangui"/>
- <property name="requireJs" value="app/yangui/main"/>
- <property name="angularJs" value="app.yangui"/>
- </bean>
-</blueprint>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.common.yangutils</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.common.yangutils.resources</artifactId>
- <version>${yangui.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.common.yangutils.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="yangutils"/>
- <property name="url" value="/src/common/yangutils"/>
- <property name="directory" value="/yangutils"/>
- <property name="requireJs" value="common/yangutils/yangutils.module"/>
- <property name="angularJs" value="app.common.yangUtils"/>
- </bean>
-</blueprint>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>bundles</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.yangvisualizer</artifactId>
- <packaging>bundle</packaging>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux.yangvisualizer.resources</artifactId>
- <version>${yangvisualizer.resources.version}</version>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.opendaylight.dlux</groupId>
- <includeArtifactIds>dlux.yangvisualizer.resources</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
- </scm>
-</project>
+++ /dev/null
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="yangvisualizer"/>
- <property name="url" value="/src/app/yangvisualizer"/>
- <property name="directory" value="/yangvisualizer"/>
- <property name="requireJs" value="app/yangvisualizer/yangvisualizer.module"/>
- <property name="angularJs" value="app.yangvisualizer"/>
- </bean>
-</blueprint>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.common.sigmatopology.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Sigma topology Module Resources</description>
- <packaging>jar</packaging>
-
-</project>
+++ /dev/null
-var modules = [\r
- 'common/sigmatopology/sigmatopology.module',\r
- 'sigma',\r
- 'sigma-parsers-gexf',\r
- 'sigma-forceAtlas2',\r
- 'sigma-dragNodes',\r
- 'sigma-customShapes'\r
-];\r
-\r
-define(modules, function(topologyModule) {\r
- topologyModule.directive('sigmaTopology', ['$timeout',function($timeout) {\r
- // constants\r
- return {\r
- restrict: 'E',\r
- scope: {\r
- topologyData: '=topologyData',\r
- topologyOptions: '=topologyOptions',\r
- topologyCustfunc: '=topologyCustfunc',\r
- panel: '=panel',\r
- customShapes: '=customShapes',\r
- dragNodes: '=dragNodes',\r
- settings: '=settingsSigma',\r
- settingsAtlas: '=settingsAtlas',\r
- triggerResizeSigma: '=triggerResizeSigma'\r
- },\r
- templateUrl: 'src/common/sigmatopology/sigma.tpl.html',\r
- link: function($scope, iElm, iAttrs, controller) {\r
-\r
- var sigmaIstance = null,\r
- getSlowDownNum = function(numOfNodes){\r
- // return 1/numOfNodes;\r
- x = 10;\r
- switch(true){\r
- case (numOfNodes < 20):\r
- x = 15;\r
- break;\r
- case (numOfNodes < 50):\r
- x = 5;\r
- break;\r
- case (numOfNodes < 100):\r
- x = 2;\r
- break;\r
- case (numOfNodes < 250):\r
- x = 1;\r
- break;\r
- case (numOfNodes < 500):\r
- x = 0.8;\r
- break;\r
- case (numOfNodes < 1000):\r
- x = 0.4;\r
- break;\r
- case (numOfNodes < 2000):\r
- x = 0.3;\r
- break;\r
- // case (numOfNodes < 5000):\r
- // x = 0.1;\r
- // break;\r
- case (numOfNodes < 10000):\r
- x = 0.1;\r
- break;\r
- }\r
-\r
-\r
- return x;\r
- },\r
- Sigma = sigma,\r
- defaulSettings = {\r
- defaultLabelColor: '#fff',\r
- doubleClickEnabled: false,\r
- labelThreshold: 8\r
- };\r
-\r
- $scope.$watch('topologyData', function (ntdata) {\r
-\r
- if(ntdata){\r
-\r
- $timeout(function(){\r
-\r
- if ( sigmaIstance !== null ) {\r
- sigmaIstance.kill();\r
- }\r
- var timeToStopAtlas;\r
-\r
- // Instantiate sigma:\r
- Sigma.renderers.def = Sigma.renderers.canvas;\r
-\r
- Sigma.prototype.resetZoom = function(camera){\r
- if(typeof camera == "undefined"){\r
- camera = this.cameras[0];\r
- }\r
- camera.ratio = 1;\r
- camera.x = 0;\r
- camera.y = 0;\r
- this.refresh();\r
- };\r
-\r
- // console.info('sigma topology data', ntdata, $scope.topologyData);\r
- sigmaIstance = new Sigma({\r
- graph: {\r
- nodes: $scope.topologyData.nodes ? $scope.topologyData.nodes : [],\r
- edges: $scope.topologyData.links\r
- },\r
- container: 'graph-container',\r
- settings: $scope.settings ? $scope.settings : defaulSettings\r
- });\r
-\r
- if ( $scope.settingsAtlas ) {\r
- $scope.settingsAtlas.slowDown = getSlowDownNum($scope.topologyData.nodes.length);\r
- }\r
-\r
- var defaultConfigAtlas = {\r
- adjustSizes: true,\r
- // scalingRatio: 10,\r
- gravity: 1,\r
- slowDown: getSlowDownNum($scope.topologyData.nodes.length)\r
- },\r
- configAtlas = $scope.settingsAtlas ? $scope.settingsAtlas : defaultConfigAtlas;\r
-\r
- if ( $scope.customShapes ) {\r
- CustomShapes.init(sigmaIstance);\r
- sigmaIstance.refresh();\r
- }\r
-\r
- var dragListener = null;\r
-\r
- if ( $scope.dragNodes ) {\r
- dragListener = Sigma.plugins.dragNodes(sigmaIstance, sigmaIstance.renderers[0]);\r
- }\r
-\r
- if ( !$scope.topologyData.disabledAtlas ) {\r
- console.log('atlas');\r
- sigmaIstance.startForceAtlas2(configAtlas);\r
- }\r
-\r
- if ( $scope.topologyCustfunc && angular.isFunction($scope.topologyCustfunc) ) {\r
- $scope.topologyCustfunc(sigmaIstance, getSlowDownNum, dragListener);\r
- }\r
-\r
- }, ntdata.delay ? ntdata.delay : 0);\r
-\r
- }\r
- });\r
-\r
- $scope.$watch('triggerResizeSigma', function () {\r
- var topoData = {\r
- nodes: [],\r
- links: []\r
- };\r
-\r
- if ( sigmaIstance !== null ) {\r
- topoData.nodes = sigmaIstance.graph.nodes();\r
- topoData.links = sigmaIstance.graph.edges();\r
- sigmaIstance.kill();\r
- }\r
-\r
- // Instantiate sigma:\r
- Sigma.renderers.def = Sigma.renderers.canvas;\r
-\r
- sigmaIstance = new Sigma({\r
- graph: {\r
- nodes: topoData ? topoData.nodes : [],\r
- edges: topoData ? topoData.links : []\r
- },\r
- container: 'graph-container',\r
- settings: $scope.settings ? $scope.settings : defaulSettings\r
- });\r
-\r
-\r
-\r
- if ( $scope.customShapes ) {\r
- CustomShapes.init(sigmaIstance);\r
- sigmaIstance.refresh();\r
- }\r
-\r
- var dragListener = null;\r
-\r
- if ( $scope.dragNodes ) {\r
- dragListener = Sigma.plugins.dragNodes(sigmaIstance, sigmaIstance.renderers[0]);\r
- }\r
-\r
- if ( $scope.topologyCustfunc && angular.isFunction($scope.topologyCustfunc) ) {\r
- var resize = true;\r
- $scope.topologyCustfunc(sigmaIstance, getSlowDownNum, dragListener, resize);\r
- }\r
-\r
- });\r
- }\r
- };\r
- }]);\r
-});\r
+++ /dev/null
-<div id="graph-container" class="col-md-12"></div>
\ No newline at end of file
+++ /dev/null
-define(['angularAMD', 'Restangular', 'common/config/env.module'], function(ng) {
- var topology = angular.module('app.common.sigmatopology', ['restangular', 'config']);
-
- return topology;
-});
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.common.yangutils.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Common Yangutils Module Resources</description>
- <packaging>jar</packaging>
-
-</project>
+++ /dev/null
-define([],
-function () {
- 'use strict';
-
- return {
- NODE_UI_DISPLAY: 1,
- NODE_ALTER: 2,
- NODE_CONDITIONAL: 3,
- NODE_RESTRICTIONS: 4,
- NODE_LINK: 5,
- NODE_LINK_TARGET: 6,
- LOCALE_PREFIX: 'YANGUI_FORM_',
- EV_SRC_MAIN: 'EV_SRC_MAIN',
- EV_FILL_PATH: 'EV_FILL_PATH',
- EV_LIST_CHANGED: 'EV_LIST_CHANGED',
- EV_PARAM_EDIT_SUCC: 'EV_PARAM_EDIT_SUCC',
- MPPREFIX: 'yang-ext:mount',
- NULL_DATA: null,
- ADVANCED_FILTERING_TYPES: {
- 'number': ['=', '>', '>=', '<', '<=', 'range'],
- 'string': ['=', 'contains', 'regExp'],
- },
- ALLOWED_LEAF_TYPES_FOR_FILTER: ['string', 'uint32', 'uint8', 'decimal64', 'int16', 'int32', 'int64', 'int8',
- 'uint16', 'uint64', 'union', 'bits', 'leafref', 'identityref'],
- ALLOWED_NODE_TYPES_FOR_FILTER: ['case', 'choice', 'container', 'input', 'leaf', 'output', 'rpc'],
- DISPLAY_TYPE_REQ_DATA: 'req-data',
- DISPLAY_TYPE_FORM: 'form',
- DATA_STORE_CONFIG: 'config',
- DATA_STORE_OPERATIONAL: 'operational',
- DATA_STORE_OPERATIONS: 'operations',
- NODE_RPC: 'rpc',
- OPERATION_GET: 'GET',
- OPERATION_PUT: 'PUT',
- OPERATION_DELETE: 'DELETE',
- OPERATION_POST: 'POST',
- REQUEST_DATA_TYPE_RECEIVED: 'RECEIVED',
- ICON_EXPAND_ADD: 'add',
- ICON_COLLAPSE_REMOVE: 'remove',
- ICON_KEYBOARD_ARROW_RIGHT: 'keyboard_arrow_right',
- EXPAND_LEVEL_THREE: '3',
- COLLECTION_CHECK_ARRAY: ['sentData', 'receivedData', 'path', 'collection', 'method', 'status', 'name'],
- EV_REFRESH_LIST_INDEX: 'EV_REFRESH_LIST_INDEX',
- YANGMAN_DISABLE_ADDING_LIST_ELEMENT: 'YANGMAN_DISABLE_ADDING_LIST_ELEMENT',
- YANGMAN_MODULE_D_INIT: 'YANGMAN_MODULE_D_INIT',
- YANGMAN_GET_API_TREE_DATA: 'YANGMAN_GET_API_TREE_DATA',
- YANGMAN_SET_API_TREE_DATA: 'YANGMAN_SET_API_TREE_DATA',
- YANGMAN_SET_LOADING_BOX: 'YANGMAN_SET_LOADING_BOX',
- YANGMAN_SHOW_TOAST: 'YANGMAN_SHOW_TOAST',
- YANGMAN_SET_MODULE_LIST_TITLE: 'YANGMAN_SET_MODULE_LIST_TITLE',
- YANGMAN_SET_CODEMIRROR_DATA: 'YANGMAN_SET_CODEMIRROR_DATA_',
- YANGMAN_GET_CODEMIRROR_DATA: 'YANGMAN_GET_CODEMIRROR_DATA_',
- SET_SEL_OPERATIONS: 'SET_SEL_OPERATIONS',
- YANGMAN_HEADER_INIT: 'YANGMAN_HEADER_INIT',
- YANGMAN_FILL_NODE_FROM_REQ: 'YANGMAN_FILL_NODE_FROM_REQ',
- YANGMAN_EXECUTE_WITH_DATA: 'YANGMAN_EXECUTE_WITH_DATA',
- YANGMAN_DESELECT_REQUESTS: 'YANGMAN_DESELECT_REQUESTS',
- YANGMAN_REFRESH_COLLECTIONS: 'YANGMAN_REFRESH_COLLECTIONS',
- YANGMAN_REFRESH_HISTORY: 'YANGMAN_REFRESH_HISTORY',
- YANGMAN_SAVE_EXECUTED_REQUEST: 'YANGMAN_SAVE_EXECUTED_REQUEST',
- YANGMAN_SELECT_THE_NEWEST_REQUEST: 'YANGMAN_SELECT_THE_NEWEST_REQUEST',
- YANGMAN_SAVE_REQUEST_TO_COLLECTION: 'YANGMAN_SAVE_REQUEST_TO_COLLECTION',
- YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS: 'YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS',
- YANGMAN_SET_ERROR_DATA: 'YANGMAN_SET_ERROR_DATA',
- YANGMAN_SET_ERROR_MESSAGE: 'YANGMAN_SET_ERROR_MESSAGE',
- YANGMAN_EXECUTING_REQUEST_PROGRESS_START: 'YANGMAN_EXECUTING_REQUEST_PROGRESS_START',
- YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP: 'YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP',
- YANGMAN_GET_CODEMIRROR_DATA_RECEIVED: 'YANGMAN_GET_CODEMIRROR_DATA_RECEIVED',
- YANGMAN_GET_CODEMIRROR_DATA_SENT: 'YANGMAN_GET_CODEMIRROR_DATA_SENT',
- YANGMAN_SET_CODEMIRROR_DATA_RECEIVED: 'YANGMAN_SET_CODEMIRROR_DATA_RECEIVED',
- YANGMAN_SET_CODEMIRROR_DATA_SENT: 'YANGMAN_SET_CODEMIRROR_DATA_SENT',
- YANGMAN_ERROR_EMPTY_IDENTIFIERS: 'YANGMAN_ERROR_EMPTY_IDENTIFIERS',
- YANGMAN_NO_MOUNT_POINT: 'YANGMAN_NO_MOUNT_POINT',
- YANGMAN_CUST_MOUNT_POINTS: 'YANGMAN_CUST_MOUNT_POINTS',
- YANGMAN_CANCEL_MP: 'YANGMAN_CANCEL_MP',
- YANGMAN_MOUNT_POINT: 'YANGMAN_MOUNT_POINT',
- SET_SCOPE_TREE_ROWS: 'SET_SCOPE_TREE_ROWS',
- TREE_ROWS: 'tree_rows',
- };
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function ApiBuilderService(ArrayUtilsService, PathUtilsService, NodeUtilsService, YangUtilsRestangularService,
- CustomFuncService){
-
- var service = {
- Api: Api,
- SubApi: SubApi,
- processAllRootNodes: processAllRootNodes,
- processSingleRootNode: processSingleRootNode,
- },
- storageOperations = {
- config: ['GET', 'PUT', 'POST', 'DELETE'],
- operational: ['GET'],
- operations: ['POST'],
- },
- nodePathStringCreator = {
- list: function (node, pathstr) {
- return pathstr + addNodePathStr(node) + '/' + (node.refKey.length ?
- (getKeyIndentifiers(node.refKey).join('/') + '/') : '');
- },
- container: function (node, pathstr) {
- return pathstr + addNodePathStr(node) + '/';
- },
- rpc: function (node, pathstr) {
- return pathstr + addNodePathStr(node) + '/';
- },
- };
-
- return service;
-
- /**
- * Base Api object
- * @param basePath
- * @param module
- * @param revision
- * @param subApis
- * @constructor
- */
- function Api(basePath, module, revision, subApis) {
- this.basePath = basePath;
- this.module = module;
- this.revision = revision;
- this.subApis = subApis || [];
-
- this.addSubApis = function (subApis) {
- var self = this;
- subApis.forEach(function (sa) {
- sa.parent = self;
- self.subApis.push(sa);
- });
- };
- }
-
- /**
- * Base SubApi object
- * @param pathTemplateString
- * @param operations
- * @param node
- * @param storage
- * @param parent
- * @constructor
- */
- function SubApi(pathTemplateString, operations, node, storage, parent) {
- this.node = node;
- this.pathTemplateString = pathTemplateString;
- this.operations = operations;
- this.storage = storage;
- this.custFunct = [];
- this.parent = parent ? parent : null;
-
- this.pathArray = (function (st, path) {
- var pathString = (st ? st + '/' : '') + path;
- return PathUtilsService.translate(pathString);
- })(this.storage, this.pathTemplateString);
-
- this.equals = function (pathArray, compareIdentifierValues) {
- return this.pathArray.every(function (pa, i) {
- pa.equals(pathArray[i], compareIdentifierValues);
- });
- };
-
- this.buildApiRequestString = function () {
- return PathUtilsService.translatePathArray(this.pathArray).join('/');
- };
-
- this.addCustomFunctionality = function (label, callback, viewStr, hideButtonOnSelect) {
- var funct = CustomFuncService.createNewFunctionality(label, this.node, callback, viewStr, hideButtonOnSelect);
-
- if (funct) {
- this.custFunct.push(funct);
- }
- };
-
- this.clone = function (options) {
- var getOption = function (optName) {
- var res = null;
- if (options) {
- res = options[optName] || null;
- }
- return res;
- },
- clone = new SubApi(getOption('pathTemplateString') || this.pathTemplateString,
- getOption('operations') || this.operations,
- getOption('withoutNode') ? null : this.node,
- getOption('storage') || this.storage,
- getOption('parent') || this.parent);
-
- if (getOption('clonePathArray')) {
- clone.pathArray = this.pathArray.map(function (pe) {
- return pe.clone();
- });
- }
-
- return clone;
- };
- }
-
- // TODO: add function's description
- function removeDuplicatedApis(apis) {
- var toRemove = [],
- sortApisByRevision = function (a, b) {
- var dateA = new Date(a.revision + 'Z'),
- dateB = new Date(b.revision + 'Z');
-
- return dateB - dateA;
- };
-
- apis.forEach(function (a) {
- if (toRemove.indexOf(a) === -1) {
- var sortedApis = apis.filter(function (af) {
- return a.module === af.module;
- }).sort(sortApisByRevision);
-
- toRemove = toRemove.concat(sortedApis.slice(1));
- }
- });
-
- toRemove.forEach(function (a) {
- apis.splice(apis.indexOf(a), 1);
- });
-
- return apis;
- }
-
- // TODO: add function's description
- function isConfigNode(node) {
- var result = false;
-
- if (node.hasOwnProperty('isConfigStm')) {
- result = node.isConfigStm;
- } else if (node.parent) {
- result = isConfigNode(node.parent);
- }
-
- return result;
- }
-
- // TODO: add function's description
- function addNodePathStr(node) {
- return (!node.parent || (node.parent.module !== node.module) ? node.module + ':' : '') + node.label;
- }
-
- // TODO: add function's description
- function getBasePath() {
- return YangUtilsRestangularService.configuration.baseUrl + '/restconf/';
- }
-
- // TODO: add function's description
- function getApiByModuleRevision(apis, module, revision) {
- return apis.filter(function (a) {
- return a.module === module && a.revision === revision;
- })[0];
- }
-
- // TODO: add function's description
- function getKeyIndentifiers(keys) {
- return keys.map(function (k) {
- return '{' + k.label + '}';
- });
- }
-
- // TODO: add function's description
- function getStoragesByNodeType(node) {
- var storages = [];
- if (NodeUtilsService.isRootNode(node.type)) {
- if (node.type === 'rpc') {
- storages.push('operations');
- } else {
- storages.push('operational');
- if (isConfigNode(node)) {
- storages.push('config');
- }
- }
- }
-
- return storages;
- }
-
- // TODO: add function's description
- function getOperationsByStorage(storage) {
- var operations = [];
- if (storageOperations.hasOwnProperty(storage)) {
- operations = storageOperations[storage];
- }
-
- return operations;
- }
-
- // TODO: add function's description
- function createSubApis(node, pathstr) {
- var storages = getStoragesByNodeType(node);
-
- return storages.map(function (storage) {
- var subApi = new SubApi(pathstr, getOperationsByStorage(storage), node, storage);
- return subApi;
- });
- }
-
- // TODO: add function's description
- function nodeChildrenProcessor(node, pathstr, subApis) {
- if (NodeUtilsService.isRootNode(node.type) && nodePathStringCreator.hasOwnProperty(node.type)) {
- var templateStr = nodePathStringCreator[node.type](node, pathstr),
- newSubApis = createSubApis(node, templateStr);
-
- ArrayUtilsService.pushElementsToList(subApis, newSubApis);
-
- node.children.forEach(function (ch) {
- nodeChildrenProcessor(ch, templateStr, subApis);
- });
- }
- }
-
- /**
- * Function for showing available apis in web browser's console
- * @param apis
- */
- function printApis(apis) {
- var co = '';
- apis.forEach(function (a) {
- a.subApis.forEach(function (sa) {
- co += (sa.storage + '/' + sa.pathTemplateString + '\n');
- });
- });
-
- }
-
- // TODO: add service's description
- function processAllRootNodes(nodes) {
- var apis = [];
-
- nodes.forEach(function (node) {
- var api = getApiByModuleRevision(apis, node.module, node.moduleRevision),
- newApi = false;
-
- if (!api) {
- api = new Api(getBasePath(), node.module, node.moduleRevision);
- newApi = true;
- }
-
- api.addSubApis(processSingleRootNode(node));
-
- if (newApi) {
- apis.push(api);
- }
- });
-
- apis = removeDuplicatedApis(apis);
-
- printApis(apis);
-
- return apis;
- }
-
- // TODO: add service's description
- function processSingleRootNode(node) {
- var templateStr = nodePathStringCreator[node.type](node, ''),
- subApis = createSubApis(node, templateStr);
-
- node.children.forEach(function (ch) {
- nodeChildrenProcessor(ch, templateStr, subApis);
- });
-
- return subApis;
- }
-
- }
-
- ApiBuilderService.$inject = ['ArrayUtilsService', 'PathUtilsService', 'NodeUtilsService',
- 'YangUtilsRestangularService', 'CustomFuncService'];
-
- return ApiBuilderService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function ArrayUtilsService(){
- var service = {
- getFirstElementByCondition: getFirstElementByCondition,
- pushElementsToList: pushElementsToList,
- };
-
- return service;
-
- // TODO: add service's description
- function getFirstElementByCondition(list, condition) {
- var selItems = list && condition ? list.filter(function (item) {
- return condition(item);
- }) : [];
- return (selItems.length ? selItems[0] : null);
- }
-
- // TODO: add service's description
- function pushElementsToList(list, listToAdd) {
- Array.prototype.push.apply(list, listToAdd);
- }
-
- }
-
- ArrayUtilsService.$inject = [];
-
- return ArrayUtilsService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function CustomFuncService(){
-
- var service = {
- createCustomFunctionalityApis: createCustomFunctionalityApis,
- createNewFunctionality: createNewFunctionality,
- getMPCustFunctionality: getMPCustFunctionality,
- };
-
- return service;
-
- /**
- * Base custom functionality object
- * @param label
- * @param node
- * @param callback
- * @param viewStr
- * @param hideButtonOnSelect
- * @constructor
- */
- function CustFunctionality(label, node, callback, viewStr, hideButtonOnSelect) {
- this.label = label;
- this.callback = callback;
- this.viewStr = viewStr;
- this.hideButtonOnSelect = hideButtonOnSelect;
-
- this.setCallback = function (callback) {
- this.callback = callback;
- };
-
- this.runCallback = function (args){
- (this.callback || angular.noop)(args);
- };
- }
-
- // TODO: add function's description
- function cmpApiToTemplatePath(subApi, templateStr) {
- var subApiStr = subApi.storage + '/' + subApi.pathTemplateString;
- return subApiStr === templateStr;
- }
-
- // TODO: add service's description
- function createNewFunctionality(label, node, callback, viewStr, hideButtonOnSelect) {
- if (node && callback) {
- return new CustFunctionality(label, node, callback, viewStr, hideButtonOnSelect);
- } else {
- console.error('no node or callback is set for custom functionality');
- }
- }
-
- // TODO: add service's description
- function getMPCustFunctionality(funcList) {
- var mpCF = funcList.filter(function (cf) {
- return cf.label === 'YANGUI_CUST_MOUNT_POINTS';
- });
-
- return mpCF[0];
- }
-
- // TODO: add service's description
- function createCustomFunctionalityApis(apis, module, revision, pathString, label,
- callback, viewStr, hideButtonOnSelect) {
- apis = apis.map(function (item) {
- if ((module ? item.module === module : true) && (revision ? item.revision === revision : true)) {
-
- item.subApis = item.subApis.map(function (subApi) {
-
- if (cmpApiToTemplatePath(subApi, pathString)) {
- subApi.addCustomFunctionality(label, callback, viewStr, hideButtonOnSelect);
- }
-
- return subApi;
- });
- }
-
- return item;
- });
- }
- }
-
- CustomFuncService.$inject = [];
-
- return CustomFuncService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function DataBackupService(){
-
- var service = {
- getToScope: getToScope,
- storedData: {},
- storeFromScope: storeFromScope,
- };
-
- return service;
-
- // TODO: add function's description
- function getKey(key) {
- return key || 'DEFAULT';
- }
-
- /**
- * Method for storing values from scope
- * @param variables
- * @param scope
- * @param key
- */
- function storeFromScope(variables, scope, key) {
- var data = {};
- key = getKey(key);
-
- variables.forEach(function (k) {
- data[k] = scope[k];
- });
- service.storedData[key] = data;
- }
-
- /**
- * Method for putting stored values to scope
- * @param variables
- * @param scope
- * @param key
- */
- function getToScope(variables, scope, key) {
- var data = {};
-
- key = getKey(key);
-
- if (service.storedData.hasOwnProperty(key)) {
- data = service.storedData[key];
-
- variables.forEach(function (k) {
- if (data.hasOwnProperty(k)) {
- scope[k] = data[k];
- } else {
- }
- });
- }
- }
- }
-
- DataBackupService.$inject = [];
-
- return DataBackupService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function EventDispatcherService(){
-
- var service = {
- broadcastHandler: {},
- dispatch: dispatch,
- registerHandler: registerHandler
- };
-
- return service;
-
- // TODO: add service's description
- function registerHandler(source, bcCallback) {
- service.broadcastHandler[source] = bcCallback;
- }
-
- // TODO: add service's description
- function dispatch() {
- var args = Array.prototype.slice.call(arguments),
- argumentList = args.slice(1),
- handler = service.broadcastHandler[arguments[0]];
-
- if (handler) {
- handler(argumentList);
- }
- }
- }
-
- EventDispatcherService.$inject = [];
-
- return EventDispatcherService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function FilterNodeWrapperService(constants){
-
- var service = {
- init: init,
- wrapForFilter: wrapForFilter,
- };
-
- return service;
-
- // TODO: add service's description
- function init(node){
-
- node.childrenFilterConditions = function (children){
- var allowedNodeTypesForFilter = constants.ALLOWED_NODE_TYPES_FOR_FILTER,
- conditionTypes = function (item){
- return allowedNodeTypesForFilter.some(function (elem){
- return elem === item.type;
- }); },
- conditionEmptyChildren = function (item){
- return item.children.some(function (child){
- return (child.type !== 'leaf-list' && child.type !== 'list');
- }); },
- conditionChildDescription = function (item){
- return !(item.children.every(function (childDes){
- return childDes.type === 'description';
- })); };
-
- return children.filter(function (item){
- if (item.parent.type === 'leaf' || item.parent.parent.type === 'leaf'){
- return true;
- } else {
- return conditionTypes(item) && conditionEmptyChildren(item) && conditionChildDescription(item);
- }
- });
- };
-
- node.getChildrenForFilter = function () {
- return node.childrenFilterConditions(node.getChildren(null, null, constants.NODE_UI_DISPLAY, null));
- };
-
- node.deepCopyForFilter = function (additionalProperties) {
- var copy = node.getCleanCopy(),
- self = this,
- allowedLeafTypesForFilter = constants.ALLOWED_LEAF_TYPES_FOR_FILTER,
-
- addFilterProps = function (childrenArray){
- if (childrenArray.type === 'leaf' && childrenArray.children && childrenArray.children.length){
- if (childrenArray.children.some(function (item){
- return item.type === 'type' && allowedLeafTypesForFilter.indexOf(item.label) !== -1;
- })){
- childrenArray.filterType = '=';
- }
- if (childrenArray.children.some(function (item){
- return item.type === 'type' && item.label === 'bits';
- })){
- childrenArray.filterBitsValue = '';
- }
- if (childrenArray.children.some(function (item){
- return item.type === 'type' && item.label === 'enumeration';
- })){
- childrenArray.filterSelectboxBitsValue = [];
- }
- }
- };
-
- additionalProperties = additionalProperties || ['pathString'];
-
- additionalProperties.forEach(function (prop) {
- if (prop !== 'children' && self.hasOwnProperty(prop) && copy.hasOwnProperty(prop) === false) {
- copy[prop] = self[prop];
- }
- });
-
- this.childrenFilterConditions(this.children).forEach(function (child) {
- var childCopy = null;
- if (child.type === 'leaf'){
- childCopy = child.deepCopy();
- } else {
- init(child);
- childCopy = child.deepCopyForFilter();
- }
-
- childCopy.parent = copy;
-
- addFilterProps(childCopy);
-
- copy.children.push(childCopy);
- });
-
- addFilterProps(copy);
-
- return copy;
- };
- }
-
- // TODO: add service's description
- function wrapForFilter(node) {
- var comparePropToElemByName = function (propName, elemName) {
- // TODO: also check by namespace - redundancy?
- return (propName.indexOf(':') > -1 ? propName.split(':')[1] : propName) === elemName;
- },
-
- wrapperFilter = {
-
- wrapFilter: function (node) {
- if (this.hasOwnProperty(node.type)) {
- this[node.type](node);
- }
- },
-
- wrapAllFilter: function (node) {
- var self = this;
- self.wrapFilter(node);
- node.children.forEach(function (child) {
- self.wrapAllFilter(child);
- });
- },
-
- leaf: function (node) {
- var auxBuildRequest = node.buildRequest,
- auxFill = node.fill,
- auxClear = node.clear,
- fnToString = function (string) {
- var valueStr = '';
- try {
- valueStr = string.toString();
- } catch (e) {
- }
- return valueStr;
- };
-
- node.expandedBits = false;
-
- node.filterRangeFrom = '';
- node.filterRangeTo = '';
-
- node.buildRequest = function (builder, req) {
- auxBuildRequest(builder, req);
- var valueStr = '';
- valueStr = fnToString(node.value);
-
- var filterTypeArray = {
- '=': function (element, filterValue, i){
- return element ? element[i] === filterValue : false;
- },
- '>': function (element, filterValue, i){
- return element ? element[i] > filterValue : false;
- },
- '>=': function (element, filterValue, i){
- return element ? element[i] >= filterValue : false;
- },
- '<': function (element, filterValue, i){
- return element ? element[i] < filterValue : false;
- },
- '<=': function (element, filterValue, i){
- return element ? element[i] <= filterValue : false;
- },
- 'contains': function (element, filterValue, i){
- return element ? element[i] && element[i].indexOf(filterValue) > -1 : false;
- },
- 'regExp': function (element, filterValue, i){
- var testRegExp = function (patternString, nodeValue) {
- var pattern = new RegExp(patternString);
- return pattern.test(nodeValue);
- };
- return element ? testRegExp(filterValue, element[i]) : false;
- },
- 'range': function (element, from, to, i){
- if (from && to){
- return element ? element[i] <= to && element[i] >= from : false;
- } else if (from){
- return element ? element[i] >= from : false;
- } else {
- return element ? element[i] <= to : false;
- }
- } };
-
- if (valueStr || (node.filterBitsValue && node.filterBitsValue !== '') ||
- (node.filterSelectboxBitsValue && node.filterSelectboxBitsValue.length) ||
- (node.filterRangeFrom && node.filterRangeFrom !== '') ||
- (node.filterRangeTo && node.filterRangeTo !== '')){
-
- var reqFilter = {};
-
- if (node.filterSelectboxBitsValue && node.filterSelectboxBitsValue.length){
- reqFilter.selectboxBitsValue = node.filterSelectboxBitsValue;
- reqFilter.getResult = function (element, filterValue, i){
- var selectSomeFun = function (filterSelectboxBitsValue, el){
- return filterSelectboxBitsValue.some(function (item){
- return item === el;
- });
- };
- return element[i] && selectSomeFun(filterValue, element[i]);
- };
- } else {
- if (node.filterBitsValue && node.filterBitsValue !== ''){
- reqFilter.bitsValue = node.filterBitsValue;
- } else {
- reqFilter.value = valueStr;
- }
-
- if (node.filterType){
- reqFilter.filterType = node.filterType;
- } else {
- reqFilter.filterType = '=';
- }
-
- if (node.filterRangeFrom){
- reqFilter.filterRangeFrom = node.filterRangeFrom;
- }
-
- if (node.filterRangeTo){
- reqFilter.filterRangeTo = node.filterRangeTo;
- }
-
- reqFilter.getFilterResult = filterTypeArray;
- }
-
- builder.insertPropertyToObj(req, node.label, reqFilter);
-
- return true;
- }
- return false;
- };
-
- node.fill = function (name, data) {
- if (data){
- if (data.hasOwnProperty('value')){
- auxFill(name, data.value);
- }
- var match = '';
-
- if (data.hasOwnProperty('filterType')){
- match = comparePropToElemByName(name, node.label);
- if (match){
- node.filterType = data.filterType;
- }
- }
- if (data.hasOwnProperty('bitsValue')){
- match = comparePropToElemByName(name, node.label);
- if (match){
- node.filterBitsValue = data.bitsValue;
- }
- }
- if (data.hasOwnProperty('selectboxBitsValue')){
- match = comparePropToElemByName(name, node.label);
- if (match){
- node.filterSelectboxBitsValue = data.selectboxBitsValue;
- }
- }
- if (data.hasOwnProperty('filterRangeFrom')){
- match = comparePropToElemByName(name, node.label);
- if (match){
- node.filterRangeFrom = data.filterRangeFrom;
- }
- }
- if (data.hasOwnProperty('filterRangeTo')){
- match = comparePropToElemByName(name, node.label);
- if (match){
- node.filterRangeTo = data.filterRangeTo;
- }
- }
- } else {
- console.error('fill data are empty');
- }
- };
-
- node.clear = function () {
- auxClear();
- node.value = '';
-
- if (node.filterType){
- node.filterType = '=';
- }
- if (node.filterBitsValue){
- node.filterBitsValue = '';
- }
- if (node.filterSelectboxBitsValue){
- node.filterSelectboxBitsValue = [];
- }
- if (node.filterRangeFrom){
- node.filterRangeFrom = '';
- }
- if (node.filterRangeTo){
- node.filterRangeTo = '';
- }
- };
-
- },
-
- type: function (node) {
- },
-
- length: function (node) {
- },
-
- range: function (node) {
- },
-
- pattern: function (node) {
- },
-
- container: function (node) {
- },
-
- rpc: function (node) {
- },
-
- input: function (node) {
- },
-
- output: function (node) {
- },
-
- case: function (node) {
- },
-
- choice: function (node) {
- },
-
- 'leaf-list': function (node) {
- },
-
- key: function (node) {
- },
-
- list: function (node) {
-
- },
-
- _listElem: function (node) {
- },
- };
-
- wrapperFilter.wrapAllFilter(node);
- }
- }
-
- FilterNodeWrapperService.$inject = ['constants'];
-
- return FilterNodeWrapperService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function ListFilteringService(FilterNodeWrapperService, RequestBuilderService){
- var wasFound,
- filterResult,
- service = {
- applyFilter: applyFilter,
- clearFilterData: clearFilterData,
- createNewFilter: createNewFilter,
- getFilterData: getFilterData,
- removeEmptyFilters: removeEmptyFilters,
- showListFilterWin: showListFilterWin,
- switchFilter: switchFilter
- };
-
- return service;
-
- // TODO: add service's description
- function removeEmptyFilters(node) {
- if (node.referenceNode && node.referenceNode.filters){
- var wasDeleted = false;
- node.referenceNode.filters = node.referenceNode.filters.filter(function (filter){
- if (filter.filteredValues && filter.filteredValues.length){
- return true;
- } else {
- wasDeleted = true;
- return false;
- }
- });
-
- if (wasDeleted){
- switchFilter(node, 0, true);
- }
- }
- }
-
- // TODO: add service's description
- function showListFilterWin(filterRootNode, node) {
- if (!node.searchedPath.length){
- getNodePathInStructure(filterRootNode, node);
- }
-
- if (!node.referenceNode){
- node.referenceNode = filterRootNode;
- node.searchedPath.forEach(function (elem){
- node.referenceNode = node.referenceNode.children[elem];
- });
- }
-
- if (!node.referenceNode.filterNodes.length){
- FilterNodeWrapperService.init(node);
- node.referenceNode.filterNodes = node.getNewFilterElement();
- }
-
- if (!(node.referenceNode.filters && node.referenceNode.filters.length)){
- node.referenceNode.filters.push({ name: 'Filter 1 name', active: 1 });
- } else {
- getFilterData(node);
- removeEmptyFilters(node);
- }
- }
-
- // TODO: add service's description
- function createNewFilter(node) {
- node.referenceNode.filters.push({
- name: 'Filter ' + (node.referenceNode.filters.length + 1) + ' name',
- active: 1
- });
-
- switchFilter(node, node.referenceNode.filters.length - 1);
- }
-
- // TODO: add service's description
- function getFilterData(node) {
- node.referenceNode.filters[node.currentFilter].filteredValues =
- node.referenceNode.filterNodes.map(function (element){
- var requestData = {};
- element.buildRequest(RequestBuilderService, requestData);
- return requestData;
- }).filter(function (item){
- return $.isEmptyObject(item) === false;
- });
- }
-
- // TODO: add service's description
- function switchFilter(node, showedFilter, fromRemoveEmptyFilters) {
- if (node.referenceNode.filters.length){
- if (!fromRemoveEmptyFilters){
- getFilterData(node);
- }
- clearFilterNodes(node);
- node.currentFilter = showedFilter;
- loadFilterNodes(node);
- } else {
- node.currentFilter = 0;
- }
- }
-
- // TODO: add service's description
- function applyFilter(node) {
- getFilterData(node);
- removeEmptyFilters(node);
-
- node.filteredListData = node.listData.slice().filter(function (element){
- return node.referenceNode.filters.filter(function (fil){
- return fil.active === 1;
- }).some(function (filter){
- return filter.filteredValues.every(function (filterValue){
- filterResult = null;
- getFilterResult(element, filterValue, node);
- return filterResult;
- });
- });
- });
-
- getActElementFilter(node);
- // node.referenceNode.filterNodes, 'node.referenceNode.filters', node.referenceNode.filters);
- }
-
- // TODO: add service's description
- function clearFilterData(node, changeAct, filterForClear, removeFilters) {
- if (filterForClear){
- filterForClear--;
- if (node.referenceNode.filters.length === 1){
- node.referenceNode.filters = [];
- node.referenceNode.filters.push({ name: 'Filter 1 name', active: 1 });
- clearFilterNodes(node);
- } else {
- node.referenceNode.filters.splice(filterForClear, 1);
- node.currentFilter = 0;
- clearFilterNodes(node);
- loadFilterNodes(node);
- }
- } else {
- if (removeFilters){
- node.referenceNode.filters = [];
- clearFilterNodes(node);
- node.currentFilter = 0;
- } else {
- node.referenceNode.filters.forEach(function (filter){
- filter.active = 2;
- });
- getFilterData(node);
- removeEmptyFilters(node);
- }
- node.filteredListData = [];
- }
-
- if (changeAct){
- getActElementFilter(node);
- }
-
- }
-
- // TODO: add function's description
- function getNodePathInStructure(filterRootNode, node) {
- var iterator = -1;
-
- if (filterRootNode !== node){
- getSearchedPath(filterRootNode);
- }
-
- // TODO: add function's description
- function getSearchedPath(parentNode){
- iterator++;
- if (parentNode.actElemStructure){
- getIndexOfSearchedNode(parentNode.actElemStructure);
- } else {
- getIndexOfSearchedNode(parentNode);
- }
- }
-
- // TODO: add function's description
- function findNodeInStructure(currentParentStructure){
- if (currentParentStructure.children.length && currentParentStructure.type !== 'leaf'){
- if (!(currentParentStructure.children.some(function (element){ return element === node; }))){
- currentParentStructure.children.forEach(function (child){
- checkHasSearchedNode(child, node);
- });
- } else {
- wasFound = true;
- }
- }
- }
-
- // TODO: add function's description
- function getIndexOfSearchedNode(parentNodeStructure) {
- parentNodeStructure.children.forEach(function (elem, index){
- wasFound = false;
- checkHasSearchedNode(elem, node);
- if (wasFound){
- node.searchedPath.push(index);
- }
- });
- if (parentNodeStructure.children[node.searchedPath[iterator]] !== node){
- getSearchedPath(parentNodeStructure.children[node.searchedPath[iterator]]);
- }
- }
-
- // TODO: add function's description
- function checkHasSearchedNode(currentParent) {
- if (currentParent === node){
- wasFound = true;
- } else {
- if (currentParent.actElemStructure){
- findNodeInStructure(currentParent.actElemStructure);
- } else {
- findNodeInStructure(currentParent);
- }
- }
- }
- }
-
- // TODO: add function's description
- function clearFilterNodes(node) {
- node.referenceNode.filterNodes.forEach(function (filterNode){
- filterNode.clear();
- });
- }
-
- // TODO: add function's description
- function loadFilterNodes(node) {
- var fillFuc = function (fillNods, prop, filVal){
- fillNods.forEach(function (filterNode){
- filterNode.fill(prop, filVal[prop]);
- });
- };
-
- if (node.referenceNode.filters[node.currentFilter].filteredValues){
- node.referenceNode.filters[node.currentFilter].filteredValues.forEach(function (item){
- Object.keys(item).forEach(function (prop) {
- fillFuc(node.referenceNode.filterNodes, prop, item);
- });
- });
- }
- }
-
- // TODO: add function's description
- function getFilterResult(element, filterValue){
- for (var i in filterValue){
- if(!filterValue[i].filterType) {
- continue;
- }
-
- if (!filterValue[i].hasOwnProperty('value') && !filterValue[i].hasOwnProperty('selectboxBitsValue') &&
- !filterValue[i].hasOwnProperty('bitsValue') && !filterValue[i].hasOwnProperty('filterRangeFrom') &&
- !filterValue[i].hasOwnProperty('filterRangeTo') && element[i]){
- getFilterResult(element[i], filterValue[i]);
- } else {
- if (filterValue[i].selectboxBitsValue && filterValue[i].selectboxBitsValue.length){
- filterResult = filterValue[i].getResult(element, filterValue[i].selectboxBitsValue, i);
- } else {
- if ((filterValue[i].filterRangeFrom && filterValue[i].filterRangeFrom !== '') ||
- (filterValue[i].filterRangeTo && filterValue[i].filterRangeTo !== '')){
- filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element, filterValue[i].filterRangeFrom, filterValue[i].filterRangeTo, i);
- } else if (filterValue[i].bitsValue && filterValue[i].bitsValue !== ''){
- filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element, filterValue[i].bitsValue, i);
- } else {
- filterResult = filterValue[i].getFilterResult[filterValue[i].filterType](element, filterValue[i].value, i);
- }
- }
- }
- }
- }
-
- // TODO: add function's description
- function getActElementFilter(node) {
- var actData = [];
-
- node.actElemIndex = 0;
- if (node.filteredListData && node.filteredListData.length){
- actData = node.filteredListData[node.actElemIndex];
- } else {
- actData = node.listData[node.actElemIndex];
- }
-
- node.actElemStructure.clear();
- Object.keys(actData).forEach(function (prop) {
- node.actElemStructure.fillListElement(prop, actData[prop]);
- });
- }
-
- }
-
- ListFilteringService.$inject = ['FilterNodeWrapperService', 'RequestBuilderService'];
-
- return ListFilteringService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function ModuleConnectorService(){
-
- var service = {
- processModuleObjs: processModuleObjs,
- __test: {
- isBuildInType: isBuildInType,
- linkFunctions: linkFunctions,
- findLinkedStatement: findLinkedStatement,
- appendChildren: appendChildren,
- searchModule: searchModule,
- applyLinks: applyLinks,
- interConnectModules: interConnectModules,
- applyModuleRevision: applyModuleRevision,
- },
- },
- linkFunctions = {
- uses: uses,
- type: type,
- };
-
- return service;
-
- // TODO: add service's description
- function processModuleObjs(modules) {
- var rootNodes = [],
- augments = [],
- connectedModules = interConnectModules(modules.slice());
-
- connectedModules.forEach(function (module) {
- rootNodes = rootNodes.concat(module.getRoots());
- augments = augments.concat(module.getAugments());
- });
-
- return { rootNodes: rootNodes, augments: augments };
- }
-
- // TODO: add function's description
- function uses(usesNode, currentModule, parentNode) {
- var targetType = 'grouping';
- return function (modules) {
- var data = findLinkedStatement(usesNode, targetType, currentModule, modules),
- node = data.node,
- module = data.module,
- changed = false;
-
- if (node && module) {
- if (usesNode.parent.children) { // if parent is node
- usesNode.parent.children.splice(usesNode.parent.children.indexOf(usesNode), 1); // delete uses node
- }
- else if (usesNode.parent._roots) { // if parent is module
- usesNode.parent._roots.splice(usesNode.parent._roots.indexOf(usesNode), 1);
- }
- for (var i = 0; i < node.children.length; i++) {
- applyLinks(node.children[i], module, modules);
- }
- appendChildren(usesNode.parent, node);
- changed = true;
- }
-
- return changed;
- };
- }
-
- // TODO: add function's description
- function type(typeNode, currentModule, parentNode) {
- var targetType = 'typedef';
-
- if (isBuildInType(typeNode.label) === false) {
- return function (modules) {
- var data = findLinkedStatement(typeNode, targetType, currentModule, modules),
- node = data.node ? data.node.getChildren('type')[0] : null,
- changed = false;
-
- if (node) {
- // delete referencing type node
-
- parentNode.children.splice(typeNode.parent.children.indexOf(typeNode), 1);
- parentNode.addChild(node);
- changed = true;
- }
-
- return changed;
- };
- } else {
- return function (modules) {
- return false;
- };
- }
- }
-
- // TODO: add function's description
- function isBuildInType(type) {
- return ['int8', 'int16', 'int32', 'int64', 'uint8', 'uint16', 'uint32', 'uint64',
- 'decimal64', 'string', 'boolean', 'enumeration', 'bits', 'binary',
- 'leafref', 'identityref', 'empty', 'union', 'instance-identifier'].indexOf(type) > -1;
- }
-
- // TODO: add function's description
- function findLinkedStatement(node, targetType, currentModule, modules) {
- var sourceNode,
- sourceModule,
- link = node.label;
-
- if (link.indexOf(':') > -1) {
- var parts = link.split(':'),
- targetImport = currentModule.getImportByPrefix(parts[0]);
-
- sourceModule = targetImport ?
- searchModule(modules, targetImport.label, targetImport.revisionDate) : null;
- sourceNode = sourceModule ? sourceModule.searchNode(targetType, parts[1]) : null;
- } else {
- sourceModule = searchModule(modules, node.module, node.moduleRevision);
- sourceNode = sourceModule ? sourceModule.searchNode(targetType, link) : null;
- }
-
- return { node: sourceNode, module: sourceModule };
- }
-
- // TODO: add function's description
- function appendChildren(targetNode, sourceNode) {
- sourceNode.children.forEach(function (child) {
- targetNode.addChild(child);
- });
- }
-
- // TODO: add function's description
- function searchModule(modules, moduleName, moduleRevision) {
- var searchResults = modules.filter(function (item) {
- return (moduleName === item._name && (moduleRevision ? moduleRevision === item._revision : true));
- }),
- targetModule = (searchResults && searchResults.length) ? searchResults[0] : null;
-
- return targetModule;
- }
-
- // TODO: add function's description
- function applyLinks(node, module, modules, parentNode) {
- var changed = false;
- if (linkFunctions.hasOwnProperty(node.type)) { // applying link function to uses.node
- changed = linkFunctions[node.type](node, module, parentNode)(modules);
- }
-
- for (var i = 0; i < node.children.length; i++) {
- if (applyLinks(node.children[i], module, modules, node)) {
- i--;
- // need to repeat current index because we are deleting uses nodes,
- // so in case there are more uses in row, it would skip second one
- }
- }
-
- return changed;
- }
-
- // TODO: add function's description
- function interConnectModules(modules) {
-
- modules.forEach(function (module) {
- module.getRoots().concat(module.getRawAugments()).forEach(function (node) {
- applyLinks(node, module, modules);
- });
- });
-
- modules.forEach(function (module) {
- var copy = null;
-
- module._roots = module.getRoots().map(function (node) {
- copy = node.deepCopy();
- return applyModuleRevision(copy, module._name, module._revision);
- });
-
- module._augments = module.getRawAugments().map(function (node) {
- copy = node.deepCopy();
- return applyModuleRevision(copy, module._name, module._revision);
- });
- });
-
- return modules;
- }
-
- // TODO: add function's description
- function applyModuleRevision(node, module, revision) {
- node.module = module;
- node.moduleRevision = revision;
-
- node.children.map(function (child) {
- return applyModuleRevision(child, module, revision);
- });
-
- return node;
- }
- }
-
- ModuleConnectorService.$inject = [];
-
- return ModuleConnectorService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function NodeUtilsService(){
-
- var service = {
- isRootNode: isRootNode,
- isOnlyOperationalNode: isOnlyOperationalNode,
- };
-
- return service;
-
- // TODO: add service's description
- function isRootNode(type) {
- return type === 'container' || type === 'list' || type === 'uses' || type === 'rpc';
- }
-
- // TODO: add service's description
- function isOnlyOperationalNode(node) {
- return node.hasOwnProperty('isConfigStm') ? node.isConfigStm !== false : true;
- }
- }
-
- NodeUtilsService.$inject = [];
-
- return NodeUtilsService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function NodeWrapperService(constants, RequestBuilderService, RestrictionsService, TypeWrapperService,
- ListFilteringService, EventDispatcherService, FilterNodeWrapperService){
-
- var service = {
- case: caseYang,
- config: config,
- container: container,
- checkKeyDuplicity: checkKeyDuplicity,
- choice: choice,
- input: input,
- key: key,
- leaf: leaf,
- 'leaf-list': leafList,
- length: length,
- list: list,
- _listElem: _listElem,
- output: output,
- pattern: pattern,
- range: range,
- rpc: rpc,
- type: type,
- wrap: wrap,
- wrapAll: wrapAll,
- __test: {
- comparePropToElemByName: comparePropToElemByName,
- equalArrays: equalArrays,
- equalListElems: equalListElems,
- parseRestrictText: parseRestrictText,
- getTypes: getTypes,
- checkListElemKeys: checkListElemKeys,
- },
- };
-
- return service;
-
- /**
- * Service for wrapping list element
- * @param node
- * @private
- */
- function _listElem(node) {
- node.refKey = [];
-
- node.listElemBuildRequest = function (builder, req) {
- var added = false,
- objToAdd = builder.createObj();
-
- node.getChildren(null, null, constants.NODE_UI_DISPLAY).forEach(function (child) {
- var childAdded = child.buildRequest(builder, objToAdd, node.module);
- added = added || childAdded;
- });
-
- if (added) {
- builder.insertObjToList(req, objToAdd);
- }
-
- return added;
- };
-
- node.fillListElement = function (name, data) {
- var filled = false;
-
- node.getChildren(null, null, constants.NODE_UI_DISPLAY).forEach(function (child) {
- var childFilled = child.fill(name, data);
- filled = filled || childFilled;
- });
-
- return filled;
- };
-
- node.isFilled = function () {
- return node.getChildren(null, null, constants.NODE_UI_DISPLAY).some(function (child) {
- return child.isFilled();
- });
- };
-
- node.clear = function () {
- var nodesToClear = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (nodesToClear.length) {
- nodesToClear.forEach(function (child) {
- child.clear();
- });
- }
- };
-
- node.children.forEach(function (child) {
- wrapAll(child);
- });
- }
-
- /**
- * Service for wrapping list yang element
- * @param node
- */
- function list(node) {
- node.refKey = [];
- node.doubleKeyIndexes = [];
- node.actElemStructure = null;
- node.actElemIndex = -1;
- node.listData = [];
- node.expanded = true;
- node.filters = [];
- node.filterNodes = [];
- node.searchedPath = [];
- node.referenceNode = null;
- node.filteredListData = [];
- node.currentFilter = 0;
-
- node.toggleExpand = function () {
- node.expanded = !node.expanded;
- };
-
- node.createStructure = function () {
- if (node.actElemStructure === null) {
- var copy = node.deepCopy(['augmentionGroups', 'augmentationId']);
- _listElem(copy);
- node.actElemStructure = copy;
- node.actElemStructure.getActElemIndex = node.getActElemIndex;
- }
- };
-
- node.getActElemIndex = function () {
- return node.actElemIndex;
- };
-
- node.addListElem = function () {
- node.createStructure();
- var newElemData = {};
- node.listData.push(newElemData);
- node.changeActElementData(node.listData.length - 1, true);
- };
-
- node.buildActElemData = function () {
- var list = [],
- result;
-
- if (node.actElemStructure) {
- node.actElemStructure.listElemBuildRequest(RequestBuilderService, list, node.module);
- result = list[0] ? list[0] : {};
- }
- return result;
- };
-
- node.changeActElementData = function (index, fromAdd) {
- var storeData = node.buildActElemData();
- node.expanded = true;
-
- if (node.actElemIndex > -1) { // we are changing already existing data
- if (node.filteredListData && node.filteredListData.length){
- node.listData[node.listData.indexOf(node.filteredListData[node.actElemIndex])] = storeData;
- node.filteredListData[node.actElemIndex] = storeData;
- if (fromAdd){
- ListFilteringService.clearFilterData(node, true, false);
- }
- } else {
- node.listData[node.actElemIndex] = storeData;
- }
- }
- node.actElemIndex = index;
-
- var actData = null;
- if (!(node.filteredListData && node.filteredListData.length)){
- actData = node.listData[node.actElemIndex];
- } else {
- actData = node.listData[node.listData.indexOf(node.filteredListData[node.actElemIndex])];
- }
-
- node.actElemStructure.clear();
- Object.keys(actData).forEach(function(prop) {
- node.actElemStructure.fillListElement(prop, actData[prop]);
- });
-
- EventDispatcherService.dispatch(constants.EV_LIST_CHANGED, node.actElemStructure);
- };
-
- node.removeListElem = function (elemIndex, fromFilter) {
-
- if (fromFilter){
- elemIndex = node.listData.indexOf(node.filteredListData[elemIndex]);
- }
-
- node.listData.splice(elemIndex, 1);
- node.actElemIndex = node.listData.length - 1;
-
- if (fromFilter){
- ListFilteringService.clearFilterData(node, true, false);
- }
-
- if (node.actElemIndex === -1) {
- node.actElemStructure = null;
- } else {
- var actData = node.listData[node.actElemIndex];
-
- node.actElemStructure.clear();
- Object.keys(actData).forEach(function(prop) {
- node.actElemStructure.fillListElement(prop, actData[prop]);
- });
- }
-
- EventDispatcherService.dispatch(constants.EV_LIST_CHANGED, node.actElemStructure);
- };
-
- node.buildRequest = function (builder, req, module) {
- var added = false;
- // store entered data
- var storeData = node.buildActElemData(),
- labelWithModule = (module !== node.module ? node.module + ':' : '') + node.label;
-
- if (node.actElemIndex > -1) {
- if (node.filteredListData && node.filteredListData.length){
- node.listData[node.listData.indexOf(node.filteredListData[node.actElemIndex])] = storeData;
- node.filteredListData[node.actElemIndex] = storeData;
- } else {
- node.listData[node.actElemIndex] = storeData;
- }
- }
-
- added = node.listData.filter(function (data) {
- return $.isEmptyObject(data) === false;
- }).length > 0;
-
- var buildedDataCopy = node.listData.slice().map(function (item) {
- var newItem = {};
- Object.keys(item).forEach(function(prop) {
- if (prop !== '$$hashKey'){
- newItem[prop] = item[prop];
- }
- });
- return newItem;
- }).filter(function (item){
- return Object.keys(item).length !== 0;
- });
-
- // check of listElems keyValues duplicity
- if (node.filteredListData && node.filteredListData.length){
- node.doubleKeyIndexes = checkKeyDuplicity(node.filteredListData, node.refKey);
- } else {
- node.doubleKeyIndexes = checkKeyDuplicity(node.listData, node.refKey);
- }
-
- if (added) {
- builder.insertPropertyToObj(req, labelWithModule, buildedDataCopy);
- }
-
- return added;
- };
-
- node.fill = function (name, array) { // data is array
-
- var match = comparePropToElemByName(name, node.label);
-
- if (match && array.length) {
- node.createStructure();
- node.listData = array.slice();
- node.actElemIndex = node.listData.length - 1;
-
- Object.keys(node.listData[node.actElemIndex]).forEach(function(prop) {
- node.actElemStructure.fillListElement(prop, node.listData[node.actElemIndex][prop]);
- });
- }
-
- return (match && array.length > 0);
- };
-
- node.clear = function () {
- while (node.listData.length > 0) {
- node.listData.pop();
- }
- while (node.filteredListData.length > 0) {
- node.filteredListData.pop();
- }
-
- node.actElemIndex = -1;
- node.actElemStructure = null;
- node.nodeType = constants.NODE_UI_DISPLAY;
- };
-
- node.isFilled = function () {
- return node.listData.length > 0;
- };
-
- node.createListName = function (index) {
- var name = '',
- val = '',
- currentList = null;
-
- if (node.filteredListData && node.filteredListData.length){
- currentList = node.filteredListData;
- } else {
- currentList = node.listData;
- }
-
- if (index > -1) {
- node.actElemStructure.refKey.forEach(function (key) {
- if (index === node.getActElemIndex()) {
- val = key.value !== '' ? key.label + ':' + key.value : '';
- } else {
- var prop = '';
- if (!($.isEmptyObject(currentList[index]))) {
- if (currentList[index][key.label]) {
- prop = key.label;
- } else if (currentList[index][key.module + ':' + key.label]) {
- prop = key.module + ':' + key.label;
- }
- val = prop ? key.label + ':' + currentList[index][prop] : prop;
- }
- }
-
- name = name ? (name + (val ? (' ' + val) : '')) : (name + (val ? (' <' + val) : ''));
- });
- }
-
- if (name) {
- name = name + '>';
- }
-
- return name;
- };
-
- node.getNewFilterElement = function (){
- return node.getChildrenForFilter().map(function (element){
- FilterNodeWrapperService.init(element);
- var copy = element.deepCopyForFilter();
- wrapAll(copy);
- FilterNodeWrapperService.wrapForFilter(copy);
- return copy;
- });
- };
- }
-
- // TODO: add service's description
- function config(node) {
- node.parent.isConfigStm = (node.label === 'true');
- }
-
- // TODO: add service's description
- function key(node) {
- // do this only on list, not on listElem because deepCopy on list doesn't copy property keys to
- // listElem => don't do this when button for add new list is clicked
- if (node.parent.hasOwnProperty('refKey')) {
- var keyLabels = node.label.split(' '),
- keyNodes = node.parent.getChildren(null, null, constants.NODE_UI_DISPLAY).filter(function (child) {
- return keyLabels.indexOf(child.label) > -1;
- }),
- getRefKeyArray = function (keys){
- var refKeyArray = [];
- keyLabels.forEach(function (keyLabel){
- var nk = keys.filter(function (k){
- return keyLabel === k.label;
- });
-
- if ( nk.length ) {
- refKeyArray.push(nk[0]);
- }
- });
- return refKeyArray;
- };
-
- node.parent.refKey = getRefKeyArray(keyNodes);
- }
- }
-
- /**
- * Service for wrapping leaf list yang element
- * @param node
- */
- function leafList(node) {
- node.value = [];
- node.expanded = true;
-
- node.toggleExpand = function () {
- node.expanded = !node.expanded;
- };
-
- node.addListElem = function () {
- var newElement = {
- value: '',
- };
- node.value.push(newElement);
- };
-
- node.removeListElem = function (elem) {
- node.value.splice(node.value.indexOf(elem), 1);
- };
-
- node.buildRequest = function (builder, req, module) {
- var valueArray = [],
- labelWithModule = (module !== node.module ? node.module + ':' : '') + node.label;
-
- for (var i = 0; i < node.value.length; i++) {
- valueArray.push(node.value[i].value);
- }
-
- if (valueArray.length > 0) {
- builder.insertPropertyToObj(req, labelWithModule, valueArray);
- return true;
- }
-
- return false;
-
- };
-
-
- node.fill = function (name, array) {
- var match = comparePropToElemByName(name, node.label),
- newLeafListItem;
-
- if (match) {
- node.value = [];
- for (var i = 0; i < array.length; i++) {
- newLeafListItem = {
- value: array[i],
- };
- node.value.push(newLeafListItem);
- }
-
- }
- return match;
- };
-
- node.clear = function () {
- node.nodeType = constants.NODE_UI_DISPLAY;
- node.value = [];
- };
-
- node.isFilled = function () {
- return node.value.length > 0;
- };
- }
-
- /**
- * Service for wrapping choice yang element
- * @param node
- */
- function choice(node) {
- node.choice = null;
- node.expanded = true;
-
- node.buildRequest = function (builder, req, module) {
- var added = false;
-
- if (node.choice) {
- added = node.choice.buildRequest(builder, req, module);
- }
-
- return added;
- };
-
- node.fill = function (name, data) {
- var filled = false,
- nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- nodesToFill.forEach(function (child) {
- var childFilled = child.fill(name, data);
-
- if (childFilled) {
- node.choice = child;
- }
-
- filled = filled || childFilled;
- if (filled) {
- return false;
- }
- });
-
- return filled;
- };
-
- node.clear = function () {
- node.nodeType = constants.NODE_UI_DISPLAY;
-
- if (node.choice) {
- node.choice.clear();
- node.choice = null;
- }
- };
-
- node.isFilled = function () {
- return node.choice !== null;
- };
- }
-
- /**
- * Service for wrapping case yang element
- * @param node
- */
- function caseYang(node) {
-
- node.buildRequest = function (builder, req, module) {
- var added = false;
-
- node.getChildren(null, null, constants.NODE_UI_DISPLAY).forEach(function (child) {
- var childAdded = child.buildRequest(builder, req, module);
- added = added || childAdded;
- });
-
- return added;
- };
-
- node.fill = function (name, data) {
- var filled = false,
- nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- nodesToFill.forEach(function (child) {
- var childFilled = child.fill(name, data);
- filled = filled || childFilled;
- });
-
- return filled;
- };
-
- node.clear = function () {
- var nodesToClear = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- nodesToClear.forEach(function (child) {
- child.clear();
- });
- };
-
- node.isFilled = function () {
- return node.getChildren(null, null, constants.NODE_UI_DISPLAY).some(function (child) {
- return child.isFilled();
- });
- };
- }
-
- /**
- * Service for wrapping output yang element
- * @param node
- */
- function output(node) {
- node.expanded = true;
-
- node.buildRequest = function (builder, req) {
-
- };
-
- node.fill = function (name, data) {
- var match = comparePropToElemByName(name, node.label),
- nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (match && nodesToFill.length) {
- nodesToFill.forEach(function (child) {
- Object.keys(data).forEach(function(prop) {
- child.fill(prop, data[prop]);
- });
- });
- node.expanded = match;
- }
-
- return match;
- };
-
- node.clear = function () {
- var nodesToClear = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (nodesToClear.length) {
- nodesToClear.forEach(function (child) {
- child.clear();
- });
- }
- };
-
- node.isFilled = function () {
- return node.getChildren(null, null, constants.NODE_UI_DISPLAY).some(function (child) {
- return child.isFilled();
- });
- };
-
- }
-
- // TODO: add service's description
- function input(node) {
- node.expanded = true;
-
- node.buildRequest = function (builder, req, module) {
- var added = false,
- objToAdd = builder.createObj(),
- builderNodes = node.getChildren(null, null, constants.NODE_UI_DISPLAY),
- labelWithModule = (module !== node.module ? node.module + ':' : '') + node.label;
-
- if (builderNodes.length) {
-
- builderNodes.forEach(function (child) {
- var childAdded = child.buildRequest(builder, objToAdd, node.module);
- added = added || childAdded;
- });
- } else {
- added = true;
- }
-
- if (added) {
- builder.insertPropertyToObj(req, labelWithModule, objToAdd);
- }
-
- return added;
- };
-
- node.fill = function (name, data) {
- var match = comparePropToElemByName(name, node.label),
- nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (match && nodesToFill.length) {
- nodesToFill.forEach(function (child) {
- Object.keys(data).forEach(function(prop) {
- child.fill(prop, data[prop]);
- });
- });
- node.expanded = match;
- }
-
- return match;
- };
-
- node.clear = function () {
- var nodesToClear = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (nodesToClear.length) {
- nodesToClear.forEach(function (child) {
- child.clear();
- });
- }
- };
-
- node.isFilled = function () {
- return node.getChildren(null, null, constants.NODE_UI_DISPLAY).some(function (child) {
- return child.isFilled();
- });
- };
-
- }
-
- /**
- * Service for wrapping rpc yang element
- * @param node
- */
- function rpc(node) {
- node.expanded = true;
- node.buildRequest = function (builder, req, module) {
- var added = false,
- objToAdd = builder.createObj(),
- builderNodes = node.getChildren(null, null, constants.NODE_UI_DISPLAY),
- labelWithModule = (module !== node.module ? node.module + ':' : '') + node.label;
-
- if (builderNodes.length) {
- builderNodes.forEach(function (child) {
- var childAdded = child.buildRequest(builder, objToAdd, node.module);
- added = added || childAdded;
- });
- } else {
- added = true;
- objToAdd = constants.NULL_DATA;
- }
-
- if (added) {
- builder.insertPropertyToObj(req, labelWithModule, objToAdd);
- }
-
- return added;
- };
-
- node.fill = function (name, data) {
- var match = comparePropToElemByName(name, node.label),
- nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (match && nodesToFill.length) {
- nodesToFill.forEach(function (child) {
- Object.keys(data).forEach(function(prop) {
- child.fill(prop, data[prop]);
- });
- });
- }
-
- node.expanded = match;
-
- return match;
- };
-
- node.clear = function () {
- var nodesToClear = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (nodesToClear.length) {
- nodesToClear.forEach(function (child) {
- child.clear();
- });
- }
- };
-
- node.isFilled = function () {
- return node.getChildren(null, null, constants.NODE_UI_DISPLAY).some(function (child) {
- return child.isFilled();
- });
- };
-
- }
-
- /**
- * Service for wrapping container yang element
- * @param node
- */
- function container(node) {
- node.expanded = false;
-
- node.toggleExpand = function () {
- node.expanded = !node.expanded;
- };
-
- node.buildRequest = function (builder, req, module) {
- var added = false,
- objToAdd = builder.createObj(),
- builderNodes = node.getChildren(null, null, constants.NODE_UI_DISPLAY),
- labelWithModule = (module !== node.module ? node.module + ':' : '') + node.label;
-
- if (builderNodes.length) {
- builderNodes.forEach(function (child) {
- var childAdded = child.buildRequest(builder, objToAdd, node.module);
- added = added || childAdded;
- });
- } else {
- added = true;
- }
-
- if (added && (checkEmptyContainer(node.parent ? node.parent.type : 'blanktype', objToAdd) ||
- checkPresence(node))) {
- builder.insertPropertyToObj(req, labelWithModule, objToAdd);
- }
-
- return added;
-
- // TODO: add function's description
- function checkPresence(containerNode) {
- return containerNode.children.some(function (ch) {
- return ch.type === 'presence';
- });
- }
-
- // TODO: add function's description
- function checkEmptyContainer(type, obj) { // TODO: absolete after when statement is implemented
- return !!(type === 'case' || !$.isEmptyObject(objToAdd));
- }
- };
-
- node.fill = function (name, data) {
- var match = comparePropToElemByName(name, node.label),
- nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (match && nodesToFill.length) {
- nodesToFill.forEach(function (child) {
- Object.keys(data).forEach(function(prop) {
- child.fill(prop, data[prop]);
- });
- });
-
- node.expanded = match;
- }
-
- return match;
- };
-
- node.clear = function () {
- var nodesToClear = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
- node.nodeType = constants.NODE_UI_DISPLAY;
-
- if (nodesToClear.length) {
- nodesToClear.forEach(function (child) {
- child.clear();
- });
- }
- };
-
- node.isFilled = function () {
- return node.getChildren(null, null, constants.NODE_UI_DISPLAY).some(function (child) {
- return child.isFilled();
- });
- };
- }
-
- /**
- * Service for set patern restriction from yang element
- * @param node
- */
- function pattern(node) {
- node.restrictions = [RestrictionsService.getReqexpValidationFnc(node.label)];
- }
-
- /**
- * Service for set range restriction from yang element
- * @param node
- */
- function range(node) {
- node.restrictions = parseRestrictText(node.label);
- }
-
- /**
- * Service for set length restriction from yang element
- * @param node
- */
- function length(node) {
- node.restrictions = parseRestrictText(node.label);
- }
-
- /**
- * Service for wrapping type yang element
- * @param node
- */
- function type(node) {
- TypeWrapperService.wrapAll(node);
- }
-
- /**
- * Service for wrapping leaf yang element
- * @param node
- */
- function leaf(node) {
- node.value = '';
- node.valueIsValid = true;
- node.typeChild = node.getChildren('type')[0];
-
- node.buildRequest = function (builder, req, module) {
- var value = node.typeChild.getValue(),
- labelWithModule = (module !== node.module ? node.module + ':' : '') + node.label;
-
- if (node.isKey()) {
- EventDispatcherService.dispatch(constants.EV_FILL_PATH, node, value);
- }
-
- if (value) {
- builder.insertPropertyToObj(req, labelWithModule, value);
- return true;
- }
-
- return false;
- };
-
- node.fill = function (name, data) {
- var match = '';
-
- match = comparePropToElemByName(name, node.label);
- if (match) {
- node.value = data.toString();
- if (node.typeChild) {
- node.typeChild.fill(node.value);
- }
- }
- return match;
- };
-
- node.clear = function () {
- node.value = '';
-
- if (node.typeChild) {
- node.typeChild.clear();
- }
- };
-
- node.isFilled = function () {
- var filled = node.typeChild.getValue() ? true : false;
- return filled;
- };
-
- node.checkValueType = function () {
- node.valueIsValid = node.typeChild ? node.typeChild.check(node.value) : true;
- };
-
- node.isKey = function () {
- return node.parent &&
- node.parent.type === 'list' &&
- node.parent.refKey && node.parent.refKey.indexOf(node) !== -1;
- };
- }
-
- /**
- * Service for wrapping single node
- * @param node
- */
- function wrap(node) {
- if (service.hasOwnProperty(node.type)) {
- service[node.type](node);
- }
- }
-
- /**
- * Main service for wrapping nodes
- * @param node
- */
- function wrapAll(node) {
- service.wrap(node);
- node.children.forEach(function (child) {
- service.wrapAll(child);
- });
- }
-
- // TODO: add service's description
- function checkKeyDuplicity(listData, refKey) {
- return checkListElemKeys(listData, refKey);
- }
-
- // TODO: add function's description
- function comparePropToElemByName(propName, elemName) {
- // AUGMENT FIX
- // return propName === elemName; // TODO also check by namespace - redundancy?
-
- // TODO also check by namespace - redundancy?
- return (propName.indexOf(':') > -1 ? propName.split(':')[1] : propName) === elemName;
- }
-
- // TODO: add function's description
- function equalArrays(arrA, arrB) {
- var match = (arrA.length === arrB.length) && arrA.length > 0;
-
- if (match) {
- var i = 0;
- while (i < arrA.length && match) {
- var valMatch = arrA[i] === arrB[i];
- match = match && valMatch;
- i++;
- }
- }
- return match;
- }
-
- // TODO: add function's description
- function equalListElems(listElemA, listElemB, refKey) {
- var keyValuesA = getKeyArrayValues(listElemA, refKey),
- keyValuesB = getKeyArrayValues(listElemB, refKey);
-
- return equalArrays(keyValuesA, keyValuesB);
-
- // TODO: add function's description
- function getKeyValue(data, label, module) {
- if (data && data.hasOwnProperty(label)) {
- return data[label];
- } else if (data && data.hasOwnProperty(module + ':' + label)) {
- return data[module + ':' + label];
- } else {
- return null;
- }
- }
-
- // TODO: add function's description
- function getKeyArrayValues(data, refKey) {
- return refKey.map(function (key) {
- return getKeyValue(data, key.label, key.module);
- }).filter(function (item) {
- return item !== null;
- });
- }
- }
-
- // TODO: add function's description
- function checkListElemKeys(listData, refKey) {
- var doubleKeyIndexes = [],
- checkedElems = [];
-
- listData.forEach(function (item, index) {
- var duplitactes = checkedElems.filter(function (checked) {
- var isDuplicate = equalListElems(item, checked.item, refKey);
- if (isDuplicate && doubleKeyIndexes.indexOf(checked.index) === -1) {
- doubleKeyIndexes.push(checked.index);
- }
- return isDuplicate;
- });
-
- if (duplitactes.length) {
- // item is already in checkedElems so we don't need to push it again
- doubleKeyIndexes.push(index);
- } else {
- checkedElems.push({ index: index, item: item });
- }
- });
-
- return doubleKeyIndexes;
- }
-
- // TODO: add function's description
- function parseRestrictText(text) {
- return text.split('|').map(function (elem) {
- var subElems = elem.split('..');
- return subElems.length === 1 ? RestrictionsService.getEqualsFnc(subElems[0]) :
- RestrictionsService.getMinMaxFnc(subElems[0], subElems[1]);
- });
- }
-
- // TODO: add function's description
- function getTypes(node) {
- var types = [];
-
- var getTypesRecursive = function (node, types) {
- types.push(node);
-
- node.getChildren('type').forEach(function (child) {
- getTypesRecursive(child, types);
- });
- };
-
- node.getChildren('type').forEach(function (child) {
- getTypesRecursive(child, types);
- });
-
- return types;
- }
- }
-
- NodeWrapperService.$inject = ['constants', 'RequestBuilderService', 'RestrictionsService', 'TypeWrapperService',
- 'ListFilteringService', 'EventDispatcherService', 'FilterNodeWrapperService'];
-
- return NodeWrapperService;
-
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- function ParsingJsonService(){
- var service = {
- parseJson: parseJson,
- };
-
- return service;
-
- /**
- * Util for parsing json with error checking
- * @param data
- * @param parsingErrorClbk
- * @returns {*}
- */
- function parseJson(data, parsingErrorClbk){
- var result = null;
-
- try {
- result = JSON.parse(data);
- } catch (e){
- (parsingErrorClbk || angular.noop)(e);
- }
-
- finally {
- return result;
- }
-
- }
- }
-
- ParsingJsonService.$inject = [];
-
- return ParsingJsonService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function PathUtilsService(ArrayUtilsService){
-
- var service = {
- clearPath: clearPath,
- checkEmptyIdentifiers: checkEmptyIdentifiers,
- createPathElement: createPathElement,
- getModuleNameFromPath: getModuleNameFromPath,
- getStorageAndNormalizedPath: getStorageAndNormalizedPath,
- fillIdentifiers: fillIdentifiers,
- findIndexOfStrInPathStr: findIndexOfStrInPathStr,
- fillListNode: fillListNode,
- fillListRequestData: fillListRequestData,
- fillPath: fillPath,
- search: search,
- searchNodeByPath: searchNodeByPath,
- translate: translate,
- translatePathArray: translatePathArray,
- __test: {
- PathElem: PathElem,
- getModuleNodePair: getModuleNodePair,
- isIdentifier: isIdentifier,
- },
- },
- parentPath = '..';
-
- return service;
-
- // TODO: add service's description
- function createPathElement(name, module, identifierStrings, moduleChanged, revision) {
- return new PathElem(name, module, identifierStrings, moduleChanged, revision);
- }
-
- // TODO: add service's description
- function search(node, path) {
- var pathElem = path.shift(),
- selNode = pathElem.name === parentPath ?
- node.parent :
- ArrayUtilsService.getFirstElementByCondition(node.children, function (child) {
- return pathElem.checkNode(child);
- });
-
- if (selNode !== null) {
- if (path.length) {
- return search(selNode, path);
- } else {
- return selNode;
- }
- } else {
- return null;
- }
- }
-
- /**
- * Translate path url into path elements array
- * @param path
- * @param prefixConverter
- * @param importNodes
- * @param getDefaultModuleCallback
- * @param notIdentifiers
- * @returns {Array}
- */
- function translate(path, prefixConverter, importNodes, getDefaultModuleCallback, notIdentifiers) {
- var pathStrElements = path.split('/').filter(function (e) {
- return e !== '';
- }),
- pathArrayElements = [],
- index,
- maxIndex = pathStrElements.length,
- getLastElement = function (a) {
- return pathArrayElements.length > 0 ? pathArrayElements[pathArrayElements.length - 1] : null;
- },
- getElementModule = function (e) {
- return e ? e.module : '';
- },
- getModuleChange = function (actModule, lastElemModule) {
- return (lastElemModule !== null) ? actModule !== lastElemModule : false;
- };
-
- for (index = 0; index < maxIndex; index += 1) {
- var actElem = pathStrElements[index],
- lastElem = getLastElement(pathArrayElements),
- checkIdentifier = notIdentifiers ? false : isIdentifier(actElem);
-
- if (checkIdentifier && lastElem) {
- lastElem.addIdentifier(actElem.slice(1, -1));
- } else {
-
- var lastElemModule = getElementModule(lastElem),
- defaultModule = getDefaultModuleCallback ? getDefaultModuleCallback() : lastElemModule,
- pair = getModuleNodePair(actElem, defaultModule),
- processedModule = (prefixConverter && pair[0] !== lastElemModule) ?
- prefixConverter(pair[0]) : pair[0],
- revision = importNodes ? searchForRevisionInImportNodes(processedModule, importNodes) : null,
- pathElem = createPathElement(pair[1], processedModule, null, getModuleChange(processedModule, lastElemModule), revision);
-
- pathArrayElements.push(pathElem);
- }
- }
-
- return pathArrayElements;
- }
-
- // TODO: add service's description
- function translatePathArray(pathArray) {
- var getIdentifiersValues = function (identifiers) {
- return identifiers.map(function (i) {
- return i.value.length ? i.value.replace(/\//g, '%2F') : '{' + i.label + '}';
- }).join('/');
- },
- getLastElem = function (i) {
- var result = null;
- if ((i - 1) >= 0) {
- result = pathArray[i - 1];
- }
- return result;
- },
- getModuleStr = function (actElem, lastElem) {
- return ((lastElem && actElem.module && lastElem.module !== actElem.module) ?
- (actElem.module + ':') : '');
- },
- getIdentifiersStr = function (actElem) {
- return (actElem.hasIdentifier() ? '/' + getIdentifiersValues(actElem.identifiers) : '');
- },
- getElemStr = function (actElem, lastElem) {
- return getModuleStr(actElem, lastElem) + actElem.name + getIdentifiersStr(actElem);
- };
-
- return pathArray.map(function (pe, i) {
- return getElemStr(pe, getLastElem(i));
- });
- }
-
- /**
- * Check if in path elements array is empty identifier
- * @param pathArray
- * @returns {*}
- */
- function checkEmptyIdentifiers(pathArray){
- return pathArray.some(function (item) {
- return item.hasEmptyIdentifier();
- });
- }
-
- /**
- * Service for filling API url object from url string data
- * @param pathArrayIn
- * @param pathString
- */
- function fillPath(pathArrayIn, pathString) {
- var pathArray = trimPath(pathString).split('/'),
- pathPosition = 0;
-
- pathArrayIn.forEach(function (pathItem){
- if ( pathItem.hasIdentifier() ){
- pathItem.identifiers.forEach(function (identifier){
- pathPosition++;
- identifier.value = isIdentifier(pathArray[pathPosition]) ? '' : pathArray[pathPosition];
- });
- }
- pathPosition++;
- });
-
- }
-
- /**
- * Service for clearing api path object
- * @param pathArrayIn
- */
- function clearPath(pathArrayIn){
- pathArrayIn.forEach(function (pathItem){
- if ( pathItem.hasIdentifier() ){
- pathItem.identifiers.forEach(function (identifier){
- identifier.value = '';
- });
- }
- });
- }
-
- // TODO: add service's description
- function getModuleNameFromPath(path){
- var pathArray = translate(trimPath(path));
-
- return pathArray.length > 1 ? pathArray[1].module : null;
- }
-
- // TODO: add service's description
- function searchNodeByPath(pathString, treeApis, treeData, disabledExpand, notIdentifiers) {
- var pathArray = translate(trimPath(pathString), null, null, null, notIdentifiers),
- module = pathArray.length > 1 ? pathArray[1].module : null,
- selectedTreeApi = module ? treeApis.filter(function (treeApi) {
- return treeApi.module === module;
- })[0] : null,
- retObj = null;
-
- if (selectedTreeApi && pathArray.length) {
- var actElem = selectedTreeApi,
- continueCondition = true;
-
- if ( !disabledExpand ) {
- changeTreeDataByProp(treeData, ['expanded', 'selected'], [false, false]);
- }
-
- for (var i = 0; i < pathArray.length && continueCondition; ) {
- if ( !disabledExpand ) {
- changeTreeDataNode(actElem, treeData, 'expanded', true);
- }
-
- var nextElem = getActElementChild(actElem, pathArray[i].name);
- if (nextElem !== null) {
- actElem = nextElem;
- i = i + ( actElem && actElem.identifiersLength > 0 ? actElem.identifiersLength + 1 : 1);
- } else {
- continueCondition = false;
- }
- }
-
- if ( !disabledExpand ) {
- changeTreeDataNode(actElem, treeData, 'selected', true);
- }
-
- if (actElem) {
- retObj = { indexApi: actElem.indexApi, indexSubApi: actElem.indexSubApi };
- }
- }
- return retObj;
- }
-
- /**
- * Fill path element's identifiers
- * @param identifiers
- * @param label
- * @param value
- */
- function fillIdentifiers(identifiers, label, value) {
- identifiers.some(function (i) {
- var identifierMatch = i.label === label;
- if (identifierMatch) {
- i.value = value || '';
- }
-
- return identifierMatch;
- });
- }
-
- // TODO: add service's description
- function fillListNode(node, label, value) {
- if (node.type === 'list' && node.actElemStructure !== null) {
- var nodeToFill = node.actElemStructure.getChildren('leaf', label)[0];
-
- if (nodeToFill) {
- nodeToFill.fill(nodeToFill.label, value);
- }
- }
- }
-
- // TODO: add service's description
- function fillListRequestData(data, listLabel, label, value){
- if ( data.hasOwnProperty(listLabel) && data[listLabel].length ) {
- data[listLabel][0][label] = value;
- }
- }
-
- // TODO: add service's description
- function findIndexOfStrInPathStr(pathParts, targetStr) { // pathParts is path string split by '/'
- var targetIndex = -1;
-
- pathParts.some(function (p, i) {
- var condition = p === targetStr;
- if (condition) {
- targetIndex = i;
- }
- return condition;
- });
-
- return targetIndex;
- }
-
- // TODO: add service's description
- function getStorageAndNormalizedPath(pathStr) {
- var pathParts = pathStr.split('/'),
- restconfIndex = findIndexOfStrInPathStr(pathParts, 'restconf'),
- storage = pathParts[restconfIndex + 1],
- normalizedPath = pathParts.slice(restconfIndex + 1).join('/');
-
- return { storage: storage, normalizedPath: normalizedPath };
- }
-
- /**
- * Base identifier object
- * @param label
- * @param value
- * @constructor
- */
- function Identifier(label, value) {
- this.label = label;
- this.value = value || '';
- }
-
- /**
- * Base path element object
- * @param name
- * @param module
- * @param identifierNames
- * @param moduleChanged
- * @param revision
- * @constructor
- */
- function PathElem(name, module, identifierNames, moduleChanged, revision) {
- this.name = name;
- this.module = module;
- this.identifiers = identifierNames ? identifierNames.map(function (name) {
- return new Identifier(name);
- }) : [];
- this.moduleChanged = moduleChanged || false;
- this.revision = revision;
-
- this.equals = function (comparedElem, compareIdentifierValues) {
- var result = this.name === comparedElem.name &&
- this.module === comparedElem.module &&
- this.identifiers.length === comparedElem.identifiers.length;
-
- if (result) {
- var identifiersCnt = this.identifiers.length,
- i;
-
- for (i = 0; i < identifiersCnt && result; i++) {
- result = this.identifiers[i].label === comparedElem.identifiers[i].label;
- if (compareIdentifierValues) {
- result = this.identifiers[i].value === comparedElem.identifiers[i].value;
- }
- }
- }
-
- return result;
- };
-
- this.hasIdentifier = function () {
- return this.identifiers.length > 0;
- };
-
- this.addIdentifier = function (name) {
- this.identifiers.push(new Identifier(name));
- };
-
- this.getIdentifierValues = function () {
- return this.identifiers.map(function (i) {
- return i.value;
- });
- };
-
- this.hasEmptyIdentifier = function () {
- return this.identifiers.some(function (item) {
- return item.value.length === 0;
- });
- };
-
- this.toString = function () {
- return (this.module ? this.module + ':' : '') + this.name + '/' + (this.hasIdentifier() ?
- this.getIdentifierValues().join('/') + '/' : '');
- };
-
- this.checkNode = function (node) {
- return (this.module ? this.module === node.module : true) &&
- (this.name ? this.name === node.label : true) &&
- (this.revision ? this.revision === node.moduleRevision : true);
- };
-
- this.clone = function () {
- var copy = new PathElem(this.name, this.module, null, this.moduleChanged, this.revision);
-
- copy.identifiers = this.identifiers.map(function (i) {
- return new Identifier(i.label, i.value);
- });
-
- return copy;
- };
- }
-
- // TODO: add function's description
- function trimPath(pathString) {
- var searchStr = 'restconf',
- output = pathString;
-
- if (pathString.indexOf(searchStr) > -1) {
- output = pathString.slice(pathString.indexOf(searchStr) + searchStr.length + 1);
- }
-
- return output;
- }
-
- // TODO: add function's description
- function changeTreeDataNode(treeApiNode, treeData, prop, val) {
- var sel = treeApiNode ? treeData.filter(function (d) {
- return d.branch.uid === treeApiNode.uid;
- }) : [];
-
- if (sel.length === 1) {
- sel[0].branch[prop] = val;
- }
- }
-
- // TODO: add function's description
- function changeTreeDataByProp(treeData, props, vals) {
- treeData.forEach(function (d, index) {
- props.forEach(function (v, i){
- d.branch[v] = vals[i];
- });
- });
- }
-
- // TODO: add function's description
- function getActElementChild(actElem, childLabel) {
- var sel = actElem.children.filter(function (child) {
- return child.label === childLabel;
- }),
- ret = sel.length === 1 ? sel[0] : null;
-
- return ret;
- }
-
- // TODO: add function's description
- function getModuleNodePair(pathString, defaultModule) {
- return pathString.indexOf(':') > -1 ? pathString.split(':') : [defaultModule, pathString];
- }
-
- /**
- * Tool for check if item is identifier
- * @param item
- * @returns {boolean}
- */
- function isIdentifier(item) {
- return (item.indexOf('{') === item.indexOf('}')) === false;
- }
-
- // TODO: add function's description
- function searchForRevisionInImportNodes(module, importNodes) {
- var revision = null,
- node = importNodes.filter(function (i) {
- return i.label === module;
- })[0];
-
- if (node) {
- revision = node._revisionDate;
- }
-
- return revision;
- }
- }
-
- PathUtilsService.$inject = ['ArrayUtilsService'];
-
- return PathUtilsService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function RequestBuilderService(){
-
- var service = {
- createList: createList,
- createObj: createObj,
- insertPropertyToObj: insertPropertyToObj,
- insertObjToList: insertObjToList,
- resultToString: resultToString,
- };
-
- return service;
-
- // TODO: add service's description
- function createObj() {
- return {};
- }
-
- // TODO: add service's description
- function createList() {
- return [];
- }
-
- // TODO: add service's description
- function insertObjToList(list, obj) {
- list.push(obj);
- }
-
- // TODO: add service's description
- function insertPropertyToObj(obj, propName, propData) {
- obj[propName] = propData;
- }
-
- // TODO: add service's description
- function resultToString(obj) {
- return angular.toJson(obj, true);
- }
- }
-
- RequestBuilderService.$inject = [];
-
- return RequestBuilderService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function RestrictionsService(){
-
- var service = {
- getEqualsFnc: getEqualsFnc,
- getIsDecimalFnc: getIsDecimalFnc,
- getIsNumberFnc: getIsNumberFnc,
- getIsUNumberFnc: getIsUNumberFnc,
- getMinMaxFnc: getMinMaxFnc,
- getReqexpValidationFnc: getReqexpValidationFnc,
- isInArray: isInArray,
- };
-
- return service;
-
- // TODO: add service's description
- function getEqualsFnc(target) {
- var intTarget = parseInt(target);
-
- return new RestrictionObject(
- function (value) {
- var intVal = convertToInteger(value);
- return intVal === intTarget;
- },
- 'Value must be equal to ' + target
- );
- }
-
- // TODO: add service's description
- function getMinMaxFnc(min, max) {
- var intMin = parseInt(min),
- intMax = parseInt(max);
-
- return new RestrictionObject(
- function (value) {
- var intVal = convertToInteger(value);
- return (intMin <= intVal) && (intVal <= intMax);
- },
- 'Value must be in between ' + min + ' and ' + max
- );
- }
-
- // TODO: add service's description
- function getReqexpValidationFnc(patternString) {
- return new RestrictionObject(
- function (value) {
- var pattern = new RegExp(patternString);
- return pattern.test(value.toString());
- },
- 'Value must match ' + patternString
- );
- }
-
- // TODO: add service's description
- function getIsNumberFnc() {
- return new RestrictionObject(
- function (value) {
- var pattern = new RegExp('^[+-]?((0x[0-9A-Fa-f]+)|(0[0-9]+)|([0-9]+))$');
- return pattern.test(value.toString());
- },
- 'Value must be number (+/-, 0x and 0) prefixed are permitted'
- );
- }
-
- // TODO: add service's description
- function getIsUNumberFnc() {
- return new RestrictionObject(
- function (value) {
- var pattern = new RegExp('^[+]?((0x[0-9A-Fa-f]+)|(0[0-9]+)|([0-9]+))$');
- return pattern.test(value.toString());
- },
- 'Value must be positive number (+, 0x and 0) prefixed are permitted'
- );
- }
-
- // TODO: add service's description
- function getIsDecimalFnc() {
- return new RestrictionObject(
- function (value) {
- var pattern = new RegExp('^[-]?[1-9]?[0-9]+[.|,]?[0-9]*$');
- return pattern.test(value.toString());
- },
- 'Value must be decimal number - prefix is permitted'
- );
- }
-
- // TODO: add service's description
- function isInArray(array) {
- return new RestrictionObject(
- function (value) {
- return array.some(function (arrVal) {
- return arrVal === value;
- });
- },
- 'Value must be in ' + array.toString()
- );
- }
-
- /**
- * Base restriction object
- * @param fnc
- * @param info
- * @constructor
- */
- function RestrictionObject(fnc, info) {
- this.info = info;
- this.check = fnc;
- }
-
- // TODO: add function's description
- function convertToInteger(value) {
- var strVal = typeof value === 'string' ? value : value.toString(),
- radix = strVal.indexOf('0x') === 0 ? 16 : strVal.indexOf('0') === 0 ? 8 : 10;
-
- return parseInt(strVal, radix);
- }
- }
-
- RestrictionsService.$inject = [];
-
- return RestrictionsService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function SyncService($timeout){
-
- var timeout = 180000,
- service = {
- generateObj: function () {
- return new SyncObject();
- },
- };
-
- return service;
-
- /**
- * Base synchronization object
- * @constructor
- */
- function SyncObject() {
- this.runningRequests = [];
- this.reqId = 0;
- this.timeElapsed = 0;
-
- this.spawnRequest = function (digest) {
- var id = digest + (this.reqId++).toString();
- this.runningRequests.push(id);
- return id;
- };
-
- this.removeRequest = function (id) {
- var index = this.runningRequests.indexOf(id);
-
- if (index > -1) {
- this.runningRequests.splice(index, 1);
- } else {
- }
- };
-
- this.waitFor = function (callback) {
- var t = 1000,
- processes = this.runningRequests.length,
- self = this;
-
- if (processes > 0 && self.timeElapsed < timeout) {
- $timeout(function () {
- self.timeElapsed = self.timeElapsed + t;
- self.waitFor(callback);
- }, t);
- } else {
- callback();
- }
- };
- }
- }
-
- SyncService.$inject = ['$timeout'];
-
- return SyncService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function TypeWrapperService(RestrictionsService){
-
- var service = {
- bits: bits,
- decimal64: decimal64,
- empty: empty,
- enumeration: enumeration,
- int16: int16,
- int32: int32,
- int64: int64,
- int8: int8,
- _setDefaultProperties: _setDefaultProperties,
- uint16: uint16,
- uint32: uint32,
- uint64: uint64,
- uint8: uint8,
- union: union,
- wrapAll: wrapAll,
- __test: {
- findLeafParent: findLeafParent,
- },
- };
-
- return service;
-
- // TODO: add service's description
- function uint64(node) {
- node.builtInChecks.push(RestrictionsService.getIsUNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(0, 18446744073709551615));
- }
-
- // TODO: add service's description
- function uint32(node) {
- node.builtInChecks.push(RestrictionsService.getIsUNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(0, 4294967295));
- }
-
- // TODO: add service's description
- function uint16(node) {
- node.builtInChecks.push(RestrictionsService.getIsUNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(0, 65535));
- }
-
- // TODO: add service's description
- function uint8(node) {
- node.builtInChecks.push(RestrictionsService.getIsUNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(0, 255));
- }
-
- // TODO: add service's description
- function int64(node) {
- node.builtInChecks.push(RestrictionsService.getIsNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(-9223372036854775808, 9223372036854775807));
- }
-
- // TODO: add service's description
- function int32(node) {
- node.builtInChecks.push(RestrictionsService.getIsNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(-2147483648, 2147483647));
- }
-
- // TODO: add service's description
- function int16(node) {
- node.builtInChecks.push(RestrictionsService.getIsNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(-32768, 32767));
- }
-
- // TODO: add service's description
- function int8(node) {
- node.builtInChecks.push(RestrictionsService.getIsNumberFnc());
- node.builtInChecks.push(RestrictionsService.getMinMaxFnc(-128, 127));
- }
-
- // TODO: add service's description
- function decimal64(node) {
- node.builtInChecks.push(RestrictionsService.getIsDecimalFnc());
- }
-
- // TODO: add service's description
- function union(node) {
- node.clear = function () {
- node.getChildren('type').forEach(function (child) {
- child.clear();
- });
- };
- node.fill = function (value) {
- node.getChildren('type').forEach(function (child) {
- child.fill(value);
- });
- };
-
- node.check = function (value) {
- var condition = false;
- node.getChildren('type').forEach(function (childType) {
- var childCondition = childType.check(value);
- condition = condition || childCondition;
- });
- return condition;
- };
-
- node.getChildren('type').forEach(function (childType) {
- wrapAll(childType);
- });
- }
-
- // TODO: add service's description
- function bits(node) {
- var i;
-
- node.maxBitsLen = node.getChildren('bit').length;
- node.bitsValues = [];
-
- for (i = 0; i < node.maxBitsLen; i++) {
- node.bitsValues[i] = 0;
- }
-
- node.clear = function () {
- for (i = 0; i < node.bitsValues.length; i++) {
- node.bitsValues[i] = 0;
- }
- };
-
- node.fill = function (value) {
- var bitLabels = node.getChildren('bit').map(function (bit) {
- return bit.label;
- });
-
- node.leafParent.value.split(' ').forEach(function (val) {
- var valIndex = bitLabels.indexOf(val);
- if (valIndex !== -1) {
- node.bitsValues[valIndex] = 1;
- }
- });
- };
-
- node.setLeafValue = function (values, fromFilter) {
- var bitLabels = node.getChildren('bit').map(function (bit) {
- return bit.label;
- }),
- nodeValue = null;
-
- nodeValue = node.bitsValues.map(function (val, index) {
- if (parseInt(val, 10) === 1) {
- return bitLabels[index];
- } else {
- return null;
- }
- }).filter(function (val) {
- return val !== null;
- }).join(' ');
-
- node.leafParent.value = nodeValue;
- if (fromFilter){
- node.leafParent.filterBitsValue = nodeValue;
- }
- };
- }
-
- // TODO: add service's description
- function enumeration(node) {
- node.selEnum = null;
-
- var childNames = [];
- node.getChildren('enum').forEach(function (child) {
- childNames.push(child.label);
- });
- node.builtInChecks.push(RestrictionsService.isInArray(childNames));
-
- node.setLeafValue = function (value) {
- if (value !== null) {
- node.leafParent.value = value;
- }
- };
-
- node.clear = function () {
- node.selEnum = null;
- };
-
- node.fill = function (value) {
- var selChild = node.getChildren('enum', value)[0];
- node.selEnum = selChild ? selChild : null;
- };
- }
-
- // TODO: add service's description
- function empty(node) {
- node.setLeafValue = function (value) {
- node.leafParent.value = value === 1 ? {} : '';
- };
-
- node.clear = function () {
- node.value = null;
- };
-
- node.fill = function (value) {
- node.emptyValue = value === '' ? 1 : ($.isEmptyObject(value) ? 1 : 0);
- node.leafParent.value = parseInt(node.emptyValue, 10) === 1 ? {} : '';
- };
-
- node.getValue = function (){
- return parseInt(node.emptyValue, 10) === 1 ? {} : '';
- };
- }
-
- // TODO: add service's description
- function _setDefaultProperties(node) {
- var fnToString = function (string) {
- var valueStr = '';
-
- if (string !== null) {
- try {
- valueStr = string.toString();
- } catch (e) {
- }
- }
-
- return valueStr;
- };
-
- node.leafParent = findLeafParent(node);
- node.builtInChecks = [];
- node.errors = [];
- node.clear = function () {
- };
- node.fill = function () {
- };
- node.performRestrictionsCheck = function (value) {
- var patternRestrictions = node.getChildren('pattern'),
- patternCheck = function (value) {
- return patternRestrictions.map(function (patternNode) {
- return patternNode.restrictions[0];
- }).some(function (patternRestriction) {
- var condition = patternRestriction.check(value);
- if (condition === false) {
- node.errors.push(patternRestriction.info);
- }
- return condition;
- });
- },
- lengthRestrictions = node.getChildren('length'),
- rangeRestrictions = node.getChildren('range'),
- lengthRangeCheck = function (restrictionsContainers, value) {
- return restrictionsContainers[0].restrictions.some(function (restriction) {
- var condition = restriction.check(value);
- if (condition === false) {
- node.errors.push(restriction.info);
- }
- return condition;
- });
- };
-
- var patternCondition = patternRestrictions.length ? patternCheck(value) : true,
- lengthCondition = lengthRestrictions.length && value.length ?
- lengthRangeCheck(lengthRestrictions, value.length) : true,
- rangeCondition = rangeRestrictions.length ? lengthRangeCheck(rangeRestrictions, value) : true;
-
- return patternCondition && lengthCondition && rangeCondition;
- };
- node.performBuildInChecks = function (value) {
- return node.builtInChecks.length ? node.builtInChecks.every(function (restriction) {
- var condition = restriction.check(value);
- if (condition === false) {
- node.errors.push(restriction.info);
- }
- return condition;
- }) : true;
- };
- node.check = function (value) {
- node.errors = [];
- var condition = value !== '' ?
- node.performBuildInChecks(value) && node.performRestrictionsCheck(value) : true;
- if (condition) {
- node.errors = [];
- }
- return condition;
- };
- node.getValue = function (){
- return fnToString(node.leafParent.value);
- };
- }
-
- // TODO: add service's description
- function wrapAll(node) {
- if (node.type === 'type') {
- _setDefaultProperties(node);
- }
-
- if (service.hasOwnProperty(node.label)) {
- service[node.label](node);
- }
- }
-
- // TODO: add function's description
- function findLeafParent(node) {
- if (node.type === 'leaf') {
- return node;
- } else {
- if (node.parent) {
- return findLeafParent(node.parent);
- } else {
- return null;
- }
- }
- }
- }
-
- TypeWrapperService.$inject = ['RestrictionsService'];
-
- return TypeWrapperService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function YangUiApisService(YangUtilsRestangularService){
- var service = {
- getAllModules: getAllModules,
- getAllApis: getAllApis,
- getCustomModules: getCustomModules,
- getModuleSchema: getModuleSchema,
- getSingleApiInfo: getSingleApiInfo,
- getSingleModuleInfo: getSingleModuleInfo,
- };
-
- return service;
-
- // TODO: add service's description
- function getAllModules() {
- return YangUtilsRestangularService.one('restconf').one('modules');
- }
-
- // ,TODO: add service's description
- function getModuleSchema(name, rev) {
- return YangUtilsRestangularService.one('restconf').one('modules')
- .one('module').one(name).one(rev).one('schema');
- }
-
- // TODO: add service's description
- function getSingleModuleInfo(modulePath) {
- return YangUtilsRestangularService.one('restconf').one('modules').one('module').customGET(modulePath);
- }
-
- // TODO: add service's description
- function getAllApis() {
- return YangUtilsRestangularService.one('apidoc').one('apis');
- }
-
- // TODO: add service's description
- function getSingleApiInfo(apiPath) {
- return YangUtilsRestangularService.one('apidoc').one('apis').customGET(apiPath);
- }
-
- // TODO: add service's description
- function getCustomModules(baseApiPath) {
- return YangUtilsRestangularService.one('restconf').one('modules').customGET(baseApiPath);
- }
- }
-
- YangUiApisService.$inject = ['YangUtilsRestangularService'];
-
- return YangUiApisService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function YangUtilsRestangularService(Restangular, ENV){
-
- // TODO: add service's description
- return Restangular.withConfig(function (RestangularConfig) {
- RestangularConfig.setBaseUrl(ENV.getBaseURL('MD_SAL'));
- RestangularConfig.setRequestInterceptor(function (elem, operation) {
- if (operation === 'post' && isEmptyElement(elem)) {
- return null;
- } else {
- return elem;
- }
- });
- });
-
- // TODO: add function's description
- function isEmptyElement(element) {
- return element.hasOwnProperty('id') && element.id === undefined;
- }
- }
-
- YangUtilsRestangularService.$inject = ['Restangular', 'ENV'];
-
- return YangUtilsRestangularService;
-
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- function YangUtilsService(YinParserService, NodeWrapperService, RequestBuilderService, SyncService, constants,
- ModuleConnectorService, YangUiApisService, EventDispatcherService, ApiBuilderService){
- var service = {
- getRequestString: getRequestString,
- generateApiTreeData: generateApiTreeData,
- generateNodesToApis: generateNodesToApis,
- objectHandler: objectHandler,
- postRequestData: postRequestData,
- prepareHeaders: prepareHeaders,
- prepareOperation: prepareOperation,
- prepareRequestData: prepareRequestData,
- processModules: processModules,
- processModulesMP: processModulesMP,
- stripAngularGarbage: stripAngularGarbage,
- switchConfigOper: switchConfigOper,
- transformTopologyData: transformTopologyData,
-
- };
-
- service.errorMessages = {
- 'method': {
- 'GET': {
- '401': 'YANGUI_ERROR_GET_401',
- '403': 'YANGUI_ERROR_GET_403',
- '404': 'YANGUI_ERROR_GET_404',
- '500': 'YANGUI_ERROR_GET_500',
- '503': 'YANGUI_ERROR_GET_503',
- },
- 'POST': {
- '500': 'YANGUI_ERROR_GET_500',
- '503': 'YANGUI_ERROR_GET_503',
- },
- 'PUT': {
- '500': 'YANGUI_ERROR_GET_500',
- '503': 'YANGUI_ERROR_GET_503',
- },
- 'DELETE': {
- '500': 'YANGUI_ERROR_GET_500',
- '503': 'YANGUI_ERROR_GET_503',
- },
- },
- };
-
- return service;
-
- // TODO: add service's description
- function stripAngularGarbage(obj, prop) {
- var strippedObj = {},
- propsToRemove = ['$$hashKey', 'route', 'reqParams', 'parentResource', 'restangularCollection'];
-
- if (obj.hasOwnProperty(prop)) {
- strippedObj[prop] = obj[prop];
- } else {
- strippedObj = removeGarbage(obj);
- }
-
- return strippedObj;
-
- function removeGarbage(obj) {
- propsToRemove.forEach(function (p) {
- delete obj[p];
- });
-
- return obj;
- }
- }
-
- // TODO: add service's description
- function switchConfigOper(apiStr, swtichTo) {
- var c = constants.DATA_STORE_CONFIG,
- o = constants.DATA_STORE_OPERATIONAL,
- str = apiStr;
-
- if (apiStr.indexOf(c) === 0) {
- str = swtichTo + apiStr.slice(c.length);
- } else if (apiStr.indexOf(o) === 0) {
- str = swtichTo + apiStr.slice(o.length);
- }
-
- return str;
- }
-
- // TODO: add service's description
- function generateNodesToApis(callback, errorCbk) {
- var allRootNodes = [],
- topLevelSync = SyncService.generateObj(),
- reqAll = topLevelSync.spawnRequest('all'),
- allAugmentationGroups = {};
-
- YangUiApisService.getAllModules().get().then(
- function (data) {
- processModules(data.modules, function (result, aGroups) {
- allAugmentationGroups = aGroups;
- allRootNodes = result.map(function (node) {
- var copy = node.deepCopy(['augmentionGroups', 'augmentationId']);
-
- NodeWrapperService.wrapAll(copy);
- return copy;
- });
- topLevelSync.removeRequest(reqAll);
- });
- }, function (result) {
- console.error('Error getting API data:', result);
- topLevelSync.removeRequest(reqAll);
- });
-
- topLevelSync.waitFor(function () {
- try {
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Building apis');
- var abApis = ApiBuilderService.processAllRootNodes(allRootNodes);
- callback(abApis, allRootNodes, allAugmentationGroups);
- } catch (e) {
- errorCbk(e);
- throw (e); // do not lose debugging info
- }
- });
-
- }
-
- // TODO: add service's description
- function generateApiTreeData(apis) {
- var dataTree = apis.map(function (item, indexApi) {
- var apisPath = getApisAndPath(item, indexApi);
-
- return {
- label: item.module + (item.revision ? ' rev.' + item.revision : ''),
- module: item.module,
- revision: item.revision,
- children: apisPath,
- };
- }),
- sortedDataTree = dataTree.sort(function (a, b) {
- var sortRes = 0;
- if (a.label < b.label) {
- sortRes = -1;
- }
- if (a.label > b.label) {
- sortRes = 1;
- }
- return sortRes;
- });
-
- return sortedDataTree;
-
- // TODO: add function's description
- function getApisAndPath(item, indexApi) {
- var childrenArray = [];
-
- item.subApis.map(function (itemSub, indexSubApi) {
- var childIndex = 0;
- fillPath(itemSub.pathArray, childrenArray, indexSubApi, indexApi, itemSub, childIndex);
- });
-
- return childrenArray;
- }
-
- // TODO: add function's description
- function newElem(pathElem, array) {
- var element = {
- label: pathElem.name,
- module: pathElem.module,
- identifier: pathElem.hasIdentifier() ? getIdentifierStr(pathElem) : '',
- identifiersLength: pathElem.identifiers.length,
- children: [],
- };
-
- array.push(element);
-
- // TODO: add function's description
- function getIdentifierStr(path){
- return path.identifiers.map(function (identifier){
- return '{' + identifier.label + '}';
- }).join(' ');
- }
- }
-
- // TODO: add function's description
- function fillPath(path, array, indexSubApi, indexApi, itemSub, childIndex) {
- var existElem = false,
- arrayIndex = null,
- currentPathItem = path[childIndex],
- continueProcessing = false;
-
- if (childIndex < path.length) {
- if (array.length > 0) {
- existElem = array.some(function (arrayItem, index) {
- var condition = arrayItem.label === currentPathItem.name;
- if (condition) {
- arrayIndex = index;
- }
-
- return condition;
- });
-
- if (!existElem) {
- newElem(currentPathItem, array);
- }
- } else {
- newElem(currentPathItem, array);
- }
-
- arrayIndex = arrayIndex !== null ? arrayIndex : array.length - 1;
- var isContinuing = fillPath(path, array[arrayIndex].children, indexSubApi, indexApi, itemSub, childIndex + 1);
- if (isContinuing === false) {
- array[arrayIndex].indexApi = indexApi;
- array[arrayIndex].indexSubApi = indexSubApi;
- }
-
- continueProcessing = true;
- }
-
- return continueProcessing;
- }
- }
-
- // TODO: add service's description
- function processModules(loadedModules, callback) {
- var modules = [],
- rootNodes = [],
- augments = [],
- syncModules = SyncService.generateObj(),
- augmentionGroups = new YinParserService.Augmentations();
-
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Processing modules');
- loadedModules.module.forEach(function (module) {
- var reqId = syncModules.spawnRequest(module.name);
-
- YinParserService.parseYang(module.name, module.revision, function (module) {
- modules.push(module);
- syncModules.removeRequest(reqId);
- }, function () {
- syncModules.removeRequest(reqId);
- });
- });
-
- syncModules.waitFor(function () {
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Linking uses and typedefs');
- var processedData = ModuleConnectorService.processModuleObjs(modules);
- rootNodes = processedData.rootNodes;
- augments = processedData.augments;
-
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Linking augments');
-
- var sortedAugments = augments.sort(function (a, b) {
- return a.path.length - b.path.length;
- });
-
- sortedAugments.map(function (elem) {
- elem.apply(rootNodes, augmentionGroups);
- });
-
- callback(rootNodes, augmentionGroups);
- });
- }
-
- // TODO: add service's description
- function processModulesMP(loadedModules, basePath, callback) {
- var modules = [],
- rootNodes = [],
- augments = [],
- syncModules = SyncService.generateObj(),
- augmentionGroups = new YinParserService.Augmentations();
-
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Processing modules');
- loadedModules.module.forEach(function (module) {
- var reqId = syncModules.spawnRequest(module.name);
-
- YinParserService.parseYangMP(basePath, module.name, module.revision, function (module) {
- modules.push(module);
- syncModules.removeRequest(reqId);
- }, function () {
- syncModules.removeRequest(reqId);
- });
- });
-
- syncModules.waitFor(function () {
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Linking uses and typedefs');
- var processedData = ModuleConnectorService.processModuleObjs(modules);
- rootNodes = processedData.rootNodes;
- augments = processedData.augments;
-
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Linking augments');
-
- var sortedAugments = augments.sort(function (a, b) {
- return a.path.length - b.path.length;
- });
-
- sortedAugments.map(function (elem) {
- elem.apply(rootNodes, augmentionGroups);
- });
-
- callback(rootNodes, augmentionGroups);
- });
- }
-
- // TODO: add service's description
- function getRequestString(node) {
- var request = RequestBuilderService.createObj(),
- reqStr = '';
-
- node.buildRequest(RequestBuilderService, request, node.module);
-
- if (request && $.isEmptyObject(request) === false) {
- reqStr = RequestBuilderService.resultToString(request);
- }
- return reqStr;
- }
-
- // TODO: add service's description
- function transformTopologyData(data, callback) {
- var links = [],
- nodes = [];
-
-
- if (data['network-topology'] && data['network-topology'].topology.length) {
- var topoData = callback ?
- callback(data['network-topology'].topology) : data['network-topology'].topology[0],
- nodeId = 0,
- linkId = 0;
-
- nodes = topoData.hasOwnProperty('node') ? topoData.node.map(function (nodeData) {
- return {
- 'id': (nodeId++).toString(),
- 'label': nodeData['node-id'],
- group: nodeData['node-id'].indexOf('host') === 0 ? 'host' : 'switch',
- value: 20,
- title: 'Name: <b>' + nodeData['node-id'] + '</b><br>Type: Switch',
- };
- }) : [];
-
- links = topoData.hasOwnProperty('link') ? topoData.link.map(function (linkData) {
- var srcId = getNodeIdByText(nodes, linkData.source['source-node']),
- dstId = getNodeIdByText(nodes, linkData.destination['dest-node']),
- srcPort = linkData.source['source-tp'],
- dstPort = linkData.destination['dest-tp'];
- if (srcId != null && dstId != null) {
- return {
- id: (linkId++).toString(),
- 'from': srcId,
- 'to': dstId,
- title: 'Source Port: <b>' + srcPort + '</b><br>Dest Port: <b>' + dstPort + '</b>',
- };
- }
- }) : [];
- }
-
- return {
- nodes: nodes,
- links: links,
- };
-
- function getNodeIdByText(inNodes, text) {
- var nodes = inNodes.filter(function (item) {
- return item.label === text;
- }),
- nodeId;
-
- if (nodes.length > 0 && nodes[0]) {
- nodeId = nodes[0].id;
- } else {
- return null;
- }
-
- return nodeId;
- }
- }
-
- // TODO: add service's description
- function objectHandler(obj, objCbk, vauleCbk, arrayCbk){
- if ( Array.isArray(obj) ) {
- if (angular.isFunction(arrayCbk)) {
- arrayCbk(obj);
- }
-
- obj.forEach(function (item){
- objectHandler(item, objCbk, vauleCbk);
- });
- } else {
- if ( obj !== null && Object.keys(obj).length > 0 && typeof obj !== 'string' ) {
- if (angular.isFunction(objCbk)) {
- objCbk(obj);
- }
-
- for (var property in obj){
- objectHandler(obj[property], objCbk, vauleCbk);
- }
- } else {
- if (angular.isFunction(vauleCbk)) {
- vauleCbk(obj);
- }
- }
- }
- }
-
- // TODO: add service's description
- // TODO: seems to be not used more
- function prepareRequestData(requestData, operation, reqString, subApi){
- var preparedData = requestData;
-
- if (operation === constants.OPERATION_GET || operation === constants.OPERATION_DELETE){
- preparedData = null;
- }
- else if (operation === constants.OPERATION_POST){
- return postRequestData(requestData, reqString, subApi);
- }
-
- return preparedData;
- }
-
- // TODO: add service's description
- function prepareOperation(operation){
- return operation === constants.OPERATION_DELETE ? 'REMOVE' : operation;
- }
-
- // TODO: add service's description
- function prepareHeaders(requestData){
- return requestData === constants.NULL_DATA ?
- { 'Content-Type': undefined } : { 'Content-Type': 'application/yang.data+json' };
- }
-
- // TODO: add function's description
- function checkSupApiIdentifiers(subApi){
- var pathElement = subApi.pathArray[subApi.pathArray.length - 1];
- return pathElement.hasIdentifier() ? pathElement.identifiers : [];
- }
-
- // TODO: add function's description
- function postRequestData(requestData, reqString, subApi){
- var identifiersArray = checkSupApiIdentifiers(subApi);
-
- if ( identifiersArray.length ) {
- var pathArray = reqString.split('/'),
- reqObj = null;
-
- identifiersArray.forEach(function (){
- pathArray.pop();
- });
-
- reqString = pathArray.join('/');
- var requestItem = requestData[lastPathElement(reqString)] ?
- requestData[lastPathElement(reqString)].filter(function (item){
- return identifiersArray.every(function (i){
- return item[i.label] === i.value;
- });
- }) : [];
-
- return requestItem.length ? requestItem[0] : {};
- } else {
- return requestData[lastPathElement(reqString)];
- }
-
- // TODO: add function's description
- function lastPathElement(path){
- return path.split('/').pop().split(':').pop();
- }
- }
- }
-
- YangUtilsService.$inject = ['YinParserService', 'NodeWrapperService', 'RequestBuilderService', 'SyncService',
- 'constants', 'ModuleConnectorService', 'YangUiApisService', 'EventDispatcherService',
- 'ApiBuilderService'];
-
- return YangUtilsService;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- function YinParserService($http, SyncService, constants, PathUtilsService, YangUiApisService, NodeUtilsService){
- var augmentType = 'augment',
- path = './assets',
- service = {
- parseYang: parseYang,
- parseYangMP: parseYangMP,
- Augmentations: Augmentations,
- Module: Module,
- yangParser: new YangParser(),
- __test: {
- path: path,
- parentTag: parentTag,
- yangParser: new YangParser(),
- Augmentation: Augmentation,
- Module: Module,
- },
- };
-
- return service;
-
- // TODO: add service's description
- function parseYangMP(baseApiPath, name, rev, callback, errorCbk) {
- var path = baseApiPath + '/' + name + '/' + rev + '/schema';
-
- YangUiApisService.getSingleModuleInfo(path)
- .then(function (data) {
- if ($.parseXML(data.data) !== null) {
- parseModule(data.data, callback);
- } else {
- loadStaticModule(name, callback, errorCbk);
- }
- }, function () {
- loadStaticModule(name, callback, errorCbk);
- });
- }
-
- // TODO: add service's description
- function parseYang(name, rev, callback, errorCbk) {
- YangUiApisService.getModuleSchema(name, rev).get()
- .then(function (data) {
- if ($.parseXML(data) !== null) {
- parseModule(data, callback);
- } else {
- loadStaticModule(name, callback, errorCbk);
- }
- }, function () {
- loadStaticModule(name, callback, errorCbk);
- });
- }
-
- // TODO: add service's description
- function parentTag(xml) {
- if (xml.get(0).tagName.toLowerCase() === 'module') {
- return xml.get(0);
- } else {
- return parentTag(xml.parent());
- }
- }
-
- // TODO: add function's description
- function parseModule(data, callback) {
- var yangParser = new YangParser();
-
- var moduleName = $($.parseXML(data).documentElement).attr('name'),
- moduleNamespace = $($.parseXML(data)).find('namespace').attr('uri'),
- moduleoduleRevision = $($.parseXML(data)).find('revision').attr('date'),
- moduleObj = new Module(moduleName, moduleoduleRevision, moduleNamespace);
-
- yangParser.setCurrentModuleObj(moduleObj);
- yangParser.parse($.parseXML(data).documentElement, moduleObj);
-
- yangParser.sync.waitFor(function () {
- callback(moduleObj);
- });
- }
-
- // TODO: add function's description
- function loadStaticModule(name, callback, errorCbk) {
- var yinPath = '/yang2xml/' + name + '.yang.xml';
- $http.get(path + yinPath).success(function (data) {
- parseModule(data, callback);
- }).error(function () {
- errorCbk();
- return null;
- });
- }
-
- /**
- * Base Module object
- * @param name
- * @param revision
- * @param namespace
- * @constructor
- */
- function Module(name, revision, namespace) {
- this._name = name;
- this._revision = revision;
- this._namespace = namespace;
- this._statements = {};
- this._roots = [];
- this._augments = [];
-
- this.getRoots = function () {
- return this._roots;
- };
-
- this.getImportByPrefix = function (prefix) {
- var importNode = null;
-
- if (this._statements.hasOwnProperty('import')) {
- importNode = this._statements.import.filter(function (importItem) {
- return importItem._prefix === prefix;
- })[0];
- }
-
- return importNode;
- };
-
- this.getRawAugments = function () {
- return this._augments;
- };
-
- this.getAugments = function () {
- var self = this;
-
- return this.getRawAugments().map(function (augNode) {
- augNode.path = PathUtilsService.translate(augNode.pathString, prefixConverter, self._statements.import, getDefaultModule);
-
- return new Augmentation(augNode);
-
- // TODO: add function's description
- function prefixConverter(prefix) {
- var importNode = self.getImportByPrefix(prefix);
- return importNode ? importNode.label : null;
- }
-
- // TODO: add function's description
- function getDefaultModule() {
- return null;
- }
- });
- };
-
- this.addChild = function (node) {
- if (!this._statements.hasOwnProperty(node.type)) {
- this._statements[node.type] = [];
- }
-
- var duplicates = this._statements[node.type].filter(function (item) {
- return node.label === item.label && node.nodeType === item.nodeType;
- });
-
- if (duplicates && duplicates.length > 0) {
- } else {
- this._statements[node.type].push(node);
-
- if (NodeUtilsService.isRootNode(node.type)) {
- this._roots.push(node);
- }
-
- if (node.type === 'augment') {
- this._augments.push(node);
- }
- }
- };
-
- this.searchNode = function (type, name) {
- var searchResults = null,
- searchedNode = null;
-
- if (this._statements[type]) {
- searchResults = this._statements[type].filter(function (node) {
- return name === node.label;
- });
- }
-
- if (searchResults && searchResults.length === 0) {
- } else if (searchResults && searchResults.length > 1) {
- } else if (searchResults && searchResults.length === 1) {
- searchedNode = searchResults[0];
- }
-
- return searchedNode;
- };
- }
-
- /**
- * Base Node element object
- * @param id
- * @param name
- * @param type
- * @param module
- * @param namespace
- * @param parent
- * @param nodeType
- * @param moduleRevision
- * @constructor
- */
- function Node(id, name, type, module, namespace, parent, nodeType, moduleRevision) {
- this.id = id;
- this.label = name;
- this.localeLabel = constants.LOCALE_PREFIX + name.toUpperCase();
- this.type = type;
- this.module = module;
- this.children = [];
- this.parent = parent;
- this.nodeType = nodeType;
- this.namespace = namespace;
- this.moduleRevision = moduleRevision;
-
- this.appendTo = function (parentNode) {
- parentNode.addChild(this);
- };
-
- this.addChild = function (node) {
- if (this.children.indexOf(node) === -1) {
- this.children.push(node);
- node.parent = this;
- }
-
- };
-
- this.deepCopy = function deepCopy(additionalProperties) {
- var copy = new Node(this.id, this.label, this.type, this.module, this.namespace, null,
- this.nodeType, this.moduleRevision),
- self = this;
-
- additionalProperties = (additionalProperties || []).concat(['pathString']);
-
- additionalProperties.forEach(function (prop) {
- if (prop !== 'children' && self.hasOwnProperty(prop) && copy.hasOwnProperty(prop) === false) {
- copy[prop] = self[prop];
- }
- });
-
- this.children.forEach(function (child) {
- var childCopy = child.deepCopy(additionalProperties);
- childCopy.parent = copy;
- copy.children.push(childCopy);
- });
- return copy;
- };
-
- this.getCleanCopy = function (){
- return new Node(this.id, this.label, this.type, this.module, this.namespace, null,
- this.nodeType, this.moduleRevision);
- };
-
- this.getChildren = function (type, name, nodeType, property) {
- var filteredChildren = this.children.filter(function (item) {
- return (name != null ? name === item.label : true) &&
- (type != null ? type === item.type : true) &&
- (nodeType != null ? nodeType === item.nodeType : true);
- });
-
- if (property) {
- return filteredChildren.filter(function (item) {
- return item.hasOwnProperty(property);
- }).map(function (item) {
- return item[property];
- });
- } else {
- return filteredChildren;
- }
- };
-
- }
-
- /**
- * Base Augment group object
- * @constructor
- */
- function AugmentationsGroup(){
- this.obj = {};
-
- this.addAugumentation = function (augumentation){
- this.obj[augumentation.id] = augumentation;
- };
- }
-
- /**
- * Base augment's groups object
- * @constructor
- */
- function Augmentations(){
- this.groups = {};
-
- this.addGroup = function (groupId){
- this.groups[groupId] = !this.groups.hasOwnProperty(groupId) ?
- new AugmentationsGroup() : this.groups[groupId];
- };
-
- this.getAugmentation = function (node, augId) {
- return this.groups[node.module + ':' + node.label] ?
- this.groups[node.module + ':' + node.label].obj[augId] : null;
- };
- }
-
- /**
- * Base Augment object
- * @param node
- * @constructor
- */
- function Augmentation(node) {
- var self = this;
- this.node = node;
- this.path = (node.path ? node.path : []);
- this.id = node.module + ':' + node.label;
- this.expanded = true;
- // AUGMENT FIX
- // node.label = node.module + ':' + node.label;
-
-
- this.toggleExpand = function () {
- this.expanded = !this.expanded;
- };
-
- this.setAugmentationGroup = function (targetNode, augumentations){
- var targetNodeId = targetNode.module + ':' + targetNode.label;
- targetNode.augmentionGroups = targetNode.augmentionGroups ? targetNode.augmentionGroups : [];
- targetNode.augmentionGroups.push(self.id);
-
- augumentations.addGroup(targetNodeId);
- augumentations.groups[targetNodeId].addAugumentation(self);
- };
-
- this.apply = function (nodeList, augumentations) {
- var targetNode = this.getTargetNodeToAugment(nodeList);
-
- if (targetNode) {
- this.setAugmentationGroup(targetNode, augumentations);
-
- this.node.children.forEach(function (child) {
- child.appendTo(targetNode);
- child.augmentationId = self.id;
- // AUGMENT FIX
- // child.children.forEach(function (moduleChild) {
- // moduleChild.label = moduleChild.module + ':' + moduleChild.label;
- // });
- });
- } else {
- }
- };
-
- this.getTargetNodeToAugment = function (nodeList) {
- return PathUtilsService.search({ children: nodeList }, this.path.slice());
- };
-
- this.getPathString = function () {
- return this.path.map(function (elem) {
- return elem.module + ':' + elem.name;
- }).join('/');
- };
-
- }
-
- /**
- * Base yang xml parser
- * @constructor
- */
- function YangParser() {
- this.rootNodes = [];
- this.nodeIndex = 0;
- this.sync = SyncService.generateObj();
- this.moduleObj = null;
-
- this.setCurrentModuleObj = function (moduleObj) {
- this.moduleObj = moduleObj;
- };
-
- this.createNewNode = function (name, type, parentNode, nodeType) {
- var node = new Node(this.nodeIndex++, name, type, this.moduleObj._name, this.moduleObj._namespace, parentNode, nodeType, this.moduleObj._revision);
-
- if (parentNode) {
- parentNode.addChild(node);
- }
-
- return node;
- };
-
- this.parse = function (xml, parent) {
- var self = this;
-
- $(xml).children().each(function (_, item) {
- var prop = item.tagName.toLowerCase();
- if (self.hasOwnProperty(prop)) {
- self[prop](item, parent);
- } else {
- // self.parse(this, parent);
- }
- });
- };
-
- this.config = function (xml, parent) {
- var type = constants.DATA_STORE_CONFIG,
- name = $(xml).attr('value'),
- nodeType = constants.NODE_ALTER;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.presence = function (xml, parent) {
- var type = 'presence',
- name = $(xml).attr('value'),
- nodeType = constants.NODE_ALTER;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.leaf = function (xml, parent) {
- var type = 'leaf',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this['leaf-list'] = function (xml, parent) {
- var type = 'leaf-list',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.container = function (xml, parent) {
- var type = 'container',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.choice = function (xml, parent) {
- var type = 'choice',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.case = function (xml, parent) {
- var type = 'case',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.list = function (xml, parent) {
- var type = 'list',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
-
- this.key = function (xml, parent) {
- var type = 'key',
- name = $(xml).attr('value'),
- nodeType = constants.NODE_ALTER,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.description = function (xml, parent) {
- var type = 'description',
- name = $(xml).attr('text') ? $(xml).attr('text') : $(xml).children('text:first').text(),
- nodeType = constants.NODE_ALTER,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.typedef = function (xml, parent, typedefName) {
- var type = 'typedef',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_LINK_TARGET,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.grouping = function (xml, parent, groupingName) {
- var type = 'grouping',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_LINK_TARGET,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.uses = function (xml, parent) {
- var type = 'uses',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_LINK,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.import = function (xml, parent) {
- var type = 'import',
- name = $(xml).attr('module'),
- nodeType = constants.NODE_ALTER,
- node = this.createNewNode(name, type, parent, nodeType);
-
- node._prefix = $(xml).children('prefix:first').attr('value');
- node._revisionDate = $(xml).children('revision-date:first').attr('date');
- };
-
- this.augment = function (xml, parent) {
- var type = augmentType,
- nodeType = constants.NODE_ALTER,
- augmentIndentifier = $(xml).children('ext\\:augment-identifier:first').attr('ext:identifier'),
- name = augmentIndentifier ? augmentIndentifier : 'augment' + (this.nodeIndex + 1).toString(),
- pathString = $(xml).attr('target-node'),
- augmentRoot = this.createNewNode(name, type, parent, nodeType);
-
- augmentRoot.pathString = pathString;
- this.parse(xml, augmentRoot);
- };
-
-
- this.rpc = function (xml, parent) {
- var type = constants.NODE_RPC,
- name = $(xml).attr('name'),
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.input = function (xml, parent) {
- var type = 'input',
- name = 'input',
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.output = function (xml, parent) {
- var type = 'output',
- name = 'output',
- nodeType = constants.NODE_UI_DISPLAY,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.pattern = function (xml, parent) {
- var type = 'pattern',
- name = $(xml).attr('value'),
- nodeType = constants.NODE_RESTRICTIONS;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.range = function (xml, parent) {
- var type = 'range',
- name = $(xml).attr('value'),
- nodeType = constants.NODE_RESTRICTIONS;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.length = function (xml, parent) {
- var type = 'length',
- name = $(xml).attr('value'),
- nodeType = constants.NODE_RESTRICTIONS;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.enum = function (xml, parent) {
- var type = 'enum',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_ALTER;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.bit = function (xml, parent) {
- var type = 'bit',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_ALTER,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
-
- this.position = function (xml, parent) {
- var type = 'position',
- name = $(xml).attr('value'),
- nodeType = constants.NODE_ALTER;
-
- this.createNewNode(name, type, parent, nodeType);
- };
-
- this.type = function (xml, parent) {
- var type = 'type',
- name = $(xml).attr('name'),
- nodeType = constants.NODE_ALTER,
- node = this.createNewNode(name, type, parent, nodeType);
-
- this.parse(xml, node);
- };
- }
- }
-
- YinParserService.$inject = ['$http', 'SyncService', 'constants', 'PathUtilsService', 'YangUiApisService',
- 'NodeUtilsService'];
-
- return YinParserService;
-
-});
+++ /dev/null
-var services = [\r
- 'common/yangutils/services/node-utils.services',\r
- 'common/yangutils/services/yang-utils-restangular.services',\r
- 'common/yangutils/services/yang-utils.services',\r
- 'common/yangutils/services/yin-parser.services',\r
- 'common/yangutils/services/sync.services',\r
- 'common/yangutils/services/path-utils.services',\r
- 'common/yangutils/services/array-utils.services',\r
- 'common/yangutils/services/yang-ui-apis.services',\r
- 'common/yangutils/services/node-wrapper.services',\r
- 'common/yangutils/services/request-builder.services',\r
- 'common/yangutils/services/restrictions.services',\r
- 'common/yangutils/services/type-wrapper.services',\r
- 'common/yangutils/services/list-filtering.services',\r
- 'common/yangutils/services/filter-node-wrapper.services',\r
- 'common/yangutils/services/event-dispatcher.services',\r
- 'common/yangutils/services/module-connector.services',\r
- 'common/yangutils/services/api-builder.services',\r
- 'common/yangutils/services/data-backup.services',\r
- 'common/yangutils/services/parsing-json.services',\r
- 'common/yangutils/services/custom-funct.services',\r
-];\r
-\r
-var constant = [\r
- 'common/yangutils/constants',\r
-];\r
-\r
-define(['angular'].concat(services).concat(constant),\r
- function (angular, NodeUtilsService, YangUtilsRestangularService, YangUtilsService, YinParserService, SyncService,\r
- PathUtilsService, ArrayUtilsService, YangUiApisService, NodeWrapperService, RequestBuilderService,\r
- RestrictionsService, TypeWrapperService, ListFilteringService, FilterNodeWrapperService,\r
- EventDispatcherService, ModuleConnectorService, ApiBuilderService, DataBackupService, ParsingJsonService,\r
- CustomFuncService, constants) {\r
-\r
- 'use strict';\r
-\r
- angular.module('app.common.yangUtils', [])\r
- .service('NodeUtilsService', NodeUtilsService)\r
- .service('YangUtilsRestangularService', YangUtilsRestangularService)\r
- .service('YangUtilsService', YangUtilsService)\r
- .service('YinParserService', YinParserService)\r
- .service('SyncService', SyncService)\r
- .service('PathUtilsService', PathUtilsService)\r
- .service('ArrayUtilsService', ArrayUtilsService)\r
- .service('YangUiApisService', YangUiApisService)\r
- .service('NodeWrapperService', NodeWrapperService)\r
- .service('RequestBuilderService', RequestBuilderService)\r
- .service('RestrictionsService', RestrictionsService)\r
- .service('TypeWrapperService', TypeWrapperService)\r
- .service('ListFilteringService', ListFilteringService)\r
- .service('FilterNodeWrapperService', FilterNodeWrapperService)\r
- .service('EventDispatcherService', EventDispatcherService)\r
- .service('ModuleConnectorService', ModuleConnectorService)\r
- .service('ApiBuilderService', ApiBuilderService)\r
- .service('DataBackupService', DataBackupService)\r
- .service('ParsingJsonService', ParsingJsonService)\r
- .service('CustomFuncService', CustomFuncService)\r
-\r
- .constant('constants', constants);\r
-\r
- });\r
+++ /dev/null
-/**\r
- * Copyright (c) 4/7/2014 Cisco and others. All rights reserved.\r
- * \r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- * \r
- * UNIT TESTING FILE FOR YANGUTILS.JS\r
- * \r
- */\r
-\r
-define(['common/yangutils/yangutils.module', 'common/config/env.module'], function() {\r
-\r
- describe('app.common.yangUtils', function(){\r
-\r
- var propertiesEqual = function(a, b) {\r
- var excludedTypes = ['array']; //TODO rework?\r
-\r
- var aProps = Object.keys(a).filter(function(i) {\r
- return excludedTypes.indexOf(typeof a[i]) === -1;\r
- });\r
-\r
- for(var index in aProps) {\r
- var prop = aProps[index];\r
- expect(a.hasOwnProperty(prop) && b.hasOwnProperty(prop)).toBe(true);\r
-\r
- var aPropToTest = (a[prop] ? a[prop].toString(): null),\r
- bPropToTest = (b[prop] ? b[prop].toString(): null);\r
-\r
- expect(aPropToTest).toBe(bPropToTest);\r
- }\r
- };\r
-\r
- var childrenEqual = function(a, b) {\r
- expect(a.children.length).toBe(b.children.length);\r
-\r
- for(var i = 0; i < a.children.length; i++) {\r
- nodesEqual(a.children[i], b.children[i]);\r
- }\r
- };\r
-\r
- var nodesEqual = function(a, b) {\r
- expect(Object.keys(a).length).toBe(Object.keys(b).length);\r
-\r
- try {\r
- propertiesEqual(a, b);\r
- childrenEqual(a, b);\r
- } catch (e) {\r
- console.warn('copy testing ',e.message);\r
- }\r
- };\r
-\r
- var constants;\r
- beforeEach(angular.mock.module('config'));\r
- beforeEach(angular.mock.module('restangular'));\r
- beforeEach(angular.mock.module('app.common.yangUtils'));\r
- \r
- beforeEach(function() {\r
- angular.mock.inject(function(_constants_) {\r
- constants = _constants_;\r
- });\r
- });\r
-\r
- describe('custFunct', function(){\r
-\r
- var custFunct, yinParser, yangParser;\r
-\r
- beforeEach(function(){\r
- angular.mock.inject(function(_custFunct_, _yinParser_){\r
- custFunct = _custFunct_;\r
- yinParser = _yinParser_;\r
-\r
- });\r
-\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- });\r
-\r
- it('createNewFunctionality', function(){\r
- var node = yangParser.createNewNode('flows','leaf', null, constants.NODE_UI_DISPLAY),\r
- dummyValue = false,\r
- customFunctionality = custFunct.createNewFunctionality('test', node, function(){\r
- dummyValue = true;\r
- });\r
-\r
- expect(dummyValue).toBe(false);\r
- customFunctionality.runCallback();\r
- expect(dummyValue).toBe(true);\r
- expect(customFunctionality.label).toBe('test');\r
- expect(angular.isFunction(customFunctionality.callback)).toBe(true);\r
- expect(angular.isFunction(customFunctionality.runCallback)).toBe(true);\r
- expect(angular.isFunction(customFunctionality.setCallback)).toBe(true);\r
- dummyValue = false;\r
- customFunctionality.setCallback(null);\r
- customFunctionality.runCallback();\r
- expect(dummyValue).toBe(false);\r
-\r
- customFunctionality = custFunct.createNewFunctionality('test');\r
- expect(customFunctionality).toBe(undefined);\r
- });\r
-\r
- });\r
-\r
- describe('reqBuilder', function() {\r
-\r
- var reqBuilder, testObject, testListArray;\r
-\r
- beforeEach(function() {\r
-\r
- angular.mock.inject(function(_reqBuilder_) {\r
- reqBuilder = _reqBuilder_;\r
- });\r
- });\r
-\r
- it('createList', function() {\r
- expect(angular.isFunction(reqBuilder.createList)).toBe(true);\r
- });\r
-\r
- it('insertObjToList', function() {\r
- testObject = reqBuilder.createObj();\r
- testListArray = reqBuilder.createList();\r
-\r
- expect(testListArray.length).toBe(0);\r
- reqBuilder.insertObjToList(testListArray, testObject);\r
- expect(testListArray[0]).toBe(testObject);\r
-\r
- });\r
-\r
- it('insertPropertyToObj', function() {\r
-\r
- var testProperty = 'testProp';\r
- var testValue = 'testValue';\r
-\r
- expect(testObject[testProperty]).toBeUndefined();\r
- reqBuilder.insertPropertyToObj(testObject, testProperty, testValue);\r
- expect(testObject[testProperty]).toBe(testValue);\r
- reqBuilder.insertPropertyToObj(testObject, testProperty);\r
- expect($.isEmptyObject(testObject[testProperty])).toBe(true);\r
- });\r
-\r
- it('resultToString ', function() {\r
-\r
- var stringJSON = reqBuilder.resultToString(testObject);\r
- var isValidJSON = true;\r
-\r
- try {\r
- JSON.parse(stringJSON);\r
- } catch (e) {\r
- isValidJSON = false;\r
- }\r
-\r
- expect(isValidJSON).toBe(true);\r
-\r
- });\r
-\r
- });\r
-\r
- describe('restrictionsFact', function() {\r
- var restrictionsFact;\r
-\r
- beforeEach(function() {\r
- angular.mock.inject(function(_restrictionsFact_) {\r
- restrictionsFact = _restrictionsFact_;\r
- });\r
- });\r
-\r
- it('getEqualsFnc', function(){\r
- var eqVal = 5,\r
- testFnc = restrictionsFact.getEqualsFnc(eqVal);\r
-\r
- expect(angular.isFunction(testFnc.check)).toBe(true);\r
- expect(testFnc.check(eqVal)).toBe(true);\r
- expect(testFnc.check(eqVal+1)).toBe(false);\r
-\r
- });\r
-\r
- it('getMinMaxFnc', function(){\r
- var minVal = 5,\r
- delta = 100,\r
- testFnc = restrictionsFact.getMinMaxFnc(minVal, minVal+delta);\r
-\r
- expect(angular.isFunction(testFnc.check)).toBe(true);\r
- expect(testFnc.check(minVal+delta/2)).toBe(true);\r
- expect(testFnc.check(minVal+delta+1)).toBe(false);\r
-\r
- });\r
-\r
- it('getReqexpValidationFnc', function(){\r
- var patternStr = 'A',\r
- testFnc = restrictionsFact.getReqexpValidationFnc(patternStr);\r
-\r
- expect(angular.isFunction(testFnc.check)).toBe(true);\r
- expect(testFnc.check('ABC')).toBe(true);\r
- expect(testFnc.check('XYZ')).toBe(false);\r
- });\r
- });\r
-\r
- describe('yangUtils', function() {\r
-\r
- var yangUtils, yinParser, nodeWrapper, $httpBackend, $timeout, apiConnector, yangParser, reqBuilder;\r
-\r
- beforeEach(function() {\r
-\r
- angular.mock.inject(function(_yangUtils_) {\r
- yangUtils = _yangUtils_;\r
- });\r
-\r
- angular.mock.inject(function(_yinParser_) {\r
- yinParser = _yinParser_;\r
- });\r
-\r
- angular.mock.inject(function(_nodeWrapper_) {\r
- nodeWrapper = _nodeWrapper_;\r
- });\r
-\r
- angular.mock.inject(function(_$httpBackend_) {\r
- $httpBackend = _$httpBackend_;\r
- });\r
-\r
- angular.mock.inject(function(_$timeout_) {\r
- $timeout = _$timeout_;\r
- });\r
-\r
- angular.mock.inject(function(_apiConnector_) {\r
- apiConnector = _apiConnector_;\r
- });\r
-\r
- angular.mock.inject(function(_reqBuilder_) {\r
- reqBuilder = _reqBuilder_;\r
- });\r
-\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- });\r
-\r
- it('getRequestString', function(){\r
- var node = yangParser.createNewNode('ports','leaf', null, constants.NODE_UI_DISPLAY),\r
- reqStr,\r
- isValidJSON = true,\r
- jsonData;\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(yangUtils.getRequestString)).toBe(true);\r
- node.value = 'dummyValue';\r
- reqStr = yangUtils.getRequestString(node);\r
-\r
- try {\r
- jsonData = JSON.parse(reqStr);\r
- } catch (e) {\r
- isValidJSON = false;\r
- }\r
-\r
- expect(isValidJSON).toBe(true);\r
- expect(jsonData.ports).toBe('dummyValue');\r
-\r
- node.value = '';\r
-\r
- reqStr = yangUtils.getRequestString(node);\r
- expect(reqStr).toBe('');\r
- });\r
-\r
- it('processModules', function(){\r
- var modules = {module: [{ 'name': 'MA'}, { 'name': 'MB'}, { 'name': 'MC'}, { 'name': 'MD'}]},\r
- mA = '<module name="MA">' +\r
- ' <leaf name="LA"></leaf>' +\r
- ' <container name="CA"></container>' +\r
- '</module>',\r
- mB = '<module name="MB">' +\r
- '</module>',\r
- mC = '<module name="MC">' +\r
- ' <import module="MA">' +\r
- ' <prefix value="MApref"/>' +\r
- ' </import>' +\r
- ' <import module="MB">' +\r
- ' <prefix value="MBpref"/>' +\r
- ' </import>' +\r
- ' <leaf name="LC"></leaf>' +\r
- ' <augment target-node="/MApref:CA">' +\r
- ' <leaf name="LAUG1"></leaf>' +\r
- ' </augment>' +\r
- ' <augment target-node="/MBpref:CA">' +\r
- ' <leaf name="LAUG2"></leaf>' +\r
- ' </augment>' +\r
- '</module>',\r
- nodes = [];\r
-\r
- $httpBackend.when('GET', './assets/yang2xml/MA.yang.xml').respond(mA);\r
- $httpBackend.when('GET', './assets/yang2xml/MB.yang.xml').respond(mB);\r
- $httpBackend.when('GET', './assets/yang2xml/MC.yang.xml').respond(mC);\r
- $httpBackend.when('GET', './assets/yang2xml/MD.yang.xml').respond(404);\r
-\r
- yangUtils.processModules(modules, function(loadedNodes) {\r
- nodes = loadedNodes;\r
- });\r
- $httpBackend.flush();\r
- $timeout.flush();\r
-\r
- expect(nodes.length).toBe(3);\r
- expect(nodes[1].children.length).toBe(1);\r
- });\r
-\r
- it('generateNodesToApis', function(){\r
- var hostPort = 'http://localhost:8080',\r
- baseUrl = hostPort+'/restconf',\r
- modules = {modules: {module: [{ 'name': 'MA'}, { 'name': 'MB'}, { 'name': 'MC'}]}},\r
- mA = '<module name="MA">' +\r
- ' <leaf name="LA"></leaf>' +\r
- '</module>',\r
- mB = '<module name="MB">' +\r
- ' <leaf name="LB"></leaf>' +\r
- '</module>',\r
- mC = '<module name="MC">' +\r
- ' <leaf name="LC"></leaf>' +\r
- '</module>',\r
- apis = {apis: [{path: hostPort+'/apidoc/apis/MA(rev1)'},\r
- {path: hostPort+'/apidoc/apis/MB(rev2)'}]},\r
- apiA = {\r
- baseUrl: baseUrl,\r
- apis: [\r
- {\r
- path: '/config/MA:LA/',\r
- operations: [ {method: 'GET' }, {method: 'PUT' }]\r
- }\r
- ]\r
- },\r
- apiB = {\r
- baseUrl: baseUrl,\r
- apis: [\r
- {\r
- path: '/config/MB:LB/',\r
- operations: [ {method: 'GET' }, {method: 'DELETE' }]\r
- }\r
- ]\r
- },\r
- loadedNodes = [],\r
- loadedApis = [];\r
-\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/').respond(apis);\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/MA(rev1)').respond(apiA);\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/MB(rev2)').respond(apiB);\r
- $httpBackend.when('GET', baseUrl+'/modules/').respond(modules);\r
- $httpBackend.when('GET', './assets/yang2xml/MA.yang.xml').respond(mA);\r
- $httpBackend.when('GET', './assets/yang2xml/MB.yang.xml').respond(mB);\r
- $httpBackend.when('GET', './assets/yang2xml/MC.yang.xml').respond(mC);\r
-\r
- yangUtils.generateNodesToApis(function(apis, nodes) {\r
- loadedApis = apis;\r
- loadedNodes = nodes;\r
- }, function() {\r
-\r
- });\r
-\r
- $httpBackend.flush();\r
- $timeout.flush();\r
- $timeout.flush();\r
-\r
- expect(loadedApis.length).toBe(2);\r
- expect(loadedNodes.length).toBe(3);\r
- });\r
-\r
- it('generateNodesToApis - Http error', function(){\r
- var hostPort = 'http://localhost:8080',\r
- baseUrl = hostPort+'/restconf',\r
- loadedNodes = [],\r
- loadedApis = [];\r
-\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/').respond(404);\r
- $httpBackend.when('GET', baseUrl+'/modules/').respond(404);\r
-\r
- yangUtils.generateNodesToApis(function(apis, nodes) {\r
- loadedApis = apis;\r
- loadedNodes = nodes;\r
- }, function() {});\r
-\r
- $httpBackend.flush();\r
- $timeout.flush();\r
-\r
- expect(loadedApis.length).toBe(0);\r
- expect(loadedNodes.length).toBe(0);\r
- });\r
-\r
- it('generateNodesToApis - exception error', function(){\r
- var hostPort = 'http://localhost:8080',\r
- baseUrl = hostPort+'/restconf',\r
- errorCallbackCalled = false;\r
-\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/').respond(404);\r
- $httpBackend.when('GET', baseUrl+'/modules/').respond(404);\r
-\r
- expect(function() { \r
- yangUtils.generateNodesToApis('error', function() {\r
- errorCallbackCalled = true;\r
- });\r
- $httpBackend.flush();\r
- $timeout.flush();\r
- }).toThrow();\r
-\r
- expect(errorCallbackCalled).toBe(true);\r
- });\r
-\r
- //commented api validation tests until it's fixed in lithium or implemented more reliable method\r
- describe('generateApiTreeData', function(){\r
-\r
- var subApiPathA, subApiPathB, dataTree, responseDummyData, apis, nodeType, yangParser;\r
-\r
- beforeEach(function(){\r
- subApiPathA = '/config/MA:LA/{id}/';\r
- subApiPathB = '/config/MA:LB/';\r
- nodeType = constants.NODE_UI_DISPLAY;\r
- yangParser = yinParser.__test.yangParser;\r
-\r
- subApiA = new apiConnector.__test.SubApi(subApiPathA, ['GET']);\r
- subApiB = new apiConnector.__test.SubApi(subApiPathB, ['PUT']);\r
-\r
- responseDummyData = {\r
- data: true\r
- };\r
-\r
- apis = [\r
- {\r
- module: 'MA',\r
- revision: 'rev1',\r
- basePath: 'dummyPath',\r
- subApis : [subApiA, subApiB]\r
- },\r
- {\r
- module: 'MA',\r
- revision: 'rev2',\r
- basePath: 'dummyPath',\r
- subApis : []\r
- }\r
- ];\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MA', 'R', 'NS'));\r
- });\r
-\r
- it('general', function(){\r
-\r
- var nodeMA = yangParser.createNewNode('LA','leaf', null, nodeType),\r
- nodeMB = yangParser.createNewNode('LB','leaf', null, nodeType);\r
-\r
- nodeWrapper.wrapAll(nodeMA);\r
- nodeWrapper.wrapAll(nodeMB);\r
-\r
- apiConnector.linkApisToNodes(apis, [nodeMA, nodeMB]);\r
-\r
- // $httpBackend.when('PUT', 'dummyPath/config/MA:LB').respond(responseDummyData);\r
-\r
- yangUtils.generateApiTreeData(apis, function(treeApis) {\r
- dataTree = treeApis;\r
- \r
- expect(dataTree.length).toBe(2);\r
- expect(dataTree[0].children.length).toBe(1);\r
- expect(dataTree[0].children[0].children.length).toBe(2);\r
- expect(dataTree[0].label).toBe('MA rev.rev1');\r
- expect(dataTree[0].children[0].label).toBe('config');\r
- expect(dataTree[0].children[0].children[0].identifier).toBe(' {id}');\r
-\r
- });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
-\r
- \r
- });\r
-\r
- // it('list && leaves', function(){\r
-\r
- // var nodeMA = yangParser.createNewNode('LA','leaf', null, nodeType),\r
- // nodeMB = yangParser.createNewNode('LB','list', null, nodeType),\r
- // nodeMC = yangParser.createNewNode('LC','leaf', nodeMB, nodeType);\r
- \r
- // nodeWrapper.wrapAll(nodeMA);\r
- // nodeWrapper.wrapAll(nodeMB);\r
- // nodeMB.addListElem();\r
-\r
- // apiConnector.linkApisToNodes(apis, [nodeMA, nodeMB]);\r
-\r
- // $httpBackend.when('PUT', 'dummyPath/config/MA:LB').respond(responseDummyData);\r
-\r
- // yangUtils.generateApiTreeData(apis, function(treeApis) {\r
- // dataTree = treeApis;\r
-\r
- // // console.log('dataTree',dataTree);\r
- // var checkNode = apis[dataTree[0].children[0].children[1].indexApi].subApis[dataTree[0].children[0].children[1].indexSubApi].node;\r
- // // console.log('checkNode',checkNode);\r
-\r
- // expect(dataTree[0].children.length).toBe(1);\r
- // expect(dataTree[0].children[0].children.length).toBe(2);\r
- // expect(dataTree[0].label).toBe('MA rev.rev1');\r
- // expect(dataTree[0].children[0].label).toBe('config');\r
- // expect(checkNode.actElemStructure.children[0].value).toBe('0');\r
-\r
- // });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
-\r
- // });\r
-\r
- // it('non list && leaves', function(){\r
-\r
- // var nodeMA = yangParser.createNewNode('LA','leaf', null, nodeType),\r
- // nodeMB = yangParser.createNewNode('LB','container', null, nodeType),\r
- // nodeMC = yangParser.createNewNode('LC','leaf', nodeMB, nodeType);\r
- \r
- // nodeWrapper.wrapAll(nodeMA);\r
- // nodeWrapper.wrapAll(nodeMB);\r
-\r
- // apiConnector.linkApisToNodes(apis, [nodeMA, nodeMB]);\r
-\r
- // $httpBackend.when('PUT', 'dummyPath/config/MA:LB').respond(responseDummyData);\r
-\r
- // yangUtils.generateApiTreeData(apis, function(treeApis) {\r
- // dataTree = treeApis;\r
-\r
- // // console.log('dataTree',dataTree);\r
- // var checkNode = apis[dataTree[0].children[0].children[1].indexApi].subApis[dataTree[0].children[0].children[1].indexSubApi].node;\r
- // // console.log('checkNode',checkNode);\r
-\r
- // expect(dataTree[0].children.length).toBe(1);\r
- // expect(dataTree[0].children[0].children.length).toBe(2);\r
- // expect(dataTree[0].label).toBe('MA rev.rev1');\r
- // expect(dataTree[0].children[0].label).toBe('config');\r
- // expect(checkNode.children[0].value).toBe('0');\r
-\r
- // });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
-\r
- // });\r
-\r
- // it('list && non leaves', function(){\r
-\r
- // var nodeMA = yangParser.createNewNode('LA','leaf', null, nodeType),\r
- // nodeMB = yangParser.createNewNode('LB','list', null, nodeType),\r
- // nodeMC = yangParser.createNewNode('LC','container', nodeMB, nodeType);\r
- // nodeMD = yangParser.createNewNode('LD','leaf', nodeMC, nodeType);\r
- \r
- // nodeWrapper.wrapAll(nodeMA);\r
- // nodeWrapper.wrapAll(nodeMB);\r
- // nodeMB.addListElem();\r
-\r
- // apiConnector.linkApisToNodes(apis, [nodeMA, nodeMB]);\r
-\r
- // $httpBackend.when('PUT', 'dummyPath/config/MA:LB').respond(responseDummyData);\r
-\r
- // yangUtils.generateApiTreeData(apis, function(treeApis) {\r
- // dataTree = treeApis;\r
-\r
- // // console.log('dataTree',dataTree);\r
- // var checkNode = apis[dataTree[0].children[0].children[1].indexApi].subApis[dataTree[0].children[0].children[1].indexSubApi].node;\r
- // // console.log('checkNode',checkNode);\r
-\r
- // expect(dataTree[0].children.length).toBe(1);\r
- // expect(dataTree[0].children[0].children.length).toBe(2);\r
- // expect(dataTree[0].label).toBe('MA rev.rev1');\r
- // expect(dataTree[0].children[0].label).toBe('config');\r
- // expect(checkNode.actElemStructure.children[0].children[0].value).toBe('0');\r
-\r
- // });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
-\r
- // });\r
-\r
- // it('non list && non leaves', function(){\r
-\r
- // var nodeMA = yangParser.createNewNode('LA','leaf', null, nodeType),\r
- // nodeMB = yangParser.createNewNode('LB','container', null, nodeType),\r
- // nodeMC = yangParser.createNewNode('LC','container', nodeMB, nodeType),\r
- // nodeMD = yangParser.createNewNode('LD','list', nodeMC, nodeType),\r
- // nodeME = yangParser.createNewNode('LE','leaf', nodeMD, nodeType);\r
- \r
- // nodeWrapper.wrapAll(nodeMA);\r
- // nodeWrapper.wrapAll(nodeMB);\r
- // nodeMD.addListElem();\r
-\r
- // apiConnector.linkApisToNodes(apis, [nodeMA, nodeMB]);\r
-\r
- // $httpBackend.when('PUT', 'dummyPath/config/MA:LB').respond(responseDummyData);\r
-\r
- // yangUtils.generateApiTreeData(apis, function(treeApis) {\r
- // dataTree = treeApis;\r
-\r
- // // console.log('dataTree',dataTree);\r
- // var checkNode = apis[dataTree[0].children[0].children[1].indexApi].subApis[dataTree[0].children[0].children[1].indexSubApi].node;\r
- // // console.log('checkNode',checkNode);\r
-\r
- // expect(dataTree[0].children.length).toBe(1);\r
- // expect(dataTree[0].children[0].children.length).toBe(2);\r
- // expect(dataTree[0].label).toBe('MA rev.rev1');\r
- // expect(dataTree[0].children[0].label).toBe('config');\r
- // expect(checkNode.children[0].children[0].actElemStructure.children[0].value).toBe('0');\r
-\r
- // });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
-\r
- // });\r
-\r
- // it('non response', function(){\r
-\r
- // var nodeMA = yangParser.createNewNode('LA','leaf', null, nodeType),\r
- // nodeMB = yangParser.createNewNode('LB','list', null, nodeType),\r
- // nodeMC = yangParser.createNewNode('LC','leaf', nodeMB, nodeType);\r
- \r
- // nodeWrapper.wrapAll(nodeMA);\r
- // nodeWrapper.wrapAll(nodeMB);\r
- // nodeMB.addListElem();\r
-\r
- // apiConnector.linkApisToNodes(apis, [nodeMA, nodeMB]);\r
-\r
- // $httpBackend.when('PUT', 'dummyPath/config/MA:LB').respond(401,'error');\r
-\r
- // yangUtils.generateApiTreeData(apis, function(treeApis) {\r
- // dataTree = treeApis;\r
-\r
- // // console.log('dataTree',dataTree);\r
- // expect(dataTree.length).toBe(0);\r
-\r
- // });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
-\r
- // });\r
-\r
- });\r
-\r
- it('transformTopologyData', function(){\r
- var testData = {\r
- 'network-topology': {\r
- 'topology': [{\r
- 'id': 'dummyID1',\r
- 'node': [\r
- {\r
- 'node-id': 'A'\r
- },\r
- {\r
- 'node-id': 'B'\r
- }\r
- ],\r
- 'link': [\r
- {\r
- source: {\r
- 'source-node': 'A',\r
- 'source-tp': 'TP1'\r
- },\r
- destination: {\r
- 'dest-node': 'B',\r
- 'dest-tp': 'TP2'\r
- }\r
- },\r
- {\r
- source: {\r
- 'source-node': 'A',\r
- 'source-tp': 'TP3'\r
- },\r
- destination: {\r
- 'dest-node': 'C',\r
- 'dest-tp': 'TP4'\r
- }\r
- }\r
- ]\r
- }]\r
- }\r
- },\r
- blankData = {\r
- 'network-topology': {\r
- 'topology': [{\r
- 'id': 'dummyID2'\r
- }]\r
- }\r
- },\r
- blankData2 = {},\r
- topoData;\r
-\r
- topoData = yangUtils.transformTopologyData(blankData);\r
- expect(topoData.nodes.length).toBe(0);\r
- expect(topoData.links.length).toBe(0);\r
-\r
- topoData = yangUtils.transformTopologyData(testData);\r
- expect(topoData.nodes.length).toBe(2);\r
- expect(topoData.links.length).toBe(2);\r
-\r
- topoData = yangUtils.transformTopologyData(blankData2);\r
- expect(topoData.nodes.length).toBe(0);\r
- expect(topoData.links.length).toBe(0);\r
- });\r
-\r
- });\r
-\r
- describe('apiConnector', function(){\r
-\r
- var apiConnector, pathUtils, yinParser, $httpBackend, $timeout, yangParser;\r
-\r
- beforeEach(function() {\r
- angular.mock.inject(function(_apiConnector_) {\r
- apiConnector = _apiConnector_;\r
- });\r
-\r
- angular.mock.inject(function(_pathUtils_) {\r
- pathUtils = _pathUtils_;\r
- });\r
-\r
- angular.mock.inject(function(_yinParser_) {\r
- yinParser = _yinParser_;\r
- });\r
-\r
- angular.mock.inject(function(_$httpBackend_) {\r
- $httpBackend = _$httpBackend_;\r
- });\r
-\r
- angular.mock.inject(function(_$timeout_) {\r
- $timeout = _$timeout_;\r
- });\r
-\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- });\r
-\r
- describe('SubApi', function() {\r
- var subApi;\r
-\r
- beforeEach(function() {\r
- subApi = new apiConnector.__test.SubApi('/config/MA:LA/', ['GET', 'PUT']);\r
- });\r
-\r
- it('hasSetData', function(){\r
- expect(subApi.hasSetData()).toBe(false);\r
- });\r
-\r
- it('setNode', function(){\r
- var node = yangParser.createNewNode('N', 'T', null, 0);\r
- subApi.setNode(node);\r
- expect(subApi.node).toBe(node);\r
- });\r
-\r
- it('setPathArray', function(){\r
- var pathArray = [new pathUtils.__test.PathElem('A1','MA'),\r
- new pathUtils.__test.PathElem('A2','MA'),\r
- new pathUtils.__test.PathElem('A3',null)];\r
- subApi.setPathArray(pathArray);\r
- expect(subApi.pathArray).toBe(pathArray);\r
- });\r
-\r
- it('buildApiRequestString', function(){\r
- var pathArray = [new pathUtils.__test.PathElem('A1','MA'),\r
- new pathUtils.__test.PathElem('A2','MA'),\r
- new pathUtils.__test.PathElem('A3',null)];\r
- subApi.setPathArray(pathArray);\r
- expect(subApi.buildApiRequestString()).toBe('MA:A1/MA:A2/A3');\r
- });\r
-\r
- it('addCustomFunctionality', function(){\r
- var fnc = function() {},\r
- node = yangParser.createNewNode('N', 'T', null, 0);\r
-\r
- subApi.setNode(node);\r
-\r
- subApi.addCustomFunctionality('A');\r
- expect(subApi.custFunct.length).toBe(0);\r
-\r
- subApi.addCustomFunctionality('A', fnc);\r
-\r
- expect(subApi.custFunct.length).toBe(1);\r
- expect(subApi.custFunct[0].callback).toBe(fnc);\r
- });\r
- });\r
-\r
- it('apiPathElemsToString', function(){\r
- var pathElems = [],\r
- expectedStr = 'MA:A1/MA:A2/A3';\r
-\r
- pathElems.push(new pathUtils.__test.PathElem('A1','MA'));\r
- pathElems.push(new pathUtils.__test.PathElem('A2','MA'));\r
- pathElems.push(new pathUtils.__test.PathElem('A3',null));\r
-\r
- expect(apiConnector.__test.apiPathElemsToString(pathElems)).toBe(expectedStr);\r
- });\r
-\r
- it('parseApiPath', function(){\r
- var module = 'M',\r
- revision = 'R',\r
- apiPath = 'dummyText1/dummyText2:dummyText3/'+module+'('+revision+')';\r
-\r
- data = apiConnector.__test.parseApiPath(apiPath);\r
- expect(data.module).toBe(module);\r
- expect(data.revision).toBe(revision);\r
- });\r
-\r
- it('getRootNodeByPath', function(){\r
- var nodeList = [],\r
- module = 'M',\r
- label = 'L',\r
- type = 'T',\r
- nodeType = 0;\r
-\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module(module, 'R', 'NS'));\r
- \r
- var expectedNode = yangParser.createNewNode(label, type, null, nodeType);\r
- nodeList.push(yangParser.createNewNode(label+'1', type, null, nodeType));\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module((module+1).toString(), 'R', 'NS'));\r
- nodeList.push(yangParser.createNewNode(label, type, null, nodeType));\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module(module, 'R', 'NS'));\r
- nodeList.push(expectedNode);\r
- nodeList.push(yangParser.createNewNode(label+'2', type, null, nodeType));\r
-\r
- expect(apiConnector.__test.getRootNodeByPath('MX', label, nodeList)).toBe(null);\r
- expect(apiConnector.__test.getRootNodeByPath(module, label, nodeList)).toBe(expectedNode);\r
- });\r
-\r
- it('processApis', function(){\r
- var hostPort = 'localhost:8080',\r
- baseUrl = hostPort+'/restconf',\r
- apis = [{path: hostPort+'/apidoc/apis/MA(rev1)'},\r
- {path: hostPort+'/apidoc/apis/MB(rev2)'},\r
- {path: hostPort+'/apidoc/apis/MC(rev3)'}],\r
- apiA = {\r
- baseUrl: baseUrl,\r
- apis: [\r
- {\r
- path: '/config/MA:LA/',\r
- operations: [ {method: 'GET' }, {method: 'PUT' }]\r
- }\r
- ]\r
- },\r
- apiB = {\r
- baseUrl: baseUrl,\r
- apis: [\r
- {\r
- path: '/config/MB:LB/',\r
- operations: [ {method: 'GET' }, {method: 'DELETE' }]\r
- }\r
- ]\r
- },\r
- processedApis = [];\r
-\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/MA(rev1)').respond(apiA);\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/MB(rev2)').respond(apiB);\r
- $httpBackend.when('GET', hostPort+'/apidoc/apis/MC(rev3)').respond(404);\r
-\r
- apiConnector.processApis(apis, function(result) {\r
- processApis = result;\r
- });\r
-\r
- $httpBackend.flush();\r
- $timeout.flush();\r
-\r
- expect(processApis.length).toBe(2);\r
- expect(processApis[0].subApis.length).toBe(1);\r
- expect(processApis[1].subApis.length).toBe(1);\r
- });\r
-\r
- it('linkApisToNodes', function(){\r
- var yangParser = yinParser.__test.yangParser,\r
- type = 'leaf',\r
- nodeType = 0,\r
- subApi1 = new apiConnector.__test.SubApi('/config/MA:LA/{id}/MA:identifier/MA:node/{id}/', ['GET', 'PUT']),\r
- subApi2 = new apiConnector.__test.SubApi('/config/MB:LB/', ['GET', 'DELETE']),\r
- apis = [\r
- {\r
- module: 'MA',\r
- revision: 'rev1',\r
- subApis: [subApi1]\r
- },\r
- {\r
- module: 'MB',\r
- revision: 'rev2',\r
- subApis: [subApi2]\r
- }\r
- ],\r
- linkedApis = [],\r
- nodes = [];\r
-\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MA', 'R', 'NS'));\r
- var nodeMA = yangParser.createNewNode('LA',type, null, nodeType),\r
- nodeMAlist = yangParser.createNewNode('identifier','list', nodeMA, nodeType),\r
- nodeMAleaf = yangParser.createNewNode('node','leaf', nodeMAlist, nodeType);\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MB', 'R', 'NS'));\r
- var nodeMB = yangParser.createNewNode('LB',type, null, nodeType);\r
-\r
- nodes.push(nodeMA);\r
- nodes.push(nodeMB);\r
-\r
- linkedApis = apiConnector.linkApisToNodes(apis, nodes);\r
-\r
- expect(linkedApis[0].subApis[0].node).toBe(nodeMAleaf);\r
- expect(linkedApis[1].subApis[0].node).toBe(nodeMB);\r
-\r
- subApi1 = new apiConnector.__test.SubApi('/config/MA:LC/{id}/MA:identifier/MA:node/{id}/', ['GET', 'PUT']);\r
- apis = [\r
- {\r
- module: 'MA',\r
- revision: 'rev1',\r
- subApis: [subApi1]\r
- }\r
- ];\r
- \r
- linkedApis = apiConnector.linkApisToNodes(apis, nodes);\r
- expect(linkedApis[0].subApis.length).toBe(0);\r
- });\r
-\r
- it('createCustomFunctionalityApis', function(){\r
- var yangParser = yinParser.__test.yangParser,\r
- type = 'leaf',\r
- nodeType = 0,\r
- subApi1 = new apiConnector.__test.SubApi('/config/MA:LA/', ['GET', 'PUT']),\r
- subApi2 = new apiConnector.__test.SubApi('/config/MB:LB/', ['GET', 'DELETE']),\r
- apis = [\r
- {\r
- module: 'MA',\r
- revision: 'rev1',\r
- subApis: [subApi1]\r
- },\r
- {\r
- module: 'MB',\r
- revision: 'rev2',\r
- subApis: [subApi2]\r
- }\r
- ],\r
- linkedApis = [],\r
- nodes = [];\r
-\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MA', 'R', 'NS'));\r
- var nodeMA = yangParser.createNewNode('LA',type, null, nodeType);\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MB', 'R', 'NS'));\r
- var nodeMB = yangParser.createNewNode('LB',type, null, nodeType);\r
-\r
- nodes.push(nodeMA);\r
- nodes.push(nodeMB);\r
-\r
- linkedApis = apiConnector.linkApisToNodes(apis, nodes);\r
- apiConnector.createCustomFunctionalityApis(linkedApis, 'MB', 'rev2', '/config/MB:LB/', 'FNC', function() {});\r
- expect(linkedApis[1].subApis[0].custFunct.length).toBe(1);\r
- apiConnector.createCustomFunctionalityApis(linkedApis, null, null, '/config/MB:LB/', 'FNC2', function() {});\r
- expect(linkedApis[1].subApis[0].custFunct.length).toBe(2);\r
- apiConnector.createCustomFunctionalityApis(linkedApis, 'MB', null, '/config/MA:LA/', 'FNC3', function() {});\r
- expect(linkedApis[0].subApis[0].custFunct.length).toBe(0);\r
- expect(linkedApis[1].subApis[0].custFunct.length).toBe(2);\r
- });\r
- });\r
-\r
- describe('nodeWrapper', function(){\r
-\r
- var propName = 'test:elementName',\r
- elemName = 'elementName',\r
- nodeWrapper, yinParser, reqBuilder, yangParser, typeWrapper;\r
-\r
- var reqsEqual = function(expected, builded) {\r
- expect(Object.keys(expected).length).toBe(Object.keys(builded).length);\r
- \r
- for(var prop in expected) {\r
- if(expected[prop] instanceof Array) {\r
- expect(builded[prop] instanceof Array).toBe(true);\r
- expect(expected[prop].length).toBe(builded[prop].length);\r
- \r
- for(var index = 0; index < expected[prop].length; index++) {\r
- reqsEqual(expected[prop][index], builded[prop][index]);\r
- }\r
- } else if (expected[prop] instanceof Object) {\r
- expect(builded[prop] instanceof Object).toBe(true);\r
- reqsEqual(expected[prop], builded[prop]);\r
- } else {\r
- expect(expected[prop]).toBe(builded[prop]);\r
- }\r
- }\r
- };\r
-\r
- beforeEach(function() {\r
-\r
- angular.mock.inject(function(_nodeWrapper_) {\r
- nodeWrapper = _nodeWrapper_;\r
- });\r
-\r
- angular.mock.inject(function(_yinParser_) {\r
- yinParser = _yinParser_;\r
- });\r
-\r
- angular.mock.inject(function(_reqBuilder_) {\r
- reqBuilder = _reqBuilder_;\r
- });\r
-\r
- angular.mock.inject(function(_typeWrapper_) {\r
- typeWrapper = _typeWrapper_;\r
- });\r
-\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- });\r
-\r
- it('comparePropToElemByName', function(){\r
- var compareResult;\r
-\r
- expect(angular.isFunction(nodeWrapper.__test.comparePropToElemByName)).toBe(true);\r
- compareResult = nodeWrapper.__test.comparePropToElemByName(propName, elemName);\r
- expect(compareResult).toBe(true);\r
- propName = 'test:test';\r
- compareResult = nodeWrapper.__test.comparePropToElemByName(propName, elemName);\r
- expect(compareResult).toBe(false);\r
-\r
- });\r
-\r
- it('equalArrays', function(){\r
- var arrA = [1, 'A'],\r
- arrB = [1, 'A'],\r
- arrC = [1, 'A', 2];\r
- arrD = [1, 'B'];\r
-\r
- expect(nodeWrapper.__test.equalArrays(arrA, arrB)).toBe(true);\r
- expect(nodeWrapper.__test.equalArrays(arrB, arrA)).toBe(true);\r
-\r
- expect(nodeWrapper.__test.equalArrays(arrA, arrC)).toBe(false);\r
- expect(nodeWrapper.__test.equalArrays(arrC, arrA)).toBe(false);\r
-\r
- expect(nodeWrapper.__test.equalArrays(arrA, arrD)).toBe(false);\r
- expect(nodeWrapper.__test.equalArrays(arrD, arrA)).toBe(false);\r
- });\r
-\r
- it('equalListElems', function(){\r
- var dataA = {\r
- 'id': 1,\r
- 'name': 'A',\r
- 'attr': 'X'\r
- },\r
- dataB = {\r
- 'id': 1,\r
- 'name': 'A',\r
- 'attr': 'X'\r
- },\r
- dataC = {\r
- 'M:id': 1,\r
- 'M:name': 'A',\r
- 'attr': 'X'\r
- },\r
- dataD = {\r
- 'M:id': 1,\r
- 'name': 'B',\r
- 'attr': 'X'\r
- },\r
- dataX = {\r
- 'attr':'X'\r
- },\r
- yangParser = yinParser.__test.yangParser,\r
- refKey;\r
-\r
- refKey = [yangParser.createNewNode('id', 'dummy', null, 0), yangParser.createNewNode('name', 'dummy', null, 0)];\r
-\r
- expect(nodeWrapper.__test.equalListElems(dataA, dataB, refKey)).toBe(true);\r
- expect(nodeWrapper.__test.equalListElems(dataA, dataC, refKey)).toBe(true);\r
- expect(nodeWrapper.__test.equalListElems(dataA, dataD, refKey)).toBe(false);\r
- expect(nodeWrapper.__test.equalListElems(dataC, dataD, refKey)).toBe(false);\r
- expect(nodeWrapper.__test.equalListElems(dataC, dataX, refKey)).toBe(false);\r
- });\r
-\r
- it('checkListElemKeys', function(){\r
- var listData = [],\r
- yangParser = yinParser.__test.yangParser,\r
- refKey,\r
- duplicates;\r
- // checkListElemKeys(listData, refKey)\r
- refKey = [yangParser.createNewNode('id', 'dummy', null, 0), yangParser.createNewNode('name', 'dummy', null, 0)];\r
-\r
- expect(nodeWrapper.__test.checkListElemKeys(listData, refKey).length).toBe(0);\r
-\r
- listData = [\r
- {\r
- 'id': 1,\r
- 'name': 'A',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'id': 2,\r
- 'name': 'A',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 1,\r
- 'm:name': 'B',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 2,\r
- 'name': 'B',\r
- 'attr': 'X'\r
- }\r
- ];\r
-\r
- expect(nodeWrapper.__test.checkListElemKeys(listData, refKey).length).toBe(0);\r
-\r
- listData = [\r
- {\r
- 'id': 1,\r
- 'name': 'A',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'id': 1,\r
- 'name': 'A',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 1,\r
- 'M:name': 'A',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 1,\r
- 'name': 'B',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 1,\r
- 'name': 'B',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 1,\r
- 'name': 'B',\r
- 'attr': 'X'\r
- },\r
- {\r
- 'M:id': 2,\r
- 'name': 'B',\r
- 'attr': 'X'\r
- }\r
- ];\r
-\r
- expect(nodeWrapper.__test.checkListElemKeys(listData, refKey).length).toBe(6);\r
- });\r
-\r
- it('parseRestrictText', function(){\r
- var input = "1|10..100",\r
- restrictions = nodeWrapper.__test.parseRestrictText(input);\r
- \r
- expect(restrictions.length).toBe(2);\r
- expect(restrictions[0].check('1')).toBe(true);\r
- expect(restrictions[0].check('2')).toBe(false);\r
- expect(restrictions[0].check('X')).toBe(false);\r
-\r
- expect(restrictions[1].check('10')).toBe(true);\r
- expect(restrictions[1].check('100')).toBe(true);\r
- expect(restrictions[1].check('50')).toBe(true);\r
- expect(restrictions[1].check('9')).toBe(false);\r
- expect(restrictions[1].check('101')).toBe(false);\r
- expect(restrictions[1].check('X')).toBe(false);\r
- });\r
-\r
- it('getTypes', function(){\r
- var nodeLeaf = yangParser.createNewNode('L','leaf',null, constants.NODE_UI_DISPLAY),\r
- nodeUnion = yangParser.createNewNode('union','type',nodeLeaf, constants.NODE_ALTER),\r
- nodeString = yangParser.createNewNode('string','type',nodeUnion, constants.NODE_ALTER),\r
- nodePattern = yangParser.createNewNode('^[a-k]+$','pattern', nodeString, constants.NODE_RESTRICTIONS),\r
- nodeLen = yangParser.createNewNode('1..5','length', nodeString, constants.NODE_RESTRICTIONS),\r
- nodeUint16 = yangParser.createNewNode('uint16','type',nodeUnion, constants.NODE_ALTER),\r
- nodeRange = yangParser.createNewNode('1..100','range', nodeUint16, constants.NODE_RESTRICTIONS),\r
- output = nodeWrapper.__test.getTypes(nodeLeaf);\r
-\r
- expect(output.length).toBe(3);\r
- expect(output[0].label).toBe('union');\r
- expect(output[1].label).toBe('string');\r
- expect(output[2].label).toBe('uint16');\r
- expect(output[1].children[0].type).toBe('pattern');\r
- expect(output[1].children[1].type).toBe('length');\r
- expect(output[2].children[0].type).toBe('range');\r
- });\r
-\r
- describe('leaf', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('L','leaf',null, constants.NODE_UI_DISPLAY);\r
- });\r
-\r
-\r
- it('buildRequest', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- node.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- node.value = null;\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
-\r
- });\r
- \r
-\r
- it('fill', function(){\r
-\r
- var data = 'dummyData';\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- match = node.fill(propName, data);\r
- expect(match).toBe(false);\r
- propName = 'dummyProp:L';\r
- match = node.fill(propName,data);\r
- expect(node.value).toBe('dummyData');\r
- expect(match).toBe(true);\r
-\r
- });\r
-\r
- it('clear', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- node.clear();\r
- expect(node.value).toBe('');\r
- \r
- });\r
- \r
- \r
- describe('leaf with type', function(){\r
-\r
-\r
- it('fill', function(){\r
- var data = '1',\r
- nodeBits = yangParser.createNewNode('bits', 'type', node, constants.NODE_ALTER);\r
-\r
- yangParser.createNewNode('BIT_1', 'bit', nodeBits, constants.NODE_ALTER);\r
- nodeWrapper.wrapAll(node);\r
- typeWrapper.wrapAll(node);\r
-\r
- match = node.fill(propName, data);\r
- expect(match).toBe(true);\r
- expect(nodeBits.bitsValues.length).toBe(1);\r
- expect(nodeBits.bitsValues[0]).toBe('1');\r
-\r
- });\r
-\r
- it('clear', function(){\r
- var data = '1',\r
- nodeBits = yangParser.createNewNode('bits', 'type', node, constants.NODE_ALTER);\r
-\r
- yangParser.createNewNode('BIT_1', 'bit', nodeBits, constants.NODE_ALTER);\r
- nodeWrapper.wrapAll(node);\r
- typeWrapper.wrapAll(node);\r
-\r
- node.fill(propName, data);\r
- node.clear();\r
- expect(nodeBits.bitsValues.length).toBe(1);\r
- expect(nodeBits.bitsValues[0]).toBe(0);\r
- \r
- });\r
-\r
- it('checkValueType', function(){\r
- nodeWrapper.wrapAll(node);\r
- typeWrapper.wrapAll(node);\r
-\r
- node.value = '1';\r
- node.checkValueType();\r
- expect(node.valueIsValid).toBe(true);\r
- \r
- node.value = '';\r
- node.checkValueType();\r
- expect(node.valueIsValid).toBe(true);\r
-\r
- node.value = 'x';\r
- node.checkValueType();\r
- expect(node.valueIsValid).toBe(true);\r
-\r
- nodeInt8 = yangParser.createNewNode('int8', 'type', node, constants.NODE_ALTER);\r
-\r
- nodeWrapper.wrapAll(node);\r
- typeWrapper.wrapAll(node);\r
-\r
- node.value = '1';\r
- node.checkValueType();\r
- expect(node.valueIsValid).toBe(true);\r
- \r
- node.value = '';\r
- node.checkValueType();\r
- expect(node.valueIsValid).toBe(true);\r
-\r
- node.value = 'x';\r
- node.checkValueType();\r
- expect(node.valueIsValid).toBe(false);\r
- });\r
-\r
- });\r
- \r
- });\r
-/*\r
- describe('length', function(){\r
- var node, nodeChild;\r
- \r
- it('test', function(){\r
- node = yinParser.__test.yangParser.createNewNode('string','type',null, constants.NODE_UI_DISPLAY);\r
- nodeChild = yinParser.__test.yangParser.createNewNode('1|10..100','length', node, constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(node);\r
- \r
- expect(nodeChild.restrict.info).toBe('length - 1|10..100');\r
- expect(nodeChild.restrict.ifs.length).toBe(2);\r
- expect(angular.isFunction(nodeChild.restrict.ifs[0])).toBe(true);\r
- expect(angular.isFunction(nodeChild.restrict.ifs[1])).toBe(true);\r
- });\r
- });\r
- \r
- describe('range', function(){\r
- var node, nodeChild;\r
- \r
- it('test', function(){\r
- node = yinParser.__test.yangParser.createNewNode('string','type',null, constants.NODE_UI_DISPLAY);\r
- nodeChild = yinParser.__test.yangParser.createNewNode('1|10..100','range', node, constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(node);\r
- \r
- expect(nodeChild.restrict.info).toBe('range - 1|10..100');\r
- expect(nodeChild.restrict.ifs.length).toBe(2);\r
- expect(angular.isFunction(nodeChild.restrict.ifs[0])).toBe(true);\r
- expect(angular.isFunction(nodeChild.restrict.ifs[1])).toBe(true);\r
- });\r
- });\r
-\r
- describe('pattern', function(){\r
- var node, nodeChild;\r
- \r
- it('test', function(){\r
- node = yinParser.__test.yangParser.createNewNode('string','type',null, constants.NODE_UI_DISPLAY);\r
- nodeChild = yinParser.__test.yangParser.createNewNode('\\d{4}-\\d{2}-\\d{2}','pattern', node, constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(node);\r
- \r
- expect(nodeChild.restrict.info).toBe('pattern - \\d{4}-\\d{2}-\\d{2}');\r
- expect(nodeChild.restrict.ifs.length).toBe(1);\r
- expect(angular.isFunction(nodeChild.restrict.ifs[0])).toBe(true);\r
- });\r
- });\r
-*/\r
- describe('container', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('ports','container',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('toggleExpand', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.toggleExpand)).toBe(true);\r
- node.toggleExpand();\r
- expect(node.expanded).toBe(true);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('ports','container', node, constants.NODE_UI_DISPLAY),\r
- nodeChildThird = yangParser.createNewNode('ports','leaf', nodeChildSec, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- nodeChildThird.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- node.children = [];\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
- });\r
-\r
- it('clear', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('ports','container', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- nodeChild.value = 'dummyValue';\r
- nodeChildSec.value = 'dummyValueSec';\r
- node.clear();\r
- expect(nodeChild.value).toBe('');\r
- expect(nodeChildSec.value).toBe('dummyValueSec');\r
-\r
- });\r
-\r
- it('fill', function(){\r
-\r
- var data = { 'dummyProp:ports': 'dummyData'},\r
- nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- match = node.fill(propName, data);\r
- expect(match).toBe(false);\r
-\r
- propName = 'dummyProp:ports';\r
- match = node.fill(propName,data);\r
- expect(match).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData'); \r
-\r
- });\r
-\r
- it('isFilled', function(){\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY),\r
- isFilled;\r
-\r
- nodeWrapper.wrapAll(node);\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(false);\r
- nodeChild.value = 'dummyData';\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(true);\r
-\r
- });\r
-\r
- });\r
-\r
- describe('rpc', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('ports','rpc',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
- var added;\r
- \r
- nodeWrapper.wrapAll(node);\r
- added = node.buildRequest(reqBuilder, req);\r
- expect(added).toBe(true);\r
-\r
- var nodeChild = yangParser.createNewNode('input','input', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('name','leaf', nodeChild, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- nodeChildSec.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- });\r
-\r
- it('clear', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('input','input', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('name','leaf', nodeChild, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- nodeChildSec.value = 'dummyValue';\r
- node.clear();\r
- expect(nodeChildSec.value).toBe('');\r
-\r
- node.children = [];\r
- node.clear();\r
- });\r
-\r
- it('fill', function(){\r
-\r
- var data = { 'dummyProp:name': 'dummyData'},\r
- nodeChild = yangParser.createNewNode('input','input', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('name','leaf', nodeChild, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- match = node.fill(propName, data);\r
- expect(match).toBe(false);\r
-\r
- propName = 'dummyProp:input';\r
- match = node.fill(propName,data);\r
- expect(match).toBe(true);\r
- expect(nodeChildSec.value).toBe('dummyData');\r
-\r
- });\r
-\r
- it('isFilled', function(){\r
- var nodeChild = yangParser.createNewNode('input','input', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('name','leaf', nodeChild, constants.NODE_UI_DISPLAY),\r
- isFilled;\r
-\r
- nodeWrapper.wrapAll(node);\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(false);\r
- nodeChildSec.value = 'dummyData';\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(true);\r
-\r
- });\r
-\r
-\r
-\r
- });\r
-\r
- describe('input', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('input','input',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
- var added;\r
- \r
- nodeWrapper.wrapAll(node);\r
- added = node.buildRequest(reqBuilder, req);\r
- expect(added).toBe(true);\r
-\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- nodeChild.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- });\r
-\r
- it('clear', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- nodeChild.value = 'dummyValue';\r
- node.clear();\r
- expect(nodeChild.value).toBe('');\r
-\r
- node.children = [];\r
- node.clear();\r
- });\r
-\r
- it('fill', function(){\r
-\r
- var data = { 'dummyProp:name': 'dummyData'},\r
- nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- match = node.fill(propName, data);\r
- expect(match).toBe(false);\r
-\r
- propName = 'dummyProp:input';\r
- match = node.fill(propName,data);\r
- expect(match).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData');\r
-\r
- data = { 'name': 'dummyData'};\r
-\r
- propName = 'input';\r
- match = node.fill(propName,data);\r
- expect(match).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData');\r
- });\r
-\r
- it('isFilled', function(){\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY),\r
- isFilled;\r
-\r
- nodeWrapper.wrapAll(node);\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(false);\r
- nodeChild.value = 'dummyData';\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(true);\r
-\r
- });\r
-\r
-\r
-\r
- });\r
-\r
- describe('output', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('output','output',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
- var added;\r
- \r
- nodeWrapper.wrapAll(node);\r
- added = node.buildRequest(reqBuilder, req);\r
- expect(added).toBe(true);\r
-\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- nodeChild.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- });\r
-\r
- it('clear', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- nodeChild.value = 'dummyValue';\r
- node.clear();\r
- expect(nodeChild.value).toBe('');\r
-\r
- node.children = [];\r
- node.clear();\r
- });\r
-\r
- it('fill', function(){\r
-\r
- var data = { 'dummyProp:name': 'dummyData'},\r
- nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- match = node.fill(propName, data);\r
- expect(match).toBe(false);\r
-\r
- propName = 'dummyProp:output';\r
- match = node.fill(propName,data);\r
- expect(match).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData');\r
-\r
- data = { 'name': 'dummyData'};\r
-\r
- propName = 'output';\r
- match = node.fill(propName,data);\r
- expect(match).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData');\r
- });\r
-\r
- it('isFilled', function(){\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY),\r
- isFilled;\r
-\r
- nodeWrapper.wrapAll(node);\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(false);\r
- nodeChild.value = 'dummyData';\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(true);\r
-\r
- });\r
-\r
-\r
-\r
- });\r
-\r
- describe('case', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('ports','case',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('ports','case', node, constants.NODE_UI_DISPLAY),\r
- nodeChildThird = yangParser.createNewNode('ports','leaf', nodeChildSec, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- nodeChildThird.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- });\r
-\r
- it('fill', function(){\r
-\r
- var data = 'dummyData',\r
- filled,\r
- nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- filled = node.fill(propName, data);\r
- expect(filled).toBe(false);\r
-\r
- propName = 'dummyProp:ports';\r
- filled = node.fill(propName,data);\r
- expect(filled).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData'); \r
-\r
- });\r
-\r
- it('clear', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY),\r
- nodeChildSec = yangParser.createNewNode('ports','case', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- nodeChild.value = 'dummyValue';\r
- nodeChildSec.value = 'dummyValueSec';\r
- node.clear();\r
- expect(nodeChild.value).toBe('');\r
- expect(nodeChildSec.value).toBe('dummyValueSec'); \r
-\r
- }); \r
-\r
- it('isFilled', function(){\r
- var nodeChild = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY),\r
- isFilled;\r
-\r
- nodeWrapper.wrapAll(node);\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(false);\r
- nodeChild.value = 'dummyData';\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(true);\r
-\r
- });\r
-\r
- });\r
-\r
- describe('choice', function(){\r
-\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('ports','choice',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- node.choice = yangParser.createNewNode('ports','case', null, constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(node.choice);\r
- \r
- var nodeChoiceChild = yangParser.createNewNode('ports','leaf', node.choice, constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(nodeChoiceChild);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- nodeChoiceChild.value = 'dummyTest';\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- node.choice = null;\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- });\r
-\r
- it('fill', function(){\r
-\r
- var nodeChild = yangParser.createNewNode('ports','leaf', node, constants.NODE_UI_DISPLAY),\r
- data = 'dummyData',\r
- filled;\r
- \r
- nodeWrapper.wrapAll(node);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- filled = node.fill(propName, data);\r
- expect(filled).toBe(false);\r
-\r
- propName = 'dummyProp:ports';\r
- filled = node.fill(propName,data);\r
- expect(filled).toBe(true);\r
- expect(nodeChild.value).toBe('dummyData'); \r
-\r
- });\r
-\r
- it('clear', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- yangParser.createNewNode('ports','case', node, constants.NODE_UI_DISPLAY);\r
- node.choice = node.children[0];\r
- nodeWrapper.wrapAll(node.choice);\r
-\r
- var nodeChoiceChild = yangParser.createNewNode('ports','leaf', node.children[0], constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(nodeChoiceChild);\r
- \r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- nodeChoiceChild.value = 'dummyValueSec';\r
- node.clear();\r
- expect(nodeChoiceChild.value).toBe('');\r
- expect(node.choice).toBe(null);\r
-\r
- node.choice = null;\r
- node.clear();\r
- });\r
-\r
- it('isFilled', function(){\r
- var isFilled;\r
-\r
- nodeWrapper.wrapAll(node);\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(false);\r
-\r
- var nodeChoice = yangParser.createNewNode('name','leaf', null, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(nodeChoice);\r
- node.choice = nodeChoice;\r
-\r
- isFilled = node.isFilled();\r
- expect(isFilled).toBe(true);\r
- \r
-\r
- });\r
-\r
- });\r
-\r
- describe('leaf-list', function(){\r
- var req = {},\r
- propName = 'test:elementName',\r
- elemName = 'elementName',\r
- match,\r
- node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('ports','leaf-list',null, constants.NODE_UI_DISPLAY);\r
-\r
- });\r
-\r
- it('toggleExpand', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(node.expanded).toBe(true);\r
- node.toggleExpand();\r
- expect(node.expanded).toBe(false);\r
-\r
- });\r
-\r
- it('addListElem', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(node.value.length).toBe(0);\r
- node.addListElem();\r
- expect(node.value.length).toBe(1);\r
-\r
- });\r
-\r
- it('removeListElem', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- expect(node.value.length).toBe(0);\r
- node.addListElem();\r
- node.addListElem();\r
- node.removeListElem(1);\r
- expect(node.value.length).toBe(1);\r
-\r
- });\r
-\r
- it('buildRequest', function(){\r
-\r
- nodeWrapper.wrapAll(node);\r
- \r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(node.buildRequest(reqBuilder, req)).toBe(false);\r
- node.addListElem();\r
- expect(node.buildRequest(reqBuilder, req)).toBe(true);\r
-\r
- });\r
-\r
- it('fill', function(){\r
- var array = ['dummyValue', 'dummyValue2'],\r
- match;\r
- nodeWrapper.wrapAll(node);\r
- match = node.fill('dummyProp', array);\r
- expect(match).toBe(false);\r
- match = node.fill('ports', array);\r
- expect(match).toBe(true);\r
- expect(node.value[1].value).toBe('dummyValue2');\r
-\r
- });\r
-\r
- it('clear', function(){\r
- var array = ['dummyValue', 'dummyValue2'];\r
-\r
- nodeWrapper.wrapAll(node);\r
- node.fill('ports', array);\r
- expect(node.value.length).toBe(2);\r
- node.clear();\r
- expect(node.value.length).toBe(0);\r
-\r
- });\r
-\r
- it('isFilled', function(){\r
- var array = ['dummyValue', 'dummyValue2'];\r
- nodeWrapper.wrapAll(node);\r
-\r
- expect(node.isFilled()).toBe(false);\r
- node.fill('ports', array);\r
- expect(node.isFilled()).toBe(true);\r
-\r
- });\r
-\r
- });\r
- \r
- describe ('key', function() {\r
- var node, nodeChildKey, nodeChildLeaf1, nodeChildLeaf2, nodeChildLeaf3;\r
- \r
- it('execution - parent has refKey', function(){\r
- node = yangParser.createNewNode('LiA','list',null, constants.NODE_UI_DISPLAY);\r
- nodeChildKey = yangParser.createNewNode('ID name','key', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf1 = yangParser.createNewNode('ID','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf2 = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf3 = yangParser.createNewNode('attr','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- \r
- expect(node.refKey.length).toBe(2);\r
- expect(node.refKey[0].label).toBe('ID');\r
- expect(node.refKey[1].label).toBe('name');\r
- });\r
-\r
- it('execution - parent doesn\'t have refKey', function(){\r
- node = yangParser.createNewNode('LiA','leaf',null, constants.NODE_UI_DISPLAY);\r
- nodeChildKey = yangParser.createNewNode('ID name','key', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf1 = yangParser.createNewNode('ID','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf2 = yangParser.createNewNode('name','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf3 = yangParser.createNewNode('attr','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- \r
- expect(node.hasOwnProperty('refKey')).toBe(false);\r
- });\r
- });\r
-\r
- describe('list', function(){\r
- var node, nodeChildLeaf, nodeChildContainer, containerChildLeaf, yangParser;\r
-\r
- beforeEach(function() {\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- node = yangParser.createNewNode('LiA','list',null, constants.NODE_UI_DISPLAY);\r
- nodeChildLeaf = yangParser.createNewNode('LA','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeChildContainer = yangParser.createNewNode('CA','container', node, constants.NODE_UI_DISPLAY);\r
- containerChildLeaf = yangParser.createNewNode('LB','leaf', nodeChildContainer, constants.NODE_UI_DISPLAY);\r
- nonExistentChild = yangParser.createNewNode('D','dummy', nodeChildContainer, -1);\r
-\r
- nodeWrapper.wrapAll(node);\r
- });\r
-\r
- it('nodeEqual-utility', function(){\r
- copy = node.deepCopy();\r
- nodeWrapper.wrapAll(copy);\r
- nodesEqual(node, copy);\r
- nodesEqual(copy, node);\r
-\r
- //TODO negative test cases?\r
- // copy.children[0].label = 'X';\r
- // nodesEqual(node, copy);\r
- // expect(nodesEqual(copy, node)).toThrow();\r
-\r
- // copy.children[0].label = null;\r
- // delete node.children[0].label;\r
- // node.children[0].dummy = 'dummyProperty';\r
- // expect(nodesEqual(node, copy)).toThrow();\r
- // expect(nodesEqual(copy, node)).toThrow();\r
- });\r
-\r
- it('test utility - reqEqual', function(){\r
- reqA = { A:'A'};\r
- reqB = { A:'A'};\r
-\r
- reqsEqual(reqA, reqB);\r
- reqsEqual(reqB, reqA);\r
-\r
- reqA.L = [{B: 'B'}, {C: 'C'}];\r
- reqB.L = [{B: 'B'}, {C: 'C'}];\r
-\r
- reqsEqual(reqA, reqB);\r
- reqsEqual(reqB, reqA);\r
-\r
- //TODO negative test cases?\r
- // reqB.L = [{B: 'B'}, {C: 'C'}, {X: 'X'}];\r
- // expect(reqsEqual(reqA, reqB)).toThrow();\r
- // expect(reqsEqual(reqB, reqA)).toThrow();\r
-\r
- // reqA = { A:'A', B: { C: 'C', D: [{E: 'E'}]}};\r
- // reqB = { A:'A', B: { C: 'C', D: 'D'}};\r
-\r
- // expect(reqsEqual(reqA, reqB)).toThrow();\r
- // expect(reqsEqual(reqB, reqA)).toThrow();\r
-\r
- // reqA = {'A': [{'B': 'b'},{'B': 'b', 'C': {'D': 'x'}}]};\r
- // reqB = {'A': [{'B': 'b'},{'B': 'b', 'C': {'E': 'x'}}]};\r
-\r
- // expect(reqsEqual(reqA, reqB)).toThrow();\r
- // expect(reqsEqual(reqB, reqA)).toThrow();\r
-\r
- });\r
-\r
- it('wrapAll', function(){\r
- expect(angular.isFunction(node.addListElem)).toBe(true);\r
- expect(angular.isFunction(node.removeListElem)).toBe(true);\r
- expect(angular.isFunction(node.buildRequest)).toBe(true);\r
- expect(angular.isFunction(node.fill)).toBe(true);\r
- expect(angular.isFunction(node.clear)).toBe(true);\r
- });\r
-\r
- it('addListElem', function(){\r
- expect(node.listData.length).toBe(0);\r
- node.addListElem();\r
- node.addListElem();\r
- expect(node.listData.length).toBe(2);\r
- });\r
-\r
- it('removeListElem', function(){\r
- node.addListElem();\r
- node.addListElem();\r
- node.addListElem();\r
- node.addListElem();\r
- expect(node.listData.length).toBe(4);\r
- node.listData[0] = { LA: '0'};\r
- node.listData[1] = { LA: '1'};\r
- node.listData[2] = { LA: '2'};\r
- node.listData[3] = { LA: '3'};\r
-\r
-\r
- expect(node.actElemIndex === node.listData.length - 1).toBe(true);\r
- node.removeListElem(0);\r
- expect(node.actElemIndex === node.listData.length - 1).toBe(true);\r
- expect(node.actElemStructure.getChildren('leaf','LA')[0].value).toBe('3'); \r
-\r
- node.actElemIndex = 0;\r
- node.removeListElem(0);\r
- expect(node.actElemIndex === node.listData.length - 1).toBe(true);\r
- expect(node.actElemIndex === 0).toBe(false);\r
-\r
- node.removeListElem(node.listData.length - 1);\r
- expect(node.actElemStructure.getChildren('leaf','LA')[0].value).toBe('2');\r
- node.removeListElem(0);\r
- expect(node.actElemStructure).toBe(null);\r
- expect(node.actElemIndex).toBe(-1);\r
- });\r
-\r
- it('buildRequest', function(){\r
- var dummyReq = reqBuilder.createObj(),\r
- added,\r
- dummyValueA = 'dummyValueA',\r
- dummyValueB = 'dummyValueB',\r
- expectedReq = {};\r
-\r
- added = node.buildRequest(reqBuilder, dummyValueB);\r
- \r
- expect(added).toBe(false);\r
- expect($.isEmptyObject(dummyReq)).toBe(true);\r
- reqsEqual(dummyReq, expectedReq);\r
-\r
- node.addListElem();\r
- added = node.buildRequest(reqBuilder, dummyReq);\r
- \r
- expect(added).toBe(false);\r
- expect($.isEmptyObject(dummyReq)).toBe(true);\r
- reqsEqual(dummyReq, expectedReq);\r
-\r
- node.actElemStructure.children[1].children[0].value = dummyValueA;\r
- node.actElemStructure.children[0].buildRequest = function(builder, req) {\r
- builder.insertPropertyToObj(req, '$$hashKey', dummyValueB);\r
- return true;\r
- };\r
-\r
- added = node.buildRequest(reqBuilder, dummyReq);\r
- expectedReq = {LiA: [{CA : { LB: dummyValueA }}]};\r
- \r
- expect(added).toBe(true);\r
- expect($.isEmptyObject(dummyReq)).toBe(false);\r
- reqsEqual(dummyReq, expectedReq);\r
- });\r
-\r
- it('fill', function(){\r
- var dummyValueA = 'dummyValueA',\r
- dummyValueB = 'dummyValueB',\r
- fillDataObjA = {'NS:LA': dummyValueA},\r
- fillDataObjB = {'NS:CA': {'NS:LB': dummyValueB}},\r
- fillDataObjC = {'NS:LA': dummyValueA, 'NS:CA': {'NS:LB': dummyValueB}},\r
- fillName = 'LiX0',\r
- filled,\r
- comparedElem,\r
- leaf = function(node) { return node.children[0];},\r
- cont = function(node) { return node.children[1];},\r
- unsetVal = '';\r
-\r
- filled = node.fill(fillName, [fillDataObjA, fillDataObjB, fillDataObjC]);\r
- expect(filled).toBe(false);\r
- expect(node.listData.length).toBe(0);\r
-\r
- fillName = 'NS:'+node.label;\r
-\r
- filled = node.fill(fillName, [fillDataObjA, fillDataObjB, fillDataObjC]);\r
- expect(filled).toBe(true);\r
- expect(node.listData.length).toBe(3);\r
-\r
- comparedElem = node.actElemStructure;\r
- node.changeActElementData(0);\r
-\r
- expect(leaf(comparedElem).value).toBe(dummyValueA);\r
- expect(leaf(cont(comparedElem)).value).toBe(unsetVal);\r
-\r
- node.changeActElementData(1);\r
- expect(leaf(comparedElem).value).toBe(unsetVal);\r
- expect(leaf(cont(comparedElem)).value).toBe(dummyValueB);\r
-\r
- node.changeActElementData(2);\r
- expect(leaf(comparedElem).value).toBe(dummyValueA);\r
- expect(leaf(cont(comparedElem)).value).toBe(dummyValueB);\r
- });\r
-\r
- it('clear', function(){\r
- node.addListElem();\r
- node.clear();\r
- expect(node.actElemStructure === null).toBe(true);\r
- expect(node.listData.length).toBe(0);\r
- });\r
-\r
- it('toggleExpand', function(){\r
- expect(node.expanded).toBe(true);\r
- node.toggleExpand();\r
- expect(node.expanded).toBe(false);\r
- });\r
-\r
- it('isFilled', function(){\r
- expect(node.isFilled()).toBe(false);\r
- node.addListElem();\r
- expect(node.isFilled()).toBe(true);\r
- });\r
- \r
- it('createListName', function(){\r
- var dummyValue1 = 'dummyValueKey1',\r
- dummyValue2 = 'dummyValueKey2',\r
- nodeChildKey, nodeChildLeafK1, nodeChildLeafK2;\r
- \r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- nodeChildKey = yangParser.createNewNode('LC LD','key', node, constants.NODE_ALTER);\r
- nodeChildLeafK1 = yangParser.createNewNode('LC','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeChildLeafK2 = yangParser.createNewNode('LD','leaf', node, constants.NODE_UI_DISPLAY);\r
- nodeWrapper.wrapAll(node);\r
- node.addListElem();\r
- node.listData[0] = {\r
- 'LA': 'A',\r
- 'LB': 'B'\r
- };\r
- expect(node.createListName(0)).toBe('');\r
-\r
- node.listData[0] = {\r
- 'LA': 'A',\r
- 'LC': 'B'\r
- };\r
- node.actElemIndex = 1;\r
- expect(node.createListName(0)).toBe(' <LC:B>');\r
-\r
- node.listData = [];\r
- node.addListElem();\r
- node.actElemStructure.children[3].value = dummyValue1;\r
- node.actElemStructure.children[4].value = dummyValue2;\r
- node.changeActElementData(0);\r
- expect(node.createListName(0)).toBe(' <LC:dummyValueKey1 LD:dummyValueKey2>');\r
-\r
- node.listData[0] = {\r
- 'M:LC': 'A',\r
- 'M:LD': 'B'\r
- };\r
- node.actElemIndex = 1;\r
- expect(node.createListName(0)).toBe(' <LC:A LD:B>');\r
- \r
- node.listData[0] = {};\r
- expect(node.createListName(0)).toBe('');\r
- expect(node.createListName(-1)).toBe('');\r
- });\r
- });\r
-\r
- describe('listElem', function(){\r
- var node, dummyValueA, dummyValueB, dummyReq;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('LiA','list',null, constants.NODE_UI_DISPLAY);\r
-\r
- yangParser.createNewNode('LA','leaf', node, constants.NODE_UI_DISPLAY);\r
- yangParser.createNewNode('LB','leaf', node, constants.NODE_UI_DISPLAY);\r
-\r
- nodeWrapper.wrapAll(node);\r
- node.addListElem();\r
-\r
- dummyValueA = 'dummyValueA';\r
- dummyValueB = 'dummyValueB';\r
- dummyReq = {};\r
- });\r
-\r
- it('_listElem', function(){\r
- expect(angular.isFunction(node.actElemStructure.listElemBuildRequest)).toBe(true);\r
- expect(angular.isFunction(node.actElemStructure.fillListElement)).toBe(true);\r
- });\r
-\r
- it('listElemBuildRequest', function(){\r
- var dummyList = [],\r
- added,\r
- LA = node.actElemStructure.children[0],\r
- LB = node.actElemStructure.children[1];\r
-\r
- added = node.actElemStructure.listElemBuildRequest(reqBuilder, dummyList);\r
- expect(dummyList.length).toBe(0);\r
- expect(added).toBe(false);\r
-\r
- LA.value = dummyValueA;\r
- // console.info('node',node);\r
- dummyReq[LA.label] = dummyValueA;\r
- added = node.actElemStructure.listElemBuildRequest(reqBuilder, dummyList);\r
-\r
- expect(dummyList.length).toBe(1);\r
- reqsEqual(dummyList, [dummyReq]);\r
- expect(added).toBe(true);\r
-\r
- LB.value = dummyValueB;\r
- dummyList = [];\r
- dummyReq[LB.label] = dummyValueB;\r
- added = node.actElemStructure.listElemBuildRequest(reqBuilder, dummyList);\r
-\r
- expect(dummyList.length).toBe(1);\r
- reqsEqual(dummyList, [dummyReq]);\r
- expect(added).toBe(true);\r
- });\r
-\r
- it('fillListElement', function(){\r
- var filled,\r
- LA = node.actElemStructure.children[0],\r
- LB = node.actElemStructure.children[1];\r
-\r
- filled = node.actElemStructure.fillListElement('NS:'+LA.label, dummyValueA);\r
- expect(filled).toBe(true);\r
- expect(LA.value).toBe(dummyValueA);\r
- expect(LB.value).toBe('');\r
- \r
- filled = node.actElemStructure.fillListElement('NS:'+LB.label, dummyValueB);\r
- expect(filled).toBe(true);\r
- expect(LB.value).toBe(dummyValueB);\r
- });\r
-\r
- it('clear', function(){\r
- node.actElemStructure.children[0].value = 'X';\r
- node.actElemStructure.clear();\r
- expect(node.actElemStructure.children[0].value).toBe('');\r
-\r
- node.clear();\r
- node.children = [];\r
- node.addListElem();\r
- expect(node.actElemStructure !== null).toBe(true);\r
- node.actElemStructure.clear();\r
- });\r
-\r
- it('isFilled', function(){\r
- var LA = node.actElemStructure.children[0];\r
-\r
- expect(node.actElemStructure.isFilled()).toBe(false);\r
- node.actElemStructure.fillListElement('NS:'+LA.label, dummyValueA);\r
- expect(node.actElemStructure.isFilled()).toBe(true);\r
-\r
- });\r
- });\r
- });\r
-\r
-\r
- describe('typeWrapper', function(){\r
-\r
- var typeWrapper, nodeWrapper, yinParser, yangParser,\r
- node, nodeUnion, nodeString, nodePattern, nodeLen, nodeRange, nodeRange8, nodeRange16, nodeDecimal64,\r
- nodeInt8, nodeInt16, nodeInt32, nodeInt64, nodeUint8, nodeUint16, nodeUint32, nodeUint64,\r
- nodeBits, nodeB1, nodeB2, nodeB3, nodeB4, nodeB5,\r
- nodeEnumeration, nodeE1, nodeE2, nodeE3;\r
-\r
- beforeEach(function() {\r
-\r
- angular.mock.inject(function(_typeWrapper_) {\r
- typeWrapper = _typeWrapper_;\r
- });\r
-\r
- angular.mock.inject(function(_nodeWrapper_) {\r
- nodeWrapper = _nodeWrapper_;\r
- });\r
-\r
- angular.mock.inject(function(_yinParser_) {\r
- yinParser = _yinParser_;\r
- });\r
- \r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
-\r
- node = yangParser.createNewNode('L','leaf',null, constants.NODE_UI_DISPLAY);\r
- nodeUnion = yangParser.createNewNode('union','type',node, constants.NODE_ALTER);\r
- nodeString = yangParser.createNewNode('string','type',nodeUnion, constants.NODE_ALTER);\r
- nodePattern = yangParser.createNewNode('^[a-k]+$','pattern', nodeString, constants.NODE_RESTRICTIONS);\r
- nodeLen = yangParser.createNewNode('1..5|10..15','length', nodeString, constants.NODE_RESTRICTIONS);\r
- nodeUint16 = yangParser.createNewNode('uint16','type',nodeUnion, constants.NODE_ALTER);\r
- nodeRange = yangParser.createNewNode('1..100|201..300|401..500','range', nodeUint16, constants.NODE_RESTRICTIONS);\r
- nodeUint32 = yangParser.createNewNode('uint32','type',nodeUnion, constants.NODE_ALTER);\r
-\r
- nodeDecimal64 = yangParser.createNewNode('decimal64','type',nodeUnion, constants.NODE_ALTER);\r
- nodeInt8 = yangParser.createNewNode('int8','type', nodeUnion, constants.NODE_ALTER);\r
- nodeInt16 = yangParser.createNewNode('int16','type',nodeUnion, constants.NODE_ALTER);\r
- nodeRange16 = yangParser.createNewNode('10..15', 'range', nodeInt16, constants.NODE_RESTRICTIONS);\r
- nodeInt32 = yangParser.createNewNode('int32','type',nodeUnion, constants.NODE_ALTER);\r
- nodeInt64 = yangParser.createNewNode('int64','type',nodeUnion, constants.NODE_ALTER);\r
- nodeUint8 = yangParser.createNewNode('uint8','type',nodeUnion, constants.NODE_ALTER);\r
- nodeRange8 = yangParser.createNewNode('100..150', 'range', nodeUint8, constants.NODE_RESTRICTIONS);\r
- nodeUint64 = yangParser.createNewNode('uint64','type',nodeUnion, constants.NODE_ALTER);\r
-\r
-\r
- nodeBits = yangParser.createNewNode('bits','type',nodeUnion, constants.NODE_ALTER);\r
- nodeB1 = yangParser.createNewNode('CHECK_OVERLAP','bit',nodeBits, constants.NODE_ALTER);\r
- nodeB2 = yangParser.createNewNode('RESET_COUNTS','bit',nodeBits, constants.NODE_ALTER);\r
- nodeB3 = yangParser.createNewNode('NO_PKT_COUNTS','bit',nodeBits, constants.NODE_ALTER);\r
- nodeB4 = yangParser.createNewNode('NO_BYT_COUNTS','bit',nodeBits, constants.NODE_ALTER);\r
- nodeB5 = yangParser.createNewNode('SEND_FLOW_REM','bit',nodeBits, constants.NODE_ALTER);\r
-\r
- nodeEnumeration = yangParser.createNewNode('enumeration','type',nodeUnion, constants.NODE_ALTER);\r
- nodeE1 = yangParser.createNewNode('E1','enum',nodeEnumeration, constants.NODE_ALTER);\r
- nodeE2 = yangParser.createNewNode('E2','enum',nodeEnumeration, constants.NODE_ALTER);\r
- nodeE3 = yangParser.createNewNode('E3','enum',nodeEnumeration, constants.NODE_ALTER);\r
-\r
- nodeWrapper.wrapAll(node);\r
- typeWrapper.wrapAll(node);\r
- });\r
-\r
- it('findLeafParent', function(){\r
- var retNode;\r
- \r
- retNode = typeWrapper.__test.findLeafParent(nodeRange);\r
- expect(retNode.label + retNode.type).toBe('Lleaf');\r
-\r
- retNode = typeWrapper.__test.findLeafParent(node);\r
- expect(retNode.label + retNode.type).toBe('Lleaf');\r
- \r
- var nodeList = yangParser.createNewNode('ListA','list',null, constants.NODE_UI_DISPLAY);\r
- retNode = typeWrapper.__test.findLeafParent(nodeList);\r
- expect(retNode).toBe(null);\r
- });\r
-\r
- describe('wrapper', function(){\r
-\r
- it('wrapAll', function(){\r
- typeWrapper.wrapAll(node);\r
- expect(angular.isFunction(nodeString.performRestrictionsCheck)).toBe(true);\r
- expect(angular.isFunction(nodeUint16.performBuildInChecks)).toBe(true);\r
- expect(nodeUint16.builtInChecks.length).toBe(2);\r
- });\r
-\r
- describe('_setDefaultProperties', function(){\r
-\r
- it('performRestrictionsCheck', function(){\r
- expect(nodeString.performRestrictionsCheck('baba')).toBe(true);\r
- expect(nodeString.performRestrictionsCheck('bababa')).toBe(false);\r
- expect(nodeUint16.performRestrictionsCheck('1')).toBe(true);\r
- expect(nodeUint16.performRestrictionsCheck('101')).toBe(false);\r
- expect(nodeUint32.performRestrictionsCheck('X')).toBe(true);\r
- });\r
-\r
- it('performBuildInChecks', function(){\r
- expect(nodeString.performBuildInChecks('')).toBe(true);\r
- expect(nodeString.performBuildInChecks('babaxxx')).toBe(true);\r
- expect(nodeUint16.performBuildInChecks('0.000000000001')).toBe(false);\r
- expect(nodeUint16.performBuildInChecks('9999')).toBe(true);\r
-\r
- });\r
-\r
- it('check', function(){\r
- expect(nodeUint16.check('1a2')).toBe(false);\r
- expect(nodeUint16.check('101')).toBe(false);\r
- expect(nodeUint16.check('0')).toBe(false);\r
- expect(nodeUint16.check('50')).toBe(true);\r
- });\r
- });\r
-\r
- describe('bits', function(){\r
-\r
- it('wrapAll', function(){\r
- expect(nodeBits.leafParent).toBe(node);\r
- expect(nodeBits.maxBitsLen).toBe(5);\r
- for (var i = 0; i < nodeBits.maxBitsLen; i++) {\r
- expect(nodeBits.bitsValues[i]).toBe('');\r
- }\r
- expect(angular.isFunction(nodeBits.clear)).toBe(true);\r
- expect(angular.isFunction(nodeBits.fill)).toBe(true);\r
- expect(angular.isFunction(nodeBits.setLeafValue)).toBe(true);\r
- });\r
- \r
- it('clear', function(){\r
- nodeBits.clear();\r
- \r
- for (var i = 0; i < nodeBits.bitsValues.length; i++) {\r
- expect(nodeBits.bitsValues[i]).toBe(0);\r
- }\r
- });\r
-\r
- it('fill', function(){\r
- nodeBits.leafParent.value = '1';\r
- nodeBits.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('1,,,,');\r
-\r
- nodeBits.leafParent.value = '2';\r
- nodeBits.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('0,1,,,');\r
-\r
- nodeBits.leafParent.value = '16';\r
- nodeBits.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('0,0,0,0,1');\r
-\r
- nodeBits.leafParent.value = '19';\r
- nodeBits.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('1,1,0,0,1');\r
-\r
- nodeBits.leafParent.value = 'aaa';\r
- nodeBits.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('0,,,,');\r
- });\r
-\r
- it('setLeafValue', function(){\r
- nodeBits.bitsValues = ['1','','','',''];\r
- nodeBits.setLeafValue(nodeBits.bitsValues);\r
- expect(nodeBits.leafParent.value).toBe('1');\r
-\r
- nodeBits.bitsValues = ['0','1','','',''];\r
- nodeBits.setLeafValue(nodeBits.bitsValues);\r
- expect(nodeBits.leafParent.value).toBe('2');\r
-\r
- nodeBits.bitsValues = ['0','0','0','0','1'];\r
- nodeBits.setLeafValue(nodeBits.bitsValues);\r
- expect(nodeBits.leafParent.value).toBe('16');\r
-\r
- nodeBits.bitsValues = ['1','1','0','0','1'];\r
- nodeBits.setLeafValue(nodeBits.bitsValues);\r
- expect(nodeBits.leafParent.value).toBe('19');\r
- });\r
- });\r
-\r
- describe('enumeration', function(){\r
-\r
- it('wrapAll', function(){\r
- expect(nodeEnumeration.leafParent).toBe(node);\r
- expect(angular.isFunction(nodeEnumeration.clear)).toBe(true);\r
- expect(angular.isFunction(nodeEnumeration.fill)).toBe(true);\r
- expect(angular.isFunction(nodeEnumeration.setLeafValue)).toBe(true);\r
- });\r
- \r
- it('clear', function(){\r
- nodeEnumeration.selEnum = nodeE1;\r
- nodeEnumeration.clear();\r
- expect(nodeEnumeration.selEnum).toBe(null);\r
- });\r
-\r
- it('fill', function(){\r
- nodeEnumeration.fill(nodeE1.label);\r
- expect(nodeEnumeration.selEnum).toBe(nodeE1);\r
-\r
- nodeEnumeration.fill('EX');\r
- expect(nodeEnumeration.selEnum).toBe(null);\r
- });\r
-\r
- it('setLeafValue - nonExistingChild', function(){\r
- nodeEnumeration.selEnum = nodeE1;\r
- nodeEnumeration.setLeafValue(nodeEnumeration.selEnum.label);\r
- expect(nodeEnumeration.leafParent.value).toBe(nodeE1.label);\r
- });\r
- });\r
-\r
- describe('union', function(){\r
- \r
- it('wrapAll', function(){\r
- expect(angular.isFunction(nodeUnion.clear)).toBe(true);\r
- expect(angular.isFunction(nodeUnion.fill)).toBe(true);\r
- expect(angular.isFunction(nodeUnion.check)).toBe(true);\r
- \r
- expect(nodeBits.leafParent).toBe(node);\r
- expect(nodeBits.maxBitsLen).toBe(5);\r
- for (var i = 0; i < nodeBits.maxBitsLen; i++) {\r
- expect(nodeBits.bitsValues[i]).toBe('');\r
- }\r
- expect(angular.isFunction(nodeBits.clear)).toBe(true);\r
- expect(angular.isFunction(nodeBits.fill)).toBe(true);\r
- expect(angular.isFunction(nodeBits.setLeafValue)).toBe(true);\r
- });\r
- \r
- it('clear', function(){\r
- nodeUnion.clear();\r
- \r
- for (var i = 0; i < nodeBits.bitsValues.length; i++) {\r
- expect(nodeBits.bitsValues[i]).toBe(0);\r
- }\r
- });\r
-\r
- it('fill', function(){\r
- node.value = '1';\r
- nodeUnion.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('1,,,,');\r
-\r
- node.value = '2';\r
- nodeUnion.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('0,1,,,');\r
-\r
- node.value = '16';\r
- nodeUnion.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('0,0,0,0,1');\r
-\r
- node.value = '19';\r
- nodeUnion.fill();\r
- expect(nodeBits.bitsValues.toString()).toBe('1,1,0,0,1');\r
- });\r
-\r
- describe('checking union', function(){\r
- it('basic', function(){\r
- expect(nodeUnion.check('XXX123')).toBe(false);\r
- expect(nodeUnion.check('abc')).toBe(true);\r
- expect(nodeUnion.check('2')).toBe(true);\r
- });\r
- \r
- it('string with length true, int false, union true', function(){\r
- expect(nodeUnion.check('bbbbbbbbbbb')).toBe(true);\r
- expect(nodeString.check('bbbbbbbbbbb')).toBe(true);\r
- expect(nodeUint16.check('bbbbbbbbbbb')).toBe(false);\r
- \r
- expect(nodeDecimal64.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeInt8.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeInt16.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeInt32.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeInt64.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeUint8.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeUint64.check('bbbbbbbbbbb')).toBe(false); \r
- \r
- expect(nodeBits.check('bbbbbbbbbbb')).toBe(false); \r
- expect(nodeEnumeration.check('bbbbbbbbbbb')).toBe(false); \r
- });\r
- \r
- it('string true with length false, int false, union false', function(){\r
- expect(nodeUnion.check('bbbbbb')).toBe(false);\r
- expect(nodeString.check('bbbbbb')).toBe(false);\r
- expect(nodeUint16.check('bbbbbb')).toBe(false);\r
- \r
- expect(nodeDecimal64.check('bbbbbb')).toBe(false); \r
- expect(nodeInt8.check('bbbbbb')).toBe(false); \r
- expect(nodeInt16.check('bbbbbb')).toBe(false); \r
- expect(nodeInt32.check('bbbbbb')).toBe(false); \r
- expect(nodeInt64.check('bbbbbb')).toBe(false); \r
- expect(nodeUint8.check('bbbbbb')).toBe(false); \r
- expect(nodeUint64.check('bbbbbb')).toBe(false); \r
- \r
- expect(nodeBits.check('bbbbbb')).toBe(false); \r
- expect(nodeEnumeration.check('bbbbbb')).toBe(false); \r
- });\r
-\r
- it('string false, int true, union true', function(){\r
- expect(nodeUnion.check('2')).toBe(true);\r
- expect(nodeString.check('2')).toBe(false);\r
- expect(nodeUint16.check('2')).toBe(true);\r
- \r
- expect(nodeDecimal64.check('2')).toBe(true); \r
- expect(nodeInt8.check('2')).toBe(true); \r
- expect(nodeInt16.check('2')).toBe(false); \r
- expect(nodeInt32.check('2')).toBe(true); \r
- expect(nodeInt64.check('2')).toBe(true); \r
- expect(nodeUint8.check('2')).toBe(false); \r
- expect(nodeUint64.check('2')).toBe(true); \r
- \r
- expect(nodeBits.check('2')).toBe(true); \r
- expect(nodeEnumeration.check('2')).toBe(false); \r
- });\r
-\r
- it('string false, int false, enum true, union true', function(){\r
- expect(nodeUnion.check('E1')).toBe(true);\r
- expect(nodeString.check('E1')).toBe(false);\r
- expect(nodeUint16.check('E1')).toBe(false);\r
- \r
- expect(nodeDecimal64.check('E1')).toBe(false); \r
- expect(nodeInt8.check('E1')).toBe(false); \r
- expect(nodeInt16.check('E1')).toBe(false); \r
- expect(nodeInt32.check('E1')).toBe(false); \r
- expect(nodeInt64.check('E1')).toBe(false); \r
- expect(nodeUint8.check('E1')).toBe(false); \r
- expect(nodeUint64.check('E1')).toBe(false); \r
- \r
- expect(nodeBits.check('E1')).toBe(false); \r
- expect(nodeEnumeration.check('E1')).toBe(true); \r
- });\r
-\r
- });\r
-\r
- });\r
-\r
- it('decimal64 - buildInCheck', function(){\r
- expect(nodeDecimal64.performBuildInChecks('99.99')).toBe(true);\r
- expect(nodeDecimal64.performBuildInChecks('9x.99')).toBe(false);\r
- });\r
-\r
- it('int8 - buildInCheck', function(){\r
- expect(nodeInt8.performBuildInChecks('64')).toBe(true);\r
- expect(nodeInt8.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('int16 - buildInCheck', function(){\r
- expect(nodeInt16.performBuildInChecks('64')).toBe(true);\r
- expect(nodeInt16.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('int32 - buildInCheck', function(){\r
- expect(nodeInt32.performBuildInChecks('64')).toBe(true);\r
- expect(nodeInt32.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('int64 - buildInCheck', function(){\r
- expect(nodeInt64.performBuildInChecks('64')).toBe(true);\r
- expect(nodeInt64.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('uint8 - buildInCheck', function(){\r
- expect(nodeUint8.performBuildInChecks('64')).toBe(true);\r
- expect(nodeUint8.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('uint16 - buildInCheck', function(){\r
- expect(nodeUint16.performBuildInChecks('64')).toBe(true);\r
- expect(nodeUint16.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('uint32 - buildInCheck', function(){\r
- expect(nodeUint32.performBuildInChecks('64')).toBe(true);\r
- expect(nodeUint32.performBuildInChecks('9x.')).toBe(false);\r
- });\r
-\r
- it('uint64 - buildInCheck', function(){\r
- expect(nodeUint64.performBuildInChecks('64')).toBe(true);\r
- expect(nodeUint64.performBuildInChecks('9x.')).toBe(false);\r
- });\r
- \r
- });\r
- \r
- });\r
-\r
- describe('restrictionsFact', function(){\r
-\r
- var restrictionsFact;\r
-\r
- beforeEach(angular.mock.inject(function(_restrictionsFact_){\r
- restrictionsFact = _restrictionsFact_;\r
- }));\r
-\r
- it('getEqualsFnc', function(){\r
- expect(restrictionsFact.getEqualsFnc(3).check('3')).toBe(true);\r
- expect(restrictionsFact.getEqualsFnc(170).check('0xAA')).toBe(true);\r
- expect(restrictionsFact.getEqualsFnc(15).check('017')).toBe(true);\r
- });\r
-\r
- it('getMinMaxFnc', function(){\r
- expect(restrictionsFact.getMinMaxFnc(1,3).check('3')).toBe(true);\r
- });\r
-\r
- it('getReqexpValidationFnc', function(){\r
- expect(restrictionsFact.getReqexpValidationFnc('^[a-k]+$').check('b')).toBe(true);\r
- });\r
-\r
- it('getIsNumberFnc', function(){\r
- expect(restrictionsFact.getIsNumberFnc().check('-3')).toBe(true);\r
- expect(restrictionsFact.getIsNumberFnc().check('+3')).toBe(true);\r
- expect(restrictionsFact.getIsNumberFnc().check('3')).toBe(true);\r
- });\r
-\r
- it('getIsUNumberFnc', function(){\r
- expect(restrictionsFact.getIsUNumberFnc().check('3')).toBe(true);\r
- expect(restrictionsFact.getIsUNumberFnc().check('a')).toBe(false);\r
- });\r
-\r
- it('getIsDecimalFnc', function(){\r
- expect(restrictionsFact.getIsDecimalFnc().check('3.3')).toBe(true);\r
- expect(restrictionsFact.getIsDecimalFnc().check('3,3')).toBe(true);\r
- expect(restrictionsFact.getIsDecimalFnc().check('-3.3')).toBe(true);\r
- });\r
-\r
- });\r
-\r
- describe('arrayUtils', function(){\r
-\r
- var arrayUtils;\r
-\r
- beforeEach(angular.mock.inject(function(_arrayUtils_){\r
- arrayUtils = _arrayUtils_;\r
- }));\r
-\r
- it('getFirstElementByCondition', function(){\r
-\r
- var list = [1,2,3,4],\r
- item = arrayUtils.getFirstElementByCondition(list, function(conditionItem){\r
- return conditionItem > 2;\r
- });\r
-\r
- expect(item).toBe(3);\r
-\r
- item = arrayUtils.getFirstElementByCondition(null, function(){\r
- return true;\r
- });\r
- expect(item).toBe(null);\r
-\r
- item = arrayUtils.getFirstElementByCondition(list);\r
- expect(item).toBe(null);\r
- });\r
-\r
- });\r
-\r
- describe('pathUtils', function(){\r
-\r
- var pathUtils,\r
- nodeWrapper,\r
- constants;\r
-\r
- beforeEach(angular.mock.inject(function(_pathUtils_, _yinParser_, _constants_, _nodeWrapper_){\r
- pathUtils = _pathUtils_;\r
- yinParser = _yinParser_;\r
- constants = _constants_;\r
- nodeWrapper = _nodeWrapper_;\r
- }));\r
-\r
- describe('PathElem', function(){\r
-\r
- var pathElem;\r
-\r
- beforeEach(function(){\r
- pathElem = new pathUtils.__test.PathElem('MA', 'A1');\r
-\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MA', 'R', 'NS'));\r
- });\r
-\r
- it('hasIdentifier', function(){\r
-\r
- var pathElemSec = new pathUtils.__test.PathElem('MA', 'A2', 'dummyIndetifier');\r
-\r
- expect(pathElem.hasIdentifier()).toBe(false);\r
- expect(pathElemSec.hasIdentifier()).toBe(true);\r
-\r
- });\r
-\r
- it('toString', function(){\r
-\r
- var pathElemToString = pathElem.toString(),\r
- pathElemSec = new pathUtils.__test.PathElem('MA'),\r
- pathElemThird = new pathUtils.__test.PathElem('MA', 'A2', 'dummyIndetifier');\r
-\r
- pathElemThird.identifierValue = 'dummyData';\r
-\r
- expect(pathElemToString).toBe('A1:MA/');\r
-\r
- pathElemToString = pathElemSec.toString();\r
- expect(pathElemToString).toBe('MA/');\r
-\r
- pathElemToString = pathElemThird.toString();\r
- expect(pathElemToString).toBe('A2:MA/dummyData/');\r
-\r
- });\r
-\r
- it('checkNode', function(){\r
-\r
- var node = yangParser.createNewNode('MA','leaf',null, constants.NODE_UI_DISPLAY),\r
- pathElemSec = new pathUtils.__test.PathElem(false, false);\r
-\r
- node.module = 'A1';\r
- expect(pathElem.checkNode(node)).toBe(true);\r
- node.label = 'M';\r
- expect(pathElem.checkNode(node)).toBe(false);\r
- node.label = 'MA';\r
- node.module = 'A2';\r
- expect(pathElem.checkNode(node)).toBe(false);\r
-\r
- expect(pathElemSec.checkNode(node)).toBe(true);\r
-\r
- });\r
-\r
- });\r
-\r
- it('getModuleNodePair', function(){\r
-\r
- var pathString = 'dummyPath',\r
- defaultModule = 'dummyModule',\r
- nodePairValue;\r
-\r
- nodePairValue = pathUtils.__test.getModuleNodePair(pathString, defaultModule);\r
- expect(nodePairValue[0]).toBe('dummyModule');\r
- expect(nodePairValue[1]).toBe('dummyPath');\r
-\r
- pathString = 'path:secPath';\r
- nodePairValue = pathUtils.__test.getModuleNodePair(pathString, defaultModule);\r
- expect(nodePairValue[0]).toBe('path');\r
- expect(nodePairValue[1]).toBe('secPath');\r
-\r
- });\r
-\r
- it('isIndentifier', function(){\r
- var item = '{id}',\r
- isIdentifierStatus;\r
-\r
- isIdentifierStatus = pathUtils.__test.isIdentifier(item);\r
- expect(isIdentifierStatus).toBe(true);\r
- isIdentifierStatus = pathUtils.__test.isIdentifier('id');\r
- expect(isIdentifierStatus).toBe(false);\r
-\r
- });\r
-\r
- it('createPathElement', function(){\r
-\r
- var element,\r
- pathString = 'path:secPath',\r
- identifierString = 'dummyIndetifier',\r
- prefixConverter = function(prefix){\r
- return prefix;\r
- };\r
-\r
- element = pathUtils.__test.createPathElement(pathString, identifierString, prefixConverter, null);\r
- expect(element.name).toBe('secPath');\r
- expect(element.identifierName).toBe('dummyIndetifier');\r
- expect(element.module).toBe('path');\r
- expect(angular.isFunction(element.checkNode)).toBe(true);\r
- expect(angular.isFunction(element.toString)).toBe(true);\r
- expect(angular.isFunction(element.hasIdentifier)).toBe(true);\r
-\r
- });\r
-\r
- it('search', function(){\r
-\r
- var conNode = yangParser.createNewNode('C','container', null, constants.NODE_UI_DISPLAY),\r
- parentNode = yangParser.createNewNode('Li','list', conNode, constants.NODE_UI_DISPLAY),\r
- node = yangParser.createNewNode('LA','leaf', parentNode, constants.NODE_UI_DISPLAY),\r
- nodeSec = yangParser.createNewNode('LB','leaf', conNode, constants.NODE_UI_DISPLAY),\r
- pathElem = new pathUtils.__test.PathElem('..', 'A1'),\r
- pathElemSec = new pathUtils.__test.PathElem('..', 'A1'),\r
- pathElemFinal = new pathUtils.__test.PathElem('LB', 'A1'),\r
- pathElemNonExistent = new pathUtils.__test.PathElem('X', 'A1'),\r
- selNode;\r
-\r
- nodeWrapper.wrapAll(parentNode);\r
- nodeWrapper.wrapAll(conNode);\r
- nodeWrapper.wrapAll(node);\r
- nodeWrapper.wrapAll(nodeSec);\r
- nodeSec.module = 'A1';\r
- selNode = pathUtils.search(node, [pathElem, pathElemSec, pathElemFinal]);\r
- expect(selNode).toBe(nodeSec);\r
- selNode = pathUtils.search(node, [pathElem, pathElemSec, pathElemNonExistent]);\r
- expect(selNode).toBe(null);\r
- });\r
-\r
- it('translate', function(){\r
-\r
- var pathString = '../path/element',\r
- pathElems,\r
- elemsNames,\r
- elemsModulesNames;\r
-\r
- pathElems = pathUtils.translate(pathString);\r
- expect(pathElems[0].name).toBe('..');\r
- expect(pathElems[1].name).toBe('path');\r
- expect(pathElems[2].name).toBe('element');\r
-\r
- pathString = '/M:E1/M:E2/E3/{I1}';\r
- pathElems = pathUtils.translate(pathString);\r
-\r
- expect(pathElems[0].name).toBe('E1');\r
- expect(pathElems[0].module).toBe('M');\r
- expect(pathElems[1].identifierName).toBe(undefined);\r
- expect(pathElems[1].name).toBe('E2');\r
- expect(pathElems[1].module).toBe('M');\r
- expect(pathElems[1].identifierName).toBe(undefined);\r
- expect(pathElems[2].name).toBe('E3');\r
- expect(pathElems[2].module).toBe(undefined);\r
- expect(pathElems[2].identifierName).toBe('I1');\r
- });\r
-\r
- });\r
-\r
- describe('syncFact', function(){\r
- var sync, $timeout;\r
-\r
- beforeEach(angular.mock.inject(function(_syncFact_, _$timeout_){\r
- $timeout = _$timeout_;\r
- sync = _syncFact_.generateObj();\r
- }));\r
-\r
- it('spawnRequest', function(){\r
- sync.spawnRequest('A');\r
- expect(sync.runningRequests.length).toBe(1);\r
-\r
- sync.spawnRequest('B');\r
- expect(sync.runningRequests.length).toBe(2);\r
-\r
- expect(sync.runningRequests[0]).toBe('A0');\r
- expect(sync.runningRequests[1]).toBe('B1');\r
- });\r
-\r
- it('removeRequest', function(){\r
- var reqA = sync.spawnRequest('A'),\r
- reqB = sync.spawnRequest('B'),\r
- reqC = sync.spawnRequest('C');\r
- \r
- sync.removeRequest(reqB);\r
- sync.removeRequest('C');\r
-\r
- expect(sync.runningRequests.length).toBe(2);\r
- expect(sync.runningRequests[0]).toBe('A0');\r
- expect(sync.runningRequests[1]).toBe('C2');\r
- });\r
-\r
- it('waitFor', function(){\r
- var called = false,\r
- reqA = sync.spawnRequest('A'),\r
- dummyCbk = function() { \r
- called = true;\r
- };\r
-\r
- sync.waitFor(dummyCbk);\r
- $timeout.flush();\r
- expect(called).toBe(false);\r
-\r
- sync.removeRequest(reqA);\r
- $timeout.flush();\r
- expect(called).toBe(true);\r
- });\r
-\r
- });\r
-\r
- describe('moduleConnector', function(){\r
- var moduleConnector, yinParser, yangParser, modules,\r
- MA, MAL, MAGRP, MAGRPL, MAGRPLT, MATPD, MATPDSTR,\r
- MB, MBIMPA, MBGRP, MBGRPU, MBGRPL, MBGRPLT,\r
- MC, MCIMPB, MCGRP1, MCGRP1L, MCGRP2, MCGRP2L, MCC, MCCU1, MCCU2,\r
- MD, MDIMPC, MDAUG, MDAUGU;\r
-\r
- beforeEach(angular.mock.inject(function(_moduleConnector_, _yinParser_){\r
- moduleConnector = _moduleConnector_;\r
- yinParser = _yinParser_;\r
- yangParser = yinParser.__test.yangParser;\r
-\r
- modules = [new yinParser.__test.Module('MA','R1','NSA'),\r
- new yinParser.__test.Module('MB','R2','NSB'),\r
- new yinParser.__test.Module('MC','R3','NSC'),\r
- new yinParser.__test.Module('MD','R4','NSD')];\r
-\r
- MA = modules[0];\r
- MB = modules[1];\r
- MC = modules[2];\r
- MD = modules[3];\r
-\r
- yangParser.setCurrentModuleObj(MA);\r
- MAL = yangParser.createNewNode('MAL', 'leaf', MA, constants.NODE_UI_DISPLAY);\r
- MAGRP = yangParser.createNewNode('grp-ma', 'grouping', MA, constants.NODE_LINK_TARGET);\r
- MAGRPL = yangParser.createNewNode('LGRP', 'leaf', MAGRP, constants.NODE_UI_DISPLAY);\r
- MATPD = yangParser.createNewNode('tpd-ma', 'typedef', MA, constants.NODE_LINK_TARGET);\r
- MAGRPLT = yangParser.createNewNode(MATPD.label, 'type', MAGRPL, constants.NODE_UI_DISPLAY);\r
- MATPDT = yangParser.createNewNode('uint32', 'type', MATPD, constants.NODE_ALTER);\r
-\r
- yangParser.setCurrentModuleObj(MB);\r
- MBIMPA = yangParser.createNewNode('MA', 'import', MB, constants.NODE_ALTER);\r
- MBIMPA._prefix = 'prefMA';\r
- MBGRP = yangParser.createNewNode('grp-mb', 'grouping', MB, constants.NODE_LINK_TARGET);\r
- MBGRPU = yangParser.createNewNode(MBIMPA._prefix+':'+MAGRP.label, 'uses', MBGRP, constants.NODE_LINK);\r
- MBGRPL = yangParser.createNewNode('MBGRPL', 'leaf', MBGRP, constants.NODE_UI_DISPLAY);\r
- MBGRPLT = yangParser.createNewNode(MBIMPA._prefix+':'+MAGRPLT.label, 'type', MBGRPL, constants.NODE_ALTER);\r
-\r
- yangParser.setCurrentModuleObj(MC);\r
- MCIMPB = yangParser.createNewNode('MB', 'import', MC, constants.NODE_ALTER);\r
- MCIMPB._prefix = 'prefMB';\r
- MCGRP1 = yangParser.createNewNode('grp-mc1', 'grouping', MC, constants.NODE_LINK_TARGET);\r
- MCGRP1L = yangParser.createNewNode('MCGRP1L', 'leaf', MCGRP1, constants.NODE_UI_DISPLAY);\r
- MCGRP2 = yangParser.createNewNode('grp-mc2', 'grouping', MC, constants.NODE_LINK_TARGET);\r
- MCGRP2L = yangParser.createNewNode('MCGRP2L', 'leaf', MCGRP2, constants.NODE_UI_DISPLAY);\r
- MCC = yangParser.createNewNode('MCC', 'container', MC, constants.NODE_UI_DISPLAY);\r
- MCCU1 = yangParser.createNewNode(MCGRP1.label, 'uses', MCC, constants.NODE_LINK);\r
- MCCU2 = yangParser.createNewNode(MCIMPB._prefix+':'+MBGRP.label, 'uses', MCC, constants.NODE_LINK);\r
-\r
- yangParser.setCurrentModuleObj(MD);\r
- MDIMPC = yangParser.createNewNode('MC', 'import', MD, constants.NODE_ALTER);\r
- MDIMPC._prefix = 'prefMC';\r
- MDAUG = yangParser.createNewNode('augment1', 'augment', MD, constants.NODE_ALTER);\r
- MDAUG.pathString = '/'+MDIMPC._prefix+':'+MCGRP2.label;\r
- MDAUGU = yangParser.createNewNode(MDIMPC._prefix+':'+MCGRP2.label, 'uses', MDAUG, constants.NODE_LINK);\r
- MDC = yangParser.createNewNode('MDC', 'container', MD, constants.NODE_UI_DISPLAY);\r
- MDU = yangParser.createNewNode('UX:UY', 'uses', MDC, constants.NODE_LINK);\r
- MDTPD = yangParser.createNewNode('TX:TY', 'typedef', MDC, constants.NODE_LINK);\r
- }));\r
-\r
- it('isBuildInType', function(){\r
- expect(moduleConnector.__test.isBuildInType('string')).toBe(true);\r
- expect(moduleConnector.__test.isBuildInType('myderivedType')).toBe(false);\r
- expect(moduleConnector.__test.isBuildInType('otherModulePref:myderivedType')).toBe(false);\r
- });\r
-\r
- it('linkFunctions.uses', function(){\r
- expect(angular.isFunction(moduleConnector.__test.linkFunctions.uses)).toBe(true);\r
- moduleConnector.__test.linkFunctions.uses(MCCU2, MC)(modules);\r
- expect(MCC.children.length).toBe(3);\r
- expect(MCC.children[1]).toBe(MBGRPL);\r
- expect(MCC.children[2]).toBe(MAGRPL);\r
-\r
- moduleConnector.__test.linkFunctions.uses(MDU, MD)(modules);\r
- });\r
-\r
- it('linkFunctions.type', function(){\r
- expect(angular.isFunction(moduleConnector.__test.linkFunctions.type)).toBe(true);\r
- moduleConnector.__test.linkFunctions.type(MAGRPLT, MA)(modules);\r
- expect(MAGRPLT.parent.children[0]).toBe(MATPDT);\r
-\r
- moduleConnector.__test.linkFunctions.type(MDTPD, MD)(modules);\r
- });\r
-\r
- it('findLinkedStatement', function(){\r
- var data = moduleConnector.__test.findLinkedStatement(MAGRPLT, 'typedef', MA, modules);\r
-\r
- expect(data.node).toBe(MATPD);\r
- expect(data.module).toBe(MA);\r
-\r
- data = moduleConnector.__test.findLinkedStatement(MCCU2, 'grouping', MC, modules);\r
-\r
- expect(data.node).toBe(MBGRP);\r
- expect(data.module).toBe(MB);\r
- });\r
-\r
- it('findLinkedStatement - missing module', function(){\r
- modules.splice(modules.indexOf(MC), 1);\r
- var data = moduleConnector.__test.findLinkedStatement(MCCU1, 'grouping', MC, modules);\r
-\r
- expect(data.node).toBe(null);\r
- expect(data.module).toBe(null);\r
- });\r
-\r
- it('appendChildren', function(){\r
- var oldLength = MDC.children.length;\r
- moduleConnector.__test.appendChildren(MDC, MBGRP);\r
- expect(MDC.children.length).toBe(oldLength+MBGRP.children.length);\r
- });\r
-\r
- it('searchModule', function(){\r
- var moduleNameRev = moduleConnector.__test.searchModule(modules, MA._name, MA._revision),\r
- moduleNAme = moduleConnector.__test.searchModule(modules, MA._name),\r
- moduleNonExist = moduleConnector.__test.searchModule(modules, 'X', 'RX');\r
-\r
- expect(moduleNameRev).toBe(MA);\r
- expect(moduleNAme).toBe(MA);\r
- expect(moduleNonExist).toBe(null);\r
- });\r
-\r
- it('applyLinks', function(){\r
- moduleConnector.__test.applyLinks(MCC, MC, modules);\r
- expect(MCC.children.length).toBe(3);\r
- expect(MCC.children[0]).toBe(MCGRP1L);\r
- expect(MCC.children[1]).toBe(MBGRPL);\r
- expect(MCC.children[2]).toBe(MAGRPL);\r
- });\r
-\r
- it('interConnectModules', function(){\r
- var connectedModules = moduleConnector.__test.interConnectModules(modules);\r
- expect(connectedModules.length).toBe(4);\r
- expect(connectedModules[2]).toBe(MC);\r
-\r
- var mcRoots = MC.getRoots();\r
- expect(mcRoots.length).toBe(1);\r
- expect(mcRoots[0].label).toBe(MCC.label);\r
- expect(mcRoots[0].type).toBe(MCC.type);\r
- expect(mcRoots[0].module).toBe(MC._name);\r
- expect(mcRoots[0].nodeType).toBe(MCC.nodeType);\r
-\r
- expect(mcRoots[0].children[0].label).toBe(MCGRP1L.label);\r
- expect(mcRoots[0].children[0].type).toBe(MCGRP1L.type);\r
- expect(mcRoots[0].children[0].module).toBe(MC._name);\r
- expect(mcRoots[0].children[0].nodeType).toBe(MCGRP1L.nodeType);\r
-\r
- expect(mcRoots[0].children[1].label).toBe(MBGRPL.label);\r
- expect(mcRoots[0].children[1].type).toBe(MBGRPL.type);\r
- expect(mcRoots[0].children[1].module).toBe(MC._name);\r
- expect(mcRoots[0].children[1].nodeType).toBe(MBGRPL.nodeType);\r
-\r
- expect(mcRoots[0].children[2].label).toBe(MAGRPL.label);\r
- expect(mcRoots[0].children[2].type).toBe(MAGRPL.type);\r
- expect(mcRoots[0].children[2].module).toBe(MC._name);\r
- expect(mcRoots[0].children[2].nodeType).toBe(MAGRPL.nodeType);\r
- });\r
-\r
- it('applyModuleName', function(){\r
- var appliedNode = moduleConnector.__test.applyModuleName(MCC, MA._name);\r
- expect(appliedNode.module).toBe(MA._name);\r
- });\r
-\r
- it('processModuleObjs', function(){\r
- var data = moduleConnector.processModuleObjs(modules);\r
- expect(data.rootNodes.length).toBe(3);\r
- expect(data.augments.length).toBe(1);\r
- });\r
- });\r
-\r
- describe('yinParser', function(){\r
-\r
- var yinParser, yangParser, testProvider, pathUtils, $httpBackend, $timeout;\r
-\r
- beforeEach(angular.mock.inject(function(_yinParser_, _pathUtils_, _$timeout_, _$httpBackend_){\r
- $timeout = _$timeout_;\r
- yinParser = _yinParser_;\r
- $httpBackend = _$httpBackend_;\r
- testProvider = yinParser.__test;\r
- pathUtils = _pathUtils_;\r
-\r
- yangParser = testProvider.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- }));\r
-\r
- afterEach(function() {\r
- $httpBackend.verifyNoOutstandingExpectation();\r
- $httpBackend.verifyNoOutstandingRequest();\r
- });\r
-\r
- it('parentTag', function() {\r
- var dummyXml = document.createElement('module'),\r
- dummyNodeA = document.createElement('A'),\r
- dummyNodeB = document.createElement('B'),\r
- dummyNodeC = document.createElement('C');\r
-\r
- dummyNodeB.appendChild(dummyNodeC);\r
- dummyNodeA.appendChild(dummyNodeB);\r
- dummyXml.appendChild(dummyNodeA);\r
-\r
- expect(testProvider.parentTag($(dummyNodeA))).toBe(dummyXml);\r
- expect(testProvider.parentTag($(dummyNodeB))).toBe(dummyXml);\r
- expect(testProvider.parentTag($(dummyNodeC))).toBe(dummyXml);\r
- });\r
-\r
- // it('isBuildInType', function() {\r
- // expect(testProvider.isBuildInType('string')).toBe(true);\r
- // expect(testProvider.isBuildInType('derived:type')).toBe(false);\r
- // });\r
-\r
- describe('Module', function() {\r
- var module;\r
-\r
- beforeEach(function() {\r
- module = yangParser.moduleObj;\r
- });\r
-\r
- it('getRoots', function() {\r
- var node = yangParser.createNewNode('P', 'T', module, 1),\r
- roots = module.getRoots();\r
-\r
- expect(roots.length).toBe(1);\r
- expect(roots[0]).toBe(node);\r
- });\r
-\r
- it('getImportByPrefix', function() {\r
- var prefix = 'pref';\r
- expect(module.getImportByPrefix(prefix)).toBe(null);\r
- \r
- var node = yangParser.createNewNode('P', 'import', module, 1);\r
- node._prefix = prefix;\r
-\r
- expect(module.getImportByPrefix(prefix)).toBe(node);\r
- });\r
-\r
- it('getRawAugments', function() {\r
- var node = yangParser.createNewNode('P', 'augment', module, constants.NODE_ALTER),\r
- augs = module.getRawAugments();\r
-\r
- expect(augs.length).toBe(1);\r
- expect(augs[0]).toBe(node);\r
- });\r
-\r
- it('getAugments', function() {\r
- var node = yangParser.createNewNode('P', 'augment', module, constants.NODE_ALTER);\r
-\r
- node.pathString = '';\r
- augs = module.getAugments();\r
-\r
- expect(augs.length).toBe(1);\r
- expect(augs[0] instanceof testProvider.Augmentation).toBe(true);\r
- });\r
-\r
- it('addChild', function() {\r
- var aug = yangParser.createNewNode('P', 'augment', module, constants.NODE_ALTER),\r
- root = yangParser.createNewNode('P', 'T', module, constants.NODE_UI_DISPLAY);\r
-\r
- expect(module._statements.hasOwnProperty('augment')).toBe(true);\r
- expect(module._statements.augment.length).toBe(1);\r
- expect(module._augments.length).toBe(1);\r
- expect(module._augments[0]).toBe(module._statements.augment[0]);\r
- expect(module._augments[0]).toBe(aug);\r
- expect(module._statements.augment[0]).toBe(aug);\r
- \r
- expect(module._statements.hasOwnProperty('T')).toBe(true);\r
- expect(module._statements.T.length).toBe(1);\r
- expect(module._roots.length).toBe(1);\r
- expect(module._roots[0]).toBe(module._statements.T[0]);\r
- expect(module._roots[0]).toBe(root);\r
- expect(module._statements.T[0]).toBe(root);\r
-\r
- module.addChild(root);\r
- expect(module._statements.T.length).toBe(1);\r
- expect(module._roots.length).toBe(1);\r
- expect(module._roots[0]).toBe(root);\r
- expect(module._statements.T[0]).toBe(root);\r
- });\r
-\r
- it('searchNode', function() {\r
- var n1 = yangParser.createNewNode('P1', 'augment', module, constants.NODE_ALTER),\r
- n2 = yangParser.createNewNode('P2', 'T1', module, constants.NODE_UI_DISPLAY),\r
- n3 = yangParser.createNewNode('P3', 'T2', module, constants.NODE_UI_DISPLAY),\r
- n3dup = yangParser.createNewNode('P3', 'T2', module, constants.NODE_ALTER),\r
- n4 = yangParser.createNewNode('P4', 'T3', module, constants.NODE_UI_DISPLAY),\r
- searchValid = module.searchNode('T1', 'P2'),\r
- searchBadType = module.searchNode('T4', 'P2'),\r
- searchBadName = module.searchNode('T3', 'P2'),\r
- searchBadNameType = module.searchNode('X', 'Y'),\r
- searchUndef = module.searchNode(),\r
- searchDup = module.searchNode('T2', 'P3');\r
-\r
- expect(searchValid).toBe(n2);\r
- expect(searchBadType).toBe(null);\r
- expect(searchBadName).toBe(null);\r
- expect(searchBadNameType).toBe(null);\r
- expect(searchUndef).toBe(null);\r
- expect(searchDup).toBe(null);\r
- });\r
-\r
- // addChild \r
- // searchNode\r
- });\r
-\r
- describe('Node', function() {\r
- var node;\r
-\r
- beforeEach(function() {\r
- node = yangParser.createNewNode('N', 'T', null, 0);\r
- });\r
-\r
- it('appendTo', function() {\r
- var parent = yangParser.createNewNode('P', 'T', null, 0);\r
- node.appendTo(parent);\r
- expect(parent.children[0]).toBe(node);\r
- });\r
-\r
- it('deepCopy', function() {\r
- var copy = node.deepCopy();\r
- nodesEqual(node, copy);\r
- });\r
-\r
- it('getChildren', function() {\r
- var childA = yangParser.createNewNode('CHA', 'T1', node, 1),\r
- childB = yangParser.createNewNode('CHB', 'T2', node, 0),\r
- childC = yangParser.createNewNode('CHC', 'T3', node, 0),\r
- filter;\r
-\r
- expect(node.getChildren('T1')[0]).toBe(childA);\r
- expect(node.getChildren(null, 'CHB')[0]).toBe(childB);\r
- \r
- filter = node.getChildren(null, null, 0);\r
- expect(filter.length).toBe(2);\r
- expect(filter[0]).toBe(childB);\r
- expect(filter[1]).toBe(childC);\r
-\r
- filter = node.getChildren(null, null, 0, 'label');\r
- expect(filter.length).toBe(2);\r
- expect(filter[0]).toBe(childB.label);\r
- expect(filter[1]).toBe(childC.label);\r
- });\r
- });\r
-\r
- describe('Augmentation', function() {\r
- var node, augNode, augmentation, yangParser;\r
-\r
- beforeEach(function() {\r
- yangParser = yinParser.__test.yangParser;\r
- augNode = yangParser.createNewNode('A', 'AUG', null, 0);\r
- node = yangParser.createNewNode('N', 'T', augNode, 0);\r
- augNode.path = [new pathUtils.__test.PathElem('NA', 'MA'),\r
- new pathUtils.__test.PathElem('NB', 'MA'),\r
- new pathUtils.__test.PathElem('NC', 'MB')];\r
- augmentation = new yinParser.__test.Augmentation(augNode);\r
- });\r
-\r
- it('constructor without node.path', function() {\r
- var node = yangParser.createNewNode('N', 'T', augNode, 0),\r
- augmentationWOPath = new yinParser.__test.Augmentation(node);\r
-\r
- expect(augmentationWOPath.hasOwnProperty('path')).toBe(true);\r
- expect(augmentationWOPath.path.length).toBe(0);\r
- });\r
-\r
- it('apply', function() {\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MA', 'R', 'NS'));\r
- var NP1 = yangParser.createNewNode('NA', 'T', null, 0),\r
- N1 = yangParser.createNewNode('NB', 'T', NP1, 0);\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MB', 'R', 'NS'));\r
- var N2 = yangParser.createNewNode('NC', 'T', N1, 0),\r
- NP2 = yangParser.createNewNode('ND', 'T', null, 0);\r
-\r
- augmentation.apply([NP1, NP2]);\r
- expect(N2.children.length).toBe(1);\r
- expect(N2.children[0]).toBe(node);\r
-\r
- N2.children = [];\r
- augmentation.path = [new pathUtils.__test.PathElem('NA', 'MA'),\r
- new pathUtils.__test.PathElem('NB', 'MA'),\r
- new pathUtils.__test.PathElem('NC', 'MA')];\r
- augmentation.apply([NP1, NP2]);\r
- expect(N2.children.length).toBe(0);\r
- });\r
-\r
- it('getTargetNodeToAugment', function() {\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MA', 'R', 'NS'));\r
- var NP1 = yangParser.createNewNode('NA', 'T', null, 0),\r
- N1 = yangParser.createNewNode('NB', 'T', NP1, 0);\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('MB', 'R', 'NS'));\r
- var N2 = yangParser.createNewNode('NC', 'T', N1, 0),\r
- NP2 = yangParser.createNewNode('ND', 'T', null, 0);\r
-\r
- var target = augmentation.getTargetNodeToAugment([NP1, NP2]);\r
- expect(target).toBe(N2);\r
- });\r
-\r
- it('getPathString', function() {\r
- expect(augmentation.getPathString()).toBe('MA:NA/MA:NB/MB:NC');\r
- });\r
- });\r
-\r
- it('parseYang', function() {\r
- var dummyModule = 'dummy-module',\r
- mockURL = '/'+dummyModule+'.yang.xml',\r
- xmlString = '<module name="'+dummyModule+'">' +\r
- ' <namespace uri="dummyNS"/>' +\r
- ' <container name="CA">' +\r
- ' <container name="CB">' +\r
- ' <container name="CC">' +\r
- ' <leaf name="LA">' +\r
- ' </leaf>' +\r
- ' </container>' +\r
- ' <leaf name="LB">' +\r
- ' </leaf>' +\r
- ' <leaf name="LC">' +\r
- ' </leaf>' +\r
- ' </container>' +\r
- ' <leaf name="LD">' +\r
- ' </leaf>' +\r
- ' </container>' +\r
- '</module>',\r
- parseResult;\r
-\r
- $httpBackend.when('GET', testProvider.path+mockURL).respond(xmlString);\r
-\r
- yinParser.parse(mockURL, function(result) {\r
- parseResult = result;\r
- });\r
- \r
- $httpBackend.flush();\r
-\r
- expect(parseResult._name).toBe(dummyModule);\r
- expect(parseResult._namespace).toBe('dummyNS');\r
- expect(parseResult._revision).toBe(undefined);\r
-\r
- var CA = parseResult._statements.container[0];\r
- expect(CA.label).toBe('CA');\r
- expect(CA.type).toBe('container');\r
- expect(CA.children.length).toBe(2);\r
-\r
- var child = CA.children[0];\r
- expect(child.label).toBe('CB');\r
- expect(child.type).toBe('container');\r
- expect(child.children.length).toBe(3);\r
-\r
- child = child.children[0];\r
- expect(child.label).toBe('CC');\r
- expect(child.type).toBe('container');\r
- expect(child.children.length).toBe(1);\r
-\r
- child = child.children[0];\r
- expect(child.label).toBe('LA');\r
- expect(child.type).toBe('leaf');\r
- expect(child.children.length).toBe(0);\r
- });\r
-\r
- it('parseYang - error', function() {\r
- var dummyModule = 'dummy-module',\r
- mockURL = '/'+dummyModule+'.yang.xml',\r
- parseResult = false;\r
-\r
- $httpBackend.when('GET', testProvider.path+mockURL).respond(404);\r
-\r
- yinParser.parse(mockURL, function(result) {\r
- }, function() {\r
- parseResult = true;\r
- });\r
-\r
- $httpBackend.flush();\r
- expect(parseResult).toBe(true);\r
- });\r
-\r
- describe('yangParser', function(){\r
- var parserProvider, module, name, type, revision;\r
-\r
- var checkNode = function(node, id, name, type, module, childrenCount, childrenObj) {\r
- expect(node.id).toBe(id);\r
- expect(node.label).toBe(name);\r
- expect(node.localeLabel).toBe('YANGUI_'+name.toUpperCase());\r
- expect(node.type).toBe(type);\r
- expect(node.module).toBe(module);\r
- expect(node.children.length).toBe(childrenCount);\r
-\r
- for(var index in childrenObj) {\r
- expect(node.children[index]).toBe(childrenObj[index]);\r
- }\r
- };\r
-\r
- beforeEach(function() {\r
- module = 'dummyModule';\r
- name = 'dummyName';\r
- type = 'dummyType';\r
- revision = '1-1-1';\r
-\r
- parserProvider = testProvider.yangParser;\r
- parserProvider.setCurrentModuleObj(new yinParser.__test.Module(module, revision, 'NS'));\r
- });\r
-\r
- it('setCurrentModuleObj', function() {\r
- expect(parserProvider.moduleObj._name).toBe(module);\r
- expect(parserProvider.moduleObj._revision).toBe(revision);\r
- expect(parserProvider.moduleObj._namespace).toBe('NS');\r
- });\r
-\r
- it('createNewNode', function() {\r
- var node = parserProvider.createNewNode(name, type, parserProvider.moduleObj, constants.NODE_UI_DISPLAY);\r
- var childNode = parserProvider.createNewNode(name, type, node, constants.NODE_UI_DISPLAY);\r
-\r
- expect(parserProvider.moduleObj._statements[type][0]).toBe(node);\r
- checkNode(node, 0, name, type, module, 1, {'0': childNode});\r
- });\r
-\r
- it('parse', function() {\r
- var xmlString = '<module name="'+module+'">' +\r
- ' <grouping name="GA">' +\r
- ' <leaf name="GLA">' +\r
- ' </leaf>' +\r
- ' </grouping>' +\r
- ' <leaf name="LA">' +\r
- ' </leaf>' +\r
- ' <container name="CA">' +\r
- ' </container>' +\r
- ' <list name="LiA">' +\r
- ' </list>' +\r
- ' <choice name="ChA">' +\r
- ' </choice>' +\r
- ' <uses name="GA">' +\r
- ' </uses>' +\r
- '</module>';\r
-\r
- parserProvider.parse(xmlString, parserProvider.moduleObj);\r
- expect(parserProvider.moduleObj._statements.grouping.length).toBe(1);\r
- expect(parserProvider.moduleObj._statements.leaf.length).toBe(1);\r
- expect(parserProvider.moduleObj._statements.container.length).toBe(1);\r
- expect(parserProvider.moduleObj._statements.list.length).toBe(1);\r
- expect(parserProvider.moduleObj._statements.choice.length).toBe(1);\r
- expect(parserProvider.moduleObj._statements.uses.length).toBe(1);\r
-\r
- checkNode(parserProvider.moduleObj._statements.grouping[0], 0, 'GA', 'grouping', module, 1, {});\r
- checkNode(parserProvider.moduleObj._statements.leaf[0], 2, 'LA', 'leaf', module, 0, {});\r
- checkNode(parserProvider.moduleObj._statements.container[0], 3, 'CA', 'container', module, 0, {});\r
- checkNode(parserProvider.moduleObj._statements.list[0], 4, 'LiA', 'list', module, 0, {});\r
- checkNode(parserProvider.moduleObj._statements.choice[0], 5, 'ChA', 'choice', module, 0, {});\r
- checkNode(parserProvider.moduleObj._statements.uses[0], 6, 'GA', 'uses', module, 0, {});\r
- });\r
-\r
- it('leaf', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<leaf name="LA"></leaf>';\r
-\r
- parserProvider.leaf(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'LA', 'leaf', node.module, 0, {});\r
- });\r
-\r
- it('leaf-list', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<leaf-list name="LA"></leaf>';\r
-\r
- parserProvider['leaf-list'](xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'LA', 'leaf-list', node.module, 0, {});\r
- });\r
-\r
- it('container', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<container name="CA"></container>';\r
-\r
- parserProvider.container(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'CA', 'container', node.module, 0, {});\r
- });\r
-\r
- it('choice', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<choice name="ChiA"><case name="CA"></case></choice>';\r
-\r
- parserProvider.choice(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
-\r
- var choiceNode = node.children[0];\r
- checkNode(choiceNode, 1, 'ChiA', 'choice', node.module, 1, {});\r
- checkNode(choiceNode.children[0], 2, 'CA', 'case', node.module, 0, {});\r
- });\r
-\r
- it('case', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<case name="CA"></case>';\r
-\r
- parserProvider.case(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'CA', 'case', node.module, 0, {});\r
- });\r
-\r
- it('list', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<list name="LiA"></list>';\r
-\r
- parserProvider.list(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'LiA', 'list', node.module, 0, {});\r
- });\r
-\r
- it('key', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<key value="id"/>';\r
-\r
- parserProvider.key(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'id', 'key', node.module, 0, {});\r
- });\r
-\r
- it('rpc', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<rpc name="reset"></rpc>';\r
-\r
- parserProvider.rpc(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'reset', 'rpc', node.module, 0, {});\r
- });\r
-\r
- it('input', function() {\r
- var xmlString = '<input></input>',\r
- node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY);\r
-\r
- parserProvider.input(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'input', 'input', node.module, 0, {});\r
- });\r
-\r
- it('output', function() {\r
- var xmlString = '<output></output>',\r
- node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY);\r
-\r
- parserProvider.output(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'output', 'output', node.module, 0, {});\r
- });\r
-\r
- it('import', function(){\r
- var node = parserProvider.createNewNode(name, type, parserProvider.moduleObj, constants.NODE_UI_DISPLAY),\r
- xmlString = '<import module="A">' +\r
- '<prefix value="Apref"/>' +\r
- '<revision-date date="2013-11-26"/>' +\r
- '</import>';\r
-\r
- parserProvider.import(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'A', 'import', parserProvider.moduleObj._name, 0, {});\r
- });\r
-\r
- it('grouping', function() {\r
- var node = parserProvider.createNewNode(name, type, parserProvider.moduleObj, constants.NODE_UI_DISPLAY),\r
- xmlString = '<grouping name="GA"><leaf name="LA"></leaf></grouping>';\r
-\r
- parserProvider.grouping(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'GA', 'grouping', node.module, 1, {});\r
- });\r
-\r
- it('uses', function() {\r
- var node = parserProvider.createNewNode(name, type, parserProvider.moduleObj, constants.NODE_UI_DISPLAY),\r
- xmlString = '<module name="MA">' +\r
- ' <grouping name="GA">' +\r
- ' <leaf name ="LA"></leaf>' +\r
- ' </grouping>' +\r
- ' <uses name="GA"/>' +\r
- '</module>',\r
- usesXmlPart = $(xmlString).children('uses:first')[0];\r
-\r
- parserProvider.uses(usesXmlPart, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'GA', 'uses', node.module, 0, {});\r
- });\r
-\r
- it('augment', function(){\r
- var ident = 'IDENTIFIER',\r
- xmlString = '<module name="MA">' +\r
- ' <import module="MB">' +\r
- ' <prefix value="prefMB"/>' +\r
- ' </import>' +\r
- ' <augment target-node="/prefMB:N1/prefMB:N2">' +\r
- ' <leaf name="L"></leaf>' +\r
- ' </augment>' +\r
- '</module>',\r
- xmlStringIdent = '<module name="MA"' +\r
- ' xmlns:ext="urn:opendaylight:yang:extension:yang-ext">' +\r
- ' <import module="MB">' +\r
- ' <prefix value="prefMB"/>' +\r
- ' </import>' +\r
- ' <augment target-node="/prefMB:N1/prefMB:N2">' +\r
- ' <ext:augment-identifier identifier="'+ident+'"/>' +\r
- ' <leaf name="L"></leaf>' +\r
- ' </augment>' +\r
- '</module>';\r
-\r
- parserProvider.augment($(xmlString).children('augment:first'), parserProvider.moduleObj);\r
- var augments = parserProvider.moduleObj.getRawAugments();\r
-\r
- expect(augments.length).toBe(1);\r
- checkNode(augments[0], 0, 'augment1', 'augment', parserProvider.moduleObj._name, 1, {});\r
-\r
- parserProvider.augment($($.parseXML(xmlStringIdent).documentElement).children('augment:first'), parserProvider.moduleObj);\r
- var augmentIdent = parserProvider.moduleObj.getRawAugments()[1];\r
-\r
- checkNode(augmentIdent, 2, ident, 'augment', parserProvider.moduleObj._name, 1, {});\r
- });\r
-\r
- it('description', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<description><text>dummy text</text></description>';\r
-\r
- parserProvider.description(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'dummy text', 'description', node.module, 0, {});\r
- });\r
-\r
- it('pattern', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_ALTER),\r
- xmlString = '<pattern value="dummyRegexp"></pattern>';\r
-\r
- parserProvider.pattern(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'dummyRegexp', 'pattern', node.module, 0, {});\r
- });\r
-\r
- it('range', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_ALTER),\r
- xmlString = '<range value="10..20"></range>';\r
-\r
- parserProvider.range(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, '10..20', 'range', node.module, 0, {});\r
- });\r
-\r
- it('length', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_ALTER),\r
- xmlString = '<length value="10..20"></length>';\r
-\r
- parserProvider.length(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, '10..20', 'length', node.module, 0, {});\r
- });\r
-\r
- it('enum', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_ALTER),\r
- xmlString = '<enum name="unknown"><value value="0"/></enum>';\r
-\r
- parserProvider.enum(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'unknown', 'enum', node.module, 0, {});\r
- });\r
-\r
- it('bit', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_ALTER),\r
- xmlString = '<bit name="overload"><position value="0"/></bit>';\r
-\r
- parserProvider.bit(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'overload', 'bit', node.module, 1, {});\r
- });\r
-\r
- it('position', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_ALTER),\r
- xmlString = '<position value="0"/>';\r
-\r
- parserProvider.position(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, '0', 'position', node.module, 0, {});\r
- });\r
-\r
- it('typedef', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<typedef name="td"></typedef>';\r
-\r
- parserProvider.typedef(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'td', 'typedef', node.module, 0, {});\r
- });\r
-\r
- it('type', function() {\r
- var node = parserProvider.createNewNode(name, type, null, constants.NODE_UI_DISPLAY),\r
- xmlString = '<type name="string"></type>';\r
-\r
- parserProvider.type(xmlString, node);\r
- expect(node.children.length).toBe(1);\r
- checkNode(node.children[0], 1, 'string', 'type', node.module, 0, {});\r
- });\r
-\r
- });\r
-\r
- });\r
-\r
- });\r
-\r
-});
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.node.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Node Module Resources</description>
- <packaging>jar</packaging>
-
-</project>
+++ /dev/null
-<!--
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-
-
-
-<h4>{{ 'NODE_ID' | translate }} - {{data.id}}</h4>
-<div class="form-group searchDiv">
- <input class="form-control" ng-model="nodeConnectorSearch" placeholder="{{'SEARCH_NODE_CONNECTORS' | translate}}">
-</div>
-<table class="footable table">
- <thead>
- <tr>
- <th>{{ 'NODE_CONNECTOR_ID' | translate }}</th>
- <th>{{ 'NAME' | translate }}</th>
- <th>{{ 'PORT_NUMBER' | translate }}</th>
- <th>{{ 'MAC_ADDRESS' | translate }}</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-hide="data['node-connector'].length"><td colspan="5" class="centerAlign">{{ 'NO_DATA_FOUND' | translate }}</td></tr>
- <tr ng-repeat="ncp in data['node-connector'] | filter:nodeConnectorSearch" node-table>
- <td>{{ncp.id}}</td>
- <td>{{ncp['flow-node-inventory:name']}}</td>
- <td>{{ncp['flow-node-inventory:port-number']}}</td>
- <td>{{ncp['flow-node-inventory:hardware-address']}}</td>
- <!--td>
- <i class="icon-ok-sign"></i>
- <port-state value="{{ncp.properties.state.value}}"></port-state>
- </td-->
- </tr>
- </tbody>
- <tfoot class="hide-if-no-paging">
- <tr>
- <td colspan="4">
- <div class="pagination pagination-centered"></div>
- </td>
- </tr>
- </tfoot>
-</table>
+++ /dev/null
-<!--\r
- * Copyright (c) 2014 Brocade and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
--->\r
-\r
-<h4>{{ 'FLOW_TABLE_STATISTICS_FOR_NODE_ID' | translate }} - {{data.id}}</h4>\r
-<label class="white-detail-page"><input type="checkbox" ng-model="checked"> {{ 'SHOW_ALL_TABLES' | translate }}</label>\r
-<table class="footable table">\r
- <thead>\r
- <tr>\r
- <th>{{ 'TABLE_ID' | translate }}</th>\r
- <th>{{ 'ACTIVE_FLOW' | translate }}</th>\r
- <th>{{ 'PKTS_MATCHED' | translate }}</th>\r
- <th>{{ 'PKTS_LOOKED_UP' | translate }}</th>\r
- </tr>\r
- </thead>\r
- <tbody>\r
- <tr ng-hide="data['flow-node-inventory:table'].length"><td colspan="4" class="centerAlign">{{ 'NO_DATA_FOUND' | translate }}</td></tr>\r
- <tr data-ng-repeat="ncp in data['flow-node-inventory:table']" ng-show="checked || checkActiveFlow($index)">\r
- <!--<td><input type="checkbox" name="select-node-{{item.node.id}}" ng-click="unselect($event)" id="select-node-{{item.node.id}}" /></td>-->\r
- <td>{{ncp['flow-node-inventory:id']}}</td>\r
- <td>{{ncp['opendaylight-flow-table-statistics:flow-table-statistics']['active-flows']}}</td>\r
- <td>{{ncp['opendaylight-flow-table-statistics:flow-table-statistics']['packets-matched']}}</td>\r
- <td>{{ncp['opendaylight-flow-table-statistics:flow-table-statistics']['packets-looked-up']}}</td>\r
- <!--td>\r
- <i class="icon-ok-sign"></i>\r
- <port-state value="{{ncp.properties.state.value}}"></port-state>\r
- </td-->\r
- </tr>\r
- </tbody>\r
-</table>
\ No newline at end of file
+++ /dev/null
-<!--\r
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
--->\r
-\r
-<div class="form-group searchDiv">\r
- <input class="form-control" ng-model="nodeSearch.id" placeholder="{{'SEARCH_NODES' | translate}}">\r
-</div>\r
-<table class="footable table">\r
- <thead>\r
- <tr>\r
- <th>{{ 'NODE_ID' | translate }}</th>\r
- <th>{{ 'NODE_NAME' | translate }}</th>\r
- <th>{{ 'NODE_CONNECTORS' | translate }}</th>\r
- <th data-sort-ignore="true">{{ 'STATISTICS' | translate }}</th>\r
- </tr>\r
- </thead>\r
- <tbody>\r
- <tr ng-hide="data.length > 0"><td colspan="5" class="centerAlign">{{ 'NO_DATA_FOUND' | translate }}</td></tr>\r
- <tr ng-repeat="item in data | filter:{id:'!config'} | filter:nodeSearch" node-table>\r
- <td>{{item.id}}</td>\r
- <td>{{item['flow-node-inventory:description']}}</td>\r
- <td><a href="index.html#/node/{{item.id}}/detail">{{item['node-connector'].length}}</a></td>\r
- <td>\r
- <span ng-show="item.id!='controller-config'">\r
- <a href="index.html#/node/{{item.id}}/flow-stat">{{ 'FLOWS' | translate }} </a><span style="color: #414042;"> | </span>\r
- <a href="index.html#/node/{{item.id}}/port-stat">{{ 'NODE_CONNECTORS' | translate }}</a>\r
- </span>\r
- </td>\r
- <!--<td>\r
- <a class="row-delete" href="#">\r
- <i class="icon-remove"></i>\r
- </a>\r
- </td>-->\r
- </tr>\r
- </tbody>\r
- <tfoot class="hide-if-no-paging">\r
- <tr>\r
- <td colspan="4">\r
- <div class="pagination pagination-centered"></div>\r
- </td>\r
- </tr>\r
- </tfoot>\r
-</table>\r
+++ /dev/null
-/*
-* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
-*
-* This program and the accompanying materials are made available under the
-* terms of the Eclipse Public License v1.0 which accompanies this distribution,
-* and is available at http://www.eclipse.org/legal/epl-v10.html
-*/
-
-.nodes-module{
- padding-top: 20px;
-}
-
-.indexGrid {
- position: relative;
- top: 20px;
- right: 0;
- bottom: 0;
- left: 0;
- overflow: hidden;
- height: 180px !important; // just for now...
- margin-left: 5px;
-
-}
-
-.ngViewport {
- height: 150px !important; // just for now...
-}
-
-
-.nav {
- li {
- a {
- padding: 5px 15px;
- &:hover {
- border-radius: 0;
- }
- }
- margin: 0;
- }
- .active {
- a {
- background: #eee;
- color: #222;
- border-radius: 0;
- }
- }
- }
-
-.menu {
- position: relative;
- top: 0px;
- left: 0;
- right: 0;
- height: 45px;
- z-index: 1;
- background: #fff;
- border-radius: 7px 7px 0 0;
- ul {
- margin-bottom: 10px;
- padding: 5px;
- border-bottom: 1px solid #ddd;
- li {
- a {
- padding: 5px 10px;
- }
- }
- }
- }
-
-
-
-
- // Needed for topology
-circle.node {
- stroke: #fff;
- stroke-width: 1.5px;
-}
-
-line.link {
- stroke: #999;
- stroke-opacity: .6;
-}
-text {
- font: 10px san-serif;
- pointer-events: none;
-}
-svg {
- border: 1px solid #888;
- border-radius: 4px;
- background-image: radial-gradient(circle, #eee, #ccc);
-}
-
-.footable {
- a {
- color: #428bca !important;
- }
- tbody {
- tr {
- td {
- &.centerAlign{
- text-align:center;
- }
- }
- }
- }
- tfoot {
- div {
- &.pagination{
- display:block;
- }
- }
- }
-}
-
-.searchDiv {
- margin-top: 10px;
- width: 30%;
-}
\ No newline at end of file
+++ /dev/null
-/*\r
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-define(['app/node/nodes.module','app/node/nodes.services'], function(node) {\r
-\r
- node.controller('rootNodeCtrl', function($rootScope) {\r
- $rootScope['section_logo'] = 'assets/images/logo_node.gif';\r
- // $rootScope.$apply();\r
- });\r
-\r
- node.controller('allNodesCtrl', function($scope, NodeInventorySvc, $timeout) {\r
- NodeInventorySvc.getAllNodes().then(function(data) {\r
- $scope.data = data.nodes.node;\r
- });\r
- var tableRendered = false;\r
- $scope.$watch('nodeSearch.id', function() {\r
- if(tableRendered) {\r
- $timeout(function(){\r
- $('.footable').trigger('footable_redraw'); //force a redraw\r
- }, 20);\r
- }\r
- });\r
-\r
- $scope.$on('lastentry', function() {\r
- // Initialize footable table\r
- if(!tableRendered){\r
- $('.footable').footable();\r
- tableRendered = true;\r
- }\r
- });\r
- });\r
-\r
- node.controller('nodeConnectorCtrl', function($scope, $stateParams, NodeInventorySvc, $timeout, nodeConnectorFactory) {\r
- var currentData = NodeInventorySvc.getCurrentData();\r
- if(currentData != null) {\r
- currentData.then(function(data) {\r
- var node = _.find(data.nodes.node, function(entry) {if(entry.id == $stateParams.nodeId) { return entry;}});\r
- $scope.data = node;\r
- });\r
- }\r
- else {\r
- NodeInventorySvc.getNode($stateParams.nodeId).then(function(data) {\r
- $scope.data = data.node[0];\r
- });\r
- }\r
- var tableRendered = false;\r
- $scope.$watch('nodeConnectorSearch', function() {\r
- if(tableRendered) {\r
- $timeout(function () {\r
- $('.footable').trigger('footable_redraw');//force a redraw\r
- }, 20);\r
- }\r
- });\r
-\r
- $scope.$on('lastentry', function() {\r
- // Initialize footable table\r
- if(!tableRendered){\r
- $('.footable').footable();\r
- tableRendered = true;\r
- }\r
- });\r
-\r
- $scope.checkActiveFlow = function(index) {\r
- return nodeConnectorFactory.getActiveFlow($scope.data['flow-node-inventory:table'], index);\r
- };\r
- });\r
-});\r
+++ /dev/null
-/*\r
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-define(['angularAMD', 'app/routingConfig', 'Restangular', 'angular-translate', 'angular-translate-loader-static-files', 'app/core/core.services', 'common/config/env.module'], function(ng) {\r
- var nodes = angular.module('app.nodes', ['app.core', 'pascalprecht.translate', 'ui.router.state', 'restangular', 'config']);\r
-\r
- nodes.config(function($stateProvider, NavHelperProvider, $translateProvider) {\r
-\r
- NavHelperProvider.addControllerUrl('app/node/nodes.controller');\r
- NavHelperProvider.addToMenu('nodes', {\r
- "link" : "#/node/index",\r
- "active" : "main.node.*",\r
- "title" : "NODES",\r
- "icon" : "icon-sitemap",\r
- "page" : {\r
- "title" : "NODES",\r
- "description" : "NODES"\r
- }\r
- });\r
-\r
- var access = routingConfig.accessLevels;\r
- $stateProvider.state('main.node', {\r
- url: 'node',\r
- abstract: true,\r
- views : {\r
- 'content' : {\r
- templateUrl: 'src/app/node/root.tpl.html',\r
- controller: 'rootNodeCtrl'\r
- }\r
- }\r
- });\r
-\r
- $stateProvider.state('main.node.index', {\r
- url: '/index',\r
- access: access.admin,\r
- views: {\r
- '': {\r
- templateUrl: 'src/app/node/index.tpl.html',\r
- controller: 'allNodesCtrl'\r
- }\r
- }\r
- });\r
-\r
- $stateProvider.state('main.node.detail', {\r
- url: '/:nodeId/detail',\r
- access: access.admin,\r
- views: {\r
- '': {\r
- templateUrl: 'src/app/node/detail.tpl.html',\r
- controller: 'nodeConnectorCtrl'\r
- }\r
- }\r
- });\r
-\r
- $stateProvider.state('main.node.flow-stat', {\r
- url: '/:nodeId/flow-stat',\r
- access: access.admin,\r
- views: {\r
- '': {\r
- templateUrl: 'src/app/node/flow-stat.tpl.html',\r
- controller: 'nodeConnectorCtrl'\r
- }\r
- }\r
- });\r
-\r
- $stateProvider.state('main.node.port-stat', {\r
- url: '/:nodeId/port-stat',\r
- access: access.admin,\r
- views: {\r
- '': {\r
- templateUrl: 'src/app/node/port-stat.tpl.html',\r
- controller: 'nodeConnectorCtrl'\r
- }\r
- }\r
- });\r
-\r
- });\r
-\r
- return nodes;\r
-});\r
+++ /dev/null
-/*\r
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-define(['app/node/nodes.module'],function(node) {\r
-\r
- node.factory('nodeConnectorFactory', function() {\r
- var factory = {};\r
-\r
- factory.getActiveFlow = function(flowTable, index) {\r
- var flow = flowTable[index];\r
- var activeFlow = flow['opendaylight-flow-table-statistics:flow-table-statistics']['opendaylight-flow-table-statistics:active-flows'];\r
-\r
- return (activeFlow > 0);\r
- };\r
- return factory;\r
- });\r
-\r
- node.factory('NodeRestangular', function(Restangular, ENV) {\r
- return Restangular.withConfig(function(RestangularConfig) {\r
- RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));\r
- });\r
- });\r
-\r
- node.factory('NodeInventorySvc', function(NodeRestangular) {\r
- var svc = {\r
- base: function() {\r
- return NodeRestangular.one('restconf').one('operational').one('opendaylight-inventory:nodes');\r
- },\r
- data : null\r
- };\r
-\r
- svc.getCurrentData = function() {\r
- return svc.data;\r
- };\r
-\r
- svc.getAllNodes = function() {\r
- svc.data = svc.base().get();\r
- return svc.data;\r
- };\r
-\r
- svc.getNode = function(node) {\r
- return svc.base().one('node', node).get();\r
- };\r
-\r
- return svc;\r
- });\r
-\r
-});\r
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/node/nodes.module', 'app/node/nodes.controller', 'angular-ui-router', 'common/layout/layout.module'], function () {
- describe("Node Listing Screen", function () {
- var scope, state, nodeServiceMock, rootScope;
- beforeEach(angular.mock.module('ui.router'));
- beforeEach(angular.mock.module('app.common.layout'));
- beforeEach(angular.mock.module('app.nodes'));
-
- beforeEach(angular.mock.inject(function ($controller, $q, $state, $rootScope, $templateCache) {
- rootScope = $rootScope;
- scope = $rootScope.$new();
- state = $state;
- $templateCache.put('src/app/node/root.tpl.html', '');
- $templateCache.put('src/app/node/index.tpl.html', '');
- $templateCache.put('src/app/node/detail.tpl.html', '');
- nodeServiceMock = {
- getAllNodes: function () {
- // TODO: rewrite this test
- var deferred = $q.defer();
- deferred.resolve(
- {
- 'nodes': {
- 'node': [{
- 'id': 'node1',
- }],
- },
- }
- );
- return deferred.promise;
- },
- getCurrentData: function () {
- return null;
- },
- getNode: function (id) {
- var deferred = $q.defer();
- deferred.resolve({"node": [{"id": id}]});
- return deferred.promise;
- }
- };
- }));
-
- it('should load the root states', angular.mock.inject(function ($controller) {
- var stateName = 'main.node';
-
- $controller('rootNodeCtrl', {$scope: scope, $state: state});
- expect(state.href(stateName, {})).toBe('#/node');
- }));
-
-
- it('should call get Nodes', angular.mock.inject(function ($controller, $q) {
- var stateName = 'main.node.index';
-
- spyOn(nodeServiceMock, 'getAllNodes').andCallThrough();
- $controller('allNodesCtrl', {$scope: scope, $state: state, NodeInventorySvc: nodeServiceMock});
- rootScope.$digest();
-
- expect(state.href(stateName, {})).toBe('#/node/index');
- expect(nodeServiceMock.getAllNodes).toHaveBeenCalled();
- expect(scope.data[0].id).toBe('node1');
- }));
-
- it("ensure node connector link works using existing Data", angular.mock.inject(function ($controller, $q) {
- nodeServiceMock.getCurrentData = function () {
- var deferred = $q.defer();
- deferred.resolve(
- {
- 'nodes': {
-
- 'node': [
- {
- 'id': 2,
- },
- {
- 'id': 3,
- },
- ],
- },
- }
- );
-
- return deferred.promise;
- };
-
- var stateName = 'main.node.detail';
- var stateParams = {nodeId: 2};
- spyOn(nodeServiceMock, 'getCurrentData').andCallThrough();
- $controller('nodeConnectorCtrl', {
- $scope: scope,
- $stateParams: stateParams,
- NodeInventorySvc: nodeServiceMock
- });
- rootScope.$digest();
-
- expect(state.href(stateName, stateParams)).toBe('#/node/%d/detail'.replace('%d', stateParams.nodeId));
- expect(nodeServiceMock.getCurrentData).toHaveBeenCalled();
- expect(scope.data.id).toEqual(2);
- }));
-
- it("ensure node connector can be fetched separately", angular.mock.inject(function ($controller) {
- var stateName = 'main.node.detail';
- var stateParams = {nodeId: 3};
- spyOn(nodeServiceMock, 'getCurrentData').andCallThrough();
- spyOn(nodeServiceMock, 'getNode').andCallThrough();
- $controller('nodeConnectorCtrl', {
- $scope: scope,
- $stateParams: stateParams,
- NodeInventorySvc: nodeServiceMock
- });
- rootScope.$digest();
-
- expect(state.href(stateName, stateParams)).toBe('#/node/%d/detail'.replace('%d', stateParams.nodeId));
- expect(nodeServiceMock.getNode).toHaveBeenCalled();
- expect(scope.data.id).toEqual(3);
- }));
- });
-});
+++ /dev/null
-<!--\r
-* Copyright (c) 2014 Brocade and others. All rights reserved.\r
-*\r
-* This program and the accompanying materials are made available under the\r
-* terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
-* and is available at http://www.eclipse.org/legal/epl-v10.html\r
--->\r
-\r
-<h4>{{ 'NODE_CONNECTOR_STATISTICS_FOR_NODE_ID' | translate }} - {{data.id}}</h4>\r
-<table class="footable table">\r
- <thead>\r
- <tr>\r
- <th>{{ 'NODE_CONNECTOR_ID' | translate }}</th>\r
- <th>{{ 'RX_PKTS' | translate }}</th>\r
- <th>{{ 'TX_PKTS' | translate }}</th>\r
- <th>{{ 'RX_BYTES' | translate }}</th>\r
- <th>{{ 'TX_BYTES' | translate }}</th>\r
- <th>{{ 'RX_DROPS' | translate }}</th>\r
- <th>{{ 'TX_DROPS' | translate }}</th>\r
- <th>{{ 'RX_ERRS' | translate }}</th>\r
- <th>{{ 'TX_ERRS' | translate }}</th>\r
- <th>{{ 'RX_FRAME_ERRS' | translate }}</th>\r
- <th>{{ 'RX_OVERRUN_ERRS' | translate }}</th>\r
- <th>{{ 'RX_CRC_ERRS' | translate }}</th>\r
- <th>{{ 'Collisions' | translate }}</th>\r
- </tr>\r
- </thead>\r
- <tbody>\r
- <tr ng-hide="data['node-connector'].length"><td colspan="4" class="centerAlign">{{ 'NO_DATA_FOUND' | translate }}</td></tr>\r
- <tr ng-repeat="ncp in data['node-connector']">\r
- <!--<td><input type="checkbox" name="select-node-{{item.node.id}}" ng-click="unselect($event)" id="select-node-{{item.node.id}}" /></td>-->\r
- <td>{{ncp.id}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['packets']['received']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['packets']['transmitted']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['bytes']['received']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['bytes']['transmitted']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['receive-drops']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['transmit-drops']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['receive-errors']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['transmit-errors']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['receive-frame-error']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['receive-over-run-error']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['receive-crc-error']}}</td>\r
- <td>{{ncp['opendaylight-port-statistics:flow-capable-node-connector-statistics']['collision-count']}}</td>\r
- <!--td>\r
- <i class="icon-ok-sign"></i>\r
- <port-state value="{{ncp.properties.state.value}}"></port-state>\r
- </td-->\r
- </tr>\r
- </tbody>\r
-</table>
\ No newline at end of file
+++ /dev/null
-<!--
-* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
-*
-* This program and the accompanying materials are made available under the
-* terms of the Eclipse Public License v1.0 which accompanies this distribution,
-* and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<div class="main nodes-module" ui-view></div>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.topology.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Topology Module Resources</description>
- <packaging>jar</packaging>
-</project>
+++ /dev/null
-define(['app/topology/topology.module','app/topology/topology.services', 'app/topology/topology.directives'], function(topology, service) {
-
- topology.controller('TopologyCtrl', ['$scope', '$rootScope', 'NetworkTopologySvc' , function ($scope, $rootScope, NetworkTopologySvc) {
- $rootScope['section_logo'] = 'assets/images/logo_topology.gif';
- var graphRenderer = null;
- $scope.createTopology = function() {
-
- NetworkTopologySvc.getNode("flow:1", function(data) {
- /*var x = 50;
- var y = 50;
- var step = 30;
- data.nodes.push({id: 1001, x: x, y: y + step, label: 'Switch', group: 'switch',value:20});
- data.nodes.push({id: 1003, x: x, y: y + 3 * step, label: 'Host', group: 'host',value:20});*/
- $scope.topologyData = data;
- });
- };
-
- $scope.createTopology();
- }]);
-});
+++ /dev/null
-define(['app/topology/topology.module', 'vis'], function(topology, vis) {
-
- topology.directive('topologySimple', function() {
- // constants
- var width = 800,
- height = 800;
-
- return {
- restrict: 'E',
- scope: {
- topologyData: '='
- },
- link: function($scope, iElm, iAttrs, controller) {
-
- $scope.$watch('topologyData', function (ntdata) {
- if(ntdata){
- // visinit(inNodes, inEdges, container, inOptions) {
- var inNodes = $scope.topologyData.nodes;
- var inEdges = $scope.topologyData.links;
- var container = iElm[0];
-
- // legend moved to topology controller
-
- var data = {
- nodes: inNodes,
- edges: inEdges
- };
-
- var color = '#66FFFF',
- hl = '#0066FF',
- hover = '#33CC33',
- BLACK = '#2B1B17';
-
- var options =
- {
- width: '80%',
- height: '500px',
- nodes: {
- widthMin: 20,
- widthMax: 64,
- fontColor: BLACK
- },
- edges: {
- length: 80,
- color: {
- color: '#070707',
- highlight: hl,
- hover: hover
- }
- },
- physics: {
- barnesHut: {
- gravitationalConstant: -7025
- }
- },
- hover: true,
- groups: {
- 'switch': {
- shape: 'image',
- image: 'assets/images/Device_switch_3062_unknown_64.png'
- },
- 'host': {
- shape: 'image',
- image: 'assets/images/Device_pc_3045_default_64.png'
- }
- },
- keyboard:true,
- tooltip: {
- delay: 300,
- fontColor: "black",
- fontSize: 14, // px
- fontFace: "verdana",
- color: {
- border: "#666",
- background: "#FFFFC6"
- }
- }
- //smoothCurves: false,
- //stabilizationIterations: (inNodes.length > 30 ? inNodes.length * 10 : 1000),
- //freezeForStabilization: true
- };
-
- var graph = new vis.Graph(container, data, options);
- return graph;
- }
- });
-
- }
- };
- });
-});
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-topology-simple .graph-frame{
- background-color: white
-}
\ No newline at end of file
+++ /dev/null
-define(['angularAMD', 'app/routingConfig', 'app/core/core.services','Restangular', 'common/config/env.module'], function(ng) {
-
- var topology = angular.module('app.topology', ['ui.router.state','app.core','restangular', 'config']);
-
- topology.config(function($stateProvider, $translateProvider, NavHelperProvider) {
-
- NavHelperProvider.addControllerUrl('app/topology/topology.controller');
- NavHelperProvider.addToMenu('topology', {
- "link": "#/topology",
- "title": "TOPOLOGY",
- "active": "main.topology",
- "icon": "icon-link",
- "page": {
- "title": "TOPOLOGY",
- "description": "TOPOLOGY"
- }
- });
-
- var access = routingConfig.accessLevels;
- $stateProvider.state('main.topology', {
- url: 'topology',
- access: access.public,
- views : {
- 'content' : {
- templateUrl: 'src/app/topology/topology.tpl.html',
- controller: 'TopologyCtrl'
- }
- }
- });
-
- });
-
- return topology;
-});
+++ /dev/null
-define(['app/topology/topology.module'], function(topology) {
-
- topology.factory('TopologyRestangular', function(Restangular, ENV) {
- return Restangular.withConfig(function(RestangularConfig) {
- RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));
- });
- });
-
- topology.factory('NetworkTopologySvc', function(TopologyRestangular) {
- var svc = {
- base: function() {
- return TopologyRestangular.one('restconf').one('operational').one('network-topology:network-topology');
- },
- data: null,
- TOPOLOGY_CONST: {
- HT_SERVICE_ID:"host-tracker-service:id",
- IP:"ip",
- HT_SERVICE_ATTPOINTS:"host-tracker-service:attachment-points",
- HT_SERVICE_TPID:"host-tracker-service:tp-id",
- NODE_ID:"node-id",
- SOURCE_NODE:"source-node",
- DEST_NODE:"dest-node",
- SOURCE_TP:"source-tp",
- DEST_TP:"dest-tp",
- ADDRESSES:"addresses",
- HT_SERVICE_ADDS:"host-tracker-service:addresses",
- HT_SERVICE_IP:"host-tracker-service:ip"
- }
- };
- svc.getCurrentData = function() {
- return svc.data;
- };
- svc.getAllNodes = function() {
- svc.data = svc.base().getList();
- return svc.data;
- };
- svc.getNode = function(node,cb) {
- //Determines the node id from the nodes array corresponding to the text passed
- var getNodeIdByText = function getNodeIdByText(inNodes, text) {
- var nodes = inNodes.filter(function(item, index) {
- return item.label === text;
- }),
- nodeId;
-
- if(nodes && nodes[0]) {
- nodeId = nodes[0].id;
- }else{
- return null;
- }
-
- return nodeId;
- };
- //Checks if the edge is present in the links map or not so we show single edge link between switches
- var isEdgePresent = function(inLinks,srcId,dstId){
- if( inLinks[srcId+":"+dstId] === undefined && inLinks[dstId+":"+srcId] === undefined) {
- return false;
- }
- else {
- return true;
- }
- };
- return svc.base().one("topology", node).get().then(function(ntData){
-
- var nodes = [];
- var links = [];
- var linksMap = {};
-
- if(ntData.topology && ntData.topology[0]){
- //Loop over the nodes
- angular.forEach(ntData.topology[0].node, function(nodeData) {
- var groupType = "", nodeTitle = "", nodeLabel = "";
- var nodeId = nodeData[svc.TOPOLOGY_CONST.NODE_ID];
- if(nodeId!==undefined && nodeId.indexOf("host")>=0){
- groupType = "host";
- var ht_serviceadd = nodeData[svc.TOPOLOGY_CONST.ADDRESSES];
- if(ht_serviceadd===undefined){
- ht_serviceadd = nodeData[svc.TOPOLOGY_CONST.HT_SERVICE_ADDS];
- }
- if(ht_serviceadd!==undefined){
- var ip;
- //get title info
- for(var i=0;i<ht_serviceadd.length;i++){
- ip = ht_serviceadd[i][svc.TOPOLOGY_CONST.IP];
- if(ip===undefined){
- ip = ht_serviceadd[i][svc.TOPOLOGY_CONST.HT_SERVICE_IP];
- }
- nodeTitle += 'IP: <b>' + ip + '</b><br>';
- }
- }
- nodeTitle += 'Type: Host';
- }
- else{
- groupType = "switch";
- nodeTitle = 'Name: <b>' + nodeId + '</b><br>Type: Switch';
- }
-
- nodeLabel = nodeData[svc.TOPOLOGY_CONST.NODE_ID];
- nodes.push({'id': nodes.length.toString(), 'label': nodeLabel, group: groupType,value:20,title:nodeTitle});
- });
- //Loops over the links
- angular.forEach(ntData.topology[0].link, function(linkData) {
- var srcId = getNodeIdByText(nodes, linkData.source[svc.TOPOLOGY_CONST.SOURCE_NODE]),
- dstId = getNodeIdByText(nodes, linkData.destination[svc.TOPOLOGY_CONST.DEST_NODE]),
- srcPort = linkData.source[svc.TOPOLOGY_CONST.SOURCE_TP],
- dstPort = linkData.destination[svc.TOPOLOGY_CONST.DEST_TP],
- linkId = links.length.toString();
- if(srcId!=null && dstId!=null && !isEdgePresent(linksMap,srcId,dstId)){
- links.push({id: linkId, 'from' : srcId, 'to': dstId, title:'Source Port: <b>' + srcPort + '</b><br>Dest Port: <b>'+dstPort+'</b>'});
- linksMap[srcId+":"+dstId]=linkId;
- }
- });
-
- }
-
- var data = {
- "nodes" : nodes,
- "links" : links
- };
- cb(data);
- },function(response) {
- console.log("Error with status code", response.status);
- });
- };
- return svc;
- });
-
-});
+++ /dev/null
-<!--
-* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
-*
-* This program and the accompanying materials are made available under the
-* terms of the Eclipse Public License v1.0 which accompanies this distribution,
-* and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-
-<div class="container">
- <div class="row">
- <div class="col-md-2">
- <h3>Controls</h3>
- <button class="btn btn-primary" ng-click="createTopology()">Reload</button>
- </div>
- <topology-simple class="col-md-10 col-lg-offset-1" topology-data="topologyData"></topology-simple>
- </div>
-</div>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.yangman.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Yangman Module Resources</description>
- <packaging>jar</packaging>
-
-</project>
+++ /dev/null
-{
- "YANGMAN_ADD_LIST_ITEM": "Add list item",
- "YANGMAN_AUGMENTATIONS": "Augmentations",
- "YANGMAN_CANCEL": "Cancel",
- "YANGMAN_CLOSE": "Close",
- "YANGMAN_CLEAR_SEARCH": "Clear filter",
- "YANGMAN_COLLECTION_CHANGE_NAME": "Edit collection name",
- "YANGMAN_COLLECTION_DELETE": "Delete collection",
- "YANGMAN_COLLECTION_DOWNLOAD": "Download collection",
- "YANGMAN_COLLECTION_DUPLICATE": "Duplicate collection",
- "YANGMAN_COLLECTION_EDIT": "Edit collection name",
- "YANGMAN_COLLECTION_NAME": "Collection name",
- "YANGMAN_COLLECTION_NAME_REQUIRED": "Collection name is required",
- "YANGMAN_COLLECTION_NEW_COL_": "New collection ",
- "YANGMAN_COLLECTION_NEW_NAME": "New collection name",
- "YANGMAN_COLLECTION_REQUEST": "request",
- "YANGMAN_COLLECTION_REQUESTS": "requests",
- "YANGMAN_COLLECTION_WILL_BE_CREATED": " will be created",
- "YANGMAN_CREATING_COLLECTION": "Select collection or type a new name",
- "YANGMAN_DELETE_COL_CONFIRM_TEXT": "Selected collection will be deleted forever.",
- "YANGMAN_DELETE_COL_CONFIRM_TITLE": "Do you want to delete collection",
- "YANGMAN_DELETE_REQ_CONFIRM_TEXT": "Selected requests will be deleted forever.",
- "YANGMAN_DELETE_REQ_CONFIRM_TITLE": "Do you want to delete request?",
- "YANGMAN_EXPLAIN": "Explain",
- "YANGMAN_FORM": "FORM",
- "YANGMAN_IMPORT_COLLECTION": "Import collection",
- "YANGMAN_JSON": "JSON",
- "YANGMAN_LOADED_MODULES": "Modules were loaded.",
- "YANGMAN_LOADED_MODULES_ERROR": "Error in loading modules.",
- "YANGMAN_MATCHING": "Matching",
- "YANGMAN_MODULES": "Modules",
- "YANGMAN_NO_COLLECTIONS": "Type new collection name.",
- "YANGMAN_OK": "OK",
- "YANGMAN_PARAM_DONT_REPLACE" : "undefined - won't be replaced",
- "YANGMAN_REQ_DELETE": "Delete request",
- "YANGMAN_REQ_DUPLICATE": "Duplicate request",
- "YANGMAN_REQ_SHOW_FORM": "Show form",
- "YANGMAN_REQ_RUN": "Run request",
- "YANGMAN_REQ_SHOW_JSON_DATA": "Show json data",
- "YANGMAN_REQ_URL": "Request URL",
- "YANGMAN_REQS_DELETE": "Delete selected",
- "YANGMAN_REQS_DUPLICATE": "Duplicating request",
- "YANGMAN_REQS_SAVE_TO_COL": "Save to collection",
- "YANGMAN_SAVE": "SAVE",
- "YANGMAN_SEL_METHOD": "Select method",
- "YANGMAN_SEND": "SEND",
- "YANGMAN_SHOW_LIST_ITEM": "Show all list items",
- "YANGMAN_SORT_ASC": "ascending",
- "YANGMAN_SORT_DESC": "descending",
- "YANGMAN_STATUS": "Status",
- "YANGMAN_TIME": "Time",
- "YANGMAN_HISTORY": "History",
- "YANGMAN_COLLECTIONS": "Collections",
- "YANGMAN_PARAMETERS_ADMINISTRATION": "Parameters administration",
- "YANGMAN_PARAMETERS": "Parameters",
- "YANGMAN_RECEIVED_DATA": "Received data",
- "YANGMAN_SENT_DATA": "Sent data",
- "YANGMAN_PARAM_KEY": "Key",
- "YANGMAN_PARAM_VALUE": "Value",
- "YANGMAN_REMOVE_PARAM": "Remove param",
- "YANGMAN_SEARCH": "Search",
- "YANGMAN_SORT_BY": "Sort by",
- "YANGMAN_PARAMS_KEY": "key",
- "YANGMAN_PARAMS_VALUE": "value",
- "YANGMAN_PARAM_KEY_REQUIRED": "Required value",
- "YANGMAN_PARAM_EXISTING_KEY": "Duplicate value",
- "YANGMAN_SORTING": "Sorting",
- "YANGMAN_CUST_MOUNT_POINTS": "Display mount points",
- "YANGMAN_CANCEL_MP": "Back from mountpoint",
- "YANGMAN_PLUGINS_MENU": "Plugins menu",
- "YANGMAN_PARAMS_IMPORT_EXPORT": "Import and export parameters",
- "YANGMAN_IMPORT_PARAMS": "Import all parameters",
- "YANGMAN_EXPORT_PARAMETERS": "Export all parameters",
- "YANGMAN_NO_MOUNT_POINT": "No mount points to display",
- "YANGMAN_MOUNT_POINT": "Mount point",
- "YANGMAN_YANG_MENU": "Yang menu",
- "YANGMAN_DELETE_HISTORY_CONFIRM_TITLE": "Do you want to delete all history requests?",
- "YANGMAN_DELETE_HISTORY_CONFIRM_TEXT": "All history requests will be Deleted.",
- "YANGMAN_DELETE_HISTORY": "Delete all history requests",
- "YANGMAN_DELETE_COLLECTIONS": "Delete all collections",
- "YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE": "Do you want to delete all collections?",
- "YANGMAN_DELETE_COLLECTION_CONFIRM_TEXT": "All collections will be deleted.",
- "YANGMAN_DELETE_OPTIONS": "Delete options",
- "YANGMAN_SELECT_OPTIONS": "Select options",
- "YANGMAN_SELECT_ALL": "Select All",
- "YANGMAN_DESELECT_ALL": "Deselect All",
- "YANGMAN_IS_AUGMENT": "Augments",
- "YANGMAN_LOADING_MODULES": "Loading application modules...",
- "YANGMAN_EXECUTING_REQUEST": "Request is beeing executed...",
- "YANGMAN_CM_ENLARGE_FONT_SIZE": "Enlarge json font size (Alt +)",
- "YANGMAN_CM_REDUCE_FONT_SIZE": "Reduce json font size (Alt -)",
- "YANGMAN_INPUT_REQUIRED": "Required",
- "YANGMAN_ERROR_EMPTY_IDENTIFIERS": "Identifiers in path are required. Please fill empty identifiers for successful request execution.",
- "YANGMAN_SORT_COLLECTIONS_DESC": "Sort collections descending",
- "YANGMAN_SORT_COLLECTIONS_ASC": "Sort collections ascending",
- "YANGMAN_LIST_DELETE_ITEM": "Delete list item",
- "YANGMAN_LIST_INDEX_DUPLICATE": "Duplicated index",
- "YANGMAN_LIST_PREV_ITEM": "show previous item",
- "YANGMAN_FILL_FORM_WITH_RECEIVED": "Fill form with received data after execution",
- "YANGMAN_LIST_NEXT_ITEM": "show next item",
- "YANGMAN_SHOW_SENT_DATA": "show sent data",
- "YANGMAN_SHOW_RECEIVED_DATA": "show received data",
- "YANGMAN_HISTORY_SETTINGS": "History requests settings",
- "YANGMAN_HISTORY_SETTINGS_GENERAL": "General settings",
- "YANGMAN_HISTORY_SETTINGS_COUNT": "History requests buffer size",
- "YANGMAN_HISTORY_SETTINGS_SAVE_RECEIVED_DATA": "Save received data",
- "YANGMAN_HISTORY_SETTINGS_SAVE_RESPONSE_DATA": "Save base response data (Status, Execution time)",
- "YANGMAN_HISTORY_SETTINGS_FILL_FORM_WITH_RECEIVED": "Fill form view with received data on history request select",
- "YANGMAN_HISTORY_SETTINGS_REQUIRED": "Required field"
-}
+++ /dev/null
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="897.673px" height="897.673px" viewBox="0 0 897.673 897.673" style="enable-background:new 0 0 897.673 897.673;"
- xml:space="preserve">
-<g>
- <path d="M859.877,855.354L606.396,23.221C602.195,9.427,589.469,0,575.049,0H448.836H322.625c-14.42,0-27.146,9.426-31.347,23.221
- L37.795,855.354c-6.413,21.055,9.338,42.318,31.347,42.318h181.071c15.246,0,28.479-10.515,31.922-25.367l38.312-165.216h128.39
- h128.39l38.312,165.216c3.443,14.853,16.676,25.367,31.922,25.367h181.071C850.539,897.673,866.291,876.409,859.877,855.354z
- M448.836,523.413h-85.578l15.191-62.147c22.096-85.624,44.192-194.726,66.29-284.493h4.097h4.097
- c22.097,89.767,44.193,198.869,66.289,284.493l15.191,62.147H448.836z"/>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-</svg>
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('EditCollectionDialogCtrl', EditCollectionDialogCtrl);
-
- EditCollectionDialogCtrl.$inject = ['$mdDialog', 'collection', 'allCollections', 'duplicate'];
-
- function EditCollectionDialogCtrl($mdDialog, collection, allCollections, duplicate) {
- var vm = this;
-
- vm.collection = collection;
- vm.existingNames = [];
- vm.duplicate = duplicate;
- vm.collectionName = duplicate ? '' : vm.collection.name;
-
- vm.cancel = cancel;
- vm.save = save;
-
- init();
-
- /**
- * Load existing collection names
- */
- function init(){
- vm.existingNames = allCollections.map(function (item){
- return item.name;
- });
- }
-
- function cancel() {
- $mdDialog.cancel();
- }
-
- function save() {
- $mdDialog.hide([vm.collection.name, vm.collectionName]);
- }
-
- }
-
- return EditCollectionDialogCtrl;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMAugmentationModalCtrl', YMAugmentationModalCtrl);
-
- YMAugmentationModalCtrl.$inject = ['$scope'];
-
- function YMAugmentationModalCtrl($scope){
- $scope.init = init;
-
- /**
- * Initialization
- * @param node
- */
- function init(node){
- $scope.node = node;
- }
- }
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMCaseCtrl', YMCaseCtrl);
-
- YMCaseCtrl.$inject = ['$scope'];
-
- function YMCaseCtrl($scope){
- var yangCase = this;
-
- yangCase.empty = ($scope.case.children.length === 0 ||
- ($scope.case.children.length === 1 && $scope.case.children[0].children.length === 0));
-
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMChoiceCtrl', YMChoiceCtrl);
-
- YMChoiceCtrl.$inject = ['$scope', 'constants'];
-
- function YMChoiceCtrl($scope, constants){
- var yangChoice = this;
-
- $scope.constants = constants;
-
- // methods
- yangChoice.isActionMenu = isActionMenu;
- $scope.caseShowing = caseShowing;
- yangChoice.toggleExpanded = toggleExpanded;
-
- /**
- * Show hide node
- */
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- // TODO :: do method description
- function caseShowing(node) {
- return !node.augmentationId ? true :
- $scope.augmentations.getAugmentation(node.parent, node.augmentationId).expanded;
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return $scope.node.augmentionGroups && $scope.node.augmentionGroups.length;
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMContainerCtrl', YMContainerCtrl);
-
- YMContainerCtrl.$inject = ['$scope'];
-
- function YMContainerCtrl($scope){
- var yangContainer = this;
-
- // methods
- yangContainer.isActionMenu = isActionMenu;
- yangContainer.toggleExpanded = toggleExpanded;
-
- /**
- * Show hide node
- */
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return $scope.node.augmentionGroups && $scope.node.augmentionGroups.length;
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMInputCtrl', YMInputCtrl);
-
- YMInputCtrl.$inject = ['$scope'];
-
- function YMInputCtrl($scope){
- var yangInput = this;
-
- // methods
- yangInput.isActionMenu = isActionMenu;
- yangInput.toggleExpanded = toggleExpanded;
-
- /**
- * Show hide node
- */
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return $scope.node.augmentionGroups && $scope.node.augmentionGroups.length;
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMLeafListCtrl', YMLeafListCtrl);
-
- YMLeafListCtrl.$inject = ['$scope'];
-
- function YMLeafListCtrl($scope){
- var yangLeafList = this;
-
- // methods
- yangLeafList.addListElem = addListElem;
- yangLeafList.changed = changed;
- yangLeafList.isActionMenu = isActionMenu;
- yangLeafList.removeListElem = removeListElem;
- yangLeafList.toggleExpanded = toggleExpanded;
-
-
- // TODO :: do method description
- function addListElem() {
- $scope.node.addListElem();
- }
-
- // TODO :: do method description
- function removeListElem(elem){
- $scope.node.removeListElem(elem);
- }
-
- // TODO :: do method description
- function changed() {
- //$scope.preview();
- $scope.buildRootRequest();
- }
-
- // TODO :: do method description
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return true;
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMLeafCtrl', YMLeafCtrl);
-
- YMLeafCtrl.$inject = ['$scope'];
-
- function YMLeafCtrl($scope){
- var types = [
- 'binary',
- 'bits',
- 'boolean',
- 'decimal64',
- 'enumeration',
- 'empty',
- 'identityref',
- 'instance-identifier',
- 'int16',
- 'int32',
- 'int64',
- 'int8',
- 'leafref',
- 'string',
- 'uint16',
- 'uint32',
- 'uint64',
- 'uint8',
- 'union',
- ],
- yangLeaf = this;
-
- yangLeaf.infoBox = false;
- yangLeaf.infoBoxSection = '';
-
- // methods
- yangLeaf.displayValue = displayValue;
- yangLeaf.getLeafCentering = getLeafCentering;
- yangLeaf.getLeafType = getLeafType;
- yangLeaf.isActionMenu = isActionMenu;
-
-
- function getLeafCentering(){
- return ['union', 'bits', 'empty'].indexOf(getLeafType()) > -1 ? 'start' : 'center';
- }
-
- /**
- * Get leaf type
- * @returns {*}
- */
- function getLeafType(){
- var label = $scope.node.getChildren('type')[0].label;
- return types.indexOf(label) !== -1 ? label : 'default';
- }
-
- function displayValue() {
- return $scope.node.typeChild.label !== 'empty';
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return false;
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMListCtrl', YMListCtrl);
-
- YMListCtrl.$inject = ['$scope', 'ListFilteringService', 'NodeWrapperService', 'constants'];
-
- function YMListCtrl($scope, ListFilteringService, NodeWrapperService, constants){
- var yangList = this;
-
- $scope.actElement = null;
- $scope.showListFilter = false;
- $scope.filterListHover = 0;
- yangList.constants = constants;
- yangList.currentDisplayIndex = 1;
- yangList.displayOffsets = [-1, 0, 1];
-
- // methods
- $scope.activeFilter = activeFilter;
- $scope.applyFilter = applyFilter;
- $scope.clearFilterData = clearFilterData;
- $scope.createNewFilter = createNewFilter;
- $scope.getFilterData = getFilterData;
- $scope.showListFilterWin = showListFilterWin;
- $scope.showModalWin = showModalWin;
- $scope.switchFilter = switchFilter;
-
- yangList.addListElem = addListElem;
- yangList.getListName = getListName;
- yangList.init = init;
- yangList.isActionMenu = isActionMenu;
- yangList.removeListElem = removeListElem;
- yangList.shiftDisplayNext = shiftDisplayNext;
- yangList.shiftDisplayPrev = shiftDisplayPrev;
- yangList.showNextButton = showNextButton;
- yangList.showPrevButton = showPrevButton;
- yangList.toggleExpanded = toggleExpanded;
-
- // WATCHERS
- $scope.$on(constants.EV_REFRESH_LIST_INDEX, function () {
- yangList.currentDisplayIndex = 1;
- });
-
- $scope.$on(constants.YANGMAN_DISABLE_ADDING_LIST_ELEMENT, function() {
- yangList.init();
- });
-
- /**
- * Disable adding more then one element
- */
- function init() {
- yangList.disableAddingListElement = $scope.checkAddingListElement($scope.node);
-
- if (yangList.disableAddingListElement &&
- !$scope.node.listData.length &&
- $scope.selectedDatastore.label === constants.DATA_STORE_CONFIG) {
-
- yangList.addListElem();
- }
- if ($scope.node.listData && !$scope.node.listData.length) {
- yangList.currentDisplayIndex = 1;
- }
-
- }
-
- /**
- * Add element into list
- */
- function addListElem() {
- $scope.showListFilter = false;
- $scope.showModal = false;
- ListFilteringService.removeEmptyFilters($scope.node);
- $scope.node.addListElem();
- }
-
- // TODO :: do method description
- function removeListElem(elemIndex, fromFilter) {
- $scope.node.removeListElem(elemIndex, fromFilter);
- // $scope.preview();
- yangList.currentDisplayIndex =
- Math.max(Math.min(yangList.currentDisplayIndex, $scope.node.listData.length - 2), 1);
- if ($scope.node.listData.length === 0) {
- $scope.$broadcast('hideInfoBox');
- }
- }
-
- // TODO :: do method description
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- // TODO :: do method description
- function shiftDisplayNext(typeListData) {
- yangList.currentDisplayIndex = Math.min(yangList.currentDisplayIndex + 3, $scope.node[typeListData].length - 2);
- }
-
- // TODO :: do method description
- function shiftDisplayPrev() {
- yangList.currentDisplayIndex = Math.max(yangList.currentDisplayIndex - 3, 1);
- }
-
- // TODO :: do method description
- function showPrevButton() {
- return yangList.currentDisplayIndex > 1;
- }
-
- // TODO :: do method description
- function showNextButton(typeListData) {
- // node is selected after view is loaded
- return $scope.node[typeListData] && yangList.currentDisplayIndex < $scope.node[typeListData].length - 2;
- }
-
- // TODO :: do method description
- function showModalWin() {
- $scope.showModal = !$scope.showModal;
- if ($scope.showListFilter){
- $scope.showListFilter = !$scope.showListFilter;
- }
- }
-
- // TODO :: do method description
- function showListFilterWin() {
- $scope.showListFilter = !$scope.showListFilter;
- if ($scope.showModal){
- $scope.showModal = !$scope.showModal;
- }
- ListFilteringService.showListFilterWin($scope.filterRootNode,$scope.node);
- }
-
- // TODO :: do method description
- function getFilterData() {
- ListFilteringService.getFilterData($scope.node);
- }
-
- // TODO :: do method description
- function switchFilter(showedFilter) {
- ListFilteringService.switchFilter($scope.node, showedFilter);
- }
-
- // TODO :: do method description
- function createNewFilter() {
- ListFilteringService.createNewFilter($scope.node);
- }
-
- // TODO :: do method description
- function applyFilter() {
- ListFilteringService.applyFilter($scope.node);
- $scope.showListFilter = !$scope.showListFilter;
- yangList.currentDisplayIndex = 1;
- if ($scope.node.filteredListData.length){
- $scope.node.doubleKeyIndexes =
- NodeWrapperService.checkKeyDuplicity($scope.node.filteredListData, $scope.node.refKey);
- } else {
- $scope.node.doubleKeyIndexes =
- NodeWrapperService.checkKeyDuplicity($scope.node.listData, $scope.node.refKey);
- }
- }
-
- // TODO :: do method description
- function clearFilterData(changeAct, filterForClear, removeFilters) {
- ListFilteringService.clearFilterData($scope.node, changeAct, filterForClear, removeFilters);
- if (changeAct){
- $scope.showListFilter = !$scope.showListFilter;
- }
- $scope.node.doubleKeyIndexes =
- NodeWrapperService.checkKeyDuplicity($scope.node.listData, $scope.node.refKey);
- }
-
- // TODO :: do method description
- function activeFilter(filter) {
- if (filter.active === 1){
- filter.active = 2;
- } else {
- filter.active = 1;
- }
- }
-
- // TODO :: do method description
- function getListName(offset, config) {
- var createdListItemName = $scope.node.createListName(yangList.currentDisplayIndex + offset);
-
- if ( createdListItemName.length > 33 ) {
- return {
- name: createdListItemName.substring(0, 30) + '...',
- tooltip: createdListItemName,
- };
- } else {
- return {
- name: config ? createdListItemName || '[' + (yangList.currentDisplayIndex + offset) + ']' : createdListItemName,
- tooltip: '',
- };
- }
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return true;
- }
- }
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMOutputCtrl', YMOutputCtrl);
-
- YMOutputCtrl.$inject = ['$scope'];
-
- function YMOutputCtrl($scope){
- var yangOutput = this;
- yangOutput.notEditable = true;
-
- // methods
- yangOutput.isActionMenu = isActionMenu;
- yangOutput.toggleExpanded = toggleExpanded;
-
- /**
- * Show hide node
- */
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return $scope.node.augmentionGroups && $scope.node.augmentionGroups.length;
- }
- }
-});
-
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMRpcCtrl', YMRpcCtrl);
-
- YMRpcCtrl.$inject = ['$scope'];
-
- function YMRpcCtrl($scope){
- var yangRpc = this;
-
- // methods
- yangRpc.toggleExpanded = toggleExpanded;
- yangRpc.isActionMenu = isActionMenu;
-
- /**
- * Show hide node
- */
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- /**
- * Show hide action menu
- * @returns {boolean|*}
- */
- function isActionMenu() {
- return false;
- }
-
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMTypeBitCtrl', YMTypeBitCtrl);
-
- YMTypeBitCtrl.$inject = ['$scope'];
-
- function YMTypeBitCtrl($scope){
- var yangTypeBit = this;
-
- // methods
- yangTypeBit.valueChanged = valueChanged;
-
- /**
- * Methods for checking correct input
- */
- function valueChanged(){
- $scope.type.setLeafValue($scope.type.bitsValues);
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- $scope.buildRootRequest();
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMTypeBooleanCtrl', YMTypeBooleanCtrl);
-
- YMTypeBooleanCtrl.$inject = ['$scope'];
-
- function YMTypeBooleanCtrl($scope){
- var yangTypeBolean = this;
-
- $scope.$watch('node.value', function(){
- if ( typeof $scope.node.value !== 'boolean' && $scope.node.value.length) {
- $scope.node.value = $scope.node.value === 'true';
- }
- });
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMTypeEmptyCtrl', YMTypeEmptyCtrl);
-
- YMTypeEmptyCtrl.$inject = ['$scope'];
-
- function YMTypeEmptyCtrl($scope){
- var yangTypeEmpty = this;
- // methods
- yangTypeEmpty.valueChanged = valueChanged;
-
- /**
- * Methods for checking correct input
- */
- function valueChanged(){
- $scope.buildRootRequest();
- }
- }
-});
-
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMTypeEnumCtrl', YMTypeEnumCtrl);
-
- YMTypeEnumCtrl.$inject = ['$scope'];
-
- function YMTypeEnumCtrl($scope){
- var yangTypeEnum = this;
-
- // methods
- yangTypeEnum.valueChanged = valueChanged;
-
- /**
- * Methods for checking correct input
- */
- function valueChanged(){
- var value = $scope.type.selEnum && $scope.type.selEnum.label ? $scope.type.selEnum.label : '';
-
- $scope.type.setLeafValue(value);
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- $scope.buildRootRequest();
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YMTypeCtrl', YMTypeCtrl);
-
- YMTypeCtrl.$inject = ['$scope'];
-
- function YMTypeCtrl($scope){
- var yangType = this;
-
- // methods
- yangType.valueChanged = valueChanged;
-
- /**
- * Methods for checking correct input
- */
- function valueChanged(){
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- $scope.buildRootRequest();
- }
- }
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('HistorySettingsCtrl', HistorySettingsCtrl);
-
- HistorySettingsCtrl.$inject = ['$mdDialog', 'settingsObj'];
-
- function HistorySettingsCtrl($mdDialog, settingsObj) {
- var settingsCtrl = this;
-
- settingsCtrl.mySettingsObj = settingsObj.clone();
-
- settingsCtrl.cancel = cancel;
- settingsCtrl.save = save;
- settingsCtrl.saveReceivedChanged = saveReceivedChanged;
-
- /**
- *
- */
- function saveReceivedChanged() {
- if (!settingsCtrl.mySettingsObj.data.saveReceived) {
- settingsCtrl.mySettingsObj.data.fillWithReceived = false;
-
- }
- }
-
-
- function cancel() {
- $mdDialog.cancel();
- }
-
- function save() {
- settingsCtrl.mySettingsObj.saveToStorage();
- $mdDialog.hide(settingsCtrl.mySettingsObj);
- }
-
- }
-
- return HistorySettingsCtrl;
-
-});
+++ /dev/null
-define([
- 'app/yangman/directives/abn-tree.directive',
-], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('ModuleDetailCtrl', ModuleDetailCtrl);
-
- ModuleDetailCtrl.$inject = ['$scope', '$rootScope', '$timeout', 'YangmanService', 'constants'];
-
- function ModuleDetailCtrl($scope, $rootScope, $timeout, YangmanService, constants) {
- var moduleDetail = this;
-
- moduleDetail.treeApis = [];
- moduleDetail.selectedInnerDatastore = null;
-
- // methods
- moduleDetail.setApiNode = setApiNode;
- moduleDetail.setDataDetailStore = setDataDetailStore;
-
- // WATCHERS
- $scope.$on(constants.YANGMAN_MODULE_D_INIT, function (){
- init();
- });
-
- /**
- * Initialization
- */
- function init(){
- $timeout(function () {
- moduleDetail.selectedDataStoreIndex =
- YangmanService.getDataStoreIndex($scope.selectedModule.children, $scope.selectedDatastore.label);
- moduleDetail.treeApis = $scope.selectedDatastore.children;
- });
- }
-
- /**
- * Set global selected yang node
- * @param apiIndex
- * @param subApiIndex
- */
- function setApiNode(apiIndex, subApiIndex){
-
- if (apiIndex !== undefined && subApiIndex !== undefined ) {
-
- $scope.setApi($scope.apis[apiIndex], $scope.apis[apiIndex].subApis[subApiIndex], true, true);
- $scope.setNode($scope.selectedSubApi.node);
- $scope.clearCM();
- // let request header ctrl know, that codemirror data should be renewed with data from node
- $scope.rootBroadcast(constants.YANGMAN_CHANGE_TO_JSON);
- }
- }
-
- /**
- * Set datastore to global param
- * @param dataStore
- */
- function setDataDetailStore(dataStore){
- $scope.setDataStore(dataStore);
- $scope.setApi($scope.selectedApi, null);
- $scope.setNode(null);
- moduleDetail.treeApis = dataStore.children;
- }
- }
-
-});
+++ /dev/null
-define([
- 'app/yangman/services/plugins-handler.services',
-], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('ModulesListCtrl', ModulesListCtrl);
-
- ModulesListCtrl.$inject = ['$scope', '$rootScope', '$mdToast', 'YangUtilsService', 'PluginsHandlerService',
- '$filter', '$timeout', 'constants'];
-
- function ModulesListCtrl($scope, $rootScope, $mdToast, YangUtilsService, PluginsHandlerService, $filter, $timeout, constants) {
- var modulesList = this;
-
- modulesList.treeApis = [];
- modulesList.showLoadingBox = true;
- modulesList.moduleListTitle = '';
- modulesList.search = '';
-
- // methods
- modulesList.clearFilter = clearFilter;
- modulesList.customSearch = customSearch;
- modulesList.checkSelectedModule = checkSelectedModule;
- modulesList.setDataStore = setDataStore;
- modulesList.setModule = setModule;
-
- // watchers
- $scope.$on(constants.YANGMAN_GET_API_TREE_DATA, function (event, args) {
- (args.cbk || angular.noop)(modulesList.treeApis);
- });
-
- // set tree apis data
- $scope.$on(constants.YANGMAN_SET_API_TREE_DATA, function (event, args) {
- modulesList.treeApis = args.params;
- modulesList.showLoadingBox = false;
- showToastInfoBox('YANGMAN_LOADED_MODULES');
- });
-
- // show hide loading box
- $scope.$on(constants.YANGMAN_SET_LOADING_BOX, function (event, args){
- modulesList.showLoadingBox = args.params;
- (args.cbk || angular.noop)();
- });
-
- // show info box with custom title
- $scope.$on(constants.YANGMAN_SHOW_TOAST, function (event, args) {
- showToastInfoBox(args.params);
- });
-
- $scope.$on(constants.YANGMAN_SET_MODULE_LIST_TITLE, function (event, args) {
- modulesList.moduleListTitle = args.params;
- });
-
- /**
- * Initialization
- */
- function init(){
- loadApis();
- }
-
- init();
-
- /**
- * Check if module and one of it datastore is selected
- * @param module
- * @returns {boolean|*|Function|o}
- */
- function checkSelectedModule(module){
- var haveSelectedDS = [];
-
- if ( $scope.selectedDatastore && (module === $scope.selectedModule)) {
- haveSelectedDS = $scope.selectedModule.children.filter(function(item){
- return item === $scope.selectedDatastore;
- });
- }
-
- return haveSelectedDS.length;
- }
-
- /**
- * Custom search function for searching by api label
- * @param api
- */
- function customSearch(api){
- return api.label.toLowerCase().indexOf(modulesList.search.toLowerCase()) > -1;
- }
-
- /**
- * Clear current ctrl search value
- */
- function clearFilter(){
- modulesList.search = '';
- }
-
- /**
- * Load apis and modules
- */
- function loadApis() {
- modulesList.allNodes = [];
- modulesList.treeApis = [];
-
- modulesList.showLoadingBox = true;
-
- YangUtilsService.generateNodesToApis(function (apis, allNodes, augGroups) {
- $scope.setGlobalParams(apis, augGroups);
- modulesList.allNodes = allNodes;
- modulesList.treeApis = YangUtilsService.generateApiTreeData(apis);
- modulesList.showLoadingBox = false;
- showToastInfoBox('YANGMAN_LOADED_MODULES');
-
- PluginsHandlerService.plugAll(apis, modulesList);
- }, function () {
- showToastInfoBox('YANGMAN_LOADED_MODULES_ERROR');
- modulesList.showLoadingBox = false;
- });
- }
-
- /**
- * Set and expand module in tree
- */
- function setModule(module, e){
- if ( angular.element(e.target).hasClass('top-element') ) {
- module.expanded = !module.expanded;
- }
- }
-
- /**
- * Set data store || rpc
- * @param dataStore
- * @param module
- */
- function setDataStore(dataStore, module){
- $scope.setModule(module);
- $scope.setDataStore(dataStore, true, 1);
- }
-
- /**
- * Method for showing toast box
- * @param text
- */
- function showToastInfoBox(text){
- $timeout(function(){
- $mdToast.show(
- $mdToast.simple()
- .textContent($filter('translate')(text))
- .position('bottom left')
- .parent(angular.element('.yangmanModule__left-panel'))
- .hideDelay(3000)
- );
- }, 500);
- }
- }
-});
+++ /dev/null
-define([
- 'app/yangman/services/handle-file.services',
-], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('ParamsAdminCtrl', ParamsAdminCtrl);
-
- ParamsAdminCtrl.$inject = ['$mdMenu', '$mdDialog', '$scope', '$timeout', 'YangmanService', 'YMHandleFileService', 'parametersList'];
-
- function ParamsAdminCtrl($mdMenu, $mdDialog, $scope, $timeout, YangmanService, YMHandleFileService, parametersList) {
- var openMenuListener,
- vm = this;
-
- vm.parametersList = parametersList.clone();
- vm.search = '';
- vm.sortField1 = '_name';
- vm.sortField2 = '_value';
- vm.sortAsc = true;
-
- vm.close = close;
- vm.save = save;
- vm.createEmptyParam = createEmptyParam;
- vm.removeParam = removeParam;
- vm.clearFilter = clearFilter;
- vm.filterParam = filterParam;
- vm.sortBy = sortBy;
- vm.sortFunc = sortFunc;
- vm.exportParameters = exportParameters;
- vm.importParameters = importParameters;
- vm.validateNamesUnique = validateNamesUnique;
- vm.filterChange = filterChange;
-
- init();
-
-
- /**
- * Force validation after some filter is applied
- */
- function filterChange() {
- $timeout(vm.validateNamesUnique);
- }
-
- /**
- * Loop over all name inputs in form and validate duplicities
- */
- function validateNamesUnique() {
- var i = 0;
- while (vm.paramsForm.hasOwnProperty('name_' + i)){
- var modelValue = vm.paramsForm['name_' + i].$modelValue;
- vm.paramsForm['name_' + i].$setValidity(
- 'unique',
- vm.parametersList.isNameUnique(modelValue)
- );
- i++;
- }
- }
-
- /**
- * Importing all parameters from json
- * @param fileContent
- */
- function importParameters(fileContent) {
- if (fileContent && YangmanService.validateFile(fileContent, ['name', 'value'])){
- try {
- vm.parametersList.createParamsFromJson(fileContent);
- vm.parametersList.saveToStorage();
- angular.element(document).find('#importParameters').val('');
- createEmptyParam();
- }
- catch (e) {
- angular.element(document).find('#importParameters').val('');
- console.error('DataStorage error:', e);
- }
- }
- else {
- angular.element(document).find('#importParameters').val('');
- }
-
- }
-
- /**
- * Export all parameters to json file
- */
- function exportParameters() {
-
- YMHandleFileService.downloadFile(
- 'yangman_parameters.json',
- vm.parametersList.toJSON(),
- 'json',
- 'charset=utf-8',
- function (){},
- function (e){
- console.error('Export parameters error:', e);
- }
- );
- }
-
- /**
- * Set attribute to use when sorting
- * @param sortField1 , sortField2
- */
- function sortBy(sortField1, sortField2) {
- vm.sortField1 = sortField1;
- vm.sortField2 = sortField2;
- vm.sortAsc = !vm.sortAsc;
- vm.parametersList.applyValsForFilters();
- $timeout(vm.validateNamesUnique);
- }
-
- /**
- * Sort parameters with empty params at the end of list
- * @param item
- * @returns {*}
- */
- function sortFunc(item) {
- return [item[vm.sortField1] ? item[vm.sortField1] : (vm.sortAsc ? String.fromCharCode(255) : ''),
- item[vm.sortField2] ? item[vm.sortField2] : (vm.sortAsc ? String.fromCharCode(255) : '')];
- }
-
- /**
- * Empty or matching params will be in list
- * @param paramObj
- * @returns {boolean}
- */
- function filterParam(paramObj) {
- return !(paramObj._name || paramObj._value) ||
- (paramObj._name && paramObj._name.indexOf(vm.search) !== -1) ||
- (paramObj._value && paramObj._value.indexOf(vm.search) !== -1);
- }
-
-
- function clearFilter() {
- vm.search = '';
- }
-
- /**
- * Load params list and add one empty to the end of list
- */
- function init(){
- vm.parametersList.loadListFromStorage();
- createEmptyParam();
- openMenuListener = $scope.$on('$mdMenuOpen', function () {
- closeOpenedMenu();
- $timeout(registerClickOutside);
- });
- }
-
- /**
- * Remove param from list
- * @param paramObj
- */
- function removeParam(paramObj) {
- vm.parametersList.deleteParameterItem(paramObj);
- $timeout(vm.validateNamesUnique);
- }
-
- /**
- * Create new empty param
- */
- function createEmptyParam() {
- vm.parametersList.addEmptyItem();
- }
-
- /**
- * Cancel dialog
- */
- function close() {
- vm.parametersList.removeEmptyParams();
- $mdDialog.hide();
- }
-
- /**
- * Save list to storage and re-init dialog
- */
- function save() {
- vm.parametersList.saveToStorage();
- init();
- }
-
- function registerClickOutside() {
- $(document).click(function () {
- closeOpenedMenu();
- });
- }
-
- function unregisterClickOutside() {
- $(document).off('click');
- }
-
- function openMenuDestroyListener() {
- $scope.$on('$destroy', function () {
- openMenuListener();
- });
- }
-
- function closeOpenedMenu() {
- unregisterClickOutside();
- openMenuDestroyListener();
- $mdMenu.hide();
- }
-
-
-
- }
-
- return ParamsAdminCtrl;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('RequestDataCtrl', RequestDataCtrl);
-
- RequestDataCtrl.$inject = ['$filter', '$mdToast', '$scope', 'RequestsService', 'constants'];
-
- function RequestDataCtrl($filter, $mdToast, $scope, RequestsService, constants) {
- var requestData = this,
- cmData = {
- cmInstance: null,
- cmFontSize: 14,
- };
-
- requestData.paramsArray = [];
- requestData.data = '';
- requestData.type = null;
-
-
- // todo: move all cm staff to directive
- requestData.dataEditorOptions = {
- mode: 'javascript',
- lineNumbers: true,
- lineWrapping: true,
- matchBrackets: true,
- extraKeys: {
- 'Ctrl-Space': 'autocomplete',
- },
- onLoad: function (cmInstance) {
-
- cmData.cmInstance = cmInstance;
-
- cmInstance.data = {
- parameterListObj: $scope.parametersList,
- };
-
- angular.element(cmInstance.display.wrapper).css('fontSize', cmData.cmFontSize + 'px');
-
- cmInstance.on('changes', function () {
- if (angular.isFunction(cmInstance.showHint)) {
- cmInstance.showHint();
- }
- });
-
- cmInstance.on('cursorActivity', function () {
- var lineString = cmInstance.getLine(cmInstance.getCursor().line);
- requestData.paramsArray = RequestsService.scanDataParams($scope.parametersList, lineString);
-
- if (!$scope.$$phase) {
- $scope.$apply();
- }
- });
-
- cmInstance.on('keydown', function (codemirror, event) {
- if (event.altKey) {
- switch (event.key){
- case '+':
- incCMFontSize();
- angular.element(cmInstance.display.wrapper).css(
- 'fontSize',
- cmData.cmFontSize + 'px'
- );
- break;
- case '-':
- decCMFontSize();
- angular.element(cmInstance.display.wrapper).css(
- 'fontSize',
- cmData.cmFontSize + 'px'
- );
- break;
- }
-
- }
- });
-
-
- },
- };
-
- requestData.init = init;
- requestData.enlargeCMFont = enlargeCMFont;
- requestData.reduceCMFont = reduceCMFont;
-
- function incCMFontSize() {
- if (cmData.cmFontSize < 30) {
- cmData.cmFontSize++;
- }
- }
-
- function decCMFontSize() {
- if (cmData.cmFontSize > 5) {
- cmData.cmFontSize--;
- }
- }
-
- function enlargeCMFont() {
- incCMFontSize();
- angular.element(cmData.cmInstance.display.wrapper).css(
- 'fontSize',
- cmData.cmFontSize + 'px'
- );
- }
-
- function reduceCMFont() {
- decCMFontSize();
- angular.element(cmData.cmInstance.display.wrapper).css(
- 'fontSize',
- cmData.cmFontSize + 'px'
- );
- }
-
- /**
- * Set code mirror theme and readonly property considering requestData.type
- */
- function initEditorOptions() {
- requestData.dataEditorOptions.theme = requestData.type === constants.REQUEST_DATA_TYPE_RECEIVED ? 'eclipse-disabled' : 'eclipse';
- requestData.dataEditorOptions.readOnly = requestData.type === constants.REQUEST_DATA_TYPE_RECEIVED;
- }
-
- /**
- * Initialization
- * @param type
- */
- function init(type){
- requestData.type = type;
- initEditorOptions();
-
- $scope.$on(constants.YANGMAN_SET_CODEMIRROR_DATA + type, function (event, args){
- requestData.data = args.params.data;
- });
-
- $scope.$on(constants.YANGMAN_GET_CODEMIRROR_DATA + type, function (event, args){
- args.params.reqData = requestData.data;
- });
- }
- }
-
-});
+++ /dev/null
-define([
- 'app/yangman/controllers/params-admin.controller',
- 'app/yangman/services/time-tracking.services',
-], function (ParamsAdminCtrl) {
- 'use strict';
-
- angular.module('app.yangman').controller('RequestHeaderCtrl', RequestHeaderCtrl);
-
- RequestHeaderCtrl.$inject = [
- '$timeout', '$mdDialog', '$mdToast', '$scope', '$rootScope', 'ENV', 'YangmanService', 'ParametersService',
- 'PathUtilsService', 'RequestsService', '$filter', 'DataBackupService', 'constants', 'TimeTrackingService'
- ];
-
- function RequestHeaderCtrl($timeout, $mdDialog, $mdToast, $scope, $rootScope, ENV, YangmanService, ParametersService,
- PathUtilsService, RequestService, $filter, DataBackupService, constants,
- TimeTrackingService) {
- var requestHeader = this;
-
- requestHeader.allOperations = [constants.OPERATION_GET, constants.OPERATION_POST, constants.OPERATION_PUT, constants.OPERATION_DELETE];
- requestHeader.constants = constants;
- requestHeader.urlChanged = false;
- requestHeader.executedOperation = null;
-
- requestHeader.selectedOperationsList = [];
- requestHeader.selectedOperation = null;
- requestHeader.requestUrl = '';
- requestHeader.selectedPluginsButtons = [];
- requestHeader.selectedPlugin = null;
- requestHeader.statusObj = null;
- requestHeader.fillFormWithReceivedData = true;
-
- // methods
- requestHeader.executeOperation = executeOperation;
- requestHeader.executePluginFunctionality = executePluginFunctionality;
- requestHeader.fillNodeData = fillNodeData;
- requestHeader.changeDataType = changeDataType;
- requestHeader.prepareDataAndExecute = prepareDataAndExecute;
- requestHeader.initMountPoint = initMountPoint;
- requestHeader.setJsonView = setJsonView;
- requestHeader.setRequestUrl = setRequestUrl;
- requestHeader.showParamsAdmin = showParamsAdmin;
- requestHeader.saveRequestToCollection = saveRequestToCollection;
- requestHeader.unsetPluginFunctionality = unsetPluginFunctionality;
-
- $scope.$on(constants.YANGMAN_CHANGE_TO_JSON, function () {
- sendRequestData($scope.buildRootRequest(), 'SENT');
- });
- /**
- * Set selected operations based on data store
- */
- $scope.$on(constants.SET_SEL_OPERATIONS, function (event, operations, setUrl) {
- setAllowedMethods(operations);
-
- if ( setUrl ) {
- setRequestUrl();
- }
- });
-
- /**
- * Watching for changes in shown detail data type (radio button)
- */
- $scope.$on(constants.YANGMAN_HEADER_INIT, function (event, args) {
- init();
- setRequestUrl(args.params.path);
- setRequestMethod(args.params.method);
- setRequestStatus(args.params.statusObj);
- setJsonView();
- (args.cbk || angular.noop)();
- });
-
- $scope.$on(constants.YANGMAN_FILL_NODE_FROM_REQ, function (event, args) {
- setNodeDataFromRequestData(args.params.requestUrl, args.params.leftpanel);
- (args.cbk || angular.noop)();
- });
-
- $scope.$on(constants.YANGMAN_EXECUTE_WITH_DATA, function (event, args) {
- executeOperation(args.params.data ? angular.fromJson(args.params.data) : {}, args.cbk);
- });
-
- init();
-
- /**
- * Setter for selected operation
- * @param method
- */
- function setRequestMethod(method){
- requestHeader.selectedOperation = method;
- }
-
- /**
- * Setter for request status
- * @param statusObj
- */
- function setRequestStatus(statusObj){
- requestHeader.statusObj = statusObj;
- }
-
- /**
- * Show popup for parameters administration
- * @param event
- */
- function showParamsAdmin(event) {
- $mdDialog.show({
- controller: ParamsAdminCtrl,
- controllerAs: 'paramsAdmin',
- templateUrl: $scope.globalViewPath + 'popup/parameters-admin.tpl.html',
- parent: angular.element('#yangmanModule'),
- targetEvent: event,
- clickOutsideToClose: true,
- locals: {
- parametersList: $scope.parametersList,
- },
- }).then(
- function (){
- $scope.parametersList.loadListFromStorage();
- },
- function (){
- $scope.parametersList.loadListFromStorage();
- }
- );
- }
-
- /**
- * Method for selecting correct json view by selected operation
- */
- function setJsonView(){
- var both = [constants.OPERATION_PUT, constants.OPERATION_POST];
-
- if ( both.indexOf(requestHeader.selectedOperation) > -1 ){
- $scope.setJsonView(true, true);
- } else {
- $scope.setJsonView(true, false);
- }
- }
-
- /**
- * Change displayed data type to json or form, after switching set current data to be displayed
- */
- function changeDataType(){
- $scope.switchSection('rightPanelSection', requestHeader.selectedShownDataType);
-
- if ($scope.node || requestHeader.urlChanged) {
- requestHeader.setRequestUrl();
- requestHeader.urlChanged = false;
- }
-
- // if changing to json, fill codemirror data
- if ( requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA && $scope.node ){
- setJsonView();
- sendRequestData($scope.buildRootRequest(), 'SENT');
- }
-
- // if changing to form, try to fill node data
- if (requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_FORM) {
- var reqData = {};
-
- reqData = getDataForForm();
- setNodeDataFromRequestData(requestHeader.requestUrl);
-
- if ( $scope.node ) {
-
- YangmanService.fillNodeFromResponse($scope.node, reqData);
- $scope.node.expanded = true;
- }
- }
- }
-
- /**
- * Helper method for building correct json data for form, rpc included
- * @returns {*}
- */
- function getDataForForm(){
- var params = {
- reqData: null,
- },
- dataTypeFunc = {
- rpc: function () {
- var sentData = { reqData: null },
- allData = { sent: null, received: null };
-
- $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_RECEIVED, params);
- $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_SENT, sentData);
-
- allData.sent = sentData.reqData ? angular.fromJson(sentData.reqData) : {};
- allData.received = params.reqData ? angular.fromJson(params.reqData) : {};
-
- return YangmanService.prepareReceivedData(
- $scope.node,
- requestHeader.selectedOperation,
- allData.received,
- allData.sent,
- requestHeader.selectedShownDataType
- );
- },
- default: function (){
- var dataType;
- if (requestHeader.executedOperation) {
- dataType = requestHeader.executedOperation === constants.OPERATION_GET ?
- constants.REQUEST_DATA_TYPE_RECEIVED :
- 'SENT';
- }
- else {
- dataType = 'SENT';
- }
-
- $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA + dataType, params);
- return params.reqData ? angular.fromJson(params.reqData) : {};
- },
- };
-
- return $scope.node ? (dataTypeFunc[$scope.node.type] || dataTypeFunc.default)() : {};
- }
-
- /**
- * Send data to codemirror
- * @param data
- */
- function sendRequestData(data, type){
- $scope.rootBroadcast(
- constants.YANGMAN_SET_CODEMIRROR_DATA + type,
- { data: data instanceof Object ? JSON.stringify(data, null, 4) : data }
- );
- }
-
- /**
- * Set error data to be shown in form area
- * @param response
- */
- function sendErrorData(response) {
- $scope.rootBroadcast(constants.YANGMAN_SET_ERROR_DATA, response);
- }
-
- /**
- * Create empty parameters list, load from local storage and set to $scope
- */
- function initParams(){
- $scope.parametersList.loadListFromStorage();
- }
-
- /**
- * Initialization
- */
- function init(){
- setAllowedMethods(requestHeader.allOperations);
- initParams();
- requestHeader.selectedShownDataType = $scope.rightPanelSection;
- }
-
- /**
- * Set allowed operations for request
- * @param operations
- */
- function setAllowedMethods(operations){
- requestHeader.selectedOperationsList = operations.length ? operations : requestHeader.allOperations;
- if (operations.indexOf(requestHeader.selectedOperation) === -1){
- requestHeader.selectedOperation = requestHeader.selectedOperationsList[0];
- }
- }
-
- /**
- * Set header request url if json selected
- */
- function setRequestUrl(path){
- requestHeader.requestUrl = path || ($scope.selectedSubApi ?
- ENV.getBaseURL('MD_SAL') + '/restconf/' + $scope.selectedSubApi.buildApiRequestString() : '');
- }
-
-
- /**
- * Try to set api, module, dataStore and node, if api indexes for request url available
- * and set (or unset) module detail panel to be displayed
- * @param requestUrl url to try to find
- * @param leftpanel index of main left tabs to be displayed (we dont want to display module detail in all cases)
- */
- function setNodeDataFromRequestData(requestUrl, leftpanel){
-
- setApiByUrl(requestUrl, function (treeApis) {
- // set module
- $scope.setModule($filter('filter')(treeApis, { label: $scope.selectedApi.module })[0]);
-
- // set datastore
- $scope.setDataStore(
- $filter('filter')(
- $scope.selectedModule.children,
- { label: $scope.selectedSubApi.storage })[0],
- true,
- leftpanel
- );
-
- // set node
- $scope.setNode($scope.selectedSubApi.node);
-
- // fill subapi path
- PathUtilsService.fillPath($scope.selectedSubApi.pathArray, requestUrl);
- setRequestUrl();
- });
- }
-
- /**
- * Try to set current (depending on url) selectedApi and selectedSubApi to $scope if it exists in api tree data
- * @param url
- * @param cbk
- * @param fill
- */
- function setApiByUrl(url, cbk, fill){
- $scope.rootBroadcast(constants.YANGMAN_GET_API_TREE_DATA, null, function (treeApis) {
- var apisIndexes =
- PathUtilsService.searchNodeByPath(url, treeApis, null, true, true);
-
- if ( apisIndexes ) {
-
- // set apis
- $scope.setApi(
- $scope.apis[apisIndexes.indexApi],
- $scope.apis[apisIndexes.indexApi].subApis[apisIndexes.indexSubApi]
- );
-
- if ( $scope.selectedSubApi && fill ) {
- var updatedUrl = YangmanService.cutUrl(url);
- PathUtilsService.fillPath($scope.selectedSubApi.pathArray, updatedUrl);
-
- }
-
- (cbk || angular.noop)(treeApis);
- }
- });
- }
-
- function saveRequestToCollection(event) {
- var historyReq = null,
- sentData = { reqData: null },
- receivedData = { reqData: null };
-
- if (requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_FORM) {
- requestHeader.setRequestUrl();
- }
-
- historyReq = RequestService.createHistoryRequest(
- null, null, requestHeader.requestUrl, requestHeader.selectedOperation, '', '', ''
- );
-
- $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_SENT, sentData);
- $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_RECEIVED, receivedData);
-
- RequestService.fillRequestByMethod(
- historyReq, sentData, receivedData, requestHeader.selectedOperation, $scope.node,
- requestHeader.selectedShownDataType
- );
-
- $scope.rootBroadcast(constants.YANGMAN_SAVE_REQUEST_TO_COLLECTION, { event: event, reqObj: historyReq });
- }
-
- function showRequestProgress(){
- $scope.rootBroadcast(constants.YANGMAN_EXECUTING_REQUEST_PROGRESS_START);
- }
-
-
- /**
- * Stop showing progressbar
- * @param message
- */
- function finishRequestProgress(message){
- $scope.rootBroadcast(constants.YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP);
- }
-
- /**
- * Execute request operation
- */
- function executeOperation(requestData, executeCbk){
- TimeTrackingService.startTimer();
- var allowExecuteOperation =
- requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_FORM && $scope.selectedSubApi ?
- !PathUtilsService.checkEmptyIdentifiers($scope.selectedSubApi.pathArray) : true;
-
-
- if ( allowExecuteOperation ) {
-
- showRequestProgress();
- $scope.rootBroadcast(constants.YANGMAN_SET_ERROR_MESSAGE, '');
-
- setRequestUrl(
- requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA ?
- requestHeader.requestUrl :
- null
- );
- if ( requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA ){
- setApiByUrl(requestHeader.requestUrl, null, true);
- }
-
- var historyReq = RequestService.createHistoryRequest(
- null,
- null,
- requestHeader.requestUrl,
- requestHeader.selectedOperation,
- '', '', ''
- );
-
- YangmanService.executeRequestOperation(
- $scope.selectedApi,
- $scope.selectedSubApi,
- requestHeader.selectedOperation,
- $scope.node,
- requestHeader.selectedShownDataType,
- requestHeader.requestUrl,
- requestData,
- $scope.parametersList,
- executeReqSuccCbk,
- executeReqErrCbk
- );
- requestHeader.executedOperation = requestHeader.selectedOperation;
- } else {
- $scope.rootBroadcast(
- constants.YANGMAN_SET_ERROR_MESSAGE,
- $filter('translate')(constants.YANGMAN_ERROR_EMPTY_IDENTIFIERS)
- );
- finishRequestProgress();
- }
-
- /**
- * Success callback after executin operation
- * @param reqInfo
- * @param response
- */
- function executeReqSuccCbk(reqInfo, response) {
-
- var preparedReceivedData = {};
-
- if (requestHeader.fillFormWithReceivedData || requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA ) {
- preparedReceivedData = YangmanService.prepareReceivedData(
- $scope.node,
- requestHeader.selectedOperation,
- response.data ? response.data.plain() : {},
- reqInfo.requestSrcData,
- requestHeader.selectedShownDataType
- );
- }
-
- finishRequestProgress();
-
- requestHeader.statusObj = reqInfo;
-
- sendErrorData({});
-
- if (requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA){
- setNodeDataFromRequestData(requestHeader.requestUrl);
- sendRequestData(preparedReceivedData, constants.REQUEST_DATA_TYPE_RECEIVED);
- sendRequestData(reqInfo.requestSrcData || {}, 'SENT');
- } else {
-
- if ($scope.node && requestHeader.selectedOperation !== constants.OPERATION_DELETE && requestHeader.fillFormWithReceivedData){
-
- YangmanService.fillNodeFromResponse($scope.node, preparedReceivedData);
- YangmanService.handleNodeIdentifier(
- $scope.parametersList, $scope.selectedSubApi, $scope.node
- );
- $scope.node.expanded = true;
-
- $scope.rootBroadcast(constants.YANGMAN_DISABLE_ADDING_LIST_ELEMENT);
- preparedReceivedData = YangmanService.checkRpcReceivedData(preparedReceivedData, $scope.node);
- sendRequestData(preparedReceivedData, constants.REQUEST_DATA_TYPE_RECEIVED);
- }
- }
-
- // create and set history request
- requestHeader.statusObj.time = TimeTrackingService.returnTime();
-
- historyReq.setExecutionData(
- reqInfo.requestSrcData,
- $scope.historySettings.data.saveReceived ? preparedReceivedData : null,
- $scope.historySettings.data.saveResponseData ? reqInfo.status : '',
- $scope.historySettings.data.saveResponseData ? reqInfo.status : '',
- $scope.historySettings.data.saveResponseData ? reqInfo.statusText : '',
- $scope.historySettings.data.saveResponseData ? requestHeader.statusObj.time : ''
- );
-
- $scope.rootBroadcast(constants.YANGMAN_SAVE_EXECUTED_REQUEST, historyReq, function (){
- $scope.rootBroadcast(constants.YANGMAN_SELECT_THE_NEWEST_REQUEST);
- });
-
- (executeCbk || angular.noop)(historyReq);
-
- }
-
- /**
- * Error callback after executin operation
- * @param reqInfo
- * @param response
- */
- function executeReqErrCbk(reqInfo, response) {
- requestHeader.statusObj = reqInfo;
-
- finishRequestProgress();
-
- requestHeader.statusObj.time = TimeTrackingService.returnTime();
-
- historyReq.setExecutionData(
- reqInfo.requestSrcData,
- $scope.historySettings.data.saveReceived ? response.data : null,
- $scope.historySettings.data.saveResponseData ? reqInfo.status : '',
- $scope.historySettings.data.saveResponseData ? reqInfo.status : '',
- $scope.historySettings.data.saveResponseData ? reqInfo.statusText : '',
- $scope.historySettings.data.saveResponseData ? requestHeader.statusObj.time : ''
- );
- $scope.rootBroadcast(constants.YANGMAN_SAVE_EXECUTED_REQUEST, historyReq, function (){
- $scope.rootBroadcast(constants.YANGMAN_SELECT_THE_NEWEST_REQUEST);
- });
-
- if (response.data) {
- // try to fill code mirror editor
- sendRequestData(response.data, constants.REQUEST_DATA_TYPE_RECEIVED);
- sendErrorData(response.data);
- }
-
- (executeCbk || angular.noop)(historyReq);
-
-
- }
-
- }
-
- /**
- * TODO :: description
- * @param pathElem
- * @param identifier
- */
- function fillNodeData(pathElem, identifier) {
- if ($scope.selectedSubApi && $scope.selectedSubApi.storage === constants.DATA_STORE_CONFIG &&
- $scope.selectedSubApi.pathArray.indexOf(pathElem) === ($scope.selectedSubApi.pathArray.length - 1)) {
- PathUtilsService.fillListNode($scope.node, identifier.label, identifier.value);
- }
-
- requestHeader.urlChanged = true;
- }
-
- /**
- * Check data before executin operations
- */
- function prepareDataAndExecute(cbk){
- if (requestHeader.statusObj) {
- requestHeader.statusObj.statusText = null;
- requestHeader.statusObj.time = null;
- }
-
-
- showRequestProgress();
-
- $timeout(prepareData);
- function prepareData() {
- if ( requestHeader.requestUrl.length ) {
- if ( requestHeader.selectedShownDataType === constants.DISPLAY_TYPE_REQ_DATA ) {
- // get json data
- var params = { reqData: null };
- $scope.rootBroadcast(constants.YANGMAN_GET_CODEMIRROR_DATA_SENT, params);
- executeOperation(params.reqData ? angular.fromJson(params.reqData) : {}, cbk);
- } else {
- executeOperation({}, cbk);
- }
- }
- }
- }
-
- /**
- * Mount point initialization
- * @param mountPointStructure
- * @param mountPointTreeApis
- * @param mountPointApis
- * @param augmentations
- */
- function initMountPoint(mountPointTreeApis, mountPointApis, augmentations, reqObj){
- DataBackupService.storeFromScope(
- [
- 'selectedDatastore', 'node', 'apis',
- 'selectedApi', 'selectedSubApi', 'augmentations', 'selectedModule',
- ],
- $scope,
- 'MAIN_SCOPE'
- );
-
- $scope.rootBroadcast(constants.YANGMAN_GET_API_TREE_DATA, null, function (treeApis) {
- DataBackupService.storeFromScope(
- ['treeApis'],
- { treeApis: treeApis },
- 'MODULES_LIST'
- );
- });
-
- $scope.setNode(null);
- $scope.setModule(null);
- $scope.setGlobalParams(mountPointApis, augmentations);
- $scope.setDataStore(null);
- requestHeader.statusObj = reqObj;
- $scope.rootBroadcast(constants.YANGMAN_SET_API_TREE_DATA, mountPointTreeApis);
- }
-
- /**
- * Executing custom plugin callback
- * @param customPlugin
- */
- function executePluginFunctionality(customPlugin){
- requestHeader.selectedPlugin = customPlugin;
- $scope.setSelectedPlugin(true);
- customPlugin.runCallback({ scope: $scope, controller: requestHeader });
- }
-
- /**
- * Unset custom plugin functionality - get back major params from scope
- */
- function unsetPluginFunctionality(){
- if ( requestHeader.selectedPlugin ) {
- $scope.unsetPlugin(requestHeader);
- $scope.setSelectedPlugin(false);
- }
-
- requestHeader.selectedPlugin = null;
- requestHeader.selectedPluginsButtons = [];
- }
-
- }
-
-});
+++ /dev/null
-define([
- 'app/yangman/controllers/save-req-dialog.controller',
- 'app/yangman/controllers/edit-collection-dialog.controller',
- 'app/yangman/controllers/history-settings.controller',
- 'app/yangman/services/handle-file.services',
-], function (SaveReqDialogCtrl, EditCollectionDialogCtrl, HistorySettingsCtrl) {
- 'use strict';
-
- angular.module('app.yangman').controller('RequestsListCtrl', RequestsListCtrl);
-
- RequestsListCtrl.$inject = [
- '$filter', '$mdDialog', '$scope', 'YMHandleFileService', 'PathUtilsService', 'RequestsService', 'YangmanService',
- 'YangmanDesignService', 'constants',
- ];
-
- /**
- * Controller for requests lists, means History requests and Collections requests
- * @param $filter
- * @param $mdDialog
- * @param $scope
- * @param YMHandleFileService
- * @param PathUtilsService
- * @param RequestsService
- * @param YangmanService
- * @param YangmanDesignService
- * @constructor
- */
- function RequestsListCtrl($filter, $mdDialog, $scope, YMHandleFileService, PathUtilsService, RequestsService,
- YangmanService, YangmanDesignService, constants) {
- var vm = this;
-
- vm.collectionList = null;
- vm.constants = constants;
-
- vm.requestList = null;
- vm.mainList = null;
- vm.collectionsSortAsc = true;
- vm.search = '';
-
- vm.clearCollectionList = clearCollectionList;
- vm.clearFilter = clearFilter;
- vm.clearHistoryList = clearHistoryList;
- vm.colMatchingReqsCount = colMatchingReqsCount;
- vm.deselectAllFilteredRequests = deselectAllFilteredReqs;
- vm.downloadCollection = downloadCollection;
- vm.executeRequest = executeRequest;
- vm.fakeFilter = fakeFilter;
- vm.filterCol = filterCol;
- vm.filterColName = filterColName;
- vm.filterReq = filterReq;
- vm.init = init;
- vm.readCollectionFromFile = readCollectionFromFile;
- vm.selectAllFilteredRequests = selectAllFilteredReqs;
- vm.selectRequest = selectRequest;
- vm.showData = showData;
- vm.showDgDeleteCollection = showDgDeleteCollection;
- vm.showDgDeleteRequests = showDgDeleteRequests;
- vm.showDgEditCollection = showDgEditCollection;
- vm.showDgSaveReq = showDgSaveReq;
- vm.showHistorySettings = showHistorySettings;
- vm.showForm = showForm;
- vm.toggleCollectionsSort = toggleCollectionsSort;
- vm.selectOnlyThisRequest = selectOnlyThisRequest;
- vm.deselectAllRequests = deselectAllRequests;
- vm.filterCollReq = filterCollReq;
-
- /**
- * Save request obje to collection from other controller
- * @param reqObj
- */
- function saveRequestFromExt(event, args) {
- vm.showDgSaveReq(args.params.event, args.params.reqObj, false);
- }
-
-
- /**
- * Clear history requests list and save to storage
- */
- function clearHistoryList(event) {
-
- YangmanDesignService.disableMdMenuItem(event);
-
- var confirm = $mdDialog.confirm()
- .title($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
- .textContent($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TEXT'))
- .ariaLabel($filter('translate')('YANGMAN_DELETE_HISTORY_CONFIRM_TITLE'))
- .targetEvent(event)
- .ok($filter('translate')('YANGMAN_OK'))
- .cancel($filter('translate')('YANGMAN_CANCEL'));
-
- $mdDialog.show(confirm)
- .then(function (){
- vm.requestList.clear();
- vm.requestList.saveToStorage();
- loadHistoryList();
- })
- .then(YangmanDesignService.enableMdMenuItem(event));
- }
-
- /**
- * Clear collections requests list and save to storage
- */
- function clearCollectionList(event) {
- var confirm = $mdDialog.confirm()
- .title($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
- .textContent($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TEXT'))
- .ariaLabel($filter('translate')('YANGMAN_DELETE_COLLECTION_CONFIRM_TITLE'))
- .targetEvent(event)
- .ok($filter('translate')('YANGMAN_OK'))
- .cancel($filter('translate')('YANGMAN_CANCEL'));
-
- YangmanDesignService.disableMdMenuItem(event);
-
- $mdDialog.show(confirm)
- .then(function (){
- vm.collectionList.clear();
- vm.collectionList.saveToStorage();
- $scope.rootBroadcast(constants.YANGMAN_REFRESH_COLLECTIONS);
- })
- .then(YangmanDesignService.enableMdMenuItem(event));
- }
-
- /**
- * Create history request from other ctrl
- * @param broadcastEvent
- * @param params
- */
- function saveBcstedHistoryRequest(broadcastEvent, params) {
- vm.requestList.addItemToList(params.params);
- vm.requestList.saveToStorage();
- (params.cbk || angular.noop)();
- }
-
- /**
- * Clear value of input file used to import collection
- */
- function clearFileInputValue(){
- angular.element(document).find('#importCollection').val('');
- }
-
- /**
- * Importing collection from a file
- * @param $fileContent
- */
- function readCollectionFromFile($fileContent) {
- var data = $fileContent;
-
- if (data && YangmanService.validateFile(data, constants.COLLECTION_CHECK_ARRAY)){
- try {
- vm.collectionList.loadListFromFile(data);
- vm.collectionList.saveToStorage();
- $scope.rootBroadcast(constants.YANGMAN_REFRESH_COLLECTIONS);
- clearFileInputValue();
- }
- catch (e) {
- clearFileInputValue();
- console.error('DataStorage error:', e);
- }
- }
- else {
- clearFileInputValue();
- }
- removeButtonBackground();
-
- function removeButtonBackground() {
- $('#importCollection').next().css({ 'background': 'transparent' });
- }
- }
-
- function toggleCollectionsSort() {
- vm.collectionsSortAsc = !vm.collectionsSortAsc;
- }
-
- /**
- * Export collection to json file
- * @param {Collection} collection
- */
- function downloadCollection(collection) {
-
- var cListJSON = vm.collectionList.getCollectionInRawJSON(collection.name);
-
- YMHandleFileService.downloadFile(collection.name + '.json', cListJSON, 'json', 'charset=utf-8',
- function (){},
- function (e){
- console.error('ExportCollection error:', e);
- }
- );
- }
-
- /**
- * Fill request form in right panel with request data
- * @param reqObj
- * @param preventFillingWithReceived
- */
- function showForm(reqObj, preventFillingWithReceived) {
- var data = reqObj.sentData;
-
- if ($scope.historySettings.data.fillWithReceived && !preventFillingWithReceived) {
- data = reqObj.receivedData;
- }
-
- $scope.rootBroadcast(
- constants.YANGMAN_SET_CODEMIRROR_DATA_RECEIVED, { data: reqObj.setDataForView(reqObj.receivedData) }
- );
- $scope.rootBroadcast(
- constants.YANGMAN_SET_CODEMIRROR_DATA_SENT, { data: reqObj.setDataForView(reqObj.sentData) }
- );
-
- $scope.rootBroadcast(constants.YANGMAN_SET_ERROR_DATA,
- reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {});
-
- $scope.rootBroadcast(constants.YANGMAN_FILL_NODE_FROM_REQ, { requestUrl: reqObj.path, requestData: data },
- function (){
- $scope.setRightPanelSection(constants.DISPLAY_TYPE_FORM);
- $scope.rootBroadcast(constants.YANGMAN_HEADER_INIT, {
- path: reqObj.path,
- method: reqObj.method,
- statusObj: {
- status: reqObj.responseStatus,
- statusText: reqObj.responseStatusText,
- time: reqObj.responseTime,
- },
- });
-
- if ( $scope.node ) {
- // prepare data for filling form
- if ($scope.node.type === constants.NODE_RPC && $scope.historySettings.data.fillWithReceived) {
- data = YangmanService.prepareReceivedData(
- $scope.node,
- reqObj.method,
- reqObj.receivedData,
- reqObj.sentData,
- constants.DISPLAY_TYPE_FORM
- );
- }
-
- // try to fill node
- YangmanService.fillNodeFromResponse($scope.node, data);
- $scope.node.expanded = true;
- }
-
- }
- );
-
- }
-
- /**
- * Force request header to execute request with data from reqObj
- * @param reqObj
- */
- function executeRequest(reqObj) {
- if ($scope.rightPanelSection === constants.DISPLAY_TYPE_FORM) {
- showForm(reqObj, true);
- }
- else {
- showData(reqObj);
- }
- $scope.rootBroadcast(constants.YANGMAN_EXECUTE_WITH_DATA,{ data: reqObj.sentData });
- }
-
- /**
- * Method for setup data into CM, Header, find api, subapi, node
- * @param reqObj
- * @param status
- */
- function showData(reqObj, select){
- var headerObj = {
- path: reqObj.path,
- method: reqObj.method,
- };
-
- // action select request
- if ( select ) {
- headerObj.statusObj = {
- status: reqObj.responseStatus,
- statusText: reqObj.responseStatusText,
- time: reqObj.responseTime,
- };
-
- $scope.rootBroadcast(
- constants.YANGMAN_SET_ERROR_DATA,
- reqObj.receivedData && reqObj.receivedData.hasOwnProperty('errors') ? reqObj.receivedData : {}
- );
- }
-
- $scope.setRightPanelSection(constants.DISPLAY_TYPE_REQ_DATA);
- $scope.setJsonView(true, reqObj.method !== constants.OPERATION_GET);
-
- $scope.rootBroadcast(constants.YANGMAN_HEADER_INIT, headerObj);
- $scope.rootBroadcast(constants.YANGMAN_FILL_NODE_FROM_REQ, { requestUrl: reqObj.path });
-
- $scope.rootBroadcast(
- constants.YANGMAN_SET_CODEMIRROR_DATA_RECEIVED,
- { data: reqObj.setDataForView(reqObj.receivedData) }
- );
-
- $scope.rootBroadcast(
- constants.YANGMAN_SET_CODEMIRROR_DATA_SENT,
- { data: reqObj.setDataForView(reqObj.sentData) }
- );
- }
-
- /**
- * Clear current ctrl search value
- */
- function clearFilter(){
- vm.search = '';
- }
-
- /**
- * Dialog for deleting either selected requests or reqObj
- *
- * @param event
- * @param reqObj
- */
- function showDgDeleteRequests(event, reqObj){
-
- var confirm = $mdDialog.confirm()
- .title($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
- .textContent($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TEXT'))
- .ariaLabel($filter('translate')('YANGMAN_DELETE_REQ_CONFIRM_TITLE'))
- .targetEvent(event)
- .ok($filter('translate')('YANGMAN_OK'))
- .cancel($filter('translate')('YANGMAN_CANCEL'));
-
- YangmanDesignService.disableMdMenuItem(event);
-
- $mdDialog.show(confirm)
- .then(function (){
- deleteRequestsAndReload(reqObj);
- })
- .then(YangmanDesignService.enableMdMenuItem(event));
- }
-
-
- /**
- * Dialog for deleting collection and refreshing collections
- * @param ev
- * @param collObj
- */
- function showDgDeleteCollection(ev, collObj){
- var confirm = $mdDialog.confirm()
- .title($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TITLE') + ' ' + collObj.name + '?')
- .textContent($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TEXT'))
- .ariaLabel($filter('translate')('YANGMAN_DELETE_COL_CONFIRM_TITLE'))
- .targetEvent(ev)
- .ok($filter('translate')('YANGMAN_OK'))
- .cancel($filter('translate')('YANGMAN_CANCEL'));
-
- YangmanDesignService.disableMdMenuItem(ev);
-
- $mdDialog.show(confirm)
- .then(function (){
- vm.collectionList.deleteCollection(collObj);
- vm.collectionList.saveToStorage();
- refreshCollectionsWithExpansion();
- })
- .then(YangmanDesignService.enableMdMenuItem(ev));
- }
-
- /**
- * Check if reqObj matches current search value
- * @param reqObj
- * @returns {boolean}
- */
- function filterReq(reqObj){
- var searchPhrase = vm.search.toLocaleLowerCase();
- return reqObj.path.toLowerCase().indexOf(searchPhrase) > -1 ||
- reqObj.collection.toLowerCase().indexOf(searchPhrase) > -1 ||
- reqObj.method.toLowerCase() === searchPhrase;
- }
-
- /**
- * Check if collection name matches current search value or any collection req matches
- * @param colObj
- */
- function filterCol(colObj){
- return filterColName(colObj) || colObj.data.some(filterReq);
- }
-
- /**
- * Get count of requests matching filter in collection colObj
- * @param colObj
- * @returns {*}
- */
- function colMatchingReqsCount(colObj){
- return colObj.data.filter(vm.filterReq).length;
- }
-
- /**
- * Check if collection name matches current filter
- * @param colObj
- * @returns {boolean}
- */
- function filterColName(colObj){
- return colObj.name.toLowerCase().indexOf(vm.search.toLowerCase()) > -1;
- }
-
- /**
- * Returns true
- * @returns {boolean}
- */
- function fakeFilter(){
- return true;
- }
-
-
- /**
- * Show dialog for saving reqObj to collection (used for duplicate req too)
- * @param ev
- * @param reqObj
- * @param duplicate
- */
- function showDgSaveReq(ev, reqObj, duplicate){
-
- $mdDialog.show({
- controller: SaveReqDialogCtrl,
- controllerAs: 'dialog',
- templateUrl: $scope.globalViewPath + 'leftpanel/save-req-dialog.tpl.html',
- parent: angular.element('#yangmanModule'),
- targetEvent: ev,
- clickOutsideToClose: true,
- locals: {
- requests: reqObj ? [reqObj] : vm.mainList.getSelectedItems(
- vm.mainList === vm.collectionList ? filterCollReq : filterReq
- ),
- collectionNames: vm.collectionList.getCollectionNames(),
- duplicate: duplicate || false,
- },
- }).then(saveRequests);
- }
-
- /**
- * Show popup window for history requests settings
- * @param ev
- */
- function showHistorySettings(ev){
-
- $mdDialog.show({
- controller: HistorySettingsCtrl,
- controllerAs: 'settingsCtrl',
- templateUrl: $scope.globalViewPath + 'leftpanel/history-settings.tpl.html',
- parent: angular.element('#yangmanModule'),
- targetEvent: ev,
- clickOutsideToClose: true,
- locals: {
- settingsObj: $scope.historySettings,
- },
- }).then(function (changedSettings){
- $scope.historySettings.setData(changedSettings.data);
- $scope.rootBroadcast(constants.YANGMAN_RESET_HISTORY_SETTINGS);
- });
- }
-
- /**
- * Add each request from requests array to collectionList and save
- * @param requests
- */
- function saveRequests(requests){
- requests.forEach(function (reqObj){
- vm.collectionList.addItemToList(RequestsService.clearUnnecessaryProperties(reqObj.clone()));
- vm.collectionList.saveToStorage();
- refreshCollectionsWithExpansion();
- });
- }
-
-
- /**
- * Dialog for editing collection name (used for duplicating collection too)
- * @param ev
- * @param collection
- * @param {boolean} duplicate
- */
- function showDgEditCollection(ev, collection, duplicate){
- $mdDialog.show({
- controller: EditCollectionDialogCtrl,
- controllerAs: 'dialog',
- templateUrl: $scope.globalViewPath + 'leftpanel/edit-collection-dialog.tpl.html',
- parent: angular.element('#yangmanModule'),
- targetEvent: ev,
- clickOutsideToClose: true,
- locals: {
- collection: collection,
- allCollections: vm.collectionList.collections,
- duplicate: duplicate,
- },
- }).then(duplicate ? duplicateCollection : changeCollectionName);
- }
-
- /**
- * Rename collection
- * @param {array} names 0. element is old name, 1. element is new name
- */
- function changeCollectionName(names){
- vm.collectionList.renameCollection(names[0], names[1]);
- vm.collectionList.saveToStorage();
- refreshCollectionsWithExpansion();
- }
-
- /**
- * Create collection duplicate, save and refresh collections
- * @param {array} names 0. element is old name, 1. element is new name
- */
- function duplicateCollection(names){
- vm.collectionList.duplicateCollection(names[0], names[1]);
- vm.collectionList.saveToStorage();
- refreshCollectionsWithExpansion();
- }
-
-
- function selectNewestRequest() {
- vm.mainList.toggleReqSelection(true, vm.mainList.getNewestRequest());
- }
-
- function loadCollectionsList() {
- vm.collectionList.loadListFromStorage();
- }
-
- function loadHistoryList() {
- vm.requestList.loadListFromStorage();
- }
-
- /**
- *
- * @param mainList collectionList or requestList object
- */
- function init(mainList){
-
- vm.collectionList = RequestsService.createEmptyCollectionList('yangman_collectionsList');
- // collections are loaded for both history and collections tab
- loadCollectionsList();
-
- vm.requestList = RequestsService.createEmptyHistoryList('yangman_requestsList', $scope.historySettings);
-
- $scope.$on(constants.YANGMAN_RESET_HISTORY_SETTINGS, function () {
- vm.requestList.setSettings($scope.historySettings);
- });
-
- // if request was selected, deselect requests in all other instances of RequestsListCtrl
- $scope.$on(constants.YANGMAN_DESELECT_REQUESTS, function (event, params) {
- if (params.params.broadcastingCtrl !== vm) {
- deselectAllRequests();
- }
- });
-
- $scope.$on(constants.YANGMAN_REFRESH_COLLECTIONS, function (event, params){
- loadCollectionsList();
- (params.cbk || angular.noop)();
- });
-
- // list type dependend operations
- if (mainList === 'history') {
-
- vm.mainList = vm.requestList;
- loadHistoryList();
-
- $scope.$on(constants.YANGMAN_REFRESH_HISTORY, loadHistoryList);
- // saving from request header after execution
- $scope.$on(constants.YANGMAN_SAVE_EXECUTED_REQUEST, saveBcstedHistoryRequest);
- // select newest request
- $scope.$on(constants.YANGMAN_SELECT_THE_NEWEST_REQUEST, selectNewestRequest);
- }
- else {
- vm.mainList = vm.collectionList;
- // saving from request header
- $scope.$on(constants.YANGMAN_SAVE_REQUEST_TO_COLLECTION, saveRequestFromExt);
- // saving collections expanded status on refresh
- $scope.$on(constants.YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS, function(){
- var expandedColNames = vm.collectionList.getExpandedCollectionNames();
- $scope.rootBroadcast(constants.YANGMAN_REFRESH_COLLECTIONS, {}, function (){
- vm.collectionList.expandCollectionByNames(expandedColNames);
- });
- });
- }
-
- }
-
-
- /**
- * Request in list selection
- * For history reqs it is possible multiselect, thats why event.ctrlKey is used
- * @param event
- * @param requestObj
- */
- function selectRequest(event, requestObj){
- console.debug('selected', requestObj);
-
- $scope.rootBroadcast(constants.YANGMAN_DESELECT_REQUESTS, { broadcastingCtrl: vm });
- vm.mainList.toggleReqSelection(!event.ctrlKey, requestObj);
- if (!event.ctrlKey){
- if ($scope.rightPanelSection === constants.DISPLAY_TYPE_FORM) {
- vm.showForm(requestObj);
- }
- else {
- vm.showData(requestObj, true);
- }
- }
- }
-
- /**
- * Mark only requestObj in current list as selected
- * Used for example when user clicks on request submenu
- * @param requestObj
- */
- function selectOnlyThisRequest(requestObj){
- vm.mainList.toggleReqSelection(true, requestObj);
- }
-
- /**
- * Deselect history requests
- */
- function deselectAllFilteredReqs(){
- vm.mainList.deselectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
- }
-
- function deselectAllRequests() {
- vm.mainList.deselectAllItems();
- }
-
- /**
- * Select history requests
- */
- function selectAllFilteredReqs(){
- vm.mainList.selectAllFilteredItems(vm.mainList === vm.collectionList ? filterCollReq : vm.filterReq);
- }
-
- /**
- * Use when selecting filtered requests if they are saved to some collection
- * Additional filter is if the collection of the request is expanded
- * @param request
- * @returns {*|boolean}
- */
- function filterCollReq(request) {
- return vm.collectionList.getCollection(request.collection).expanded && vm.filterReq(request);
- }
-
- /**
- * Refresh and expand collections
- */
- function refreshCollectionsWithExpansion(){
- $scope.rootBroadcast(constants.YANGMAN_REFRESH_AND_EXPAND_COLLECTIONS);
- }
-
- function deleteRequestsAndReload(reqObj) {
- if (reqObj){
- vm.mainList.deleteRequestItem(reqObj);
- }
- else {
- vm.mainList.getSelectedItems(
- vm.mainList === vm.collectionList ? filterCollReq : filterReq
- ).forEach(function (elem){
- vm.mainList.deleteRequestItem(elem);
- });
- }
- vm.mainList.saveToStorage();
-
- if (vm.mainList === vm.requestList) {
- loadHistoryList();
- }
- else {
- refreshCollectionsWithExpansion();
- }
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('SaveReqDialogCtrl', SaveReqDialogCtrl);
-
- SaveReqDialogCtrl.$inject = ['$filter', '$mdDialog', 'collectionNames', 'requests', 'duplicate'];
-
- function SaveReqDialogCtrl($filter, $mdDialog, collectionNames, requests, duplicate) {
- var vm = this;
-
- vm.collectionNames = collectionNames;
- vm.collectionName = duplicate ? requests[0].collection : '';
- vm.getColAutocomplete = getColAutocomplete;
- vm.requests = requests;
- vm.duplicate = duplicate;
-
- vm.cancel = cancel;
- vm.save = save;
-
- cloneRequests();
-
- /**
- * Get collection names matching the text that was already written
- * @returns {*}
- */
- function getColAutocomplete() {
- return vm.collectionNames ? $filter('filter')(vm.collectionNames, vm.collectionName) : vm.collectionNames;
- }
-
- /**
- * Clone requests to not affect source objects
- */
- function cloneRequests(){
- vm.requests = vm.requests.map(function (req){
- return req.clone();
- });
- }
-
-
- /**
- * Only cancel mdDialog
- */
- function cancel() {
- $mdDialog.cancel();
- }
-
- /**
- * Try to save requests and return them in answer after hiding mdDialog
- */
- function save() {
- vm.requests.forEach(function (reqObj){
- reqObj.collection = vm.collectionName;
- });
- $mdDialog.hide(vm.requests);
- }
-
- }
-
- return SaveReqDialogCtrl;
-
-});
+++ /dev/null
-define([
- 'app/yangman/controllers/form/ym-augmentation-modal.controller',
- 'app/yangman/controllers/form/ym-case.controller',
- 'app/yangman/controllers/form/ym-container.controller',
- 'app/yangman/controllers/form/ym-choice.controller',
- 'app/yangman/controllers/form/ym-input.controller',
- 'app/yangman/controllers/form/ym-leaf.controller',
- 'app/yangman/controllers/form/ym-leaf-list.controller',
- 'app/yangman/controllers/form/ym-list.controller',
- 'app/yangman/controllers/form/ym-output.controller',
- 'app/yangman/controllers/form/ym-rpc.controller',
- 'app/yangman/controllers/form/ym-type.controller',
- 'app/yangman/controllers/form/ym-type-bit.controller',
- 'app/yangman/controllers/form/ym-type-boolean.controller',
- 'app/yangman/controllers/form/ym-type-empty.controller',
- 'app/yangman/controllers/form/ym-type-enum.controller',
- 'app/yangman/directives/yang-form-menu.directive',
- 'app/yangman/directives/ym-info-box.directive',
-], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YangFormCtrl', YangFormCtrl);
-
- YangFormCtrl.$inject = ['$scope', '$filter', 'constants', 'YangUtilsService'];
-
- function YangFormCtrl($scope, $filter, constants) {
- var yangForm = this;
-
- yangForm.viewPath = $scope.globalViewPath + 'rightpanel/form';
- yangForm.errorMsg = '';
- yangForm.inputIndex = 0;
- $scope.constants = constants;
-
-
- yangForm.getNodeName = getNodeName;
-
- init();
-
-
-
-
- function init() {
- $scope.$on(constants.YANGMAN_SET_ERROR_DATA, setRcvdErrorData);
- $scope.$on(constants.YANGMAN_SET_ERROR_MESSAGE, setErrorMessage);
- }
-
-
-
- /**
- * Method for set error message in form
- * @param event
- * @param message
- */
- function setErrorMessage(event, data){
- yangForm.errorMsg = data.params;
- }
-
- /**
- * Read and set error message received from header controller
- * @param event
- * @param data
- */
- function setRcvdErrorData(event, data) {
-
- if (data.params.errors) {
- yangForm.errorMsg = data.params.errors.error[0]['error-message'];
- }
- else {
- yangForm.errorMsg = '';
- }
- }
-
- /**
- * Get node label name
- * @param localeLabel
- * @param label
- * @returns {*}
- */
- function getNodeName(localeLabel, label) {
- var localeResult = $filter('translate')(localeLabel);
- return localeResult.indexOf(constants.LOCALE_PREFIX) === 0 ? label : localeResult;
- }
-
-
- }
-
-});
+++ /dev/null
-define([
- 'app/yangman/yangman.filters',
- 'app/yangman/controllers/modules-list.controller',
- 'app/yangman/controllers/module-detail.controller',
- 'app/yangman/controllers/yang-form.controller',
- 'app/yangman/controllers/requests-list.controller',
- 'app/yangman/controllers/request-header.controller',
- 'app/yangman/controllers/request-data.controller',
- 'app/yangman/services/yangman.services',
- 'app/yangman/services/handle-file.services',
- 'app/yangman/services/yangman-design.services',
- 'app/yangman/services/requests.services',
- 'app/yangman/services/parameters.services',
- 'app/yangman/services/plugins-unsetter.services',
- 'app/yangman/services/history-settings.services',
- 'app/yangman/directives/ui-codemirror.directive',
- 'app/yangman/directives/read_file.directive',
- 'app/yangman/directives/height-watcher.directive',
-], function () {
- 'use strict';
-
- angular.module('app.yangman').controller('YangmanCtrl', YangmanCtrl);
-
- YangmanCtrl.$inject = [
- '$scope', '$rootScope', 'HistorySettingsService', 'YangmanDesignService', 'RequestBuilderService',
- 'EventDispatcherService', 'constants', 'ParametersService', 'PathUtilsService', 'PluginsUnsetterService',
- '$timeout',
- ];
-
- function YangmanCtrl(
- $scope, $rootScope, HistorySettingsService, YangmanDesignService, RequestBuilderService, EventDispatcherService,
- constants, ParametersService, PathUtilsService, PluginsUnsetterService, $timeout
- ) {
- var main = this;
-
- $rootScope.section_logo = 'assets/images/logo_yangman.png';
- $scope.globalViewPath = 'src/app/yangman/views/';
-
- $scope.selectedModule = null;
- $scope.selectedDatastore = null;
- $scope.selectedPlugin = false;
- $scope.apis = [];
- $scope.node = null;
- $scope.rightPanelSection = constants.DISPLAY_TYPE_REQ_DATA;
- $scope.augmentations = {};
- $scope.selectedApi = null;
- $scope.selectedSubApi = null;
- $scope.historyReqsSelected = false;
- $scope.requestToShow = null;
- $scope.requestDataToShow = '';
- $scope.parametersList = ParametersService.createEmptyParametersList('yangman_parameters');
- $scope.shownCMHint = false;
- $scope.historySettings = HistorySettingsService.createHistorySettings().loadFromStorage();
-
- main.selectedMainTab = 0;
- main.leftPanelTab = 0;
- main.jsonView = {
- received: true,
- sent: false,
- };
- main.executingRequestProgress = false;
- main.constants = constants;
-
- main.init = init;
- main.initModuleDetailHeight = initModuleDetailHeight;
- main.switchedTab = switchedTab;
- main.toggleLeftPanel = toggleLeftPanel;
- main.leftPanelShowModule = leftPanelShowModule;
- main.modulesTreeDisplayed = modulesTreeDisplayed;
-
- // scope global methods
- $scope.buildRootRequest = buildRootRequest;
- $scope.checkAddingListElement = checkAddingListElement;
- $scope.clearCM = clearCM;
- $scope.rootBroadcast = rootBroadcast;
- $scope.setApi = setApi;
- $scope.setDataStore = setDataStore;
- $scope.setGlobalParams = setGlobalParams;
- $scope.setJsonView = setJsonView;
- $scope.setLeftPanel = setLeftPanel;
- $scope.setModule = setModule;
- $scope.setNode = setNode;
- $scope.setRequestToShow = setRequestToShow;
- $scope.setRightPanelSection = setRightPanelSection;
- $scope.switchSection = switchSection;
- $scope.setParametersList = setParametersList;
- $scope.unsetPlugin = unsetPlugin;
- $scope.setSelectedPlugin = setSelectedPlugin;
-
-
- init();
-
-
- function setSelectedPlugin(selected) {
- $scope.selectedPlugin = selected;
- }
-
- /**
- * Start showing progressbar in request header view
- */
- function startExecutingRequestProgress() {
- main.executingRequestProgress = true;
- }
-
-
- /**
- * Stop showing progressbar in request header view
- */
- function stopExecutingRequestProgress() {
- main.executingRequestProgress = false;
- }
-
- /**
- * Set parametersList to $scope to be available for all controllers directly
- * @param parametersList
- */
- function setParametersList(parametersList) {
- $scope.parametersList = parametersList;
- }
-
-
- /**
- * Initialization
- */
- function init(){
- $scope.$on(constants.YANGMAN_EXECUTING_REQUEST_PROGRESS_START, startExecutingRequestProgress);
- $scope.$on(constants.YANGMAN_EXECUTING_REQUEST_PROGRESS_STOP, stopExecutingRequestProgress);
-
- YangmanDesignService.hideMainMenu();
- YangmanDesignService.setDraggableLeftPanel();
- YangmanDesignService.setJsonSplitter(forceCMsRefresh);
-
- EventDispatcherService.registerHandler(constants.EV_FILL_PATH, fillPathIdentifiersByKey);
- EventDispatcherService.registerHandler(constants.EV_LIST_CHANGED, fillPathIdentifiersByListData);
- }
-
- /**
- * Initialize module detail height, with timeout
- */
- function initModuleDetailHeight(){
- $timeout(function () {
- YangmanDesignService.setModuleDetailHeight();
- }, 1500);
- }
-
- /**
- * Method for fill key into request path, used by yangutils via event dispatching
- * @param inputs
- */
- function fillPathIdentifiersByKey(inputs) {
- var node = inputs[0],
- value = inputs[1] || '';
-
- if ($scope.selectedSubApi && node.parent && $scope.selectedSubApi.node.id === node.parent.id) {
- var identifiers =
- $scope.selectedSubApi.pathArray[$scope.selectedSubApi.pathArray.length - 1].identifiers;
-
- PathUtilsService.fillIdentifiers(identifiers, node.label, value);
- }
- }
-
-
- /**
- * Method for bulk filling path identifiers, used by yangutils via event dispatching
- * @param inputs
- */
- function fillPathIdentifiersByListData(inputs) {
- var node = inputs[0];
-
- if ($scope.selectedSubApi && node && $scope.selectedSubApi.node.id === node.id) {
- var identifiers =
- $scope.selectedSubApi.pathArray[$scope.selectedSubApi.pathArray.length - 1].identifiers,
- keys = node.refKey;
-
- keys.forEach(function (key) {
- PathUtilsService.fillIdentifiers(identifiers, key.label, key.value);
- });
- }
- }
-
-
- /**
- * Check if the main tab containing tree with modules is displayed
- * @returns {boolean}
- */
- function modulesTreeDisplayed() {
- return main.selectedMainTab === 0;
- }
-
- /**
- * Set switched tab index
- */
- function switchedTab(index){
- main.selectedMainTab = index;
- }
-
- /**
- * Switcher between modules list and module detail
- */
- function toggleLeftPanel(){
- main.leftPanelTab = (main.leftPanelTab + 1) % 2;
- }
-
- /**
- * Method for opening model detail tab
- */
- function leftPanelShowModule() {
- if ($scope.node) {
- main.leftPanelTab = 1;
- }
- }
-
- /**
- * General method for switching different section in application
- * @param param
- * @param section
- */
- function switchSection(param, section){
- $scope[param] = section;
- }
-
- /**
- * Genereal method for clearing code mirror - both sent and received data, needs to be in $scope to be available
- * everywhere
- */
- function clearCM(){
- $scope.rootBroadcast(constants.YANGMAN_SET_CODEMIRROR_DATA_RECEIVED, { data: JSON.stringify({}) });
- $scope.rootBroadcast(constants.YANGMAN_SET_CODEMIRROR_DATA_SENT, { data: JSON.stringify({}) });
- }
-
-
- /**
- * Switcher for module detail and module list
- * @param value
- */
- function setLeftPanel(value) {
- if ( !angular.isUndefined(value) ) {
- main.leftPanelTab = value;
- }
- }
-
- /**
- * Set global necessary params
- * @param apis
- * @param augmentations
- */
- function setGlobalParams(apis, augmentations){
- $scope.apis = apis;
- $scope.augmentations = augmentations;
- }
-
- /**
- * Set node to global param
- * @param node
- */
- function setNode(node){
- $scope.node = node;
-
- if ( $scope.node ) {
- $scope.node.clear();
- $scope.$broadcast(constants.YANGMAN_DISABLE_ADDING_LIST_ELEMENT);
- }
- }
-
- /**
- * Set module to global param
- * @param module
- */
- function setModule(module){
- $scope.selectedModule = module;
- }
-
- /**
- * Set dataStore to global param, open module detail in left panel
- * @param dataStore
- * @param expand
- * @param leftPanel
- */
- function setDataStore(dataStore, expand, leftPanel){
- $scope.selectedDatastore = dataStore;
-
- if ( expand ) {
- $scope.node = null;
- setLeftPanel(leftPanel);
- $scope.$broadcast(constants.YANGMAN_MODULE_D_INIT);
- } else {
- if ( $scope.node ) {
- $scope.node.clear();
- }
- }
- }
-
- /**
- * Build request json from root node
- */
- function buildRootRequest() {
- var obj = {};
- $scope.node.buildRequest(RequestBuilderService, obj, $scope.node.module);
- return obj;
- }
-
- /**
- * Set api and sub api to global param
- * @param api
- * @param subApi
- * @param setUrl
- * @param clearPathArray
- */
- function setApi(api, subApi, setUrl, clearPathArray){
- var oldSubApiPathArray = $scope.selectedSubApi ? angular.copy($scope.selectedSubApi.pathArray) : [];
- $scope.selectedApi = api;
- $scope.selectedSubApi = subApi;
-
- if ( clearPathArray ){
- PathUtilsService.clearPath($scope.selectedSubApi.pathArray);
-
- // todo: move to pathUtils service
- $scope.selectedSubApi.pathArray.forEach(function (subApiPathElem) {
- oldSubApiPathArray.forEach(function (oldSubApiPathElem){
- if (oldSubApiPathElem.module === subApiPathElem.module && oldSubApiPathElem.name === subApiPathElem.name) {
- oldSubApiPathElem.identifiers.forEach(function (oldPathElemIdentifier, oldPathElemIdentifierKey){
- subApiPathElem.identifiers.forEach(function (pathElemIdentifier) {
- if (oldPathElemIdentifier.label === pathElemIdentifier.label) {
- pathElemIdentifier.value = oldPathElemIdentifier.value;
- oldSubApiPathElem.identifiers.splice(oldPathElemIdentifierKey, 1);
-
- }
- });
- });
- }
- });
- });
-
-
-
- }
-
- $scope.$broadcast(constants.SET_SEL_OPERATIONS, subApi ? $scope.selectedSubApi.operations : [], setUrl);
- }
-
- /**
- * Call broadcast from root to child controllers
- * @param broadcast
- * @param params
- * @param cbk
- */
- function rootBroadcast(broadcast, params, cbk){
- $scope.$broadcast(broadcast, { params: params, cbk: cbk });
- }
-
- /**
- * Set request from history or collections to show data in code mirror
- * @param reqObj
- * @param {'sentData'|'receivedData'} dataType
- */
- function setRequestToShow(reqObj, dataType) {
- $scope.requestToShow = reqObj;
- $scope.requestDataToShow = dataType;
- }
-
- /**
- * Set rightPanelSection to display current section in right panel
- * @param section 'form', 'req-data'
- */
- function setRightPanelSection(section) {
- $scope.rightPanelSection = section;
- }
-
- /**
- * Which codemirror instances will be displayed
- * @param received
- * @param sent
- */
- function setJsonView(received, sent){
- main.jsonView.received = received;
- main.jsonView.sent = sent;
- forceCMsRefresh();
- YangmanDesignService.setJsonSplitter(forceCMsRefresh);
- }
-
- /**
- * Force refresh of all codemirror instances
- */
- function forceCMsRefresh(){
- var elems = angular.element(document).find('.CodeMirror');
- for (var i = 0; i < elems.length; i++){
- var cmInstance = elems[i].CodeMirror;
- cmInstance._handlers.changes[0](cmInstance);
- }
- }
-
- /**
- * Global method for unset plugin
- * @param selectedPlugin
- * @param controller
- */
- function unsetPlugin(controller){
- PluginsUnsetterService.unset($scope, controller);
- }
-
- /**
- * Checks if the element list should be disabled
- */
- function checkAddingListElement(node) {
- return $scope.node === node && $scope.node.type === 'list' &&
- $scope.node.refKey && $scope.node.refKey.length;
- }
- }
-
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- angular.module('app.yangman').directive('abnApiTree', [
- '$timeout', 'constants', function ($timeout, constants) {
- return {
- restrict: 'E',
- templateUrl: 'src/app/yangman/views/directives/abn-tree.tpl.html',
- replace: true,
- scope: {
- treeData: '=',
- onSelect: '&',
- initialSelection: '@',
- treeControl: '=',
- treeRows: '=',
- },
- link: function (scope, element, attrs) {
- var expandAllParents,
- expandLevel,
- forAllAncestors,
- forEachBranch,
- getParent,
- n,
- onTreeDataChange,
- selectBranch,
- selectedBranch,
- tree;
-
- if (attrs.iconExpand == null) {
- attrs.iconExpand = constants.ICON_EXPAND_ADD;
- }
- if (attrs.iconCollapse == null) {
- attrs.iconCollapse = constants.ICON_COLLAPSE_REMOVE;
- }
- if (attrs.iconLeaf == null) {
- attrs.iconLeaf = constants.ICON_KEYBOARD_ARROW_RIGHT;
- }
- if (attrs.expandLevel == null) {
- attrs.expandLevel = constants.EXPAND_LEVEL_THREE;
- }
- expandLevel = parseInt(attrs.expandLevel, 10);
- if (!scope.treeData) {
- return;
- }
- if (scope.treeData.length == null) {
- if (scope.treeData.label != null) {
- scope.treeData = [scope.treeData];
- } else {
- return;
- }
- }
- forEachBranch = function (f) {
- var do_f,
- root_branch,
- _i,
- _len,
- _ref,
- _results;
-
- do_f = function (branch, level) {
- var child,
- _i,
- _len,
- _ref,
- _results;
-
- f(branch, level);
- if (branch.children != null) {
- _ref = branch.children;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- child = _ref[_i];
- _results.push(do_f(child, level + 1));
- }
- return _results;
- }
- };
- _ref = scope.treeData;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- root_branch = _ref[_i];
- _results.push(do_f(root_branch, 1));
- }
- return _results;
- };
- selectedBranch = null;
- selectBranch = function (branch) {
- if (!branch) {
- if (selectedBranch != null) {
- selectedBranch.selected = false;
- }
- selectedBranch = null;
- return;
- }
-
- if (selectedBranch != null) {
- selectedBranch.selected = false;
- }
- branch.selected = true;
- selectedBranch = branch;
- expandAllParents(branch);
- if (branch.onSelect != null) {
- return $timeout(function () {
- return branch.onSelect(branch);
- });
- } else {
- if (scope.onSelect != null) {
- return $timeout(function () {
- return scope.onSelect({
- branch: branch,
- });
- });
- }
- }
-
- };
- scope.user_clicks_branch = function (branch) {
-
- scope.tree_rows.forEach(function (item){
- item.branch.selected = false;
- });
-
- if (branch === selectedBranch) {
- branch.selected = true;
- }
-
- return selectBranch(branch);
- };
-
- getParent = function (child) {
- var parent;
- parent = void 0;
- if (child.parent_uid) {
- forEachBranch(function (b) {
- if (b.uid === child.parent_uid) {
- return parent = b;
- }
- });
- }
- return parent;
- };
- forAllAncestors = function (child, fn) {
- var parent;
- parent = getParent(child);
- if (parent != null) {
- fn(parent);
- return forAllAncestors(parent, fn);
- }
- };
- expandAllParents = function (child) {
- return forAllAncestors(child, function (b) {
- return b.expanded = true;
- });
- };
-
- scope.expandedTree = false;
- scope.expand_collapse_all_items = function (){
-
- var expand = !scope.expandedTree ? true : false;
-
- scope.tree_rows.forEach(function (child){
- child.branch.expanded = expand;
- });
-
- scope.expandedTree = !scope.expandedTree;
- };
- scope.collapse_others = function (){
- var parentId = null,
- expandParent = function (parentId){
- if ( parentId ) {
- scope.tree_rows.forEach(function (child){
- if ( child.branch.uid === parentId ) {
- child.branch.expanded = true;
- parentId = child.branch.parent_uid;
-
- if ( parentId ) {
- expandParent(parentId);
- }
- }
- });
- }
- };
-
- scope.tree_rows.forEach(function (child){
- if ( child.branch.selected ) {
- parentId = child.branch.parent_uid;
- }
- child.branch.expanded = child.branch.selected ? child.branch.expanded : false;
- });
-
- if ( parentId ) {
- expandParent(parentId);
- }
-
- };
-
- scope.$watch(constants.TREE_ROWS, function () {
- scope.treeRows = scope.tree_rows;
- scope.$emit(constants.SET_SCOPE_TREE_ROWS, scope.treeRows);
- });
-
- scope.tree_rows = [];
- onTreeDataChange = function () {
- var add_branch_to_list,
- root_branch,
- _i,
- _len,
- _ref,
- _results;
-
- forEachBranch(function (b) {
- if (!b.uid) {
- return b.uid = '' + Math.random();
- }
- });
- forEachBranch(function (b) {
- var child,
- _i,
- _len,
- _ref,
- _results;
-
- if (angular.isArray(b.children)) {
- _ref = b.children;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- child = _ref[_i];
- _results.push(child.parent_uid = b.uid);
- }
- return _results;
- }
- });
- scope.tree_rows = [];
- forEachBranch(function (branch) {
- var child,
- f;
-
- if (branch.children) {
- if (branch.children.length > 0) {
- f = function (e) {
- if (typeof e === 'string') {
- return {
- label: e,
- children: [],
- };
- } else {
- return e;
- }
- };
- return branch.children = (function () {
- var _i,
- _len,
- _ref,
- _results;
-
- _ref = branch.children;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- child = _ref[_i];
- _results.push(f(child));
- }
- return _results;
- })();
- }
- } else {
- return branch.children = [];
- }
- });
- add_branch_to_list = function (level, branch, visible) {
- var child,
- child_visible,
- tree_icon,
- _i,
- _len,
- _ref,
- _results;
-
- if (branch.expanded == null) {
- branch.expanded = false;
- }
- if (!branch.children || branch.children.length === 0) {
- tree_icon = attrs.iconLeaf;
- } else {
- if (branch.expanded) {
- tree_icon = attrs.iconCollapse;
- } else {
- tree_icon = attrs.iconExpand;
- }
- }
- scope.tree_rows.push({
- index: scope.tree_rows.length, // in template tracking by branch.uid, integer needed
- level: level,
- branch: branch,
- label: branch.label,
- tree_icon: tree_icon,
- visible: visible,
- });
- if (branch.children != null) {
- _ref = branch.children;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- child = _ref[_i];
- child_visible = visible && branch.expanded;
- _results.push(add_branch_to_list(level + 1, child, child_visible));
- }
- return _results;
- }
- };
- _ref = scope.treeData;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- root_branch = _ref[_i];
- _results.push(add_branch_to_list(1, root_branch, true));
- }
- return _results;
- };
- scope.$watch('treeData', onTreeDataChange, true);
- if (attrs.initialSelection != null) {
- forEachBranch(function (b) {
- if (b.label === attrs.initialSelection) {
- return $timeout(function () {
- return selectBranch(b);
- });
- }
- });
- }
- n = scope.treeData.length;
- forEachBranch(function (b, level) {
- b.level = level;
- return b.expanded = b.level < expandLevel;
- });
- if (scope.treeControl != null) {
- if (angular.isObject(scope.treeControl)) {
- tree = scope.treeControl;
- tree.expand_all = function () {
- return forEachBranch(function (b) {
- return b.expanded = true;
- });
- };
- tree.collapse_all = function () {
- return forEachBranch(function (b) {
- return b.expanded = false;
- });
- };
- tree.get_first_branch = function () {
- n = scope.treeData.length;
- if (n > 0) {
- return scope.treeData[0];
- }
- };
- tree.select_first_branch = function () {
- var b;
- b = tree.get_first_branch();
- return tree.selectBranch(b);
- };
- tree.get_selected_branch = function () {
- return selectedBranch;
- };
- tree.get_parent_branch = function (b) {
- return getParent(b);
- };
- tree.select_branch = function (b) {
- selectBranch(b);
- return b;
- };
- tree.get_children = function (b) {
- return b.children;
- };
- tree.select_parent_branch = function (b) {
- var p;
- if (b == null) {
- b = tree.get_selected_branch();
- }
- if (b != null) {
- p = tree.get_parent_branch(b);
- if (p != null) {
- tree.select_branch(p);
- return p;
- }
- }
- };
- tree.add_branch = function (parent, new_branch) {
- if (parent != null) {
- parent.children.push(new_branch);
- parent.expanded = true;
- } else {
- scope.treeData.push(new_branch);
- }
- return new_branch;
- };
- tree.add_root_branch = function (new_branch) {
- tree.add_branch(null, new_branch);
- return new_branch;
- };
- tree.expand_branch = function (b) {
- if (b == null) {
- b = tree.get_selected_branch();
- }
- if (b != null) {
- b.expanded = true;
- return b;
- }
- };
- tree.collapse_branch = function (b) {
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- b.expanded = false;
- return b;
- }
- };
- tree.get_siblings = function (b) {
- var p,
- siblings;
-
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- p = tree.get_parent_branch(b);
- if (p) {
- siblings = p.children;
- } else {
- siblings = scope.treeData;
- }
- return siblings;
- }
- };
- tree.get_next_sibling = function (b) {
- var i,
- siblings;
-
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- siblings = tree.get_siblings(b);
- n = siblings.length;
- i = siblings.indexOf(b);
- if (i < n) {
- return siblings[i + 1];
- }
- }
- };
- tree.get_prev_sibling = function (b) {
- var i,
- siblings;
-
- if (b == null) {
- b = selectedBranch;
- }
- siblings = tree.get_siblings(b);
- n = siblings.length;
- i = siblings.indexOf(b);
- if (i > 0) {
- return siblings[i - 1];
- }
- };
- tree.select_next_sibling = function (b) {
- var next;
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- next = tree.get_next_sibling(b);
- if (next != null) {
- return tree.select_branch(next);
- }
- }
- };
- tree.select_prev_sibling = function (b) {
- var prev;
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- prev = tree.get_prev_sibling(b);
- if (prev != null) {
- return tree.select_branch(prev);
- }
- }
- };
- tree.get_first_child = function (b) {
- var _ref;
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- if (((_ref = b.children) != null ? _ref.length : void 0) > 0) {
- return b.children[0];
- }
- }
- };
- tree.get_closest_ancestor_next_sibling = function (b) {
- var next,
- parent;
-
- next = tree.get_next_sibling(b);
- if (next != null) {
- return next;
- } else {
- parent = tree.get_parent_branch(b);
- return tree.get_closest_ancestor_next_sibling(parent);
- }
- };
- tree.get_next_branch = function (b) {
- var next;
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- next = tree.get_first_child(b);
- if (next != null) {
- return next;
- } else {
- next = tree.get_closest_ancestor_next_sibling(b);
- return next;
- }
- }
- };
- tree.select_next_branch = function (b) {
- var next;
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- next = tree.get_next_branch(b);
- if (next != null) {
- tree.select_branch(next);
- return next;
- }
- }
- };
- tree.last_descendant = function (b) {
- var last_child;
- if (b == null) {
- // debugger;
- }
- n = b.children.length;
- if (n === 0) {
- return b;
- } else {
- last_child = b.children[n - 1];
- return tree.last_descendant(last_child);
- }
- };
- tree.get_prev_branch = function (b) {
- var parent,
- prev_sibling;
-
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- prev_sibling = tree.get_prev_sibling(b);
- if (prev_sibling != null) {
- return tree.last_descendant(prev_sibling);
- } else {
- parent = tree.get_parent_branch(b);
- return parent;
- }
- }
- };
- return tree.select_prev_branch = function (b) {
- var prev;
- if (b == null) {
- b = selectedBranch;
- }
- if (b != null) {
- prev = tree.get_prev_branch(b);
- if (prev != null) {
- tree.select_branch(prev);
- return prev;
- }
- }
- };
- }
- }
- },
- };
- },
- ]);
-
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').directive('heightWatcher', heightWatcherDirective);
-
- function heightWatcherDirective() {
- return {
- restrict: 'A',
- link: function (scope, element, attrs) {
- scope.$watch(function () {
- return element.css(attrs['watchAttribute']);
- }, heightChangedCallBack,
- true);
-
- scope.heightTotal = null;
-
- function heightChangedCallBack(newHeight, oldHeight) {
- var heightReceivedData, heightSentData;
-
- if (newHeight !== oldHeight) {
- // set total available height
- scope.heightTotal = angular.element('#jsonSection')[0].offsetHeight;
-
- // set full height of ReceiveData (if there will be no sent data)
- angular.element('#ReceiveData').css('height', scope.heightTotal + 'px');
-
- heightSentData = angular.element('#sentData')[0].offsetHeight;
- heightReceivedData = angular.element('#ReceiveData')[0].offsetHeight;
-
- // set ReceiveData height to fill up bottom
- if ((heightSentData + heightReceivedData) < scope.heightTotal) {
- angular.element('#ReceiveData').css('height', scope.heightTotal - heightSentData + 'px');
- }
- }
- }
- }
- };
- }
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').directive('onReadFile', readFileDirective);
-
- readFileDirective.$inject = ['$parse'];
-
- function readFileDirective($parse) {
- return {
- restrict: 'A',
- scope: false,
- link: function (scope, element, attrs) {
- var fn = $parse(attrs.onReadFile);
-
- element.on('change', function (onChangeEvent) {
- var reader = new FileReader();
-
- reader.onload = function (onLoadEvent) {
- scope.$apply(function () {
- fn(scope, { $fileContent: onLoadEvent.target.result });
- });
- };
-
- reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]);
- });
- },
- };
- }
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').directive('uiCodemirror', uiCodemirrorDirective);
-
- /**
- * @ngInject
- */
- function uiCodemirrorDirective($timeout, ymUiCodemirrorConfig) {
-
- return {
- restrict: 'EA',
- require: '?ngModel',
- compile: function compile() {
-
- // Require CodeMirror
- if (angular.isUndefined(window.CodeMirror)) {
- throw new Error('ui-codemirror needs CodeMirror to work... (o rly?)');
- }
-
- return postLink;
- }
- };
-
- function postLink(scope, iElement, iAttrs, ngModel) {
- var codemirrorOptions = angular.extend(
- {value: iElement.text()},
- ymUiCodemirrorConfig.codemirror || {},
- scope.$eval(iAttrs.uiCodemirror),
- scope.$eval(iAttrs.uiCodemirrorOpts)
- );
-
- var codemirror = newCodemirrorEditor(iElement, codemirrorOptions);
-
- configOptionsWatcher(
- codemirror,
- iAttrs.uiCodemirror || iAttrs.uiCodemirrorOpts,
- scope
- );
-
- configNgModelLink(codemirror, ngModel, scope);
-
- configUiRefreshAttribute(codemirror, iAttrs.uiRefresh, scope);
-
- // Allow access to the CodeMirror instance through a broadcasted event
- // eg: $broadcast('CodeMirror', function(cm){...});
- scope.$on('CodeMirror', function (event, callback) {
- if (angular.isFunction(callback)) {
- callback(codemirror);
- } else {
- throw new Error('the CodeMirror event requires a callback function');
- }
- });
-
- // onLoad callback
- if (angular.isFunction(codemirrorOptions.onLoad)) {
- codemirrorOptions.onLoad(codemirror);
- }
- }
-
- function newCodemirrorEditor(iElement, codemirrorOptions) {
- var codemirrot;
-
- if (iElement[0].tagName === 'TEXTAREA') {
- // Might bug but still ...
- codemirrot = window.CodeMirror.fromTextArea(iElement[0], codemirrorOptions);
- } else {
- iElement.html('');
- codemirrot = new window.CodeMirror(function (cm_el) {
- iElement.append(cm_el);
- }, codemirrorOptions);
- }
-
- return codemirrot;
- }
-
- function configOptionsWatcher(codemirrot, uiCodemirrorAttr, scope) {
- if (!uiCodemirrorAttr) {
- return;
- }
-
- var codemirrorDefaultsKeys = Object.keys(window.CodeMirror.defaults);
- scope.$watch(uiCodemirrorAttr, updateOptions, true);
- function updateOptions(newValues, oldValue) {
- if (!angular.isObject(newValues)) {
- return;
- }
- codemirrorDefaultsKeys.forEach(function (key) {
- if (newValues.hasOwnProperty(key)) {
-
- if (oldValue && newValues[key] === oldValue[key]) {
- return;
- }
-
- codemirrot.setOption(key, newValues[key]);
- }
- });
- }
- }
-
- function configNgModelLink(codemirror, ngModel, scope) {
- if (!ngModel) {
- return;
- }
- // CodeMirror expects a string, so make sure it gets one.
- // This does not change the model.
- ngModel.$formatters.push(function (value) {
- if (angular.isUndefined(value) || value === null) {
- return '';
- } else if (angular.isObject(value) || angular.isArray(value)) {
- throw new Error('ui-codemirror cannot use an object or an array as a model');
- }
- return value;
- });
-
-
- // Override the ngModelController $render method, which is what gets called when the model is updated.
- // This takes care of the synchronizing the codeMirror element with the underlying model, in the case that it is changed by something else.
- ngModel.$render = function () {
- //Code mirror expects a string so make sure it gets one
- //Although the formatter have already done this, it can be possible that another formatter returns undefined (for example the required directive)
- var safeViewValue = ngModel.$viewValue || '';
- codemirror.setValue(safeViewValue);
- };
-
-
- // Keep the ngModel in sync with changes from CodeMirror
- codemirror.on('change', function (instance) {
- var newValue = instance.getValue();
- if (newValue !== ngModel.$viewValue) {
- scope.$evalAsync(function () {
- ngModel.$setViewValue(newValue);
- });
- }
- });
-
-
- // Fix for using codemirror in tabs (or modal window)
- codemirror.on('changes', function (instance, changes) {
- $timeout(function () {
- instance.refresh();
- });
- });
- }
-
- function configUiRefreshAttribute(codeMirror, uiRefreshAttr, scope) {
- if (!uiRefreshAttr) {
- return;
- }
-
- scope.$watch(uiRefreshAttr, function (newVal, oldVal) {
- // Skip the initial watch firing
- if (newVal !== oldVal) {
- $timeout(function () {
- codeMirror.refresh();
- });
- }
- });
- }
-
- }
-
- uiCodemirrorDirective.$inject = ['$timeout', 'ymUiCodemirrorConfig'];
-
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- angular.module('app.yangman').directive('yangFormMenu', menuDirective);
-
- menuDirective.$inject = [];
-
- function menuDirective() {
- return {
- restrict: 'E',
- templateUrl: 'src/app/yangman/views/directives/yang-form-menu.tpl.html',
- scope: {
- node: '=',
- augmentations: '=',
- allowItems: '=',
- isActionMenu: '&',
- addListItemFunc: '&',
- addListItem: '=',
- yangForm: '=',
- yangList: '=',
- },
- controller: function ($scope) {
- var lastSection = null;
-
- $scope.infoBox = false;
- $scope.infoBoxSection = '';
- $scope.selectedListItem = 0;
-
- // methods
- $scope.switchSection = switchSection;
- $scope.hideInfoBox = hideInfoBox;
-
- /**
- * Switcher for info box section
- * @param section
- */
- function switchSection(section){
- if ( $scope.infoBox ) {
- if ( section === lastSection ) {
- $scope.infoBox = false;
- } else {
- $scope.infoBoxSection = section;
- }
- } else {
- $scope.infoBox = true;
- $scope.infoBoxSection = section;
- }
- lastSection = section;
- }
-
- /**
- * Hide menu info box
- */
- function hideInfoBox(){
- $scope.infoBox = false;
- angular.element('#infoBox').addClass('ng-hide');
- }
-
- $scope.$on('hideInfoBox', function () {
- hideInfoBox();
- });
- },
- link: function (scope, element, attrs) {
- scope.isActive = false;
-
- // methods
- scope.closeMenu = closeMenu;
- scope.openMenu = openMenu;
-
- /**
- * Close Yang menu
- */
- function closeMenu(){
- scope.isActive = false;
- scope.hideInfoBox();
- }
-
- /**
- * Open Yang menu
- */
- function openMenu(){
- scope.isActive = true;
- }
-
- },
- };
- }
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- angular.module('app.yangman').directive('ymInfoBox', infoBoxDirective);
-
- infoBoxDirective.$inject = [];
-
- function infoBoxDirective() {
- return {
- restrict: 'A',
- templateUrl: 'src/app/yangman/views/directives/ym-info-box.tpl.html',
- transclude: true,
- scope: {
- node: '=',
- },
- link: function (scope, element) {
- element.addClass('info-box-container');
- },
- controller: function ($scope) {
- var description = $scope.node.getChildren('description', null, null, 'label')[0];
-
- $scope.description = description ? description : '';
- $scope.infoBox = false;
-
- // methods
- $scope.dividerCheck = dividerCheck;
- $scope.executeInfoBox = executeInfoBox;
- $scope.showBoxCheck = showBoxCheck;
-
- /**
- * Set info box value - true, false
- * @param value
- */
- function executeInfoBox(value){
- $scope.infoBox = value;
- }
-
- /**
- * Check if box info could be shown
- * @returns {boolean|*}
- */
- function showBoxCheck(){
- return $scope.infoBox && ($scope.description.length || $scope.node.augmentationId);
- }
-
- /**
- * Check for showing divider between different shown info
- * @param key
- * @returns {*}
- */
- function dividerCheck(key){
- return key ? $scope.description.length || $scope.node.augmentationId : $scope.description.length;
- }
- },
- };
- }
-});
+++ /dev/null
-require.config({
-});
-
-define(['app/yangman/yangman.module']);
+++ /dev/null
-define([], function (){
- 'use strict';
-
-
- /**
- * Base list object for extending history and collection object
- * @constructor
- * @param ParsingJsonService
- */
- function BaseListModel($filter, ParsingJsonService) {
-
- var self = this;
-
- /**
- * General list of all objects to simply treat them
- * @type {Array}
- */
- self.list = [];
- /**
- * Simple list of selected items from self.list
- * @type {Array}
- */
- self.selectedItems = [];
-
- self.addFromJSON = addFromJSON;
- self.addItemToList = addItemToList;
- self.createItem = createItem;
- self.loadListFromStorage = loadListFromStorage;
- self.saveToStorage = saveToStorage;
- self.setName = setName;
- self.selectAllFilteredItems = selectAllFilteredItems;
- self.deselectAllFilteredItems = deselectAllFilteredItems;
- self.getSelectedItems = getSelectedItems;
- self.deselectAllItems = deselectAllItems;
-
- function deselectAllItems() {
- self.list.forEach(function (item) {
- item.selected = false;
- });
- self.selectedItems = [];
- }
-
- /**
- * @returns {Array}
- */
- function getSelectedItems(filterFunc) {
- if (filterFunc) {
- return $filter('filter')(self.selectedItems, filterFunc);
- }
- else {
- return self.selectedItems;
- }
- }
-
- /**
- * Mark all items matching filter as selected
- * Toggle only items matching filter, other items let be as they are
- * @param filterFunc function returning boolean
- */
- function selectAllFilteredItems(filterFunc) {
- $filter('filter')(self.list, filterFunc).forEach(function (item) {
- item.selected = true;
- if (self.selectedItems.indexOf(item) === -1){
- self.selectedItems.push(item);
- }
- });
- }
-
- /**
- * Mark all requests matching filter as deselected
- * Toggle only requests matching filter, other requests let be as they are
- * @param filterFunc
- */
- function deselectAllFilteredItems(filterFunc) {
- $filter('filter')(self.list, filterFunc).forEach(function (item) {
- item.selected = false;
- self.selectedItems.splice(self.selectedItems.indexOf(item), 1);
- });
- }
-
- function setName(name) {
- self.name = name;
- }
-
- function createItem(elem) {
- return elem;
- }
-
- function addItemToList(){}
-
- /**
- * Loading from localStorage
- */
- function loadListFromStorage(){
- var storageList = localStorage.getItem(self.name);
-
- if (storageList){
- self.clear();
- ParsingJsonService.parseJson(storageList).map(function (elem) {
- return self.createItem(elem);
- }).forEach(function (elem) {
- self.addItemToList(elem);
- });
- }
- }
-
- /**
- * Saving to local storage
- */
- function saveToStorage(){
- try {
- localStorage.setItem(self.name, JSON.stringify(self.toJSON()));
- } catch (e) {
- }
- }
-
- /**
- * Add each request from json
- * @param json
- */
- function addFromJSON(json) {
- json.forEach(function (elem) {
- var item = self.createItem(elem);
- self.addItemToList(item);
- });
- }
- }
-
- return BaseListModel;
-});
+++ /dev/null
-define([], function (){
- 'use strict';
-
- /**
- * Collection object used in CollectionListModel
- * @param name
- * @constructor
- */
- function CollectionModel(name){
- var self = this;
- self.name = name;
- self.expanded = false;
- self.data = [];
-
- self.clone = clone;
- self.toggleExpanded = toggleExpanded;
-
- function clone(newName){
- var result = new CollectionModel(newName);
- self.data.forEach(function (item){
- var newItem = item.clone();
- newItem.collection = newName;
- result.data.push(newItem);
- });
- return result;
- }
-
- function toggleExpanded(){
- self.expanded = !self.expanded;
- }
-
- }
-
- return CollectionModel;
-});
+++ /dev/null
-define(
- ['app/yangman/models/baselist.model', 'app/yangman/models/collection.model'],
- function (BaseListModel, CollectionModel){
-
- 'use strict';
-
- /**
- * Base collection list object
- * @constructor
- * @param ParsingJsonService
- * @param RequestsService
- */
- function CollectionListModel($filter, ParsingJsonService, RequestsService){
-
- BaseListModel.call(this, $filter, ParsingJsonService);
-
- /* jshint validthis: true */
- var self = this;
-
- /**
- * Array of collections in which are requests from self.list groupped
- * @type {Array}
- */
- self.collections = [];
-
- self.addItemToList = addItemToList;
- self.clear = clear;
- self.collectionExists = collectionExists;
- self.createItem = createItem;
- self.deleteCollection = deleteCollection;
- self.deleteRequestItem = deleteRequestItem;
- self.duplicateCollection = duplicateCollection;
- self.getCollection = getCollection;
- self.getCollectionNames = getCollectionNames;
- self.loadListFromFile = loadListFromFile;
- self.renameCollection = renameCollection;
- self.toggleReqSelection = toggleReqSelection;
- self.toJSON = toJSON;
- self.getCollectionInJSON = getCollectionInJSON;
- self.getExpandedCollectionNames = getExpandedCollectionNames;
- self.expandCollectionByNames = expandCollectionByNames;
- self.getCollectionInRawJSON = getCollectionInRawJSON;
-
- /**
- *
- * @param collectionName
- */
- function getCollectionInJSON(collectionName){
- return JSON.stringify(self.toJSON(collectionName));
- }
-
- function getCollectionInRawJSON(collectionName){
- return self.toJSON(collectionName);
- }
-
-
- /**
- * @param collObj
- */
- function deleteCollection(collObj){
-
- var colIndex = self.collections.indexOf(collObj);
- // first check if collObj is the same as got by index to prevent delete wrong collection because of the
- // asynchron processes (when user is pressing enter many times, this method could be called more times
- // and in some other proceeding might be this collection already deleted)
- if (self.collections[colIndex] && self.collections[colIndex].name === collObj.name){
- self.collections.splice(colIndex, 1);
- }
- }
-
- /**
- *
- * @param srcColName
- * @param destColName
- */
- function duplicateCollection(srcColName, destColName){
- var newCol = self.getCollection(srcColName).clone(destColName);
- self.collections.push(newCol);
- }
-
- /**
- *
- * @param collObj
- * @param name
- */
- function setCollObjNewName(collObj, newName){
- collObj.name = newName;
- collObj.data.forEach(function (item){
- item.collection = newName;
- });
- }
-
- /**
- * Mark reqObj as selected
- * @param reqObj HistoryRequest object to be selected
- */
- function toggleReqSelection(onlyOneSelected, reqObj){
- if (onlyOneSelected){
- self.selectedItems.forEach(function (req){
- req.selected = false;
- });
- self.selectedItems = [];
- }
-
- if (reqObj.selected && !onlyOneSelected){
- self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
- }
-
- reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
- if (reqObj.selected){
- self.selectedItems.push(reqObj);
- }
- }
-
- /**
- *
- * @param oldName
- * @param newName
- */
- function renameCollection(oldName, newName){
- var col = self.getCollection(oldName);
- setCollObjNewName(col, newName);
- }
-
- /**
- *
- * @param elem
- * @returns {HistoryRequest|*}
- */
- function createItem(elem) {
- return RequestsService.createHistoryRequestFromElement(elem);
- }
-
- /**
- *
- * @param {string} colName
- * @returns {boolean}
- */
- function collectionExists(colName) {
- return self.collections.some(function (col){
- return col.name === colName;
- });
- }
-
- /**
- *
- * @returns {Array}
- */
- function getCollectionNames(){
- return self.collections.map(function (elem){
- return elem.name;
- });
- }
-
- /**
- *
- * @param colName
- * @returns {T}
- */
- function getCollection(colName){
- return self.collections.filter(function (col){
- return col.name === colName;
- })[0];
- }
-
-
- /**
- *
- * @param reqObj
- */
- function addItemToList(reqObj){
- self.list.push(reqObj);
- if (reqObj.collection) {
- var col = null;
- if (self.collectionExists(reqObj.collection)) {
- col = self.getCollection(reqObj.collection);
- }
- else {
- col = new CollectionModel(reqObj.collection);
- self.collections.push(col);
- }
- col.data.push(reqObj);
- }
- }
-
-
- /**
- *
- * @param elem
- */
- function deleteRequestItem(elem){
- var col = self.getCollection(elem.collection);
- col.data.splice(col.data.indexOf(elem), 1);
- if (col.data.length === 0){
- self.collections.splice(self.collections.indexOf(col), 1);
- }
-
- }
-
- function clear() {
- self.collections = [];
- self.selectedItems = [];
- self.list = [];
- }
-
- /**
- *
- * @param collectionName
- * @returns {*}
- */
- function toJSON(collectionName) {
- if (collectionName){
- return self.getCollection(collectionName).data.map(function (elem){
- return elem.toJSON();
- });
- }
- else {
- var list = [];
- self.collections.forEach(function (collection){
- collection.data.forEach(function (elem){
- list.push(elem.toJSON());
- });
- });
- return list;
- }
- }
-
- /**
- *
- * @param data
- */
- function loadListFromFile(data){
- if (data){
- ParsingJsonService.parseJson(data).map(function (elem) {
- return RequestsService.createHistoryRequest(elem.sentData, elem.receivedData, elem.path,
- elem.method, elem.status, elem.name, elem.collection);
- }).forEach(function (elem) {
- self.addItemToList(elem);
- });
- }
- }
-
- /**
- * Get expanded collection names
- */
- function getExpandedCollectionNames(){
- return self.collections.filter(function(collection){
- return collection.expanded;
- }).map(function(collection){
- return collection.name;
- });
- }
-
- /**
- * Expand collections by expandCollectionNames
- */
- function expandCollectionByNames(expandCollectionNames){
- self.collections.forEach(function(collection){
- if (findName(collection.name)) {
- collection.expanded = true;
- }
- });
-
- function findName(name) {
- return expandCollectionNames.some(function(collectionName){
- return name === collectionName;
- });
- }
- }
-
- }
- CollectionListModel.prototype = Object.create(BaseListModel.prototype);
-
- return CollectionListModel;
- }
-);
+++ /dev/null
-define([], function (){
- 'use strict';
-
- /**
- * Base history request object
- * @constructor
- * @param PathUtilsService
- * @param YangUtilsService
- * @param ParsingJsonService
- */
- function HistoryRequestModel(PathUtilsService, YangUtilsService, ParsingJsonService){
- var self = this;
-
- // properties
- self.collection = '';
- self.method = '';
- self.name = '';
- self.path = '';
- self.receivedData = null;
- self.selected = false;
- self.sentData = null;
- self.status = '';
- self.timestamp = '';
- self.responseStatus = '';
- self.responseStatusText = '';
- self.responseTime = '';
-
- // functions
- self.clone = clone;
- self.toJSON = toJSON;
- self.getLastPathDataElemName = getLastPathDataElemName;
- self.setDataForView = setDataForView;
- self.setData = setData;
- self.setExecutionData = setExecutionData;
-
- /**
- * Grouped setter
- *
- * @param sentData
- * @param receivedData
- * @param status
- * @param path
- * @param operation
- * @param name
- * @param collection
- * @param timestamp
- * @param responseStatus
- * @param responseTime
- * @param responseStatusText
- */
- function setData(sentData, receivedData, status, path, operation, name, collection, timestamp, responseStatus, responseStatusText, responseTime) {
-
- self.sentData = sentData === null || sentData === undefined || $.isEmptyObject(sentData) ? null : sentData;
- self.name = name;
- self.path = path;
- self.method = operation;
- self.status = status;
- self.receivedData = receivedData === null || receivedData === undefined || $.isEmptyObject(receivedData) ?
- null : receivedData;
- self.collection = collection;
- self.timestamp = timestamp;
- self.responseStatus = responseStatus;
- self.responseStatusText = responseStatusText;
- self.responseTime = responseTime;
- }
-
- /**
- * Set data which might be available after executing request
- * @param sentData
- * @param receivedData
- * @param status - http status from response header
- * @param responseStatus
- * @param responseTime
- * @param responseStatusText
- */
- function setExecutionData(sentData, receivedData, status, responseStatus, responseStatusText, responseTime) {
- self.sentData = sentData;
- self.receivedData = receivedData;
- self.status = status ? (status > 199 && status < 205 ? 'success' : 'erorr') : '';
- self.responseStatus = responseStatus;
- self.responseStatusText = responseStatusText;
- self.responseTime = responseTime;
- }
-
-
- /**
- *
- * @returns {{sentData: (null|*), receivedData: (null|*), path: (string|*), collection: (string|*),
- * method: (string|*), status: (string|*), name: (string|*), timestamp: (string|*), responseStatus: (string|*),
- * responseTime: (string|*)}}
- */
- function toJSON() {
- var obj = {
- sentData: self.sentData,
- receivedData: self.receivedData,
- path: self.path,
- collection: self.collection,
- method: self.method,
- status: self.status,
- name: self.name,
- timestamp: self.timestamp,
- responseStatus: self.responseStatus,
- responseStatusText: self.responseStatusText,
- responseTime: self.responseTime,
- };
-
- return obj;
- }
-
-
-
- /**
- *
- * @returns {*}
- */
- function getLastPathDataElemName() {
- var pathArray = self.path.split(':');
- return pathArray[pathArray.length - 1];
- }
-
- /**
- *
- * @param data
- * @returns {string}
- */
- function setDataForView(data){
- var result = '';
-
- if (data instanceof Object) {
- result = JSON.stringify(
- YangUtilsService.stripAngularGarbage(
- angular.copy(data),
- self.getLastPathDataElemName()
- ),
- null,
- 4
- );
- }
- else {
- result = data;
- }
-
- return result;
-
- }
-
-
- /**
- *
- * @returns {HistoryRequest}
- */
- function clone() {
- /**
- *
- * @type {HistoryRequestModel}
- */
- var result = new HistoryRequestModel(PathUtilsService, YangUtilsService, ParsingJsonService);
- result.setData(self.sentData, self.receivedData, self.status, self.path, self.method, self.name,
- self.collection, self.timestamp, self.responseStatus, self.responseStatusText, self.responseTime);
- return result;
- }
-
- }
-
- return HistoryRequestModel;
-});
+++ /dev/null
-define([], function (){
- 'use strict';
-
-
- /**
- * List of settings for history requests
- * @constructor
- * @param ParsingJsonService
- */
- function HistorySettingsModel(ParsingJsonService, HistorySettingsService) {
-
- var self = this;
-
- self.name = 'yangman_historySettings';
- self.data = {
- requestsCount: 10000,
- saveReceived: true,
- fillWithReceived: true,
- saveResponseData: true,
- };
-
- self.loadFromStorage = loadFromStorage;
- self.saveToStorage = saveToStorage;
- self.clone = clone;
- self.setData = setData;
-
- /**
- *
- */
- function setData(data) {
- angular.forEach(self.data, function (val, key){
- self.data[key] = data[key];
- });
- }
-
- /**
- * Create copy of this object
- */
- function clone() {
- var result = HistorySettingsService.createHistorySettings();
- result.setData(self.data);
- console.debug('clone created', result);
-
- return result;
- }
-
-
- /**
- * Loading from localStorage
- */
- function loadFromStorage(){
- var settings = localStorage.getItem(self.name);
-
- if (settings){
- angular.forEach(ParsingJsonService.parseJson(settings), function (value, key){
- self.data[key] = value;
- });
- }
-
- return self;
- }
-
- /**
- * Saving to local storage
- */
- function saveToStorage(){
- try {
- localStorage.setItem(self.name, JSON.stringify(self.data));
- } catch (e) {
- }
- }
-
- }
-
- return HistorySettingsModel;
-});
+++ /dev/null
-define(['app/yangman/models/baselist.model'], function (BaseListModel){
- 'use strict';
-
- /**
- * Base history list object
-
- * @constructor
- * @param ParsingJsonService
- * @param RequestsService
- */
- function HistoryListModel($filter, ParsingJsonService, RequestsService){
-
- BaseListModel.call(this, $filter, ParsingJsonService);
-
- /* jshint validthis: true */
- var self = this;
-
-
- /**
- * Array of groups in which are requests from self.list groupped
- * @type {Array}
- */
- self.dateGroups = [];
- self.settings = null;
-
- self.addItemToList = addItemToList;
- self.clear = clear;
- self.createItem = createItem;
- self.deleteRequestItem = deleteRequestItem;
- self.deselectReqs = deselectReqs;
- self.selectReqs = selectReqs;
- self.toggleReqSelection = toggleReqSelection;
- self.getNewestRequest = getNewestRequest;
- self.setSettings = setSettings;
-
- /**
- *
- */
- function setSettings(settingsObj) {
- self.settings = settingsObj;
- }
-
-
- /**
- * Get request with max timestamp (was executed as the last)
- */
- function getNewestRequest() {
- return $filter('orderBy')(self.list, '-timestamp')[0];
- }
-
- /**
- * Mark reqObj as selected
- * @param {boolean} onlyOneSelected boolean if only this object should be marked as selected
- * @param reqObj HistoryRequest object to be selected
- */
- function toggleReqSelection(onlyOneSelected, reqObj){
- if (onlyOneSelected){
- self.selectedItems.forEach(function (req){
- req.selected = false;
- });
- self.selectedItems = [];
- }
-
- if (reqObj.selected && !onlyOneSelected){
- self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
- }
-
- reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
- if (reqObj.selected){
- self.selectedItems.push(reqObj);
- }
-
- }
-
- /**
- * Round timestamp to day
- * @param timeStamp
- * @returns {number|*}
- */
- function roundTimestampToDate(timeStamp){
- timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
- timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
- return timeStamp;
- }
-
- /**
- * Add element to date group
- * @param elem
- */
- function addElemToListDateGroup(elem){
- if (elem.timestamp){
- var groupName = roundTimestampToDate(elem.timestamp),
- dateGroupArr = self.dateGroups.filter(function (group){
- return group.name === groupName;
- }),
- dateGroup = null;
-
- if (dateGroupArr.length){
- dateGroup = dateGroupArr[0];
- }
- else {
- dateGroup = {
- name: groupName,
- longName: new Date(groupName).toDateString(),
- requests: [],
- };
- self.dateGroups.push(dateGroup);
- }
- dateGroup.requests.push(elem);
- }
- }
-
- function shiftElemFromListDateGroup(elem){
- if (elem.timestamp){
- var groupName = roundTimestampToDate(elem.timestamp),
- dateGroupArr = self.dateGroups.filter(function (group){
- return group.name === groupName;
- }),
- dateGroup = dateGroupArr[0];
-
- dateGroup.requests.shift();
- }
- }
-
-
- /**
- *
- * @param elem
- * @returns {HistoryRequest|*}
- */
- function createItem(elem) {
- return RequestsService.createHistoryRequestFromElement(elem);
- }
-
- /**
- *
- * @param reqObj
- */
- function addItemToList(reqObj){
- self.list.push(reqObj);
- addElemToListDateGroup(reqObj);
-
- if (self.list.length > self.settings.data.requestsCount) {
- shiftElemFromListDateGroup(self.list.shift());
- }
- }
-
- /**
- *
- * @param elem
- */
- function deleteRequestItem(elem){
- self.list.splice(self.list.indexOf(elem), 1);
- }
-
- function clear() {
- self.list = [];
- self.dateGroups = [];
- self.selectedItems = [];
- }
-
- /**
- *
- * @returns {Array}
- */
- self.toJSON = function () {
- return self.list.map(function (elem) {
- return elem.toJSON();
- });
- };
-
- /**
- * Mark all history requests as deselected
- */
- function deselectReqs(){
- self.selectedItems.forEach(function (request){
- request.selected = false;
- });
- self.selectedItems = [];
- }
-
- /**
- * Mark all history requests as selected
- */
- function selectReqs(requestsList){
- requestsList.forEach(function (reqObj){
- reqObj.selected = true;
- self.selectedItems.push(reqObj);
- });
- }
- }
-
- HistoryListModel.prototype = Object.create(BaseListModel.prototype);
-
- return HistoryListModel;
-
-});
+++ /dev/null
-define([], function (){
- 'use strict';
-
- /**
- * Base parameter object
- * @constructor
- */
- function ParameterModel(){
- var self = this;
-
- // properties
- self.name = '';
- self.value = '';
-
- // attributes with underscore prefix are used for filtering in params admin
- self._name = '';
- self._value = '';
-
- // functions
- self.toJSON = toJSON;
- self.setData = setData;
- self.clone = clone;
- self.applyValsForFilters = applyValsForFilters;
-
- /**
- * Copy model name and value to _name and _value properties, which are used when sorting and filtering list
- * of parameters
- */
- function applyValsForFilters() {
- self._name = self.name;
- self._value = self.value;
- }
-
- /**
- * Grouped setter
- *
- * @param name
- * @param value
- */
- function setData(name, value) {
- self.name = name;
- self.value = value;
- self._name = name;
- self._value = value;
- }
-
- /**
- *
- * @returns {{name: (string|*), value: (string|*)}}
- */
- function toJSON() {
- var obj = {
- name: self.name,
- value: self.value,
- };
-
- return obj;
- }
-
- /**
- *
- * @returns {ParameterModel}
- */
- function clone() {
- var result = new ParameterModel();
- result.setData(self.name, self.val);
- return result;
- }
-
-
- }
-
- return ParameterModel;
-});
+++ /dev/null
-define(['app/yangman/models/baselist.model'], function (BaseListModel){
- 'use strict';
-
- /**
- * Base parameters list object
- * @constructor
- * @param ParsingJsonService
- * @param ParametersService
- */
- function ParametersListModel($filter, ParsingJsonService, ParametersService){
-
- BaseListModel.call(this, $filter, ParsingJsonService);
-
- /* jshint validthis: true */
- var self = this;
- self.list = [];
-
- self.addItemToList = addItemToList;
- self.clear = clear;
- self.createItem = createItem;
- self.deleteParameterItem = deleteParameterItem;
- self.setName = setName;
- self.addEmptyItem = addEmptyItem;
- self.toJSON = toJSON;
- self.createParamsFromJson = createParamsFromJson;
- self.isNameUnique = isNameUnique;
- self.removeEmptyParams = removeEmptyParams;
- self.applyValsForFilters = applyValsForFilters;
- self.clone = clone;
-
- /**
- * Create copy of parameters list model
- */
- function clone() {
- var result = ParametersService.createEmptyParametersList(self.name);
- self.list.forEach(function (param) {
- result.addItemToList(param.clone());
- });
- return result;
- }
-
- /**
- * Apply all parameters names and values for filtering
- */
- function applyValsForFilters() {
- self.list.forEach(function (param) {
- param.applyValsForFilters();
- });
- }
-
- /**
- * Returns false if name is already used
- * @param nameValue
- * @returns {boolean}
- */
- function isNameUnique(nameValue) {
- return !nameValue || self.list.filter(function (item) {
- return item.name === nameValue;
- }).length === 1;
- }
-
- /**
- * Using when importing data from json file
- * @param data
- */
- function createParamsFromJson(data){
- if (data){
- self.clear();
- ParsingJsonService.parseJson(data).map(function (elem) {
- return ParametersService.createParameter(elem);
- }).forEach(function (elem) {
- self.addItemToList(elem);
- });
- }
- }
-
- /**
- * Get all parameters in json for exporting
- * @returns {Array}
- */
- function toJSON() {
- return self.list.map(function (param){
- return param.toJSON();
- });
- }
-
- /**
- * Set list name
- * @param name
- */
- function setName(name) {
- self.name = name;
- }
-
- /**
- * Add empty param to list
- */
- function addEmptyItem() {
- self.addItemToList(self.createItem());
- }
-
- function removeEmptyParams() {
- self.list = self.list.filter(function (param) {
- return param.name && param.name.length > 0;
- });
- }
-
- /**
- *
- * @param elem
- * @returns {Parameter|*}
- */
- function createItem(element) {
- if (!element){
- element = {
- name: '',
- value: '',
- };
- }
- return ParametersService.createParameter(element);
- }
-
- /**
- *
- * @param paramObj
- */
- function addItemToList(paramObj){
- self.list.push(paramObj);
- }
-
- /**
- *
- * @param paramObj
- */
- function deleteParameterItem(paramObj){
- self.list.splice(self.list.indexOf(paramObj), 1);
- }
-
- function clear() {
- self.list = [];
- }
-
- /**
- *
- * @returns {Array}
- */
- self.toJSON = function () {
- return self.list.filter(notEmptyParam).map(function (elem) {
- return elem.toJSON();
- });
-
- function notEmptyParam(item){
- return item.name;
- }
- };
- }
-
- ParametersListModel.prototype = Object.create(BaseListModel.prototype);
-
- return ParametersListModel;
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').service('YMHandleFileService', YMHandleFileService);
-
- YMHandleFileService.$inject = ['$window'];
-
- function YMHandleFileService($window){
- var service = {
- downloadFile: downloadFile,
- };
-
- return service;
-
- /**
- * Service for preparing file and creating link for downloading
- * @param filename
- * @param data
- * @param format
- * @param charset
- * @param successCbk
- * @param errorCbk
- */
- function downloadFile(filename, data, format, charset, successCbk, errorCbk){
- try {
- var blob = new Blob([JSON.stringify(data, null, 4)], { type: 'application/' + format + '; ' + charset + ';' }),
- downloadLink = angular.element('<a></a>');
-
- var clickEvent = new MouseEvent('click', {
- 'view': window,
- 'bubbles': true,
- 'cancelable': false
- });
-
- downloadLink.attr('href', window.URL.createObjectURL(blob));
- if(downloadLink.attr('download', filename) !== undefined) {
- downloadLink[0].dispatchEvent(clickEvent);
- successCbk();
- }
- else {
- $window.location.href = downloadLink[0].href;
- }
- } catch (e) {
- errorCbk(e);
- }
- }
- }
-});
+++ /dev/null
-define([
- 'app/yangman/models/history-settings.model',
-],
- function (HistorySettingsModel) {
- 'use strict';
-
- angular.module('app.yangman').service('HistorySettingsService', HistorySettingsService);
-
- HistorySettingsService.$inject = ['ParsingJsonService'];
-
- /**
- * Service for history settings, used for creating HistorySettingsModel and dependency injection
- * @param ParsingJsonService
- * @returns {{}}
- * @constructor
- */
- function HistorySettingsService(ParsingJsonService){
-
- var service = {};
-
- service.createHistorySettings = createHistorySettings;
-
- return service;
-
- /**
- * Service for creating settings object
- * @param name used as name in local storage
- * @returns {*}
- */
- function createHistorySettings(){
- var result = new HistorySettingsModel(ParsingJsonService, service);
- return result;
- }
-
-
-
- }
-
- });
+++ /dev/null
-define([
- 'common/yangutils/constants',
-], function (constants) {
- 'use strict';
-
- angular.module('app.yangman').service('MountPointsConnectorService', MountPointsConnectorService);
-
- MountPointsConnectorService.$inject = [
- 'YangUiApisService', 'NodeWrapperService',
- 'YangUtilsService', 'EventDispatcherService',
- 'YinParserService', 'PathUtilsService', 'YangUtilsRestangularService',
- ];
-
- function MountPointsConnectorService(
- YangUiApisService, NodeWrapperService,
- YangUtilsService, EventDispatcherService,
- YinParserService, PathUtilsService, YangUtilsRestangularService){
-
- var mountPrefix = constants.MPPREFIX,
- service = {
- addPathElemsToPathArray: addPathElemsToPathArray,
- alterMpPath: alterMpPath,
- createCustomButton: createCustomButton,
- createMPRootNode: createMPRootNode,
- discoverMountPoints: discoverMountPoints,
- getMPModulesAPI: getMPModulesAPI,
- updateMountPointApis: updateMountPointApis,
- };
-
- return service;
-
- // TODO: add service's description
- function createMPRootNode(mpNodes) {
- var node = null,
- yangParser = YinParserService.yangParser;
-
- yangParser.setCurrentModuleObj(new YinParserService.Module('yang-ext', null, null));
- node = yangParser.createNewNode('mount', 'container', null, constants.NODE_UI_DISPLAY);
- NodeWrapperService.wrapAll(node);
-
- node.buildRequest = function (builder, req, module) {
- var added = false,
- builderNodes = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (builderNodes.length) {
- builderNodes.forEach(function (child) {
- var childAdded = child.buildRequest(builder, req, module);
- });
- }
-
- return added;
- };
-
- node.fill = function (name, data) {
- var nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- nodesToFill.forEach(function (child) {
- var childFilled = child.fill(name, data);
- });
- };
-
-
- mpNodes.forEach(function (mp){
- node.addChild(mp);
- });
-
- return node;
- }
-
- // TODO: add service's description
- function addPathElemsToPathArray(pathElems, pathArray, index) {
- var updatedPath = pathArray.slice();
-
- pathElems.forEach(function (pe, offset) {
- // pe.disabled = true; //add disabled flag so user won't be able to change it in the UI
- updatedPath.splice(index + offset, 0, pe);
- });
-
- return updatedPath;
- }
-
- // TODO: add service's description
- function alterMpPath(path) {
- var pathParts = path.split('/'),
- restconfIndex = PathUtilsService.findIndexOfStrInPathStr(pathParts, 'restconf'),
- mpIndex = PathUtilsService.findIndexOfStrInPathStr(pathParts, mountPrefix),
- mpPath = path.slice(),
- mpPathParts = '';
-
- if (mpIndex !== -1){
- mpPathParts = pathParts.slice(mpIndex);
-
- var unshiftIndex = restconfIndex !== -1 ? restconfIndex + 1 : 0;
-
- mpPathParts.unshift(pathParts[unshiftIndex]);
- mpPath = mpPathParts.join('/');
- }
-
- return mpPath;
- }
-
- /**
- * function for adding path to mountpoint + yang:ext-mount to mount point patharray so the request string
- * will be built correctly
- * @param basePathArray
- * @param mpApis
- */
- function updateMountPointApis(basePathArray, mpApis) {
- var actualPath = basePathArray.slice(1); // we don't want to have config/operational storage in path
- // actualPath.push(PathUtilsService.createPathElement(mountPrefix, null, null, false));
- // we want to push yang-ext:mount to the path - not if we have yang-ext:mount rootNode
-
- mpApis.forEach(function (api) {
- api.subApis.forEach(function (subApi) {
- subApi.pathArray = addPathElemsToPathArray(actualPath, subApi.pathArray, 1);
- });
- });
- }
-
- // TODO: add service's description
- function getMPModulesAPI(api) {
- var apiArray = api.split('/'),
- yangExtMountStr = mountPrefix;
-
- if (apiArray[apiArray.length - 1] !== yangExtMountStr) {
- apiArray.push(yangExtMountStr);
- }
-
- return apiArray.slice(1).join('/');
- }
-
- // TODO: add service's description
- function discoverMountPoints(api, getModulesCbk, callback) {
- var modulesCbk = getModulesCbk || angular.noop,
- mpNodes = [],
- baseApiPath = getMPModulesAPI(api),
- time = {
- started: 0,
- finished: 0,
- };
-
- YangUtilsRestangularService.setFullResponse(true);
-
- time.started = new Date().getMilliseconds();
-
- return YangUiApisService.getCustomModules(baseApiPath).then(
- function (response) {
- time.finished = new Date().getMilliseconds();
-
- var reqObj = {
- status: response.status,
- statusText: response.statusText,
- time: (time.finished - time.started),
- };
-
- YangUtilsService.processModulesMP(response.data.modules, baseApiPath, function (result, augments) {
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Linking modules to Apis');
- var allRootNodes = result.map(function (node) {
- var copy = node.deepCopy(['augmentionGroups', 'augmentationId']);
-
- NodeWrapperService.wrapAll(copy);
- return copy;
- });
-
- var moduleNames = response.data.modules.module.map(function (m) {
- return m.name;
- });
-
- allRootNodes.forEach(function (n) {
- if (moduleNames.indexOf(n.module) > -1 && ['container', 'list'].indexOf(n.type) > -1) {
- mpNodes.push(n);
- }
- });
-
- callback(mpNodes, augments, reqObj);
- YangUtilsRestangularService.setFullResponse(false);
- });
- },
- function (response) {
- time.finished = new Date().getMilliseconds();
-
- var reqObj = {
- status: response.status,
- statusText: response.statusText,
- time: (time.finished - time.started),
- };
-
- callback([], [], reqObj);
- YangUtilsRestangularService.setFullResponse(false);
- });
- }
-
- // TODO: add service's description
- function createCustomButton(label, show, click){
- return {
- label: label,
- show: show,
- onclick: click,
- };
- }
- }
-
-});
+++ /dev/null
-define([
- 'app/yangman/models/parameter.model',
- 'app/yangman/models/parameterslist.model',
-],
- function (ParameterModel, ParametersListModel) {
- 'use strict';
-
- angular.module('app.yangman').service('ParametersService', ParametersService);
-
- ParametersService.$inject = ['$filter', 'ParsingJsonService'];
-
- function ParametersService($filter, ParsingJsonService){
-
- var service = {};
-
- service.createEmptyParametersList = createEmptyParametersList;
- service.createParameter = createParameter;
- service.validateFile = validateFile;
-
- return service;
-
-
- /**
- * Validating collection import file
- * @param data
- * @param checkArray
- * @returns {*}
- */
- function validateFile(data, checkArray){
- try {
- var obj = ParsingJsonService.parseJson(data);
-
- return obj && obj.every(function (el){
- return checkArray.every(function (arr){
- return el.hasOwnProperty(arr);
- });
- });
- } catch (e) {
- return e;
- }
- }
-
- /**
- * Service for creating basic parameter object
- * @returns {*}
- * @param name
- * @param value
- */
- function createParameter(element){
- var result = new ParameterModel();
- result.setData(element.name, element.value);
- return result;
- }
-
-
- /**
- * Service for creating empty parameters list
- * @param name used as name in local storage
- * @returns {*}
- */
- function createEmptyParametersList(name){
- var result = new ParametersListModel($filter, ParsingJsonService, service);
- result.setName(name);
- return result;
- }
-
-
-
- }
-
- });
+++ /dev/null
-define([
- 'common/yangutils/services/custom-funct.services',
- 'app/yangman/services/plugins/ymDisplayMountPoints.services'
-], function () {
- 'use strict';
-
- angular.module('app.yangman').service('PluginsHandlerService', PluginsHandlerService);
-
- function PluginsHandlerService($injector, CustomFuncService) {
- var yangmanPluginsFactories = [
- 'ymDisplayMountPoints',
- ];
-
- var service = {
- addPlugins: addPlugins,
- plugAll: plugAll,
- plugins: [],
- };
-
- service.addPlugins();
-
- return service;
-
- // TODO: add service's description
- function addPlugins() {
- yangmanPluginsFactories.forEach(function (pluginFactFullName) {
- var pluginServiceName = pluginFactFullName.split('/'),
- pluginName = pluginServiceName[pluginServiceName.length - 1].split('.')[0];
-
- $injector.invoke([pluginName, function (pluginFact) {
- service.plugins.push(pluginFact);
- }]);
- });
-
- }
-
- /**
- * Method for importing additional plugins
- * @param apis
- */
- function plugAll(apis) {
- service.plugins.forEach(function (plugin) {
- plugin.module.forEach(function (plModule, i){
- CustomFuncService.createCustomFunctionalityApis(apis, plModule, plugin.revision,
- plugin.pathString[i], plugin.label,
- plugin.getCallback, plugin.view,
- plugin.hideButtonOnSelect);
- });
- });
- }
- }
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- angular.module('app.yangman').service('PluginsUnsetterService', PluginsUnsetterService);
-
- PluginsUnsetterService.$inject = ['DataBackupService', 'constants'];
-
- function PluginsUnsetterService(DataBackupService, constants){
- var service = {
- 'YANGMAN_CUST_MOUNT_POINTS': unsetMountPoint,
- unset: unset,
- };
-
- return service;
-
- /**
- * Method for unset mount point from application
- * @param scope
- */
- function unsetMountPoint(scope){
- var modulesListObj = {};
-
- DataBackupService.getToScope(
- [
- 'selectedDatastore', 'node', 'apis',
- 'selectedApi', 'selectedSubApi', 'augmentations', 'selectedModule',
- ],
- scope,
- 'MAIN_SCOPE'
- );
-
- DataBackupService.getToScope(['treeApis'], modulesListObj, 'MODULES_LIST');
- scope.$broadcast(constants.YANGMAN_SET_API_TREE_DATA, { params: modulesListObj.treeApis });
- scope.$broadcast(constants.YANGMAN_SET_MODULE_LIST_TITLE, { params: '' });
-
- if ( scope.selectedDatastore ){
- scope.$broadcast(constants.YANGMAN_MODULE_D_INIT);
- }
- }
-
- /**
- * General method for pick correct unset method for plugins
- * @param scope
- * @param controller
- */
- function unset(scope, controller) {
- if (service.hasOwnProperty(controller.selectedPlugin.label)) {
- service[controller.selectedPlugin.label](scope);
- }
- }
-
- }
-
-});
+++ /dev/null
-define([
- 'app/yangman/services/mount-points-connector.services',
-], function (yangman) {
- 'use strict';
-
- angular.module('app.yangman').service('ymDisplayMountPoints', DisplayMountPoints);
-
- DisplayMountPoints.$inject =
- ['MountPointsConnectorService', '$timeout', 'YangUtilsService', '$filter', 'ApiBuilderService', 'constants'];
-
- function DisplayMountPoints(
- MountPointsConnectorService, $timeout, YangUtilsService, $filter, ApiBuilderService, constants) {
- var loadId = 0;
-
- return {
- module: ['network-topology', 'opendaylight-inventory', 'network-topology', 'opendaylight-inventory'],
- revision: null,
- pathString: [
- 'operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/',
- 'operational/opendaylight-inventory:nodes/node/{id}/',
- ],
- label: 'YANGMAN_CUST_MOUNT_POINTS',
- hideButtonOnSelect: true,
- getCallback: displayMountPointsCallback,
- };
-
- function displayMountPointsCallback(args) {
- var controller = args.controller,
- scope = args.scope,
- path = scope.selectedSubApi.buildApiRequestString();
-
- scope.rootBroadcast(constants.YANGMAN_SET_LOADING_BOX, true, function () {
- scope.setLeftPanel(0);
- $timeout(function () {
- MountPointsConnectorService.discoverMountPoints(path, getNodesMPData, createMPStructure);
- }, 1000);
- });
-
- /**
- * Get Mount point data from received raw data
- * @param data
- * @returns {*}
- */
- function getNodesMPData(data) {
- var node = data.node[0];
- return node && node['netconf-node-inventory:initial-capability'] ?
- node['netconf-node-inventory:initial-capability'].map(function (c) {
- return c.slice(c.lastIndexOf(')') + 1);
- }) : [];
- }
-
- // TODO :: description
- function findFirstSubApiIndex(subApis) {
- var firstConfigSubApiIndex = 0;
-
- subApis.some(function (sa, index) {
- var condition = sa.storage === constants.DATA_STORE_CONFIG;
- if (condition) {
- firstConfigSubApiIndex = index;
- }
- return condition;
- });
-
- return firstConfigSubApiIndex;
- }
-
- /**
- * Create base params for setup mount points in app
- * @param mpNodes
- * @param mpAugments
- * @param reqObj
- */
- function createMPStructure(mpNodes, mpAugments, reqObj) {
- if (mpNodes.length){
- var mpRootNode = MountPointsConnectorService.createMPRootNode(mpNodes),
- mountPointApis = ApiBuilderService.processAllRootNodes([mpRootNode]),
- // root node has isConfigStm undefined, we need to create root config SubApi by hand
- // if we set the variable isConfigStm to true and then generate the subApis it will do it
- // incorrectly because, the variable is inherited to children and we would malform the data
- // we need just to get operational root subApi...
- rootApi = mountPointApis[0],
- rootOperSubApi = rootApi.subApis.filter(function (sa) {
- return sa.pathTemplateString === 'yang-ext:mount/' && sa.storage === constants.DATA_STORE_OPERATIONAL;
- })[0];
-
- if (rootOperSubApi) {
- var rootConfigSubApi = rootOperSubApi.clone(), // clone it and...
- firstConfigSubApiIndex = findFirstSubApiIndex(rootApi.subApis);
- // we need to find first index of config
- // subApi - because generating treeApis depends on order
-
- // set storage to config
- rootConfigSubApi.storage = constants.DATA_STORE_CONFIG;
- rootConfigSubApi.pathArray[0].name = constants.DATA_STORE_CONFIG;
-
- // and add it to rest of the apis
- rootApi.subApis.splice(firstConfigSubApiIndex, 0, rootConfigSubApi);
- rootConfigSubApi.parent = rootApi;
- }
-
- var mountPointTreeApis = YangUtilsService.generateApiTreeData(mountPointApis),
- pathItems = path.split('/');
-
- MountPointsConnectorService.updateMountPointApis(scope.selectedSubApi.pathArray, mountPointApis);
-
- // call initialization after necessary things are loaded
- controller.initMountPoint(mountPointTreeApis, mountPointApis, mpAugments, reqObj);
-
- scope.rootBroadcast(
- constants.YANGMAN_SET_MODULE_LIST_TITLE,
- pathItems[pathItems.length - 1] + ' [ ' + $filter('translate')(constants.YANGMAN_MOUNT_POINT) + ' ]'
- );
-
- controller.selectedPluginsButtons.push(
- MountPointsConnectorService.createCustomButton(constants.YANGMAN_CANCEL_MP, function (){
- return controller.selectedPlugin.label === constants.YANGMAN_CUST_MOUNT_POINTS;
- },
- function (){
- controller.unsetPluginFunctionality();
- })
- );
-
- } else {
- $timeout(function (){
- controller.selectedPlugin = null;
- scope.rootBroadcast(constants.YANGMAN_SET_LOADING_BOX, false);
- scope.rootBroadcast(constants.YANGMAN_SHOW_TOAST, constants.YANGMAN_NO_MOUNT_POINT);
- }, 100);
- }
- }
-
- }
- }
-});
+++ /dev/null
-define([
- 'app/yangman/models/historylist.model',
- 'app/yangman/models/collectionlist.model',
- 'app/yangman/models/history-request.model',
-], function (HistoryListModel, CollectionListModel, HistoryRequestModel) {
- 'use strict';
-
- angular.module('app.yangman').service('RequestsService', RequestsService);
-
- RequestsService.$inject = [
- '$filter', 'PathUtilsService', 'ParametersService', 'ParsingJsonService', 'YangUtilsService',
- 'RequestBuilderService', 'constants',
- ];
-
- function RequestsService($filter, PathUtilsService, ParametersService, ParsingJsonService, YangUtilsService,
- RequestBuilderService, constants) {
-
- var service = {};
-
- service.applyParamsToObj = applyParamsToObj;
- service.applyParamsToStr = applyParamsToStr;
- service.clearUnnecessaryProperties = clearUnnecessaryProperties;
- service.createEmptyCollectionList = createEmptyCollectionList;
- service.createEmptyHistoryList = createEmptyHistoryList;
- service.createHistoryRequestFromElement = createHistoryRequestFromElement;
- service.createHistoryRequest = createHistoryRequest;
- service.fillRequestByMethod = fillRequestByMethod;
- service.fillRequestByViewType = fillRequestByViewType;
- service.findIdentifierByParam = findIdentifierByParam;
- service.scanDataParams = scanDataParams;
- service.replaceStringInText = replaceStringInText;
-
- /**
- * Clear unnecesary properties for saving to collection
- * @param request
- */
- function clearUnnecessaryProperties(request){
- request.status = '';
- request.responseStatus = null;
- request.responseStatusText = null;
- request.responseTime = null;
-
- return request;
- }
-
- /**
- * Find parametrized identifier in path array
- * @param params
- * @param pathElement
- * @returns {*}
- */
- function findIdentifierByParam(params, pathElement){
- var foundIdentifier = null;
-
- if ( pathElement.hasIdentifier() ){
- pathElement.identifiers.some(function (item){
- return params.list.some(function (param){
- var contained = item.value.indexOf('<<' + param.name + '>>') > -1;
-
- if ( contained ){
- foundIdentifier = item;
- }
-
- return contained;
- });
- });
- }
-
- return foundIdentifier;
- }
-
- /**
- * Get data for saving request depend on view type
- * @param node
- * @param viewType
- * @param requestData
- * @param dataType
- * @param method
- * @returns {*}
- */
- function fillRequestByViewType(node, viewType, requestData, dataType, method){
- var setDataByViewType = {
- form: function () {
- var data = {},
- emptyObject = method === constants.OPERATION_POST && dataType.toUpperCase() === constants.REQUEST_DATA_TYPE_RECEIVED && node.type !== constants.NODE_RPC;
-
- if ( !emptyObject ) {
- node.buildRequest(RequestBuilderService, data, node.module);
- data = checkNodeTypeData(node, data, dataType, requestData);
- }
-
- return data;
- },
- 'req-data': function (){
- return requestData ? angular.fromJson(requestData) : {};
- },
- };
-
- return setDataByViewType[viewType]();
-
- /**
- * Exceptions based on node type
- * @param node
- * @param data
- * @param dataType
- * @param requestData
- * @returns {*}
- */
- function checkNodeTypeData(node, data, dataType, requestData){
- var copyData = angular.copy(data),
- setDataByNodeType = {
- rpc: function (){
-
- if ( dataType.toUpperCase() === constants.REQUEST_DATA_TYPE_RECEIVED ) {
- copyData = requestData ? angular.fromJson(requestData) : {};
- }
-
- return copyData;
- },
- default: function () {
- return data;
- },
- };
-
- return (setDataByNodeType[node.type] || setDataByNodeType.default)();
- }
- }
-
- /**
- * Fill history request data depend on selected method - saving to collection
- * @param requestObj
- * @param sentData
- * @param receivedData
- * @param method
- */
- function fillRequestByMethod(requestObj, sentData, receivedData, method, node, viewType){
- var setDataByMethod = {
- GET: function (){
- return {
- sentData: {},
- receivedData: receivedData.reqData ? angular.fromJson(receivedData.reqData) : {},
- };
- },
- POST: function (){
- return {
- sentData: fillRequestByViewType(node, viewType, sentData.reqData, 'sent', method),
- receivedData: fillRequestByViewType(
- node, viewType, receivedData.reqData, constants.REQUEST_DATA_TYPE_RECEIVED, method
- ),
- };
- },
- PUT: function (){
- return {
- sentData: fillRequestByViewType(node, viewType, sentData.reqData, 'sent', method),
- receivedData: {},
- };
- },
- DELETE: function (){
- return {
- sentData: {},
- receivedData: {},
- };
- },
- },
- data = setDataByMethod[method]();
-
- requestObj.setExecutionData(data.sentData, data.receivedData, '');
- }
-
- /**
- * Scan used parameters in current line of codemirror
- * @param {ParametersListModel} paramsObj - list of parameters to be searched for
- * @param {string} lineString - line from current codemirror to be inspected
- * @returns array of {ParameterModel}
- */
- function scanDataParams(paramsObj, lineString) {
-
- var usedParamLabelArray = [];
-
- var params = lineString ? lineString.match(/<<(?!<<)[a-zA-Z0-9]+>>/g) : null;
-
- if ( params ) {
- params
- .filter(onlyUnique)
- .forEach(function (param) {
- usedParamLabelArray.push(removeUnwantedChars(param));
- });
- }
-
- var returnedParamsList = paramsObj.list.filter( function (param){
- var paramIndex = usedParamLabelArray.indexOf(param.name);
-
- if ( paramIndex !== -1 ) {
- return usedParamLabelArray.splice(paramIndex, 1);
- }
- else {
- return false;
- }
- });
-
- usedParamLabelArray.forEach(function (param){
- returnedParamsList.push(ParametersService.createParameter({ name: param }));
- });
-
- return returnedParamsList;
-
- /**
- * remove chars greater then and less then from parameter definition
- * @param val
- * @returns {string}
- */
- function removeUnwantedChars(val){
- var string = val.substring(2);
- return string.substring(0, string.indexOf('>>'));
- }
-
- /**
- * Filter function
- * @param value
- * @param index
- * @param self
- * @returns {boolean}
- */
- function onlyUnique(value, index, self) {
- return self.indexOf(value) === index;
- }
- }
-
- /**
- * Replace all parameters with its values
- * @param paramsObj
- * @param str
- * @returns {*}
- */
- function applyParamsToStr(paramsObj, str) {
- if (paramsObj && paramsObj.hasOwnProperty('list')) {
- paramsObj.list.forEach(function (param){
- str = service.replaceStringInText(str, '<<' + param.name + '>>', param.value);
- });
- }
-
- return str;
- }
-
- /**
- * Replace all parameters with its values
- * @param paramsObj
- * @param requestData
- * @returns {*}
- */
- function applyParamsToObj(paramsObj, data) {
- var dataStr = JSON.stringify(data);
-
- dataStr = service.applyParamsToStr(paramsObj, dataStr);
-
- return ParsingJsonService.parseJson(dataStr);
- }
-
- /**
- * Service for replacing string in text
- * @param text
- * @param strToReplace
- * @param newStr
- * @returns {*}
- */
- function replaceStringInText(text, strToReplace, newStr) {
- var replacedText = text;
- if (text.indexOf(strToReplace) > -1) {
- replacedText = text.split(strToReplace).join(newStr);
- }
- return replacedText;
- }
-
- /**
- * Service for creating basic history object
- * @param sentData
- * @param receivedData
- * @param path
- * @param operation
- * @param status
- * @param name
- * @param collection
- * @returns {*}
- * @param timestamp
- */
- function createHistoryRequest(sentData, receivedData, path, operation, status, name, collection, timestamp,
- responseStatus, responseStatusText, responseTime) {
- var result = new HistoryRequestModel(PathUtilsService, YangUtilsService, ParsingJsonService);
-
- timestamp = timestamp || Date.now();
-
- result.setData(sentData, receivedData, status, path, operation, name, collection, timestamp,
- responseStatus, responseStatusText, responseTime);
-
- return result;
- }
-
- /**
- * Creating {HistoryRequest} from elem containing all necessary data
- * @param {Object} elem
- * @returns {*}
- */
- function createHistoryRequestFromElement(elem) {
- if (!elem.hasOwnProperty('timestamp') || elem.timestamp === ''){
- elem.timestamp = Date.now();
- }
-
- return service.createHistoryRequest(elem.sentData, elem.receivedData, elem.path, elem.method,
- elem.status, elem.name, elem.collection, elem.timestamp, elem.responseStatus,
- elem.responseStatusText, elem.responseTime
- );
- }
-
- /**
- * Service for creating empty collection list
- * @param name
- * @param getApiFunction
- * @returns {CollectionList}
- */
- function createEmptyCollectionList(name){
- var result = new CollectionListModel($filter, ParsingJsonService, service);
- result.setName(name);
- return result;
- }
-
- /**
- * Service for creating empty history list
- * @param name
- * @returns {*}
- */
- function createEmptyHistoryList(name, settingsObj){
- var result = new HistoryListModel($filter, ParsingJsonService, service);
- result.setName(name);
- result.setSettings(settingsObj);
- return result;
- }
-
- return service;
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').service('TimeTrackingService', TimeTrackingService);
-
- function TimeTrackingService(){
- var service = {
- startTimer: startTimer,
- returnTime: returnTime,
- },
- timeStarted = 0;
- return service;
-
- function startTimer(){
- timeStarted = new Date().getTime();
- }
-
- function returnTime(){
- return new Date().getTime() - timeStarted;
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').service('YangmanDesignService', YangmanDesignService);
-
- YangmanDesignService.$inject = ['$timeout'];
-
- function YangmanDesignService($timeout){
-
- var service = {
- disableMdMenuItem: disableMdMenuItem,
- enableMdMenuItem: enableMdMenuItem,
- hideMainMenu: hideMainMenu,
- setDraggableLeftPanel: setDraggableLeftPanel,
- setJsonSplitter: setJsonSplitter,
- setModuleDetailHeight: setModuleDetailHeight,
- };
-
- return service;
-
-
- /**
- * Get button dom element from mdMenuItem ng-click $event
- * @param event
- */
- function getButtElemFromMdMenuItemEvent(event) {
- var elemSelAttempt = angular.element(event.toElement.parentElement).find('.md-button'),
- result = null;
-
- // if mdMenuItem was clicked, it should contain only one button
- if (elemSelAttempt.length === 1) {
- result = elemSelAttempt[0];
- }
- // if span or icon inside button was clicked, button element should be its parent
- else if (elemSelAttempt.length === 0) {
- result = angular.element(event.toElement.parentElement)[0];
- }
-
- if (result.nodeName === 'BUTTON') {
- return result;
- }
- else {
- return null;
- }
- }
-
- /**
- * Disable md menu item on which was clicked in event
- * Use to prevent accidentally doubleclicking or enterhitting
- * @param event - $event object from ng-click
- */
- function disableMdMenuItem(event) {
- var buttElem = getButtElemFromMdMenuItemEvent(event);
- if (buttElem) {
- buttElem.disabled = true;
- }
- }
-
-
- /**
- * Disable md menu item on which was clicked in event
- * Use to prevent accidentally doubleclicking or enterhitting
- * @param event - $event object from ng-click
- */
- function enableMdMenuItem(event) {
- var buttElem = getButtElemFromMdMenuItemEvent(event);
- if (buttElem) {
- buttElem.disabled = false;
- }
- }
-
-
- /**
- * Hide main menu
- */
- function hideMainMenu(){
- angular.element('#wrapper').addClass('toggled');
- }
-
- /**
- * Sets Draggable Left Side
- * #left-panel
- */
- function setDraggableLeftPanel(){
- if (localStorage.getItem('yangman__left-panel-width') !== null) {
- angular.element('#left-panel').width(localStorage.getItem('yangman__left-panel-width'));
- }
-
- angular.element('.ym-resizable-e').resizable({
- handles: 'e',
- minWidth: 300,
- stop: function(event, ui) {
- if (typeof(Storage) !== 'undefined') {
- localStorage.setItem('yangman__left-panel-width', ui.size.width);
- }
- },
- resize: function() {
- setModuleDetailHeight();
- }
- });
- }
-
- function setJsonSplitter(cbk){
- $timeout(function () {
- angular.element('.ym-resizable-s').resizable({
- handles: 's',
- minHeight: 200,
- stop: function(event, ui) {
- cbk();
- }
- });
- });
- }
-
- /**
- * Set module detail height
- * .yangmanModule__module-detail .tabs
- */
- function setModuleDetailHeight() {
- var height = 'calc(100% - ' + angular.element('.yangmanModule__module-detail h4').outerHeight(true) + 'px)';
- angular.element('.yangmanModule__module-detail .tabs').css({ height: height });
- }
-
- }
-});
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').service('YangmanService', YangmanService);
-
- YangmanService.$inject = [
- 'RequestBuilderService',
- 'YangUtilsService',
- 'YangUtilsRestangularService',
- 'ENV',
- 'ParsingJsonService',
- 'RequestsService',
- 'PathUtilsService',
- 'constants',
- ];
-
- function YangmanService(
- RequestBuilderService,
- YangUtilsService,
- YangUtilsRestangularService,
- ENV,
- ParsingJsonService,
- RequestsService,
- PathUtilsService,
- constants
- ){
- var service = {
- cutUrl: cutUrl,
- checkRpcReceivedData: checkRpcReceivedData,
- executeRequestOperation: executeRequestOperation,
- fillNodeFromResponse: fillNodeFromResponse,
- getDataStoreIndex: getDataStoreIndex,
- handleNodeIdentifier: handleNodeIdentifier,
- prepareAllRequestData: prepareAllRequestData,
- prepareReceivedData: prepareReceivedData,
- putIntoObj: putIntoObj,
- setSrcDataByDataType: setSrcDataByDataType,
- validateFile: validateFile,
- };
-
- return service;
-
- /**
- * Handle param continuum between header path array and node data
- * @param parametersList
- * @param selectedSubApi
- * @param node
- */
- function handleNodeIdentifier(parametersList, selectedSubApi, node){
- var identifier = RequestsService.findIdentifierByParam(
- parametersList, selectedSubApi.pathArray[selectedSubApi.pathArray.length - 1]
- );
-
- if ( identifier ){
- PathUtilsService.fillListNode(node, identifier.label, identifier.value);
- }
- }
-
- /**
- * Put data to output container if root node is rpc
- * @param data
- * @param node
- * @returns {*}
- */
- function checkRpcReceivedData(data, node){
- return node.type === constants.NODE_RPC ? cutData(data) : data;
-
- function cutData(data){
- return {
- output: data[node.label].output,
- };
- }
- }
-
- /**
- * Put source object into destination object by source properties
- * @param sourceObj
- * @param destinationObj
- */
- function putIntoObj(sourceObj, destinationObj, containter){
- if ( sourceObj ) {
- Object.keys(sourceObj).forEach(function(prop){
- destinationObj[containter] = destinationObj[containter] ? destinationObj[containter] : {};
- destinationObj[containter][prop] = sourceObj[prop];
- });
- }
- }
-
- /**
- * Prepare request date before filling into node depends on method and node type
- * @param node
- * @param method
- * @param rData
- * @param sData
- * @param outputType
- * @returns {*}
- */
- function prepareReceivedData(node, method, rData, sData, outputType){
- var prepareType = {
- rpc: function (){
-
- if ( outputType === constants.DISPLAY_TYPE_FORM ){
- var dObj = {};
-
- if ( !sData ) {
- sData = {};
- sData[node.label] = {};
- }
-
- putIntoObj(rData, dObj, node.label);
- putIntoObj(sData[node.label] ? sData[node.label] : sData, dObj, node.label);
- return dObj;
- } else {
- return rData;
- }
- },
- default: function (){
- var methodType = {
- GET: function () {
- if ( node ){
- node.clear();
- }
- return rData;
- },
- DELETE: function () {
- if ( node ) {
- node.clear();
- }
- return {};
- },
- DEFAULT: function () {
- if (node) {
- node.clear();
- }
- return rData;
- },
- };
-
- return (methodType[method] || methodType.DEFAULT)();
- },
- };
-
- return (prepareType[node ? node.type : 'default'] || prepareType.default)();
- }
-
- /**
- * Validating collection import file
- * @param data
- * @param checkArray
- * @returns {*}
- */
- function validateFile(data, checkArray){
- try {
- var obj = ParsingJsonService.parseJson(data);
-
- return obj && obj.every(function (el){
- return checkArray.every(function (arr){
- return el.hasOwnProperty(arr);
- });
- });
- } catch (e) {
- return e;
- }
- }
-
- /**
- * Return index of selected datastore in list
- * @param list
- * @param dataStore
- * @returns {*}
- */
- function getDataStoreIndex(list, dataStore){
- var rIndex = null,
- result = list.some(function (item, index) {
- rIndex = index;
- return item.label === dataStore;
- });
-
- return result ? rIndex : null;
- }
-
- /**
- * Apply all parametrized values into request (data, url, pathArray)
- * @param allPreparedData
- * @param params
- * @param selSubApiCopy
- * @param requestUrl
- */
- function setParametrizedData(allPreparedData, params, selSubApiCopy, requestUrl){
- allPreparedData.reqFullUrl = RequestsService.applyParamsToStr(params, requestUrl);
-
- // apply parametrized value into request data in string form
- allPreparedData.reqString =
- selSubApiCopy ? RequestsService.applyParamsToStr(params, selSubApiCopy.buildApiRequestString()) : '';
-
- if ( !angular.equals(allPreparedData.reqFullUrl, requestUrl) && selSubApiCopy ){
- // fill parametrized data into path array
- PathUtilsService.fillPath(selSubApiCopy.pathArray, allPreparedData.reqFullUrl);
- }
-
- allPreparedData.reqData = RequestsService.applyParamsToObj(params, allPreparedData.srcData);
- }
-
- /**
- * Set source data into request object based on shown data type
- * @param allPreparedData
- * @param node
- * @param requestData
- * @param dataType
- */
- function setSrcDataByDataType(allPreparedData, node, requestData, dataType){
- if ( dataType === constants.DISPLAY_TYPE_FORM && node){
- node.buildRequest(RequestBuilderService, requestData, node.module);
- allPreparedData.srcData = angular.copy(requestData);
- }
- else {
- allPreparedData.srcData = requestData;
- }
- }
-
- /**
- * Prepare all necessary data for executing or saving request
- * @param selectedApi
- * @param selectedSubApi
- * @param operation
- * @param node
- * @param dataType
- * @param requestUrl
- * @param requestData
- * @param params
- * @returns {
- * {
- * customRestangular: null,
- * headers: {},
- * operation: string,
- * reqString: string,
- * reqHeaders: {},
- * reqData: string,
- * srcData: string,
- * reqFullUrl:
- * string
- * }
- * }
- */
- function prepareAllRequestData(selectedApi, selectedSubApi, operation, node, dataType, requestUrl, requestData,
- params) {
- var allPreparedData = {
- customRestangular: null,
- headers: {},
- operation: '',
- reqString: '',
- reqHeaders: {},
- reqData: '',
- srcData: '',
- reqFullUrl: '',
- },
- selSubApiCopy = angular.copy(selectedSubApi);
-
- setSrcDataByDataType(allPreparedData, node, requestData, dataType);
- setParametrizedData(allPreparedData, params, selSubApiCopy, requestUrl);
-
- // prepare req data
- if (operation === constants.OPERATION_GET){
- allPreparedData.srcData = null;
- allPreparedData.reqData = null;
- }
- else if ( operation === constants.OPERATION_POST ){
-
- if ( selSubApiCopy ) {
- allPreparedData.reqData = YangUtilsService.postRequestData(
- allPreparedData.reqData,
- allPreparedData.reqString,
- selSubApiCopy
- );
- }
- }
-
- // set correct host into restangular based on shown data type and prepare data
- if ( dataType === constants.DISPLAY_TYPE_REQ_DATA ){
- var parser = locationHelper(allPreparedData.reqFullUrl, ['pathname', 'origin']),
- raParam = '';
-
- YangUtilsRestangularService.setBaseUrl(parser.origin);
- allPreparedData.reqString = parser.pathname.slice(1).split('/');
- raParam = allPreparedData.reqString.shift();
- allPreparedData.reqString = allPreparedData.reqString.join('/');
-
- allPreparedData.customRestangular = YangUtilsRestangularService.one(raParam);
-
- } else {
-
- YangUtilsRestangularService.setBaseUrl(ENV.getBaseURL('MD_SAL'));
- allPreparedData.customRestangular = YangUtilsRestangularService.one('restconf');
-
- if ( node ) {
- allPreparedData.headers = YangUtilsService.prepareHeaders(allPreparedData.reqData);
- }
- }
-
- allPreparedData.operation = YangUtilsService.prepareOperation(operation);
- return allPreparedData;
- }
-
- function cutUrl(url){
- return url.indexOf('restconf') > -1 ? url.split('restconf')[1].substring(1) : url;
- }
-
- /**
- * Execute request built from this data
- * @param selectedApi
- * @param selectedSubApi
- * @param operation
- * @param node
- * @param dataType
- * @param requestUrl
- * @param requestData
- * @param successCbk
- * @param errorCbk
- * @param params
- */
- function executeRequestOperation(selectedApi, selectedSubApi, operation, node, dataType, requestUrl,
- requestData, params, successCbk, errorCbk) {
-
- YangUtilsRestangularService.setFullResponse(true);
-
- var allPreparedData = prepareAllRequestData(
- selectedApi, selectedSubApi, operation, node, dataType, requestUrl, requestData, params
- );
-
- // executing operation
- allPreparedData.customRestangular.customOperation(
- allPreparedData.operation.toLowerCase(),
- allPreparedData.reqString,
- null,
- allPreparedData.headers,
- allPreparedData.reqData
- )
- .then(
- function (response) {
- (successCbk || angular.noop)(finishExecuting(response), response);
- },
- function (response) {
- (errorCbk || angular.noop)(finishExecuting(response), response);
- }
- );
-
- function finishExecuting(response){
-
- return {
- status: response.status,
- statusText: response.statusText,
- time: null,
- requestData: allPreparedData.reqData,
- requestSrcData: allPreparedData.srcData,
- };
- }
- }
-
- /**
- * Method for parsing path to additional properties based on JS LOCATION
- * @param path
- * @param properties
- * @returns {{}}
- */
- function locationHelper(path, properties){
- var parser = document.createElement('a'),
- obj = {};
-
- parser.href = path;
-
- properties.forEach(function (prop) {
- obj[prop] = parser[prop];
- });
-
- return obj;
- }
-
- /**
- * Fill node values from response
- * @param node
- * @param data
- */
- function fillNodeFromResponse(node, data){
- var props = data ? Object.getOwnPropertyNames(data) : [];
-
- // fill each property - needed for root mountpoint node,
- // in other cases there should be only one property anyway
- props.forEach(function (p) {
- node.fill(p, data[p]);
- });
- }
- }
-
-});
+++ /dev/null
-<md-list class="directive__abn-tree">
- <md-list-item ng-repeat="row in tree_rows | filter:{visible:true} track by row.branch.uid"
- ng-class="'level-' + {{ row.level }} + (row.branch.selected ? ' active':'')"
- ng-click="user_clicks_branch(row.branch)"
- id="branch-{{row.index}}"
- ng-init="(_dataCollection = []).length = row.level; idIndex = idIndex + 1;">
- <span ng-repeat="i in _dataCollection track by $index" ng-class="{'empty-box' : $index !== 0}"></span>
- <md-icon md-font-set="material-icons" class="pointer" id="toggle-branch-{{row.index}}" ng-click="row.branch.expanded = !row.branch.expanded">{{row.tree_icon}}</md-icon>
- <span flex class="indented tree-label">{{ row.label }} {{ row.branch.identifier }}</span>
- </md-list-item>
-</md-list>
-
+++ /dev/null
-<div ng-if="isActionMenu()" class="menu-container md-menu">
- <!-- Close menu (click catcher) -->
- <div ng-show="isActive">
- <md-backdrop ng-click="closeMenu()" class="md-menu-backdrop md-click-catcher" style="position: fixed;"></md-backdrop>
- </div>
- <!-- open menu button -->
- <md-button class="md-icon-button" ng-click="openMenu(); hideInfoBox();">
- <md-icon md-font-set="material-icons">reorder</md-icon>
- </md-button>
-
- <!-- Menu content -->
- <div class="yang-menu-content md-menu-content" ng-show="isActive">
- <h5 class="title">
- {{ 'YANGMAN_YANG_MENU' | translate }}
- <md-icon md-font-set="material-icons">reorder</md-icon>
- </h5>
- <md-divider></md-divider>
-
- <!-- add list item -->
- <div class="yang-menu-item md-menu-item" ng-if="addListItem">
- <md-button ng-click="addListItemFunc(); closeMenu();">
- <md-icon md-font-set="material-icons">library_add</md-icon>
- <span md-menu-align-target>{{'YANGMAN_ADD_LIST_ITEM' | translate}}</span>
- </md-button>
- </div>
-
- <!-- show items list -->
- <div class="yang-menu-item md-menu-item" ng-if="yangList && node.actElemStructure">
- <md-button ng-click="switchSection('items'); setItemList();">
- <md-icon md-font-set="material-icons">list</md-icon>
- <span md-menu-align-target>{{'YANGMAN_SHOW_LIST_ITEM' | translate}}</span>
- </md-button>
- </div>
-
- <!-- augmentations menu item -->
- <div class="yang-menu-item md-menu-item" ng-if="node.augmentionGroups.length">
- <md-button ng-click="switchSection('augmentations')">
- <md-icon md-font-set="material-icons">brightness_auto</md-icon>
- <span md-menu-align-target>{{'YANGMAN_AUGMENTATIONS' | translate}}</span>
- </md-button>
- </div>
-
- <!-- info box -->
- <div id="infoBox" class="md-whiteframe-z2 info-box" ng-show="infoBox" ng-switch="infoBoxSection">
- <div ng-switch-when="augmentations">
- <md-list flex>
- <md-list-item ng-repeat="augmentation in node.augmentionGroups">
- <md-switch ng-model="augmentations.getAugmentation(node, augmentation).expanded"
- aria-label="{{augmentation}}"
- md-prevent-menu-close>
- {{augmentation}}
- </md-switch>
- </md-list-item>
- </md-list>
- </div>
-
- <!-- yang list items -->
- <div ng-switch-when="items">
- <md-list>
- <md-list-item ng-repeat="_ in node.listData" class="no-wrap">
- <!-- icon -->
- <md-icon md-font-set="material-icons">
- {{ [yangList.currentDisplayIndex, yangList.currentDisplayIndex + 1, yangList.currentDisplayIndex - 1].indexOf($index) !== -1 ? 'remove_red_eye' : ''}}
- </md-icon>
-
- <!-- title -->
- <p ng-class="{'active' : node.actElemIndex === $index}"
- class="pointer"
- ng-click="node.changeActElementData($index)">
- {{yangForm.getNodeName(node.localeLabel, node.label)}} {{node.createListName($index) || '[' + $index + ']'}}
- </p>
-
- <!-- duplicated key -->
- <md-icon md-font-set="material-icons" ng-show="node.doubleKeyIndexes.indexOf($index) > -1">
- <md-tooltip md-direction="top">{{ 'YANGMAN_LIST_INDEX_DUPLICATE' | translate }}</md-tooltip>
- error_outline
- </md-icon>
-
- <!-- remove button -->
- <md-icon md-font-set="material-icons"
- class="pointer"
- ng-if="addListItem"
- ng-click="yangList.removeListElem($index)">
- <md-tooltip md-direction="top">{{ 'YANGMAN_LIST_DELETE_ITEM' | translate }}</md-tooltip>
- remove_circle_outline
- </md-icon>
-
- <md-ink-bar ng-if="node.actElemIndex === $index" class="custom"></md-ink-bar>
- </md-list-item>
- </md-list>
- </div>
- </div>
- </div>
-</div>
+++ /dev/null
-<span ng-mouseenter="executeInfoBox(true)" ng-mouseleave="executeInfoBox(false)" class="info-box-container__hover-wrapper">
- <span ng-transclude></span>
-
- <div class="md-whiteframe-z2 info-box" ng-show="showBoxCheck()">
- <div class="info-box__padding">
- <!-- key -->
- <span ng-show="node.isKey()">
- {{'Key for "' + node.parent.label + '"'}}
- <md-menu-divider ng-show="dividerCheck(true)"></md-menu-divider>
- </span>
- <!-- augment -->
- <span ng-show="node.augmentationId">
- {{ 'YANGMAN_IS_AUGMENT' | translate }} <i>{{node.type}}</i> "{{ node.augmentationId }}"
- <md-menu-divider ng-show="dividerCheck()"></md-menu-divider>
- </span>
- <!-- description -->
- <span ng-show="description.length">{{description}}</span>
- </div>
- </div>
-</span>
+++ /dev/null
-<section class="yangmanModule" id="yangmanModule" layout="row">
-
- <!-- LEFT SIDE -->
- <md-content layout="column" style="width: 400px; height: 100%;" class="yangmanModule__left-panel ym-resizable-e" id="left-panel">
- <!-- module arrow button -->
- <md-icon md-font-set="material-icons "
- class="arrow-switcher"
- id="toggle-module-detail"
- ng-click="main.toggleLeftPanel(); main.initModuleDetailHeight();"
- ng-class="{'arrow-switcher__left' : main.leftPanelTab === 0}"
- ng-show="selectedDatastore || selectedPlugin"> play_arrow </md-icon>
- <!--ng-show="!main.selectedMainTab && selectedDatastore"> play_arrow </md-icon>-->
- <!-- content -->
- <md-tabs md-border-bottom md-selected="main.leftPanelTab" class="yangmanModule__left-panel__detail-list-tabs-container">
- <md-tab label="models tree">
- <md-content>
-
- <!-- MODULES HISTORY COLLECTION TABS -->
- <md-tabs class="yangmanModule__mhc-tabs inline-tabs" md-no-pagination md-dynamic-height md-stretch-tabs="always">
- <!-- Modules tab -->
- <md-tab label="{{'YANGMAN_MODULES' | translate}}" md-on-select="main.switchedTab(0)" id="tab-modules">
- <div ng-include src="globalViewPath + 'leftpanel/modules-tab.tpl.html'" class="h100"></div>
- </md-tab>
- <!-- History tab -->
- <md-tab label="{{'YANGMAN_HISTORY' | translate}}" md-on-select="main.switchedTab(1)" id="tab-history">
- <div ng-include src="globalViewPath + 'leftpanel/history-tab.tpl.html'" class="historyTab"></div>
- </md-tab>
- <!-- Collection tab -->
- <md-tab label="{{'YANGMAN_COLLECTIONS' | translate}}" md-on-select="main.switchedTab(2)" id="tab-collections">
- <div ng-include src="globalViewPath + 'leftpanel/collections-tab.tpl.html'" class="collectionsTab"></div>
- </md-tab>
- </md-tabs>
- </md-content>
- </md-tab>
-
- <!-- MODULE TREE DETAIL -->
- <md-tab label="model detail" md-on-select="main.initModuleDetailHeight()">
- <md-content class="yangmanModule__module-detail">
- <div ng-include src="globalViewPath + 'leftpanel/module-detail.tpl.html'"></div>
- </md-content>
- </md-tab>
- </md-tabs>
- </md-content>
-
- <!-- RIGHT SIDE -->
- <md-content layout="column" flex
- class="md-whiteframe-3dp md-padding yangmanModule__right-panel"
- ng-include src="globalViewPath + 'rightpanel/detail.tpl.html'"></md-content>
-</section>
+++ /dev/null
-<md-list class="yangmanModule__requests-list__collections-list"
- ng-cloak
- ng-controller="RequestsListCtrl as reqList"
- ng-init="reqList.init('collections')">
-
- <md-content class="searchBox yangmanModule__left-panel__search" layout="row">
-
- <!-- searching -->
- <md-input-container layout="row" md-no-float class="modules-list-search" flex>
- <!-- search icon, form, clear button -->
- <md-icon class="material-icons">search</md-icon>
- <input class="ng-pristine ng-valid ng-touched"
- type="text"
- id="search-collections"
- flex
- placeholder="{{'YANGMAN_SEARCH' | translate}}"
- ng-model="reqList.search"
- aria-invalid="false" />
- <md-button aria-label="{{'YANGMAN_CLEAR_SEARCH'| translate}}" flex="none"
- ng-click="reqList.clearFilter()"
- id="search-collections-clear"
- ng-if="reqList.search">
- <md-icon class="material-icons clickable">
- close
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_CLEAR_SEARCH'| translate}}</md-tooltip>
- </md-button>
- <!-- /search icon, form, clear button -->
- </md-input-container>
-
- <!-- sorting -->
- <span class="collection-button-container">
- <md-button ng-click="reqList.toggleCollectionsSort()"
- id="sort-collections"
- ng-disabled="reqList.collectionList.collections.length <= 1">
- <md-icon class="material-icons clickable" > sort</md-icon>
- </md-button>
- <md-tooltip md-direction="bottom">
- {{ ( reqList.collectionsSortAsc ? 'YANGMAN_SORT_COLLECTIONS_DESC' : 'YANGMAN_SORT_COLLECTIONS_ASC' )| translate}}
- </md-tooltip>
- </span>
- <!-- /sorting -->
-
- <!-- save -->
- <span class="collection-button-container">
- <md-button ng-click="reqList.showDgSaveReq($event)"
- id="collections-save-selected"
- ng-disabled="reqList.mainList.getSelectedItems(reqList.filterCollReq).length === 0">
- <md-icon class="material-icons clickable">
- save
- </md-icon>
- </md-button>
- <md-tooltip md-direction="bottom">{{'YANGMAN_REQS_SAVE_TO_COL'| translate}}</md-tooltip>
- </span>
- <!-- /save -->
-
- <!-- importing -->
- <span class="collection-button-container">
- <input type="file" accept=".json" id="importCollection" on-read-file="reqList.readCollectionFromFile($fileContent)">
- <md-button id="import-collection-button">
- <label for="importCollection">
- <md-icon class="material-icons clickable" >
- file_upload
- </md-icon>
- </label>
- </md-button>
- <md-tooltip md-direction="bottom">{{'YANGMAN_IMPORT_COLLECTION'| translate}}</md-tooltip>
- </span>
- <!-- /importing -->
-
- <md-menu layout-align="center start">
- <md-button ng-disabled="!reqList.mainList.list.length" aria-label="menu" id="collections-delete-menu" ng-click="$mdOpenMenu()">
- <md-icon class="material-icons clickable"> delete</md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_DELETE_OPTIONS' | translate}}</md-tooltip>
- </md-button>
- <md-menu-content>
- <!-- delete selected -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_REQS_DELETE'| translate}}"
- id="collections-delete-selected"
- ng-click="reqList.showDgDeleteRequests($event)"
- ng-disabled="reqList.mainList.getSelectedItems(reqList.filterCollReq).length === 0">
- <md-icon class="material-icons clickable">
- delete
- </md-icon>
- {{'YANGMAN_REQS_DELETE'| translate}}
- </md-button>
- </md-menu-item>
- <!-- / delete selected -->
- <!-- clear collections -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_DELETE_COLLECTIONS' | translate}}"
- id="collections-delete-all"
- ng-click="reqList.clearCollectionList($event)">
- <md-icon class="material-icons clickable">
- delete_forever
- </md-icon>
- {{'YANGMAN_DELETE_COLLECTIONS' | translate}}
- </md-button>
- </md-menu-item>
- <!-- / clear history -->
- </md-menu-content>
- </md-menu>
- <!-- / menu for deleting and clearing -->
-
- <!-- menu for selecting and deselecting-->
- <md-menu layout-align="center start">
- <md-button ng-disabled="( !reqList.mainList.list.length)" aria-label="menu" id="collections-select-menu" ng-click="$mdOpenMenu()">
- <md-icon class="material-icons clickable">
- playlist_add_check
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_SELECT_OPTIONS' | translate}}</md-tooltip>
- </md-button>
- <md-menu-content>
- <!-- select all -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_SELECT_ALL' | translate}}"
- id="collections-select-all"
- ng-click="reqList.selectAllFilteredRequests()">
- <md-icon class="material-icons clickable">
- done
- </md-icon>
- {{'YANGMAN_SELECT_ALL' | translate}}
- </md-button>
- </md-menu-item>
- <!-- /select all -->
- <!-- deselect all -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_DESELECT_ALL' | translate}}"
- ng-click="reqList.deselectAllFilteredRequests()"
- id="collections-deselect-all"
- ng-disabled="reqList.mainList.getSelectedItems(reqList.filterCollReq).length === 0">
- <md-icon class="material-icons clickable">
- close
- </md-icon>
- {{'YANGMAN_DESELECT_ALL' | translate}}
- </md-button>
- </md-menu-item>
- <!-- / deselect all -->
- </md-menu-content>
- </md-menu>
- <!-- / menu for selecting and deselecting -->
- </md-content>
-
- <md-divider></md-divider>
-
- <!-- collection list -->
- <md-content class="scrollableY">
-
- <div ng-repeat="collection in reqList.mainList.collections | filter: reqList.filterCol | orderBy: (reqList.collectionsSortAsc ? '' : '-')+'name' track by $index" ng-init="collectionIndex = $index">
-
- <div layout="row">
-
- <md-list-item class="yangmanModule__requests-list__collection"
- flex
- id="collection-{{$index}}"
- ng-class="{'expanded' : collection.expanded, 'selected': collection.expanded}"
- ng-click="collection.toggleExpanded()">
-
- <div layout="row">
- <md-icon md-font-set="material-icons" class="top-icon">
- folder_open
- </md-icon>
- <div layout="column">
-
- <p flex>
- <span md-highlight-text="reqList.search" id="collection-{{$index}}-name" md-highlight-flags="i">
- {{collection.name}}
- </span><br />
- <span class="desc">
- <span class="desc" ng-if="reqList.search && !reqList.filterColName(collection)">{{'YANGMAN_MATCHING'| translate}} {{reqList.colMatchingReqsCount(collection)}} / </span>
- {{collection.data.length}} {{(collection.data.length>1 ? 'YANGMAN_COLLECTION_REQUESTS' : 'YANGMAN_COLLECTION_REQUEST')| translate}}
- </span>
- </p>
- </div>
- </div>
-
- </md-list-item>
- <md-menu class="yangmanModule__requests-list__group__collectionMenu"
- id="collection-menu-{{$index}}"
- md-offset="35 15"
- layout-align="center start">
- <md-button aria-label="menu" class="md-primary" ng-click="$mdOpenMenu()">
- <i class="material-icons">menu</i>
- </md-button>
- <md-menu-content class="reqMenu">
- <md-menu-item>
- <md-button aria-label="Edit collection"
- id="collection-menu-{{$index}}-edit"
- ng-click="reqList.showDgEditCollection($event, collection, false)">
- <i class="material-icons">mode_edit</i>
- {{'YANGMAN_COLLECTION_EDIT'| translate}}
- </md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_COLLECTION_DUPLICATE'| translate}}"
- id="collection-menu-{{$index}}-duplicate"
- ng-click="reqList.showDgEditCollection($event, collection, true)">
- <i class="material-icons">control_point_duplicate</i>
- {{'YANGMAN_COLLECTION_DUPLICATE'| translate}}
- </md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_COLLECTION_DOWNLOAD'| translate}}"
- id="collection-menu-{{$index}}-download"
- ng-click="reqList.downloadCollection(collection)">
- <i class="material-icons">file_download</i>
- {{'YANGMAN_COLLECTION_DOWNLOAD'| translate}}
- </md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_COLLECTION_DELETE'| translate}}"
- id="collection-menu-{{$index}}-delete"
- ng-click="reqList.showDgDeleteCollection($event, collection)">
- <i class="material-icons">delete</i>
- {{'YANGMAN_COLLECTION_DELETE'| translate}}
- </md-button>
- </md-menu-item>
- </md-menu-content>
- </md-menu>
- </div>
-
-
- <md-list ng-show="collection.expanded" class="yangmanModule__requests-list__collection__requests">
- <div ng-repeat="request in collection.data | filter: reqList.filterReq track by $index"
- layout="row"
- ng-init="itemId='collection-request-'+collectionIndex+'-'+$index"
- class="yangmanModule__requests-list__item-container"
- ng-include src="globalViewPath + 'leftpanel/request-item.tpl.html'">
- </div>
- </md-list>
- <md-divider></md-divider>
-
- </div>
- </md-content>
-
-</md-list>
+++ /dev/null
-<md-dialog aria-label="{{'YANGMAN_COLLECTION_NAME'| translate}}" ng-cloak>
- <form name="collectionForm">
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2>{{(dialog.duplicate ? 'YANGMAN_COLLECTION_DUPLICATE' : 'YANGMAN_COLLECTION_CHANGE_NAME')| translate}}</h2>
- <span flex></span>
- </div>
- </md-toolbar>
- <md-dialog-content style="width:300px;">
- <div class="md-dialog-content" layout="column">
- <div layout="row">
- <md-input-container flex>
- <label>{{(dialog.duplicate ? 'YANGMAN_COLLECTION_NEW_NAME' : 'YANGMAN_COLLECTION_NAME') | translate}}</label>
- <input name="collectionName"
- ng-model="dialog.collectionName"
- autocomplete="off"
- ng-required="true">
- <div ng-messages="collectionForm.collectionName.$error" multiple md-auto-hide="false">
- <div ng-message="required">
- {{'YANGMAN_COLLECTION_NAME_REQUIRED'| translate}}
- </div>
- </div>
- </md-input-container>
- </div>
- </div>
- </md-dialog-content>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button ng-click="dialog.cancel()">
- {{'YANGMAN_CANCEL'| translate}}
- </md-button>
- <md-button ng-click="dialog.save()" ng-disabled="!collectionForm.$valid">
- {{'YANGMAN_SAVE'| translate}}
- </md-button>
- </md-dialog-actions>
- </form>
-</md-dialog>
+++ /dev/null
-<md-settingsCtrl aria-label="{{ 'YANGMAN_HISTORY_SETTINGS' | translate }}" ng-cloak>
- <form name="settingsCtrl.settingsForm">
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2>{{ 'YANGMAN_HISTORY_SETTINGS' | translate }}</h2>
- <span flex></span>
- </div>
- </md-toolbar>
- <md-dialog-content layout-padding>
- <div class="md-dialog-content settingsForm" layout="column">
- <md-input-container>
- <label>{{ 'YANGMAN_HISTORY_SETTINGS_COUNT' | translate }}</label>
- <input name="requestsCount"
- ng-model="settingsCtrl.mySettingsObj.data.requestsCount"
- type="number"
- min="5"
- max="10000"
- ng-required="true">
- <div ng-messages="settingsCtrl.settingsForm.requestsCount.$error" multiple md-auto-hide="false">
- <div ng-message="required">
- {{ 'YANGMAN_HISTORY_SETTINGS_REQUIRED'| translate }}
- </div>
- </div>
- </md-input-container>
- <md-input-container>
- <md-checkbox name="saveResponseData"
- ng-model="settingsCtrl.mySettingsObj.data.saveResponseData">
- {{ 'YANGMAN_HISTORY_SETTINGS_SAVE_RESPONSE_DATA' | translate }}
- </md-checkbox>
- </md-input-container>
- <md-input-container>
- <md-checkbox name="saveReceived"
- ng-change="settingsCtrl.saveReceivedChanged()"
- ng-model="settingsCtrl.mySettingsObj.data.saveReceived">
- {{ 'YANGMAN_HISTORY_SETTINGS_SAVE_RECEIVED_DATA' | translate }}
- </md-checkbox>
- </md-input-container>
- <md-input-container>
- <md-checkbox name="fillWithSaved"
- ng-disabled="!settingsCtrl.mySettingsObj.data.saveReceived"
- ng-model="settingsCtrl.mySettingsObj.data.fillWithReceived">
- {{ 'YANGMAN_HISTORY_SETTINGS_FILL_FORM_WITH_RECEIVED' | translate }}
- </md-checkbox>
- </md-input-container>
-
-
- </div>
- </md-dialog-content>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button ng-click="settingsCtrl.cancel()">
- {{ 'YANGMAN_CANCEL'| translate }}
- </md-button>
- <md-button ng-click="settingsCtrl.save()" ng-disabled="!settingsCtrl.settingsForm.$valid">
- {{ 'YANGMAN_SAVE'| translate }}
- </md-button>
- </md-dialog-actions>
- </form>
-</md-settingsCtrl>
+++ /dev/null
-<md-list class="yangmanModule__requests-list h100"
- ng-cloak
- ng-init="reqList.init('history')"
- ng-controller="RequestsListCtrl as reqList">
-
- <md-content class="searchBox yangmanModule__left-panel__search" layout="row">
-
- <!-- searching -->
- <md-input-container layout="row" md-no-float class="modules-list-search" flex>
- <!-- search icon, form, clear button -->
- <md-icon class="material-icons">search</md-icon>
- <input class="ng-pristine ng-valid ng-touched"
- type="text"
- flex
- placeholder="{{'YANGMAN_SEARCH' | translate}}"
- id="search-history"
- ng-model="reqList.search"
- aria-invalid="false" />
- <md-button aria-label="{{'YANGMAN_CLEAR_SEARCH'| translate}}" flex="none"
- id="search-history-clear"
- ng-click="reqList.clearFilter()"
- ng-if="reqList.search">
- <md-icon class="material-icons clickable">
- close
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_CLEAR_SEARCH'| translate}}</md-tooltip>
- </md-button>
- <!-- /search icon, form, clear button -->
- </md-input-container>
-
- <!-- save -->
- <md-button ng-click="reqList.showDgSaveReq($event)"
- id="history-save-requests"
- ng-disabled="!reqList.mainList.getSelectedItems(reqList.filterReq).length">
- <md-icon class="material-icons clickable">
- save
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_REQS_SAVE_TO_COL'| translate}}</md-tooltip>
- </md-button>
- <!-- /save -->
-
- <!-- menu for deleting and clearing-->
- <md-menu layout-align="center start">
- <md-button ng-disabled="!reqList.mainList.list.length" aria-label="menu" id="history-delete-menu" ng-click="$mdOpenMenu()">
- <md-icon class="material-icons clickable"> delete</md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_DELETE_OPTIONS' | translate}}</md-tooltip>
- </md-button>
- <md-menu-content>
- <!-- delete selected -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_REQS_DELETE'| translate}}"
- ng-click="reqList.showDgDeleteRequests($event)"
- id="history-delete-selected"
- ng-disabled="!reqList.mainList.getSelectedItems(reqList.filterReq).length">
- <md-icon class="material-icons clickable"> delete</md-icon>
- {{'YANGMAN_REQS_DELETE'| translate}}
- </md-button>
- </md-menu-item>
- <!-- / delete selected -->
- <!-- clear history -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_DELETE_HISTORY' | translate}}"
- ng-click="reqList.clearHistoryList($event)"
- id="history-delete-all"
- ng-disabled="!reqList.mainList.list.length">
- <md-icon class="material-icons clickable"> delete_forever</md-icon>
- {{'YANGMAN_DELETE_HISTORY' | translate}}
- </md-button>
- </md-menu-item>
- <!-- / clear history -->
- </md-menu-content>
- </md-menu>
- <!-- / menu for deleting and clearing -->
-
- <!-- menu for selecting and deselecting-->
- <md-menu layout-align="center start">
- <md-button ng-disabled="!reqList.mainList.list.length" aria-label="menu" id="history-select-menu" ng-click="$mdOpenMenu()">
- <md-icon class="material-icons clickable">
- playlist_add_check
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_SELECT_OPTIONS' | translate}}</md-tooltip>
- </md-button>
- <md-menu-content>
- <!-- select all -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_SELECT_ALL' | translate}}"
- id="history-select-all"
- ng-click="reqList.selectAllFilteredRequests()">
- <md-icon class="material-icons clickable">
- done
- </md-icon>
- {{'YANGMAN_SELECT_ALL' | translate}}
- </md-button>
- </md-menu-item>
- <!-- /select all -->
- <!-- deselect all -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_DESELECT_ALL' | translate}}"
- id="history-deselect-all"
- ng-click="reqList.deselectAllFilteredRequests()" ng-disabled="reqList.mainList.getSelectedItems(reqList.filterReq).length === 0">
- <md-icon class="material-icons clickable">
- close
- </md-icon>
- {{'YANGMAN_DESELECT_ALL' | translate}}
- </md-button>
- </md-menu-item>
- <!-- / deselect all -->
- </md-menu-content>
- </md-menu>
- <!-- / menu for selecting and deselecting -->
-
- <!-- button for settings -->
- <md-button ng-click="reqList.showHistorySettings($event)"
- id="history-settings">
- <md-icon class="material-icons clickable">
- settings
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_HISTORY_SETTINGS'| translate}}</md-tooltip>
- </md-button>
-
- </md-content>
- <md-divider></md-divider>
-
- <!-- list of items grouped by date -->
- <md-content class="scrollableY">
- <md-list-item ng-repeat="group in reqList.mainList.dateGroups | orderBy: 'name': true track by $index"
- id="history-requests-group-{{$index}}"
- ng-init="groupIndex=$index"
- class="yangmanModule__requests-list__group"
- ng-if="(group.requests | filter:reqList.filterReq).length">
-
- <div layout="column" flex>
-
- <!-- date group header -->
- <md-subheader class="md-no-sticky">
- {{group.longName}}
- </md-subheader>
- <!-- /date group header -->
-
- <!-- list of requests in current group -->
- <md-list>
- <div ng-repeat="request in group.requests | filter: reqList.filterReq | orderBy: '-timestamp' track by $index"
- layout="row"
- ng-init="itemId = 'history-request-'+groupIndex+'-'+$index"
- class="yangmanModule__requests-list__item-container"
- ng-include src="globalViewPath + 'leftpanel/request-item.tpl.html'">
- </div>
- </md-list>
- <!-- /list of requests in current group -->
-
- </div>
-
- <md-divider></md-divider>
-
- </md-list-item>
- </md-content>
- <!-- /list of items grouped by date -->
-
-</md-list>
+++ /dev/null
-<md-content ng-controller="ModuleDetailCtrl as moduleDetail">
- <!-- Module title -->
- <h4 class="text-center"><small>module</small> {{selectedModule.label}}</h4>
-
- <!-- DATA STORE || RPC TABS -->
- <md-tabs md-no-pagination md-dynamic-height
- md-stretch-tabs="always"
- md-selected="moduleDetail.selectedDataStoreIndex"
- class="tabs inline-tabs">
- <md-tab ng-repeat="item in selectedModule.children track by $index">
- <md-tab-label>
- <div layout="row">
- <span flex="grow" ng-click="moduleDetail.setDataDetailStore(item)" id="selected-module-portion-{{$index}}">{{item.label}}</span>
- </div>
- </md-tab-label>
-
- <md-tab-body>
- <div class="scrollableY scrollableX">
- <abn-api-tree tree-data="moduleDetail.treeApis"
- tree-rows="moduleDetail.treeRows"
- on-select="moduleDetail.setApiNode(branch.indexApi, branch.indexSubApi)"></abn-api-tree>
- </div>
- </md-tab-body>
- </md-tab>
- </md-tabs>
-</md-content>
+++ /dev/null
-<section ng-cloak ng-controller="ModulesListCtrl as modulesList" class="h100">
- <!-- searching -->
- <section class="yangmanModule__left-panel__search">
- <md-input-container layout="row" md-no-float class="modules-list-search">
- <md-icon class="material-icons">search</md-icon>
- <input class="ng-pristine ng-valid ng-touched"
- type="text"
- flex
- id="search-modules"
- placeholder="{{'YANGMAN_SEARCH' | translate}}"
- ng-model="modulesList.search"
- aria-invalid="false" />
-
- <!-- search clear button -->
- <md-button aria-label="{{'YANGMAN_CLEAR_SEARCH'| translate}}" flex="none"
- id="search-modules-clear"
- ng-click="modulesList.clearFilter()"
- ng-if="modulesList.search">
- <md-icon class="material-icons clickable">
- close
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_CLEAR_SEARCH'| translate}}</md-tooltip>
- </md-button>
- </md-input-container>
-
- </section>
-
- <!-- divider -->
- <md-divider ng-hide="modulesList.showLoadingBox"></md-divider>
-
- <!-- modules list -->
- <md-list ng-cloak class="yangmanModule__modules-list scrollableY">
-
- <!-- Loading bar -->
- <md-progress-linear md-mode="indeterminate" ng-show="modulesList.showLoadingBox"></md-progress-linear>
-
- <!-- Mount point title -->
- <section ng-show="modulesList.moduleListTitle.length">
- <h4>{{ modulesList.moduleListTitle }}</h4>
- <!-- Line -->
- <md-divider></md-divider>
- </section>
-
- <!-- Modules list -->
- <md-list-item ng-repeat="module in modulesList.treeApis | filter: modulesList.customSearch | orderBy: 'label' track by $index"
- class="yangmanModule__modules-list__item"
- ng-class="{'expanded' : module.expanded, 'selected' : modulesList.checkSelectedModule(module)}"
- id="module_{{$index}}"
- ng-init="parentIndex = $index"
- ng-hide="modulesList.showLoadingBox"
- ng-click="modulesList.setModule(module, $event)">
- <!-- Item content -->
- <div layout="column" flex>
- <!-- Module title -->
- <div layout="row" layout-align="center center" class="pointer title">
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- {{module.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
- <p flex class="top-element" md-highlight-text="modulesList.search" md-highlight-flags="i"> {{module.label}} </p>
- </div>
-
- <!-- Datastore && rpc -->
- <md-list flex class="yangmanModule__datastore-list" ng-show="module.expanded">
- <md-list-item ng-repeat="item in module.children track by $index" id="module-{{parentIndex}}-portion-{{$index}}">
- <div flex
- layout="row"
- layout-align="center center"
- class="pointer"
- ng-click="modulesList.setDataStore(item, module)">
- <md-icon md-font-set="material-icons">keyboard_arrow_right</md-icon>
- <p flex> {{item.label}} </p>
- </div>
- </md-list-item>
- </md-list>
- </div>
- <!-- Line -->
- <md-divider></md-divider>
- </md-list-item>
- </md-list>
-</section>
+++ /dev/null
-<!-- request row -->
-<md-list-item class="yangmanModule__requests-list__group__item"
- ng-class="{selected: request.selected}"
- id="{{itemId}}"
- layout="row"
- flex="100"
- ng-click="reqList.selectRequest($event, request);">
-
- <div flex="15" class="yangmanModule__requests-list__group__item__method" layout-align="center center">
- <p id="{{itemId}}-operation" class="{{request.status === 'success' || !request.status ? request.method : 'error'}}"> {{request.method === vm.constants.OPERATION_DELETE ? 'DEL' : request.method }} </p>
- <md-tooltip ng-show="request.status.length" md-direction="bottom" ng-show="request.status">
- Status: {{request.status | uppercase }} <br />
- Run at: {{request.timestamp | date: 'medium' }}
- </md-tooltip>
- </div>
-
- <div flex class="yangmanModule__requests-list__group__item__path" layout="column">
- <p id="{{itemId}}-url" md-highlight-text="reqList.search" md-highlight-flags="i">
- {{ request.path }}
- </p>
- </div>
- <div flex="10"></div>
-</md-list-item>
-<!-- /request row -->
-
-<!-- request submenu -->
-<md-menu class="yangmanModule__requests-list__group__itemMenu"
- md-offset="35 15"
- layout-align="center start"
- ng-class="{selected: request.selected}">
-
- <md-button aria-label="menu" class="md-primary" id="{{itemId}}-submenu" ng-click="reqList.selectOnlyThisRequest(request); $mdOpenMenu()">
- <i class="material-icons">menu</i>
- </md-button>
-
- <md-menu-content class="reqMenu">
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_REQ_RUN'| translate}}" id="{{itemId}}-execute" class="" ng-click="reqList.executeRequest(request)">
- <i class="material-icons">play_arrow</i>
- {{'YANGMAN_REQ_RUN'| translate}}
- </md-button>
- </md-menu-item>
- <md-menu-item ng-if="request.collection.length">
- <md-button aria-label="{{'YANGMAN_REQ_DUPLICATE'| translate}}"
- id="{{itemId}}-duplicate"
- ng-click="reqList.showDgSaveReq($event, request, true)">
- <i class="material-icons">control_point_duplicate</i>
- {{'YANGMAN_REQ_DUPLICATE'| translate}}
- </md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_REQ_DELETE'| translate}}" id="{{itemId}}-delete" ng-click="reqList.showDgDeleteRequests($event, request)">
- <i class="material-icons">delete</i>
- {{'YANGMAN_REQ_DELETE'| translate}}
- </md-button>
- </md-menu-item>
- </md-menu-content>
-</md-menu>
-<!-- /request submenu -->
+++ /dev/null
-<md-dialog aria-label="Save to collection" ng-cloak>
- <form name="dialog.saveReqForm">
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2>{{( dialog.duplicate ? 'YANGMAN_REQS_DUPLICATE' : 'YANGMAN_REQS_SAVE_TO_COL')| translate}}</h2>
- <span flex></span>
- </div>
- </md-toolbar>
- <md-dialog-content style="width: 400px;">
- <div class="md-dialog-content" layout="column">
- <md-input-container>
- <md-autocomplete
- md-selected-item="dialog.selectedItem"
- md-search-text="dialog.collectionName"
- md-items="item in dialog.getColAutocomplete()"
- md-floating-label="{{'YANGMAN_CREATING_COLLECTION'|translate}}"
- md-item-text="item"
- md-min-length="0"
- ng-required="true">
- <md-item-template>
- <span md-highlight-text="dialog.collectionName" md-highlight-flags="^i">{{item}}</span>
- </md-item-template>
- <md-not-found>
- <span ng-if="dialog.collectionName.length">
- {{'YANGMAN_COLLECTION_NEW_COL_'| translate}} "{{dialog.collectionName}}" {{'YANGMAN_COLLECTION_WILL_BE_CREATED'| translate}}.
- </span>
- <span ng-if="dialog.collectionName.length === 0">
- {{'YANGMAN_NO_COLLECTIONS'| translate}}
- </span>
- </md-not-found>
- </md-autocomplete>
- <input name="collectionName"
- ng-model="dialog.collectionName"
- ng-required="true" style="display: none;">
- <div ng-messages="dialog.saveReqForm.collectionName.$error" multiple md-auto-hide="false">
- <div ng-message="required">
- {{'YANGMAN_COLLECTION_NAME_REQUIRED'| translate}}
- </div>
- </div>
- </md-input-container>
-
- </div>
- </md-dialog-content>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button ng-click="dialog.cancel()">
- {{'YANGMAN_CANCEL'| translate}}
- </md-button>
- <md-button ng-click="dialog.save()" ng-disabled="!dialog.saveReqForm.$valid">
- {{'YANGMAN_SAVE'| translate}}
- </md-button>
- </md-dialog-actions>
- </form>
-</md-dialog>
+++ /dev/null
-<md-dialog aria-label="{{'YANGMAN_PARAMETERS_ADMINISTRATION'| translate}}" ng-cloak>
- <form name="paramsAdmin.paramsForm">
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2>{{'YANGMAN_PARAMETERS_ADMINISTRATION'| translate}}</h2>
- <span flex></span>
- <md-button aria-label="{{'YANGMAN_CLOSE'| translate}}"
- id="params-admin-close-cross"
- ng-click="paramsAdmin.close()">
- <md-icon class="material-icons clickable" >
- close
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_CLOSE'| translate}}</md-tooltip>
- </md-button>
- </div>
- </md-toolbar>
- <md-dialog-content class="paramsAdminDialog" layout="column">
- <div class="md-dialog-content" layout="column">
- <!-- top part for search and sort bar -->
- <div class="paramsAdminDialog__searchBox" layout="row">
-
- <!-- search icon, form, clear button -->
- <md-icon class="material-icons">search</md-icon>
- <input class=""
- id="params-admin-search-field"
- type="text"
- flex
- ng-change="paramsAdmin.filterChange()"
- placeholder="{{'YANGMAN_SEARCH' | translate}}"
- ng-model="paramsAdmin.search"
- aria-invalid="false" />
- <md-button aria-label="{{'YANGMAN_CLEAR_SEARCH'| translate}}"
- id="params-admin-search-clear"
- ng-click="paramsAdmin.clearFilter()"
- ng-if="paramsAdmin.search">
- <md-icon class="material-icons clickable" >
- close
- </md-icon>
- <md-tooltip md-direction="bottom">{{'YANGMAN_CLEAR_SEARCH'| translate}}</md-tooltip>
- </md-button>
- <!-- /search icon, form, clear button -->
-
- <!-- sorting menu -->
- <md-menu md-offset="35 15" layout-align="center start">
- <md-button aria-label="{{'YANGMAN_SORT'| translate}}"
- class=""
- id="params-admin-sort-menu"
- ng-click="$mdOpenMenu()">
- <i class="material-icons">sort</i>
- <md-tooltip md-direction="bottom">
- {{'YANGMAN_SORTING' | translate}}
- </md-tooltip>
- </md-button>
- <md-menu-content>
- <!-- sort by name -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_PARAMS_KEY'| translate}}"
- id="params-admin-sort-name-{{paramsAdmin.sortAsc ? 'desc' : 'asc'}}"
- ng-click="paramsAdmin.sortBy('_name', '_value')">
- {{'YANGMAN_SORT_BY'| translate}}
- {{'YANGMAN_PARAMS_KEY'| translate}}
- {{paramsAdmin.sortAsc ? 'YANGMAN_SORT_DESC' : 'YANGMAN_SORT_ASC' | translate}}
- </md-button>
- </md-menu-item>
- <!-- /sort by name -->
-
- <!-- sort by value -->
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_PARAMS_VALUE'| translate}}"
- id="params-admin-sort-value-{{paramsAdmin.sortAsc ? 'desc' : 'asc'}}"
- ng-click="paramsAdmin.sortBy('_value', '_name')">
- {{'YANGMAN_SORT_BY'| translate}}
- {{'YANGMAN_PARAMS_VALUE'| translate}}
- {{paramsAdmin.sortAsc ? 'YANGMAN_SORT_DESC' : 'YANGMAN_SORT_ASC' | translate}}
- </md-button>
- </md-menu-item>
- <!-- /sort by value -->
-
- </md-menu-content>
- </md-menu>
- <!-- /sorting menu -->
-
- <!-- menu for import and export parameters -->
- <input type="file" accept=".json" id="importParameters" on-read-file="paramsAdmin.importParameters($fileContent)">
- <md-menu md-offset="35 15" layout-align="center start">
- <md-button aria-label="{{ 'YANGMAN_PARAMS_IMPORT_EXPORT' | translate }}"
- id="params-admin-import-export-menu"
- ng-click="$mdOpenMenu()">
- <i class="material-icons">import_export</i>
- <md-tooltip md-direction="bottom">
- {{ 'YANGMAN_PARAMS_IMPORT_EXPORT' | translate }}
- </md-tooltip>
- </md-button>
- <md-menu-content>
- <md-menu-item>
- <md-button id="params-admin-import-parameters">
- <label for="importParameters">
- {{'YANGMAN_IMPORT_PARAMS'| translate}}
- </label>
- </md-button>
- </md-menu-item>
- <md-menu-item>
- <md-button aria-label="{{'YANGMAN_EXPORT_PARAMETERS' | translate}}"
- id="params-admin-export-parameters"
- ng-click="paramsAdmin.exportParameters()">
- {{'YANGMAN_EXPORT_PARAMETERS' | translate}}
- </md-button>
- </md-menu-item>
- </md-menu-content>
- </md-menu>
- <!-- /menu for import and export parameters -->
-
- </div>
-
- <md-divider></md-divider>
- <!-- /top part for search and sort bar -->
-
- <!-- parameters list -->
- <md-content class="paramsAdminDialog__paramsList scrollableY" layout="column">
-
- <div layout="row"
- ng-repeat="param in paramsAdmin.parametersList.list |
- filter: paramsAdmin.filterParam |
- orderBy: paramsAdmin.sortFunc : !paramsAdmin.sortAsc
- track by $index">
- <!-- name input -->
- <md-input-container>
- <label>{{'YANGMAN_PARAM_KEY' | translate}}</label>
- <input name="name_{{$index}}"
- id="params-admin-list-name-{{$index}}"
- ng-model="param.name"
- ng-required="param.value"
- ng-change="paramsAdmin.validateNamesUnique()"
- ng-focus="$last && paramsAdmin.createEmptyParam()"
- autocomplete="off">
- <div ng-messages="paramsAdmin.paramsForm['name_'+$index].$error" multiple md-auto-hide="false">
- <div ng-message="required"
- id="params-admin-name-required">
- {{'YANGMAN_PARAM_KEY_REQUIRED'| translate}}
- </div>
- <div ng-message="unique"
- id="params-admin-name-unique">
- {{'YANGMAN_PARAM_EXISTING_KEY'| translate}}
- </div>
- </div>
- </md-input-container>
- <!-- / name input -->
-
- <!-- value input -->
- <md-input-container flex>
- <label>{{'YANGMAN_PARAM_VALUE' | translate}}</label>
- <input ng-model="param.value"
- id="params-admin-value-list-{{$index}}"
- ng-focus="$last && paramsAdmin.createEmptyParam()">
- </md-input-container>
- <!-- /value input -->
-
- <!-- remove param button -->
- <md-button aria-label="{{'YANGMAN_REMOVE_PARAM' | translate}}"
- id="params-admin-list-remove-{{$index}}"
- class=""
- ng-if="!$last"
- ng-click="paramsAdmin.removeParam(param)">
- <md-tooltip md-direction="bottom">
- {{'YANGMAN_REMOVE_PARAM' | translate}}
- </md-tooltip>
- <i class="material-icons">close</i>
- </md-button>
- <!-- /remove param button -->
-
-
- </div>
- </md-content>
- <!-- /parameters list -->
-
- </div>
- </md-dialog-content>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button id="params-admin-close-button" ng-click="paramsAdmin.close()">
- {{'YANGMAN_CLOSE'| translate}}
- </md-button>
- <md-button ng-click="paramsAdmin.save()"
- id="params-admin-save-button"
- ng-disabled="!paramsAdmin.paramsForm.$valid">
- {{'YANGMAN_SAVE'| translate}}
- </md-button>
- </md-dialog-actions>
- </form>
-</md-dialog>
+++ /dev/null
-<!-- Header -->
-<section md-whiteframe="1"
- class="yangmanModule__right-panel__header"
- style="margin-bottom: 0px!important;"
- ng-include src="globalViewPath + 'rightpanel/request-header.tpl.html'">
-</section>
-<!-- /Header -->
-
-<!-- Form section -->
-<section class="yangmanModule__right-panel__form bottom-content"
- ng-show="rightPanelSection === main.constants.DISPLAY_TYPE_FORM"
- ng-if="node"
- ng-controller="YangFormCtrl as yangForm">
- <div ng-show="yangForm.errorMsg"><p class="error" id="form-error-message">{{ yangForm.errorMsg }}</p></div>
- <div ng-include src="yangForm.viewPath + '/' + selectedDatastore.label + '/' + node.type+'.tpl.html'"></div>
-</section>
-<!-- /Form section -->
-
-<!-- JSON section -->
-<section class="yangmanModule__right-panel__req-data bottom-content"
- id="jsonSection"
- ng-cloak
- ng-show="rightPanelSection === main.constants.DISPLAY_TYPE_REQ_DATA">
-
- <!-- Sent data -->
- <div ng-controller="RequestDataCtrl as requestData"
- layout="column"
- ng-show="main.jsonView.sent"
- ng-init="requestData.init('SENT')"
- ng-class="{'half-size': main.jsonView.received && main.jsonView.sent}"
- height-watcher watch-attribute="height"
- id="sentData"
- class="yangmanModule__right-panel__req-data__cm-SENT ym-resizable-s">
-
- <section class="yangmanModule__right-panel__req-data__header" layout="row">
- <h5 flex>{{'YANGMAN_SENT_DATA' | translate}}</h5>
- <md-button ng-click="requestData.enlargeCMFont()">
- <i class="material-icons bigger">text_format</i>
- <i class="material-icons additional">arrow_drop_up</i>
- <md-tooltip>
- {{ 'YANGMAN_CM_ENLARGE_FONT_SIZE' | translate }}
- </md-tooltip>
- </md-button>
- <md-button ng-click="requestData.reduceCMFont()">
- <i class="material-icons smaller">text_format</i>
- <i class="material-icons additional">arrow_drop_down</i>
- <md-tooltip md-direction="bottom right">
- {{ 'YANGMAN_CM_REDUCE_FONT_SIZE' | translate }}
- </md-tooltip>
- </md-button>
- </section>
- <div md-whiteframe="2" ng-include src="globalViewPath + 'rightpanel/request-data.tpl.html'" style="overflow-y: hidden;"></div>
- </div>
-
- <!-- Received data -->
- <div ng-controller="RequestDataCtrl as requestData"
- ng-show="main.jsonView.received"
- ng-init="requestData.init(main.constants.REQUEST_DATA_TYPE_RECEIVED)"
- ng-class="{'half-size': main.jsonView.received && main.jsonView.sent}"
- id="ReceiveData"
- class="yangmanModule__right-panel__req-data__cm-RECEIVED ym-resizable-s">
-
- <section class="yangmanModule__right-panel__req-data__header" layout="row">
- <h5 flex>{{'YANGMAN_RECEIVED_DATA' | translate}}</h5>
- <md-button ng-click="requestData.enlargeCMFont()">
- <i class="material-icons bigger">text_format</i>
- <i class="material-icons additional">arrow_drop_up</i>
- <md-tooltip>
- {{ 'YANGMAN_CM_ENLARGE_FONT_SIZE' | translate }}
- </md-tooltip>
- </md-button>
- <md-button ng-click="requestData.reduceCMFont()">
- <i class="material-icons smaller">text_format</i>
- <i class="material-icons additional">arrow_drop_down</i>
- <md-tooltip md-direction="bottom right">
- {{ 'YANGMAN_CM_REDUCE_FONT_SIZE' | translate }}
- </md-tooltip>
- </md-button>
- </section>
- <div md-whiteframe="2" ng-include src="globalViewPath + 'rightpanel/request-data.tpl.html'" style="overflow-y: hidden;"></div>
- </div>
-</section>
-<!-- /JSON section -->
+++ /dev/null
-<md-list flex>
- <md-list-item ng-repeat="augmentation in node.augmentionGroups">
- <md-switch ng-model="augmentations.getAugmentation(node, augmentation).expanded" aria-label="{{augmentation}}">
- {{augmentation}}
- </md-switch>
- </md-list-item>
-
-</md-list>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="YMCaseCtrl as yangCase" ng-hide="yangCase.empty">
- <!-- case's children -->
- <div ng-repeat="node in case.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type + '.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded"></div>
-</div>
+++ /dev/null
-<div ng-controller="YMChoiceCtrl as yangChoice"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- choice title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element" ng-click="yangChoice.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Choice label -->
- <p class="top-element" ym-info-box node="node" ng-click="yangChoice.toggleExpanded()"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangChoice.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- <!-- Choice select -->
- <md-input-container>
- <md-select ng-model="node.choice" aria-label="Choice select">
- <md-option ng-repeat="node in node.getChildren(null, null, constants.NODE_UI_DISPLAY) | filter:caseShowing" ng-value="node">
- {{node.label}}
- </md-option>
- </md-select>
- </md-input-container>
- </div>
-
- <!-- choice's children -->
- <div ng-repeat="case in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + case.type +'.tpl.html'"
- ng-show="node.choice.id === case.id && node.expanded"
- ng-if="!(case.augmentationId && !augmentations.getAugmentation(case.parent, case.augmentationId).expanded)"></div>
-</div>
+++ /dev/null
-<div ng-controller="YMContainerCtrl as yangContainer"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons"
- class="top-icon top-element pointer"
- ng-click="yangContainer.toggleExpanded()">
-
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element pointer"
- ng-click="yangContainer.toggleExpanded()" ym-info-box node="node">
-
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangContainer.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- container's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMInputCtrl as yangInput"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangInput.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangInput.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- output's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMLeafListCtrl as yangLeafList"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element" ng-click="yangLeafList.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ng-click="yangLeafList.toggleExpanded()" ym-info-box node="node">
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangLeafList.isActionMenu()"
- augmentations="augmentations"
- add-list-item-func="yangLeafList.addListElem()"
- add-list-item="true"
- node="node"></yang-form-menu>
- </div>
-
- <div ng-repeat="elem in node.value" ng-show="node.expanded">
- <!-- Leaf list values -->
- <md-input-container md-no-float class="input-icon-container full_width">
- <!-- input -->
- <input ng-change="yangLeafList.changed()" ng-model="elem.value" aria-label="{{elem.value}}" class="full_width">
-
- <!-- remove Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-click="yangLeafList.removeListElem(elem)">
- <md-tooltip md-direction="right">{{ 'REMOVE_ELEM' | translate }}</md-tooltip>
- remove_circle_outline
- </md-icon>
- </md-input-container>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMLeafCtrl as yangLeaf"
- layout="row"
- layout-align="start {{yangLeaf.getLeafCentering()}}"
- class="yangmanModule__right-panel__form__leaf-container {{yangLeaf.getLeafType()}}">
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangLeaf.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- <!-- Empty placeholder for better look -->
- <div class="menu-placeholder" ng-if="!yangLeaf.isActionMenu() && !yangLeaf.isNodeInfo()"></div>
-
- <div ng-controller="YMTypeCtrl as yangType"
- ng-repeat="type in node.getChildren('type')"
- ng-include="yangForm.viewPath + '/config/types/' + yangLeaf.getLeafType() + '.tpl.html'"
- {{yangLeaf.getLeafType() === 'union' ? 'flex="grow"' : ''}}
- layout="row"
- class="full_width">
- </div>
-</div>
+++ /dev/null
-<!-- previous item button -->
-<button ng-click="shiftDisplayPrev()"
- ng-show="showPrevButton()"
- tooltip="{{ 'YANGMAN_LIST_PREV_ITEM' | translate }}"
- class="yangButton iconPrev"></button>
-
-<!-- item list -->
-<div class="listButtonWrapper"
- ng-repeat="offset in displayOffsets"
- ng-if="currentDisplayIndex + offset > -1 && node.filteredListData.length > currentDisplayIndex + offset">
-
- <button class="btn btn-like-tab {{ (currentDisplayIndex + offset === node.actElemIndex ? 'btn-selected':'') }}"
- ng-click="node.changeActElementData(currentDisplayIndex + offset,false)"
- tooltip="{{getListName(offset, false).tooltip}}">
- {{yangForm.getNodeName(node.localeLabel, node.label)}} {{ getListName(offset, true).name }}
- </button>
-
- <!-- delete button -->
- <button class="yangButton iconClose"
- tooltip="{{ 'YANGMAN_LIST_DELETE_ITEM' | translate }}"
- ng-click='removeListElem(currentDisplayIndex + offset,true)'></button>
-
- <!-- duplicate indicator -->
- <button class="yangButton iconDanger"
- tooltip="{{ 'YANGMAN_LIST_INDEX_DUPLICATE' | translate }}"
- ng-show="node.doubleKeyIndexes.indexOf(currentDisplayIndex + offset)>-1"></button>
-</div>
-
-<!-- next item button -->
-<button ng-click="shiftDisplayNext('filteredListData')"
- ng-show="showNextButton('filteredListData')"
- tooltip="{{ 'YANGMAN_LIST_NEXT_ITEM' | translate }}"
- class="yangButton iconNext"></button>
+++ /dev/null
-<div ng-controller="YMListCtrl as yangList"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-init="yangList.init()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-click="yangList.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- list label -->
- <p class="top-element pointer list-label" ng-click="yangList.toggleExpanded()" ym-info-box node="node">
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangList.isActionMenu()"
- augmentations="augmentations"
- add-list-item-func="yangList.addListElem()"
- add-list-item="!yangList.disableAddingListElement"
- yang-form="yangForm"
- yang-list="yangList"
- node="node"></yang-form-menu>
-
- <!--<ng-include src="currentPath+'/filter.tpl.html'"></ng-include>-->
-
- <section layout="row"
- layout-align="start center"
- class="yangmanModule__right-panel__form__list__paginator"
- ng-include="yangForm.viewPath + '/list-data-top.tpl.html'"
- ng-if="!(node.filteredListData && node.filteredListData.length)"></section>
-
- <div class="listItemWrapper"
- ng-include="yangForm.viewPath + '/config/list-filtered-data-top.tpl.html'"
- ng-if="(node.filteredListData && node.filteredListData.length)"></div>
-
- </div>
-
- <!-- list's children -->
- <div ng-if="node.actElemStructure" ng-show="node.expanded">
- <div ng-repeat="node in node.actElemStructure.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMOutputCtrl as yangOutput"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangOutput.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangOutput.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- output's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMRpcCtrl as yangRpc"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangRpc.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangRpc.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- Rpc's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type + '.tpl.html'"></div>
- </div>
-</div>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<section ng-controller="YMTypeBitCtrl as yangTypeBit"
- layout="row"
- flex="50"
- class="md-whiteframe-z2 box-container"
- layout-wrap
- layout-padding>
-
- <md-checkbox ng-model="type.bitsValues[$index]"
- ng-repeat="bit in type.getChildren('bit')"
- ng-true-value="1"
- ng-false-value="0"
- ng-change="yangTypeBit.valueChanged()"
- ng-readonly="{{ yangOutput.notEditable }}"
- aria-label="{{bit.label}}">
- {{bit.label}}
- </md-checkbox>
-</section>
+++ /dev/null
-<section ng-controller="YMTypeBooleanCtrl as yangTypeBolean" layout="row" class="layout-row flex-center">
- <span class="mr8">F</span>
- <md-switch ng-model="node.value"
- id="{{ node.label + node.id }}"
- aria-label="Boolean"
- ng-readonly="{{ yangOutput.notEditable }}">
- </md-switch>
- <span>T</span>
-</section>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<section ng-controller="YMTypeEmptyCtrl as yangTypeEmpty"
- layout="row"
- flex="50"
- class="md-whiteframe-z2 box-container"
- layout-wrap
- layout-padding>
-
- <md-checkbox ng-model="type.emptyValue"
- ng-true-value="1"
- ng-false-value="0"
- ng-change="yangTypeEmpty.valueChanged()"
- ng-readonly="{{ yangOutput.notEditable }}"
- aria-label="{{type.label}}"></md-checkbox>
-</section>
+++ /dev/null
-<md-input-container ng-controller="YMTypeEnumCtrl as yangTypeEnum">
- <md-select ng-model="type.selEnum" md-on-close="yangTypeEnum.valueChanged()" ng-readonly="{{ yangOutput.notEditable }}">
- <md-option ng-repeat="enum in type.getChildren('enum')" ng-value="enum">
- {{enum.label}}
- </md-option>
- </md-select>
-</md-input-container>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-input-container md-no-float class="full_width">
- <input ng-change="yangType.valueChanged()" ng-model="node.value" aria-label="{{node.value}}" placeholder="{{type.label}}"
- ng-readonly="{{ yangOutput.notEditable }}" class="full_width">
- <md-tooltip md-direction="top">{{type.label}}</md-tooltip>
-</md-input-container>
-
-<md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-show="type.errors.length > 0">
- <md-tooltip md-direction="top">{{type.errors.join('\n')}}</md-tooltip>
- error_outline
-</md-icon>
+++ /dev/null
-<md-content flex="nogrow" md-whiteframe="2" class="box-container union">
- <md-tabs md-dynamic-height
- md-border-bottom
- md-no-pagination
- md-stretch-tabs="always"
- class="union-tabs">
- <md-tab ng-repeat="type in type.getChildren('type') track by $index">
- <md-tab-label>
- <!--<md-tooltip md-direction="top">{{type.label}}</md-tooltip>-->
- {{type.label}}
- </md-tab-label>
- <md-tab-body>
- <md-content class="md-padding"
- ng-include="yangForm.viewPath + '/config/types/' + type.label + '.tpl.html'"></md-content>
- </md-tab-body>
- </md-tab>
- </md-tabs>
-</md-content>
+++ /dev/null
-<!-- Previous button -->
-<button ng-click="yangList.shiftDisplayPrev()"
- ng-show="yangList.showPrevButton()">
- <md-icon class="material-icons">{{yangList.showPrevButton() ? 'arrow_back' : ''}}</md-icon>
- <md-tooltip md-direction="top">{{ 'YANGMAN_LIST_PREV_ITEM' | translate }}</md-tooltip>
-</button>
-
-<section ng-repeat="offset in yangList.displayOffsets" class="yangmanModule__right-panel__form__list-item"
- layout="row" layout-align="start center"
- ng-if="yangList.currentDisplayIndex + offset > -1 && node.listData.length > yangList.currentDisplayIndex + offset">
-
- <!-- label -->
- <md-tab-item class="md-tab pointer" ng-click="node.changeActElementData(yangList.currentDisplayIndex + offset)"
- ng-class="{'': yangList.currentDisplayIndex + offset === node.actElemIndex}">
- <div layout="row">
- <span flex="grow">
- {{yangForm.getNodeName(node.localeLabel, node.label)}} {{ yangList.getListName(offset, true).name }}
- </span>
- </div>
-
- <md-tooltip md-direction="top" ng-if="yangList.getListName(offset, false).tooltip.length">
- {{yangList.getListName(offset, false).tooltip}}
- </md-tooltip>
-
- <md-ink-bar class="custom" ng-if="yangList.currentDisplayIndex + offset === node.actElemIndex"></md-ink-bar>
- </md-tab-item>
-
- <!-- remove button -->
- <md-icon md-font-set="material-icons"
- class="pointer"
- ng-click="yangList.removeListElem(yangList.currentDisplayIndex + offset,false)"
- ng-if="(selectedDatastore.label === yangList.constants.DATA_STORE_CONFIG ||
- selectedDatastore.label === yangList.constants.DATA_STORE_OPERATIONS) && !yangList.disableAddingListElement">
- <md-tooltip md-direction="top">{{ 'YANGMAN_LIST_DELETE_ITEM' | translate }}</md-tooltip>
- remove_circle_outline
- </md-icon>
-
- <!-- duplicated key -->
- <md-icon md-font-set="material-icons"
- ng-show="node.doubleKeyIndexes.indexOf(yangList.currentDisplayIndex + offset) > -1"
- ng-if="selectedDatastore.label === yangList.constants.DATA_STORE_CONFIG">
- <md-tooltip md-direction="top">{{ 'YANGMAN_LIST_INDEX_DUPLICATE' | translate }}</md-tooltip>
- error_outline
- </md-icon>
-</section>
-
-<!-- Next button -->
-<button ng-click="yangList.shiftDisplayNext('listData')"
- ng-show="yangList.showNextButton('listData')">
- <md-icon class="material-icons">arrow_forward</md-icon>
- <md-tooltip md-direction="top">{{ 'YANGMAN_LIST_NEXT_ITEM' | translate }}</md-tooltip>
-</button>
+++ /dev/null
-<div ng-controller="YMCaseCtrl as yangCase" ng-show="case.isFilled() && yangCase.empty">
- <!-- case's children -->
- <div ng-repeat="node in case.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + node.type + '.tpl.html'"></div>
-</div>
+++ /dev/null
-<div ng-controller="YMChoiceCtrl as yangChoice"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- choice title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element" ng-click="yangChoice.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Choice label -->
- <p class="top-element" ym-info-box node="node" ng-click="yangChoice.toggleExpanded()">
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangChoice.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- <!-- Choice select -->
- <md-input-container>
- <input ng-model="node.choice.label" aria-label="{{node.choice.label}}" ng-disabled="true">
- </md-input-container>
- </div>
-
- <!-- choice's children -->
- <div ng-repeat="case in node.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + case.type +'.tpl.html'"
- ng-show="node.choice.id === case.id && node.expanded"
- ng-if="!(case.augmentationId && !augmentations.getAugmentation(case.parent, case.augmentationId).expanded)"></div>
-</div>
+++ /dev/null
-<div ng-controller="YMContainerCtrl as yangContainer"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons"
- class="top-icon top-element pointer"
- ng-click="yangContainer.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element pointer" ng-click="yangContainer.toggleExpanded()" ym-info-box node="node">
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangContainer.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- container's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMInputCtrl as yangInput"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangInput.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangInput.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- output's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMLeafListCtrl as yangLeafList"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element" ng-click="yangLeafList.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node" ng-click="yangLeafList.toggleExpanded()">
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangLeafList.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
- </div>
-
- <div ng-repeat="elem in node.value" ng-show="node.expanded">
- <!-- Leaf list values -->
- <md-input-container md-no-float class="input-icon-container full_width">
- <!-- input -->
- <input ng-model="elem.value" aria-label="{{elem.value}}" ng-disabled="true">
- </md-input-container>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMLeafCtrl as yanfLeaf"
- layout="row"
- layout-align="start center"
- class="yangmanModule__right-panel__form__leaf-container"
- ng-show="node.isFilled()">
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yanfLeaf.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- <!-- Empty placeholder for better look -->
- <div class="menu-placeholder" ng-if="!yanfLeaf.isActionMenu() && !yanfLeaf.isNodeInfo()"></div>
-
- <md-input-container>
- <input ng-model="node.value" aria-label="{{node.value}}" ng-disabled="true">
- </md-input-container>
-</div>
+++ /dev/null
-<!-- previous item button -->
-<button ng-click="shiftDisplayPrev()"
- ng-show="showPrevButton()"
- tooltip="{{ 'YANGMAN_LIST_PREV_ITEM' | translate }}"
- class="yangButton iconPrev"></button>
-
-<!-- item list -->
-<div class="listButtonWrapper"
- ng-repeat="offset in displayOffsets"
- ng-if="currentDisplayIndex + offset > -1 && node.filteredListData.length > currentDisplayIndex + offset">
-
- <button class="btn btn-like-tab {{ (currentDisplayIndex + offset === node.actElemIndex ? 'btn-selected':'') }}"
- ng-click="node.changeActElementData(currentDisplayIndex + offset,false)"
- tooltip="{{getListName(offset, false).tooltip}}">
- {{yangForm.getNodeName(node.localeLabel, node.label)}} {{ getListName(offset, true).name }}
- </button>
-</div>
-
-<!-- next item button -->
-<button ng-click="shiftDisplayNext('filteredListData')"
- ng-show="showNextButton('filteredListData')"
- tooltip="{{ 'YANGMAN_LIST_NEXT_ITEM' | translate }}"
- class="yangButton iconNext"></button>
+++ /dev/null
-<div ng-controller="YMListCtrl as yangList"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="container-label">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element pointer" ng-click="yangList.toggleExpanded()">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- list label -->
- <p class="top-element pointer list-label" ng-click="yangList.toggleExpanded()" ym-info-box node="node">
- {{yangForm.getNodeName(node.localeLabel, node.label)}}
- </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangList.isActionMenu()"
- augmentations="augmentations"
- yang-form="yangForm"
- yang-list="yangList"
- node="node"></yang-form-menu>
-
- <!--<ng-include src="currentPath+'/filter.tpl.html'"></ng-include>-->
-
- <section layout="row"
- layout-align="start center"
- class="yangmanModule__right-panel__form__list__paginator"
- ng-include="yangForm.viewPath + '/list-data-top.tpl.html'"
- ng-if="!(node.filteredListData && node.filteredListData.length)"></section>
-
- <div class="listItemWrapper"
- ng-include="yangForm.viewPath + '/config/list-filtered-data-top.tpl.html'"
- ng-if="(node.filteredListData && node.filteredListData.length)"></div>
-
- </div>
-
- <!-- list's children -->
- <div ng-if="node.actElemStructure" ng-show="node.expanded">
- <div ng-repeat="node in node.actElemStructure.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
-
+++ /dev/null
-<div ng-controller="YMOutputCtrl as yangOutput"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangOutput.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangOutput.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- output's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + node.type+'.tpl.html'"
- ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">
- </div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMRpcCtrl as yangRpc"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}"
- ng-show="node.isFilled()">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangRpc.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangRpc.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- Rpc's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)"
- ng-include="yangForm.viewPath + '/operational/' + node.type + '.tpl.html'"></div>
- </div>
-</div>
+++ /dev/null
-<div ng-controller="YMRpcCtrl as yangRpc"
- class="yangmanModule__right-panel__form__element-container"
- ng-class="{'expanded' : node.expanded}">
-
- <!-- container title -->
- <div layout="row"
- layout-align="start center"
- class="pointer container-label"
- ng-click="yangRpc.toggleExpanded()">
-
- <!-- Expand Icon -->
- <md-icon md-font-set="material-icons" class="top-icon top-element">
- <md-tooltip md-direction="left">{{ 'YANGMAN_SHOW_HIDE_CON' | translate }}</md-tooltip>
- {{node.expanded ? 'keyboard_arrow_down':'keyboard_arrow_right'}}
- </md-icon>
-
- <!-- Container label -->
- <p class="top-element" ym-info-box node="node"> {{yangForm.getNodeName(node.localeLabel, node.label)}} </p>
-
- <!-- Action menu -->
- <yang-form-menu is-action-menu="yangRpc.isActionMenu()"
- augmentations="augmentations"
- node="node"></yang-form-menu>
-
- </div>
-
- <!-- Rpc's children -->
- <div ng-if="node.expanded">
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | ymOnlyConfigElem"
- ng-include="yangForm.viewPath + '/config/' + node.type + '.tpl.html'"></div>
- </div>
-</div>
+++ /dev/null
-<textarea ng-model="requestData.data"
- ui-codemirror
- id="request-data-{{requestData.type | lowercase}}"
- ui-codemirror-opts="requestData.dataEditorOptions"
- class="codemirror-container">
-</textarea>
-
-<div class="paramsBox" ng-show="requestData.paramsArray.length">
- <div ng-repeat="param in requestData.paramsArray" class="line">
- <strong id= "code-mirror-param-name-{{$index}}"><<{{param.name}}>></strong> :
- <span id="code-mirror-param-value-{{$index}}">{{param.value !== undefined ? param.value : 'YANGMAN_PARAM_DONT_REPLACE' | translate}}</span>
- </div>
-</div>
+++ /dev/null
-<md-content layout="column" layout-wrap class="md-padding" ng-controller="RequestHeaderCtrl as requestHeader">
- <section layout="row">
- <!-- Methods selector -->
- <md-input-container flex="initial">
- <md-select ng-model="requestHeader.selectedOperation"
- md-on-close="requestHeader.setJsonView()"
- id="request-selected-operation"
- placeholder="{{'YANGMAN_SEL_METHOD' | translate}}">
-
- <md-option ng-value="operation" ng-repeat="operation in requestHeader.selectedOperationsList">
- {{ operation }}
- </md-option>
- </md-select>
- </md-input-container>
-
- <!-- Request url input -->
- <section flex layout="row" layout-wrap>
- <md-input-container flex md-no-float ng-if="rightPanelSection === requestHeader.constants.DISPLAY_TYPE_REQ_DATA">
- <input type="text"
- ng-model="requestHeader.requestUrl"
- id="request-url"
- placeholder="{{'YANGMAN_REQ_URL' | translate}}"
- spellcheck="false">
- </md-input-container>
-
- <div ng-repeat="pathElem in selectedSubApi.pathArray track by $index"
- flex="nogrow"
- id="path-elem-{{$index}}"
- layout="row"
- ng-init="parentIndex = $index"
- ng-if="rightPanelSection === requestHeader.constants.DISPLAY_TYPE_FORM">
-
- <md-input-container flex="nogrow" md-no-float class="input-span nrp" >
- <span class="md-input" disabled>
- {{(pathElem.moduleChanged ? '/' + pathElem.module + ':' : '/') + pathElem.name}}
- {{pathElem.hasIdentifier() ? '/' : ''}}
- </span>
- </md-input-container>
-
- <!-- Identifier's inputs -->
- <md-input-container flex="nogrow" md-no-float
- ng-repeat="identifier in pathElem.identifiers"
- ng-show="pathElem.hasIdentifier()"
- layout="column"
- class="nrp">
-
- <input type="text"
- class="input-identifier"
- ng-change="requestHeader.fillNodeData(pathElem, identifier)"
- ng-model="identifier.value"
- id="path-elem-{{parentIndex}}-value"
- aria-label="{{identifier.value}}"
- ng-class="{'md-has-error': !identifier.value.length}"
- spellcheck="false">
- <!-- input error message -->
- <div ng-show="!identifier.value.length" class="md-custom-error">
- {{'YANGMAN_INPUT_REQUIRED' | translate}}
- </div>
- </md-input-container>
- </div>
-
- <md-input-container flex md-no-float
- ng-if="rightPanelSection === requestHeader.constants.DISPLAY_TYPE_FORM"
- class="input-span">
-
- <input type="text"
- placeholder="{{!selectedSubApi ? ('YANGMAN_REQ_URL' | translate) : ''}}"
- ng-disabled="true">
- </md-input-container>
- </section>
-
- <!-- Action buttons -->
- <md-input-container flex="nogrow" layout="row" layout-align="start start" class="action-buttons">
- <!-- Execute action button -->
- <md-button class="md-raised md-primary has-progress"
- id="send-request"
- ng-click="requestHeader.prepareDataAndExecute(
- main.modulesTreeDisplayed() ? main.leftPanelShowModule : null
- )">
- {{'YANGMAN_SEND' | translate}}
- </md-button>
-
- <!-- Save request -->
- <md-button class="md-raised md-warn" id="save-request" ng-click="requestHeader.saveRequestToCollection($event)">
- {{'YANGMAN_SAVE' | translate}}
- </md-button>
-
- <!-- Parameters button -->
- <md-button class="md-raised" id="show-parameters" ng-click="requestHeader.showParamsAdmin($event)">
- {{'YANGMAN_PARAMETERS' | translate}}
- </md-button>
-
- <!-- sub api custom functionality menu -->
- <!-- todo: add ids for testing -->
- <md-menu ng-show="selectedSubApi.custFunct.length || requestHeader.selectedPluginsButtons.length">
- <md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
- <md-icon md-font-set="material-icons">more_vert</md-icon>
- <md-tooltip md-direction="top">{{ 'YANGMAN_PLUGINS_MENU' | translate}}</md-tooltip>
- </md-button>
-
- <md-menu-content>
- <!-- plugins buttons -->
- <md-menu-item ng-repeat="pluginFunctionality in selectedSubApi.custFunct"
- ng-hide="requestHeader.selectedPlugin">
- <md-button ng-click="requestHeader.executePluginFunctionality(pluginFunctionality)">
- {{ pluginFunctionality.label | translate }}
- </md-button>
- </md-menu-item>
-
- <!-- plugin own buttons -->
- <md-menu-item ng-repeat="button in requestHeader.selectedPluginsButtons" ng-show="button.show()">
- <md-button ng-click="button.onclick()">
- {{ button.label | translate }}
- </md-button>
- </md-menu-item>
- </md-menu-content>
- </md-menu>
- </md-input-container>
- </section>
-
- <md-divider flex="grow"></md-divider>
-
- <section layout="row" layout-align="start center" class="status-bar">
- <!-- Data type switcher - radio button -->
- <md-radio-group ng-model="requestHeader.selectedShownDataType"
- class="type-switcher"
- layout="row"
- flex="25"
- layout-align="start center"
- ng-change="requestHeader.changeDataType()">
- <md-radio-button id="shown-data-type-form" value="form" aria-label="{{'YANGMAN_FORM' | translate}}">
- {{'YANGMAN_FORM' | translate}}
- </md-radio-button>
-
- <md-radio-button id="shown-data-type-json" value="req-data" aria-label="{{'YANGMAN_JSON' | translate}}">
- {{'YANGMAN_JSON' | translate}}
- </md-radio-button>
- </md-radio-group>
-
- <md-checkbox class="mb0" flex layout-align="center end" ng-model="requestHeader.fillFormWithReceivedData" ng-hide="requestHeader.selectedShownDataType==='req-data'">
- {{ 'YANGMAN_FILL_FORM_WITH_RECEIVED' | translate }}
- </md-checkbox>
-
- <section layout="row" flex layout-align="center end" ng-show="requestHeader.selectedShownDataType==='req-data'">
- <md-checkbox class="mb0" flex layout-align="center end" ng-model="main.jsonView.sent" >
- {{ 'YANGMAN_SHOW_SENT_DATA' | translate }}
- </md-checkbox>
- <md-checkbox class="mb0" flex layout-align="center end" ng-model="main.jsonView.received">
- {{ 'YANGMAN_SHOW_RECEIVED_DATA' | translate }}
- </md-checkbox>
- </section>
-
- <!-- Request info box -->
- <md-content flex="40"
- layout="row"
- layout-align="end center"
- class="status-text">
-
- <!-- Status -->
- <span flex="30">
- {{'YANGMAN_STATUS' | translate}}:
- <span id="info-request-status" ng-if="requestHeader.statusObj && requestHeader.statusObj.statusText">
- {{requestHeader.statusObj.status}} {{requestHeader.statusObj.statusText}}
- </span>
- <span id="info-request-status" ng-if="!(requestHeader.statusObj && requestHeader.statusObj.statusText)">
- ...
- </span>
- </span>
-
- <!-- Request time -->
- <span flex="30">
- {{'YANGMAN_TIME' | translate}}:
- <span id="info-request-execution-time" ng-if="requestHeader.statusObj && requestHeader.statusObj.time">
- {{requestHeader.statusObj.time}} ms
- </span>
- <span id="info-request-execution-time" ng-if="!(requestHeader.statusObj && requestHeader.statusObj.time)">
- ...
- </span>
- </span>
- </md-content>
- </section>
-</md-content>
-<md-progress-linear md-mode="indeterminate" ng-show="main.executingRequestProgress"></md-progress-linear>
+++ /dev/null
-<div class="main yangmanModule row" ui-view></div>
+++ /dev/null
-define([], function () {
- 'use strict';
-
- angular.module('app.yangman').filter('ymOnlyConfigElem', YmOnlyConfigElemFilter);
-
- YmOnlyConfigElemFilter.$inject = ['NodeUtilsService'];
-
- function YmOnlyConfigElemFilter(NodeUtilsService){
- return function (nodes){
- if (nodes.length) {
- nodes = nodes.filter(function (n){
- return NodeUtilsService.isOnlyOperationalNode(n);
- });
- }
-
- return nodes;
- };
- }
-
-});
+++ /dev/null
-// general
-@fontColor : #505050;
-@fontColorLight: #a9a9a9;
-@fontHighlight: orange;
-@listBackColor: #f8f8f8;
-@listActiveColor: #E7E7E7;
-@appBackColor: #ffffff;
-@unactiveTabFontColor: #a9a9a9;
-@colorActive: rgb(64,196,255);
-@popupHeaderColor: #ffffff;
-
-// yangman
-@leftPanelBackColor: #f3f3f3;
-@infoBoxBackColor: rgba(255, 255, 255, 0.25);
-@infoBoxBorderColor: #aad1f9;
-@dataStoreListHoverColor: #dadada;
-@dataStoreListShadowColor: rgba(0,0,0,.14);
-@dataStoreListBorderColor: rgba(0,0,0,0.12);
-@dashedBorderColor: rgba(0,0,0,0.54);
-@inputColor: rgba(0,0,0,0.87);
-@reqMethodGet: #63d33b;
-@reqMethodPut: #6fbad3;
-@reqMethodPost: #ea9c30;
-@reqMethodDelete: #eabb2f;
-@reqError: #ff0000;
-@darkBlueColor: rgb(33,150,243);
-
-// helpers
-.pointer{
- cursor: pointer;
- outline: 0 none;
-}
-
-.no-wrap{
- white-space: nowrap;
-}
-
-.text-center{
- text-align: center;
-}
-
-.text-left{
- text-align: left;
-}
-
-.h100{
- height: 100%;
-}
-
-.mb30{
- margin-bottom: 30px;
-}
-
-.mr8{
- margin-right: 8px;
-}
-
-.nrp{
- padding-right: 0!important;
-}
-
-.flex-center {
- align-items: center;
- justify-content: center;
-}
-
-// general
-.md-open-menu-container{
- span{
- color: @fontColor;
- }
-
- h5{
- margin: 0 16px;
- color: @unactiveTabFontColor;
-
- md-icon{
- color: @unactiveTabFontColor;
- font-size: 18px;
- }
- }
-
- md-menu-content{
- .info-box{
- position: absolute;
- left: 100%;
- top: 0;
- margin-left: 10px;
- min-width: 300px;
- padding: 0;
- z-index: 10;
- background: #fff;
- -webkit-transition: all 150ms linear;
- -moz-transition: all 150ms linear;
- -ms-transition: all 150ms linear;
- -o-transition: all 150ms linear;
- transition: all 150ms linear;
- opacity: 1;
- max-height: 300px;
- overflow-y: auto;
- overflow-x: hidden;
-
- &__padding{
- padding: 16px;
- }
-
- &.ng-hide{
- opacity: 0;
- }
- }
- }
-
- svg {
- border: none;
- border-radius: 0px;
- background-image: none;
- }
-
- .icon-wrapper{
- padding: 0 16px;
- }
-}
-
-.md-select-menu-container{
- z-index: 1000;
-}
-
-.svg-icon{
- width: 24px;
- height: 24px;
- padding-top: 4px;
- padding-bottom: 4px;
- color: @dashedBorderColor;
-}
-
-md-ink-bar.custom{
- width: 100%;
- color: @colorActive;
- left: 0;
- background: @colorActive;
-}
-
-button{
- label{
- font-weight: normal;
- }
-}
-
-.ui-resizable-e{
- cursor: e-resize;
- height: 100%;
- width: 7px;
- top: 0;
- position: absolute;
- right: 0;
-}
-
-md-dialog{
- md-autocomplete{
- height: 50px !important;
- }
-}
-
-.info-box-container{
- position: relative;
-
- &__hover-wrapper{
- display: inline-block;
- width: 100%;
- }
-
- .info-box{
- position: absolute;
- left: 90%;
- top: 0;
- margin-left: 10px;
- margin-bottom: 10px;
- min-width: 300px;
- padding: 0;
- z-index: 10;
- background: #fff;
- -webkit-transition: all 150ms linear;
- -moz-transition: all 150ms linear;
- -ms-transition: all 150ms linear;
- -o-transition: all 150ms linear;
- transition: all 150ms linear;
- opacity: 1;
- max-height: 300px;
- overflow-y: auto;
- overflow-x: hidden;
-
- &__padding{
- padding: 16px;
- }
-
- &.ng-hide{
- opacity: 0;
- }
-
- span{
- color: @fontColor;
- }
- }
-
- md-menu-divider{
- margin-top: 4px;
- margin-bottom: 4px;
- height: 1px;
- min-height: 1px;
- max-height: 1px;
- width: 100%;
- background-color: @dataStoreListBorderColor;
- display: block;
- }
-}
-
-md-input-container{
- position: relative;
-
- input.md-has-error{
- border-color: @reqError!important;
- }
-
- .md-custom-error{
- color: @reqError;
- margin-top: 4px;
- margin-left: 3px;
- font-size: 11px;
- line-height: 14px;
- -webkit-order: 3;
- -ms-flex-order: 3;
- order: 3;
- }
-}
-
-.md-dialog-container{
- z-index: 99;
-}
-
-// yangman
-.yangmanModule{
- background-color: @appBackColor;
- color: @fontColor;
- height: 100%;
-
- .ui-resizable-s{
- height: 13px;
- }
-
- .box-container{
- padding: 16px;
- margin: 8px 0;
- }
-
- .historyTab{
- height: calc(~'100% - 62px');
- }
-
- .collectionsTab{
- height: calc(~'100% - 62px');
- }
-
-
- p{
- margin: 0;
- }
-
- h1, h2, h3, h4, h5, h6{
- color: @fontColor;
- }
-
- .scrollableY{
- overflow-y: auto;
- height: 100%;
- }
-
- .scrollableX{
- overflow-x: auto;
- //width: 100%;
- }
-
- .highlight{
- color: @darkBlueColor;
- }
- md-tabs-content-wrapper{
- top: 0!important;
- }
-
- // modules switcher -> list && detail
- .arrow-switcher{
- position: absolute;
- top: 2px;
- cursor: pointer;
- outline: 0 none;
- z-index: 10;
- font-size: 2.5em;
- left: -11px;
- -webkit-transition: all 250ms ease-out;
- -moz-transition: all 250ms ease-out;
- -ms-transition: all 250ms ease-out;
- -o-transition: all 250ms ease-out;
- transition: all 250ms ease-out;
-
- &__left{
- //right: -11px;
- left: calc(~'100% - 24px');
- -moz-transform: rotate(180deg);
- -webkit-transform: rotate(180deg);
- -o-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
- }
-
- &.ng-hide{
- opacity: 0;
- }
- }
-
- md-dialog{
- h2{
- color: @popupHeaderColor;
- }
-
- &-actions{
- button{
- span{
- color: @fontColor;
- }
- }
- }
-
-
- }
- // left panel
- &__left-panel{
- overflow-x: hidden;
- background: @leftPanelBackColor;
- position: relative;
-
- &__search{
- padding: 10px 13px;
- background: @listBackColor;
- min-height: 62px;
-
- .md-errors-spacer{
- display: none;
- }
-
- md-icon{
- color: @dashedBorderColor;
- }
-
- .collection-button-container {
- margin-top: 6px;
- }
-
- button {
- margin: 0;
- min-width: 35px;
- }
-
- md-menu button {
- margin-top: 6px;
- }
-
-
-
-
-
- .md-has-icon.modules-list-search{
- padding: 2px 25px;
- margin: 0;
-
- .md-input{
- width: auto;
- order: 0;
- }
-
- button{
- margin: 0;
- padding: 0;
- min-width: 0;
- min-height: 0;
- line-height: normal;
-
- &:hover, &:focus, &:active, &:visited{
- background: transparent;
- }
-
- .md-ripple-container{
- display: none;
- }
- }
- }
- }
-
- md-tabs,
- md-tab-content > div,
- md-content,
- .h100{
- height: 100%;
- }
-
- md-tabs-canvas{
- border-bottom: 1px solid #dbdbdb;
- padding-top: 30px;
- height: 78px;
- }
-
- md-ink-bar{
- height: 4px;
- }
-
- md-content{
- background: transparent;
- }
-
- .md-tab{
- span{
- color: @unactiveTabFontColor;
- }
-
- &.md-active{
- span{
- color: @fontColor;
- }
- }
- }
-
- &__detail-list-tabs-container{
- > md-tabs-wrapper{
- display: none;
- }
-
- .inline-tabs > md-tabs-wrapper{
- display: inline;
- }
- }
-
- .searchBox{
- height: auto;
- padding: 10px 13px;
- font-size: 14px;
-
- #importCollection{
- display: none;
- }
-
- label{
- margin-bottom: 0;
- }
-
- md-icon.clickable{
- cursor: pointer;
- }
-
- #importParameters{
- display: none;
- }
-
- > button{
- margin: 6px 0 0 0;
- height: 30px;
- min-width: 35px;
- padding: 0;
- }
-
- md-menu{
- margin: 0;
- height: 30px;
- min-width: 35px;
- padding: 0;
-
- > button{
- min-width: 35px;
- }
- }
-
-
- }
-
- //loading panel
- &__loading-container {
- display: block;
- position: relative;
- border: 2px solid @infoBoxBorderColor;
- transition: opacity 0.1s linear;
- border-top: 0px;
- margin: 10px;
-
- .bottom-block {
- display: block;
- position: relative;
- background-color: @infoBoxBackColor;
- height: 85px;
-
- > span {
- display: inline-block;
- margin-top: 10px;
- padding: 25px;
- font-size: 0.9em;
- }
- }
- }
- }
-
- // right panel
- &__right-panel{
- height: 100%;
-
- .bottom-content{
- height: calc(~'100% - 195px');
- overflow-y: auto;
- margin-top: 25px;
-
- .codemirror-container{
- height: 100%;
- }
- }
-
- &__header{
- margin-bottom: 30px;
-
- > md-content{
- background: @leftPanelBackColor;
-
- md-content{
- background: transparent;
- }
- }
-
- md-progress-linear{
- margin-top: -5px;
- }
-
- md-input-container{
- margin: 0;
- }
-
- .md-errors-spacer{
- display: none;
- }
-
- .input-span{
- padding-top: 3px;
- }
-
- .input-identifier{
- max-width: 80px;
- border-color: @colorActive;
- padding-left: 0;
- }
-
- md-divider{
- margin-top: 20px;
- }
-
- .status-bar{
- min-height: 60px;
-
- .status-text{
- span span{
- color: @colorActive;
- }
- }
- }
- }
-
- &__req-data{
-
- &__header{
-
- h5{
- padding-top: 10px;
- }
-
- button{
- margin: 0;
- margin-bottom: 2px;
- min-width: 0!important;
- width: 46px;
-
- .material-icons{
- margin-bottom: 6px;
- vertical-align: bottom;
- }
-
- .bigger{
- font-size: 25px;
- }
-
- .smaller{
- font-size: 18px;
- }
-
- .additional{
- margin-left: -15px;
- vertical-align: top;
- }
- }
-
- }
-
- > div{
- height: 100%;
- padding-right: 2px;
- padding-bottom: 10px;
- position: relative;
-
-
- > div:not(.ui-resizable-handle) {
- height: calc(~'100% - 28px');
- overflow-y: auto;
- }
-
- h5{
- margin-top: 0;
- }
-
- &.half-size{
- height: 50%;
- }
- }
-
- .paramsBox{
- position: absolute;
- top: 50px;
- right: 26px;
- background-color: rgba(235, 235, 228, 0.62);
- padding: 15px;
- }
-
- .CodeMirror { height: 100%; }
-
- md-toast{
- margin-top: 24px;
- }
- }
-
- &__form{
-
- .box-container.union{
- padding: 0;
- }
-
- .union-tabs{
- margin: 8px 0;
-
- md-content{
- min-width: 250px;
- }
-
- .md-tab{
- padding: 6px 12px;
- }
-
- md-pagination-wrapper,
- md-tabs-canvas{
- height: 36px;
- }
- }
-
- md-input-container{
- margin: 0;
-
- > md-icon {
- left: auto;
- right: 2px;
- color: @dashedBorderColor;
- }
-
- &.md-has-icon{
- padding-right: 36px;
- padding-left: 0px;
- }
-
- .md-errors-spacer{
- display: none;
- }
- }
-
- .md-menu.menu-container{
- position: relative;
- padding: 0;
-
-
-
- .md-button{
- margin: auto 0;
- text-transform: none;
- text-align: start;
- height: 100%;
- padding-left: 16px;
- padding-right: 16px;
- display: inline-block;
- width: 100%;
-
- &.md-icon-button{
- padding: 0 8px;
- }
-
- }
-
- .yang-menu-content{
- box-shadow: 1px 1px 10px #888;
- position: absolute;
- left: 0;
- z-index: 100;
- background: #fff;
- padding: 8px 0;
-
- md-divider{
- padding: 4px 0 4px 0;
- }
-
- .title{
- color: #a9a9a9;
- margin: 0 16px;
-
- md-icon{
- font-size: 18px;
- }
- }
-
- .yang-menu-item{
- min-height: 48px;
- height: 48px;
-
- md-icon{
- margin: auto 16px auto 0;
- }
- }
-
- }
-
- .info-box{
- position: absolute;
- left: 100%;
- top: 0;
- margin-left: 10px;
- min-width: 300px;
- padding: 0;
- z-index: 10;
- background: #fff;
- transition: all 150ms linear;
- opacity: 1;
- max-height: 300px;
- overflow-y: auto;
- overflow-x: hidden;
-
- &__padding{
- padding: 16px;
- }
-
- &.ng-hide{
- opacity: 0;
- }
- }
-
- }
-
- .menu-placeholder{
- padding: 11px 26px;
- }
-
- p.top-element{
- margin: 5px 10px 0 0;
- word-wrap: break-word;
- width: 100px;
-
- &.list-label{
- color: @colorActive;
- }
- }
-
- &__element-container{
- margin: 25px 5px 5px 15px;
- padding: 5px;
-
- &.expanded{
- border-left: 1px dashed @dashedBorderColor;
- }
-
- md-input-container{
- &.input-icon-container{
- margin-left: 15px;
-
- md-icon{
- margin: 0;
- }
- }
- }
-
- .container-label{
- margin: -20px 0 10px -17px;
-
- md-icon{
- margin: 0;
- }
- }
- }
-
- &__leaf-container{
- padding-left: 10px;
-
- md-input-container,
- md-switch,
- md-checkbox{
- margin: 5px 0;
- }
- }
-
- &__list{
- &__paginator{
- //margin-left: 40px;
- button {
- background: transparent;
- border: 0;
- outline: 0 none;
- }
- }
- }
-
- &__list-item{
- margin: 0 5px;
-
- md-tab-item{
- position: relative;
-
- &.md-tab{
- padding: 6px 12px;
- }
- }
- }
- }
- }
-
-
- //modules list
- &__modules-list{
- padding: 0;
- background: @listBackColor;
- height: calc(~"100% - 62px")!important;
-
- h4{
- margin: 0;
- padding: 10px 20px;
- }
-
- &__item{
- padding: 0!important;
-
- .title{
- -webkit-transition: all 150ms ease;
- -moz-transition: all 150ms ease;
- -ms-transition: all 150ms ease;
- -o-transition: all 150ms ease;
- transition: all 150ms ease;
- }
-
- &.expanded{
- background: @listActiveColor;
- }
-
- &.selected{
- .title{
- background-color: @colorActive!important;
- color: #fff!important;
- }
- }
-
- p.top-element{
- padding: 6px 0;
- }
-
- md-icon{
- margin: 12px 16px;
-
- &.top-element{
- margin: 0;
- padding: 12px 16px;
- width: 56px;
- height: 48px;
- }
- }
-
- &:hover{
- .title{
- background: @listActiveColor;
- }
- }
- }
- }
-
- // datastore list
- &__datastore-list{
- padding: 0;
- border-top: 1px solid @dataStoreListBorderColor;
- background: @listBackColor;
- -webkit-box-shadow:inset 0 7px 7px -5px @dataStoreListShadowColor;
- box-shadow:inset 0 7px 7px -5px @dataStoreListShadowColor;
-
- md-list-item {
- min-height: 0;
- padding: 0;
- font-size: .85em;
-
- &:hover{
- background: @dataStoreListHoverColor;
- }
-
- md-icon{
- margin: 6px 16px 6px 48px;
- font-size: 20.4px;
- }
- }
- }
-
- // module history collections tabs
- &__mhc-tabs{
-
- md-list-item{
- .md-no-style{
- padding: 0;
- }
- }
-
- > md-tabs-content-wrapper{
- height: calc(~'100% - 78px');
-
- > md-tab-content{
- height: 100%;
- }
- }
- }
-
- // module detail
- &__module-detail{
- h4{
- padding-top: 30px;
- margin: 0 15px;
- }
-
- .tabs{
- height: calc(~'100% - 49px');
-
- md-tabs-canvas{
- padding-top: 0;
- height: 48px;
- }
-
- > md-tabs-content-wrapper{
- height: calc(~'100% - 48px');
-
- > md-tab-content{
- height: 100%;
- }
- }
-
- .md-tab{
- padding: 0;
- }
-
- md-tab-item{
- span{
- outline: 0 none;
- padding: 12px 24px;
- }
- }
- }
-
- > div{
- height: 100%;
-
- > md-content{
- overflow-y: hidden;
- }
- }
- }
-
- &__requests-list{
- background: @listBackColor;
- padding: 0;
-
- .md-subheader{
- background: none;
-
- }
-
- md-list{
- padding-top: 0;
- }
-
- &__item-container{
- position: relative;
- }
-
- &__group{
-
- padding: 0!important;
-
- &__item{
-
- &.selected{
- background-color: @colorActive;
-
- .yangmanModule__requests-list__group__item__path{
- color: #fff;
- }
-
- .yangmanModule__requests-list__group__item__method{
- .GET, .PUT, .POST, .DELETE, .error{
- color: #fff;
- }
- }
- }
-
- &__path{
- white-space: -webkit-pre-wrap; /*Chrome & Safari */
- word-break: break-all;
- white-space: normal;
- line-height: 18px;
- color: @fontColor;
- padding: 5px 0;
-
- p{
- padding: 0 9px;
- }
- }
-
- &__method{
-
- padding-left: 17px;
- min-width: 70px;
-
- .GET{
- color: @reqMethodGet;
- }
- .PUT{
- color: @reqMethodPut;
- }
- .POST{
- color: @reqMethodPost;
- }
- .DELETE{
- color: @reqMethodDelete;
- }
- .error{
- color: @reqError;
- }
- }
- }
-
- &__itemMenu{
- position: absolute;
- top: 50%;
- margin: -20px 0 0 0;
- right: 5px;
- padding: 0;
-
- &.selected{
- > button{
- i.material-icons{
- color: #fff;
- }
- }
- }
-
- > button{
- min-width: 0;
- margin: 2px 5px;
-
- i.material-icons{
- vertical-align: middle;
- color: @fontColorLight;
-
- }
- }
-
- }
-
- &__collectionMenu{
- position: relative;
- margin-left: -52px;
- margin-right: 6px;
-
- > button{
- min-width: 0;
- margin: 2px 5px;
-
- i.material-icons{
- vertical-align: middle;
- color: @fontColorLight;
- }
- }
-
- }
- }
-
- &__collections-list{
- padding: 0;
- background: @listBackColor;
- height: 100%;
- }
-
- &__collection{
- padding: 0;
- background: @listBackColor;
-
- &__requests{
- padding: 0;
- border-top: 1px solid @dataStoreListBorderColor;
- background: @listBackColor;
- -webkit-box-shadow:inset 0 7px 7px -5px @dataStoreListShadowColor;
- box-shadow:inset 0 7px 7px -5px @dataStoreListShadowColor;
- }
-
- .md-subheader{
- background: none;
- }
-
- .md-subheader-inner{
- padding: 0;
- }
-
- .material-icons{
- margin: 15px 25px;
- }
-
- &.expanded{
- background: @listActiveColor;
- }
-
- p{
- line-height: 18px;
- padding: 12px 0;
-
- .desc{
- color: @fontColorLight;
- }
- }
-
- }
-
- }
-}
-.reqMenu{
- button{
- span{
- color: @fontColor
-
- }
- i.material-icons{
- vertical-align: middle;
- margin-right: 5px;
- margin-bottom: 5px;
- }
- }
-}
-
-
-.md-autocomplete-suggestions{
- span{
- color: @fontColor;
- }
-}
-
-md-dialog{
-
- .md-toolbar-tools{
- button{
- min-width: auto;
- }
- }
-
- md-dialog-content, md-dialog-actions{
- h2, h3, span{
- color: @fontColor;
- }
-
- h3{
- font-size: 14px;
- font-weight: bold;
- }
-
- }
-
-}
-
-// directives
-.directive{
- &__abn-tree{
- padding: 0;
- display:inline-block;
- white-space: nowrap;
- min-width: 100%;
-
- md-icon{
- margin: 6px 16px!important;
- }
-
- md-list-item{
- min-height: 0;
-
- &.active{
- background: @listActiveColor;
- }
-
- .md-no-style{
- padding: 0;
-
- &.md-button{
- white-space: nowrap;
- }
- }
-
- .md-list-item-inner{
- min-height: 0;
- }
-
- .empty-box{
- display: inline-block;
- margin-top: -10px;
- margin-left: 27px;
- border-left: 1px dashed @dashedBorderColor;
- height: 36px;
- width: 1px;
- }
-
- .md-button{
- overflow: visible;
- }
-
- .tree-label{
- padding-right: 15px;
- }
- }
- }
-}
-
-.paramsAdminDialog{
-
- .md-dialog-content{
-
- height: 400px;
-
- button{
- height: 30px;
- min-width: 30px;
- margin-top: 15px;
- i{
- vertical-align: middle;
- }
- }
-
-
- }
- &__searchBox{
-
- height: 80px;
-
- > button{
- margin-top: 13px!important;
- margin-right: 0px!important;
- }
-
- #importParameters{
- display: none;
- }
-
- label{
- md-icon{
- color: @fontColor;
- }
- }
-
- md-menu{
- button{
- margin-top: 5px!important;
- }
- }
-
- input{
- border: none;
- height: auto;
- outline: none;
- }
- }
- &__paramsList{
- width: 450px;
- padding-top: 35px;
-
- > div{
- min-height: 60px;
- margin-top: 10px;
- }
-
-
- }
-
-
-}
-
-.settingsForm{
- min-width: 400px;
-}
-
-.mb0{
- margin-bottom: 0;
-}
-
-input:-moz-read-only {
- color: rgba(140, 140, 140, 0.87);
-}
-
-input:read-only {
- color: rgba(140, 140, 140, 0.87);
-}
-
-md-tooltip .md-content {
- height: auto;
-}
-
-.full_width {
- width: 100%;
-}
+++ /dev/null
-define([
- 'angular',
- 'app/routingConfig',
- 'Restangular',
- 'angular-translate',
- 'angular-translate-loader-partial',
- 'ngMaterial',
- 'ngMessages',
- 'common/yangutils/yangutils.module',
- 'codemirror',
- 'codeMirror-showHint',
- 'codeMirror-jsonParametersHint',
- 'codeMirror-javascriptMode',
- 'codeMirror-matchBrackets',
-], function () {
- 'use strict';
-
- angular.module('app.yangman', [
- 'ui.router.state',
- 'app.core',
- 'app.common.yangUtils',
- 'restangular',
- 'pascalprecht.translate',
- 'ngMaterial',
- 'ngMessages',
- ]);
-
- angular.module('app.yangman')
- .config(YangManConfig)
- .constant('ymUiCodemirrorConfig', {});
-
- function YangManConfig($stateProvider, $mdThemingProvider, $translatePartialLoaderProvider, NavHelperProvider) {
-
- $translatePartialLoaderProvider.addPart('app/yangman/assets/data/locale');
-
- $mdThemingProvider.theme('default')
- .primaryPalette('blue')
- .accentPalette('light-blue');
-
- NavHelperProvider.addControllerUrl('app/yangman/controllers/yangman.controller');
- NavHelperProvider.addToMenu('yangman', {
- link: '#/yangman/index',
- active: 'main.yangman',
- title: 'Yangman',
- icon: 'icon-rocket',
- page: {
- title: 'Yangman',
- description: 'Yangman',
- },
- });
-
- var access = routingConfig.accessLevels;
- $stateProvider.state('main.yangman', {
- url: 'yangman',
- abstract: true,
- views: {
- content: {
- templateUrl: 'src/app/yangman/views/root.tpl.html',
- },
- },
- });
-
- $stateProvider.state('main.yangman.index', {
- url: '/index',
- access: access.admin,
- views: {
- '': {
- controller: 'YangmanCtrl',
- controllerAs: 'main',
- templateUrl: 'src/app/yangman/views/index.tpl.html',
- },
- },
- });
- }
-});
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.yangui.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Yangui Module Resources</description>
- <packaging>jar</packaging>
-
-</project>
+++ /dev/null
-/* \r
- abn-tree.css\r
-\r
- style for the angular-bootstrap-nav-tree\r
- for both Bootstrap 2 and Bootstrap 3\r
-\r
-*/\r
-\r
-\r
-\r
-/* ------------------------------------------\r
-AngularJS Animations...\r
-\r
-The first selector is for Angular 1.1.5\r
-The second selector is for Angular 1.2.0\r
-\r
-*/\r
-.abn-tree-animate-enter,\r
-li.abn-tree-row.ng-enter {\r
- transition: 200ms linear all;\r
- position: relative;\r
- display: block;\r
- opacity: 0;\r
- max-height:0px;\r
-}\r
-.abn-tree-animate-enter.abn-tree-animate-enter-active,\r
-li.abn-tree-row.ng-enter-active{\r
- opacity: 1;\r
- max-height:30px;\r
-}\r
-\r
-.abn-tree-animate-leave,\r
-li.abn-tree-row.ng-leave {\r
- transition: 200ms linear all;\r
- position: relative;\r
- display: block;\r
- height:30px;\r
- max-height: 30px;\r
- opacity: 1;\r
-}\r
-.abn-tree-animate-leave.abn-tree-animate-leave-active,\r
-li.abn-tree-row.ng-leave-active { \r
- height: 0px;\r
- max-height:0px;\r
- opacity: 0;\r
-}\r
-\r
-\r
-/* \r
-------------------------------------------\r
-Angular 1.2.0 Animation \r
-*/\r
-\r
-\r
-.abn-tree-animate.ng-enter{\r
-\r
-}\r
-.abn-tree-animate.ng-enter{\r
-\r
-}\r
-\r
-\r
-\r
-\r
-/*\r
- end animation stuff\r
------------------------------------------\r
- begin normal css stuff\r
-*/\r
-ul.abn-tree{\r
- margin: 10px 0;\r
-}\r
-\r
-ul.abn-tree li.abn-tree-row { \r
- padding: 0px;\r
- margin:0px;\r
-}\r
-\r
-ul.abn-tree li.abn-tree-row a {\r
- padding: 3px 10px;\r
-}\r
-\r
-ul.abn-tree i.indented {\r
- padding: 2px;\r
-}\r
-\r
-.abn-tree {\r
- cursor: pointer;\r
-}\r
-ul.nav.abn-tree .level-1 .indented {\r
- position: relative;\r
- left: 0px;\r
-}\r
-ul.nav.abn-tree .level-2 .indented {\r
- position: relative;\r
- left: 20px;\r
-}\r
-ul.nav.abn-tree .level-3 .indented {\r
- position: relative;\r
- left: 40px;\r
-}\r
-ul.nav.abn-tree .level-4 .indented {\r
- position: relative;\r
- left: 60px;\r
-}\r
-ul.nav.abn-tree .level-5 .indented {\r
- position: relative;\r
- left: 80px;\r
-}\r
-ul.nav.abn-tree .level-6 .indented {\r
- position: relative;\r
- left: 100px;\r
-}\r
-ul.nav.nav-list.abn-tree .level-7 .indented {\r
- position: relative;\r
- left: 120px;\r
-}\r
-ul.nav.nav-list.abn-tree .level-8 .indented {\r
- position: relative;\r
- left: 140px;\r
-}\r
-ul.nav.nav-list.abn-tree .level-9 .indented {\r
- position: relative;\r
- left: 160px;\r
-}\r
-\r
-ul.nav.nav-list.abn-tree .level-10 .indented {\r
- position: relative;\r
- left: 180px;\r
-}\r
-\r
-ul.nav.nav-list.abn-tree .level-11 .indented {\r
- position: relative;\r
- left: 200px;\r
-}\r
-\r
-ul.nav.nav-list.abn-tree .level-12 .indented {\r
- position: relative;\r
- left: 220px;\r
-}\r
-\r
-ul.nav.nav-list.abn-tree .level-13 .indented {\r
- position: relative;\r
- left: 240px;\r
-}\r
-\r
-ul.nav.nav-list.abn-tree .level-14 .indented {\r
- position: relative;\r
- left: 260px;\r
-}\r
-\r
-.nav.abn-tree > li > a:hover {\r
- background: #808285;\r
-}\r
+++ /dev/null
-{
- "MODULE": "Module",
- "MODULE_API": "Module API",
- "DEVICE": "Device",
- "ENTRY": "Entry",
- "API": "API",
- "GET_APIS": "Get APIs",
- "SHOW_PREVIEW": "Show preview",
- "RELOAD_FLOWS": "Reload flows",
- "EDIT_FLOW": "Edit flow",
- "DELETE_FLOW": "Delete flow",
- "CLEAR_INPUTS": "Clear",
- "SEND_REQUEST": "Send",
- "SEND_SUCCESS": "Request sent successfully",
- "SEND_ERROR": "Error sending request",
- "SEND_OPER_ERROR": "Deploying flow to device failed",
- "SEND_WAIT": "Sending request",
- "ADD_ELEM": "Add",
- "REMOVE_ELEM": "Remove",
- "PROCESSING_MODULES": "Loading modules from controller",
- "PROCESSING_MODULES_SUCCESS": "Loading completed successfully",
- "PROCESSING_MODULES_ERROR": "Error in loading modules... ",
- "PARSE_JSON_FILE_ERROR" : "Error in parsing JSON file",
- "LOAD_COLLECTIONS_SUCCESS" : "Collection was loaded successfully",
- "LOAD_PARAMETERS_SUCCESS" : "Parameters was loaded successfully",
- "EXPORT_COLLECTIONS_SUCCESS" : "Collection was exported successfully",
- "EXPORT_COLLECTIONS_ERROR" : "Error in exporting collections",
- "EXPORT_COLLECTIONS_ERROR_BROWSER" : "Error in exporting collections - Browser is NOT supported",
- "EXPORT_PARAMETERS_SUCCESS" : "Parameters was exported successfully",
- "EXPORT_PARAMETERS_ERROR" : "Error in exporting Parameters",
- "EXPORT_PARAMETERS_ERROR_BROWSER" : "Error in exporting Parameters - Browser is NOT supported",
-
- "SUBMIT_BUTTON": "Submit",
- "CANCEL_BUTTON": "Cancel",
-
-
- "YANGUI_MODULES": "modules",
- "YANGUI_MODULE": "module",
- "YANGUI_PREVIEW" : "Preview",
- "YANGUI_NAME": "name",
- "YANGUI_TYPE": "type",
- "HIDE": "hide",
- "SHOW": "show",
- "LIST_SHOW_ALL": "show all",
- "HIDE_SHOW_ALL": "hide all",
- "YANGUI_LIST_LABEL": "list",
- "LEAF_LIST_ADD_ELEM": "add leaf list element",
- "LIST_ADD_ELEM": "add list item",
- "SHOW_HIDE_LIST": "show / hide list",
- "LIST_SHOW_ALL" : "show all list items",
- "LIST_DELETE_ITEM": "delete list item",
- "LIST_INDEX_DUPLICATE": "duplicated index",
- "LIST_PREV_ITEM": "show previous item",
- "LIST_NEXT_ITEM": "show next item",
- "SHOW_HIDE_CON": "show / hide container",
- "SHOW_HIDE_ELEM": "show / hide element",
- "LIST_ADD_ITEM": "add item",
- "LIST_DELETE_ITEM": "delete item",
- "NOT_VALID_VALUE": "value is not valid",
- "YANGUI_EXPORT_COLLECTION" : "Export collection",
- "YANGUI_EXPORT_PARAMETERS" : "Export parameters",
- "YANGUI_CLEAR_PAR_DATA_BTN" : "Reset parametrized data",
- "YANGUI_SAVE_PAR_DATA_BTN" : "Save parametrized data",
- "YANGUI_SEL_OPTION" : "Select option",
- "YANGUI_HISTORY_SELECT_GROUP" : "Select group",
- "YANGUI_HISTORY_ADD_GROUP" : "Group name (new)",
- "YANGUI_HISTORY_CHANGE_GROUP" : "Move",
- "YANGUI_IMPORT_COLLECTION" : "Import collection",
- "YANGUI_IMPORT_PARAMETERS" : "Import parameters",
- "YANGUI_CANCEL_MP" : "Back from mountpoint",
- "YANGUI_PARAMETER_NAME" : "NAME",
- "YANGUI_PARAMETER_VALUE" : "VALUE",
- "YANGUI_PARAMETER_NAME_LC" : "Name",
- "YANGUI_PARAMETER_VALUE_LC" : "Value",
- "YANGUI_PARAM_DONT_REPLACE" : "undefined - won't be replaced",
- "YANGUI_IS_AUGMENT": "This node is augment of group",
- "YANGUI_CASE_IS_AUGMENT": "This case is augment.",
- "YANGUI_HAS_AUGMENT": "This node is augmented. Click to show/hide augmentation's groups.",
- "YANGUI_LIST_OF_AUGMENTATIONS" :"List of augmentations",
- "YANGUI_ACTION" : "ACTION",
- "YANGUI_ADD_PARAMETER" : "Add new parameter",
- "YANGUI_EDIT_PARAMETER" : "Edit parameter values",
- "YANGUI_SAVE_PARAMETER" : "Save",
- "YANGUI_EXISTING_PARAMETER" : "Parameter with this name already exists!",
- "YANGUI_BACK": "Back",
- "YANGUI_JSON_PARSING_ERROR": "JSON parsing error",
- "YANGUI_PARAMETER_MISSING_ERROR": "Parameter does NOT exist",
- "YANGUI_PARAMETRIZED_DATA_SAVED": "Parametrized data was saved.",
- "YANGUI_HISTORY_TAB" : "HISTORY",
- "YANGUI_COLLECTION_TAB" : "COLLECTION",
- "YANGUI_PARAMETERS_TAB" : "PARAMETERS",
- "YANGUI_COLLAPSE_OTHERS": "Collapse others",
- "YANGUI_ADD_DATA": "Add data",
- "YANGUI_CUSTOM_API_REQUEST" : "Custom API request",
- "YANGUI_REST_URL": "Rest URL",
- "YANGUI_SHOW_HISTORY": "Request history",
- "YANGUI_HISTORY_METHOD": "METHOD",
- "YANGUI_HISTORY_NAME": "Name",
- "YANGUI_HISTORY_NAME_CAPITAL": "NAME",
- "YANGUI_HISTORY_PATH": "URL",
- "YANGUI_HISTORY_STATUS": "STATUS",
- "YANGUI_HISTORY_PARAMETRIZE_DATA": "parametrize data",
- "YANGUI_HISTORY_REC_DATA": "Received data",
- "YANGUI_HISTORY_SEND_DATA": "Sent data",
- "YANGUI_HISTORY_NO_SEND_DATA": "No sent data",
- "YANGUI_HISTORY_NO_SEND_DATA_TT": "No sent data in this request",
- "YANGUI_HISTORY_ACTION": "ACTION",
- "YANGUI_HISTORY_ADD_BUTTON": "Add",
- "YANGUI_API_NOT_AVAILABLE": "API isn't available",
- "YANGUI_DELETE": "Delete",
- "YANGUI_EDIT": "Edit",
- "YANGUI_CLEAR_HISTORY" : "Clear history data",
- "YANGUI_CLEAR_COLLECTION" : "Clear collection data",
- "YANGUI_CLEAR_PARAMETERS" : "Clear parameters",
- "YANGUI_HISTORY_NO_REC_DATA": "No received data",
- "YANGUI_HISTORY_NO_REC_DATA_TT": "No received data in this request",
- "YANGUI_ADD_TO_COLLECTION": "Add to collection",
- "YANGUI_CHANGE_GROUP": "Move to other group",
- "YANGUI_RUN": "Run this request with same data on same API.",
- "YANGUI_API_OP": "API operations",
- "YANGUI_PATH": "path",
- "YANGUI_FILL_DATA": "Fill data",
- "YANGUI_FILL_DATA_TT" : "Set API from this request and fill \"sent data\" (if available) into appropriate fields. Request will be prepared for execution.",
- "YANGUI_API_NA_ERROR_TT" : "N/A - Requested api is not available",
- "YANGUI_REC_SENT_DATA_ERROR_TT" : "No received or sent data in request",
- "YANGUI_PUSH_CONFIG" : "Push config",
- "YANGUI_API_PATH" : "API path",
- "YANGUI_API_DATA" : "API data",
- "YANGUI_REMOVE_FILTER" : "Remove filter",
- "YANGUI_CREATE_NEW_FILTER" : "Create new filter",
- "YANGUI_ACTIVATE_DEACTIVATE_FILTER" : "Activate/Deactivate filter",
- "YANGUI_SWITCH_FILTER" : "Switch filter",
- "YANGUI_FILTER_MATCH_SUCCESS" : "Filter successfully activated",
- "YANGUI_FILTER_MATCH_ERROR" : "Filter does NOT match any nodes",
- "YANGUI_OK" : "Ok",
- "YANGUI_REMOVE_ALL" : "Remove all",
- "YANGUI_DEACTIVATE_ALL" : "Deactivate all",
- "YANGUI_LIST_OF_NODES" : "List of nodes",
- "YANGUI_CUST_MOUNT_POINTS" : "Show mount point",
- "YANGUI_CUST_TOPOLOGY" : "Display Topology",
- "YANGUI_MOUNT_POINT" : "Mount point",
- "YANGUI_ROOT" : "ROOT",
- "YANGUI_ERROR_GET_401" : "Unauthorized : The request requires user authentication.",
- "YANGUI_ERROR_GET_403" : "Forbidden : The server understood the request, but is refusing to fulfill it.",
- "YANGUI_ERROR_GET_404" : "Data-missing : Request could not be completed because the relevant data model content does not exist.",
- "YANGUI_ERROR_GET_500" : "Server Error : The server encountered an unexpected condition which prevented it from fulfilling the request.",
- "YANGUI_ERROR_GET_503" : "Service Unavailable : The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.",
- "YANGUI_NO_DATA" : "No data to display",
- "YANGUI_LOADING_DATA": "Loading data",
- "YANGUI_SEND": "Send",
- "YANGUI_ERROR_PARSING_JSON": "Parsing JSON error",
- "YANGUI_COPY_TO_CLIPBOARD" : "Copy to clipboard",
- "YANGUI_CLIPBOARD_ALERT_MSG" : "Press CMD+C (MacOS) or CTRL+C (Windows) to copy the text below.",
- "YANGUI_REQUIRED" : "Required parameter",
- "YANGUI_ALPHANUMERIC" : "Name must contain only alphanumeric characters without spaces.",
- "YANGUI_DUPLICATE" : "Param name duplicate, change it!"
-}
\ No newline at end of file
+++ /dev/null
-define(['app/yangui/yangui.module'], function(yangui) {\r
-\r
- yangui.register.factory('checkFlow', function($http, YangUtilsRestangularService) {\r
-\r
- var fnc = function($scope) {\r
- var requestPath = $scope.selSubApi.buildApiRequestString().replace('config','operational'),\r
- requestData = {},\r
- getPathIdentifierData = function(pathArray){\r
- var data = '';\r
- pathArray.forEach(function(item){\r
- if( item.hasIdentifier() ) {\r
- data += item.name + ': ' + item.identifierValue + '\n ';\r
- }\r
- });\r
- return data;\r
- },\r
- identifiers = getPathIdentifierData($scope.selSubApi.pathArray);\r
-\r
- YangUtilsRestangularService.one('restconf').customGET(requestPath).then(\r
- function (data) {\r
- alert('Flow: \n\n' + identifiers + '\n\n is in controller.');\r
- }, function (result) {\r
- alert('Flow: \n\n' + identifiers + '\n\n isn\'t in controller.');\r
- }\r
- );\r
- };\r
-\r
- return {\r
- module: ['opendaylight-inventory'],\r
- revision: null,\r
- pathString: ['config/opendaylight-inventory:nodes/node/{id}/flow-node-inventory:table/{id}/flow/{id}/'],\r
- label: 'Verify operational flow', \r
- getCallback: fnc\r
- };\r
- });\r
-});
\ No newline at end of file
+++ /dev/null
-define(['app/yangui/yangui.module'], function(yangui) {\r
-\r
- yangui.register.controller('cvTopologyCtrl', ['$scope', function ($scope) {\r
- console.log('executing controller cvTopologyCtrl');\r
- }]);\r
-});
\ No newline at end of file
+++ /dev/null
-<div ng-show="isMountPointSelected()" class="mountPoints mountPointsContainer draggablePopup">\r
- <button class="btn btn-default btn-slim" ng-click="unsetCustomFunctionality()">{{ 'YANGUI_CANCEL_MP' | translate }}</button>\r
-</div>
\ No newline at end of file
+++ /dev/null
-<!-- <div ng-controller="cvTopologyCtrl" ng-show='topologyData && topologyData.nodes.length > 0'> -->\r
-<div ng-show='topologyData && topologyData.nodes.length > 0' class="topologyContainer draggablePopup resizable-se">\r
- <button class="yangButton icon-remove close" ng-click="unsetCustomFunctionality()"></button>\r
- <sigma-topology topology-data="topologyData" panel="{show: false}" topology-custfunc="topologyCustfunc"></sigma-toppology>\r
-</div>
\ No newline at end of file
+++ /dev/null
-define(['app/yangui/yangui.module'], function(yangui, $filter) {\r
-\r
- yangui.register.service('displayMountPoints', function(MountPointsConnectorService, $timeout, YangUtilsService, $filter, ApiBuilderService) {\r
-\r
- var loadId = 0;\r
-\r
- var fnc = function($scope) {\r
- var path = $scope.selSubApi.buildApiRequestString(),\r
- getMpBasePathWOStorage = function(path) {\r
- return path.split('/').slice(1).join('/');\r
- },\r
- getNodesMPData = function(data) {\r
- var node = data.node[0];\r
- return node && node['netconf-node-inventory:initial-capability'] ? node['netconf-node-inventory:initial-capability'].map(function(c) {\r
- return c.slice(c.lastIndexOf(")") + 1);\r
- }) : [];\r
- },\r
- findFirstSubApiIndex = function(subApis) {\r
- var firstConfigSubApiIndex = 0;\r
-\r
- subApis.some(function(sa, index) {\r
- var condition = sa.storage === 'config';\r
- if(condition) {\r
- firstConfigSubApiIndex = index;\r
- }\r
- return condition;\r
- });\r
-\r
- return firstConfigSubApiIndex;\r
- },\r
- createMPStructure = function(mpNodes, mpAugments) {\r
- if(mpNodes.length){\r
- var mountPointStructure = [];\r
-\r
- mpNodes.forEach(function(mpNode){\r
- var ind = null;\r
- var mpPresent = mountPointStructure.some(function(el,index){\r
- var res = el.module === mpNode.module && el.revision === mpNode.moduleRevision;\r
- if(res){\r
- ind = index;\r
- }\r
- return res;\r
- });\r
-\r
- if(mpPresent){\r
- mountPointStructure[ind].children.push(mpNode);\r
- }else{\r
- mountPointStructure.push({module : mpNode.module, revision: mpNode.moduleRevision, expanded : false, children:[mpNode]});\r
- }\r
- });\r
-\r
- var mpRootNode = MountPointsConnectorService.createMPRootNode(mpNodes),\r
- mountPointApis = ApiBuilderService.processAllRootNodes([mpRootNode]),\r
- //root node has isConfigStm undefined, we need to create root config SubApi by hand\r
- //if we set the variable isConfigStm to true and then generate the subApis it will do it\r
- //incorrectly because, the variable is inherited to children and we would malform the data\r
- //we need just to get operational root subApi...\r
- rootApi = mountPointApis[0],\r
- rootOperSubApi = rootApi.subApis.filter(function(sa) {\r
- return sa.pathTemplateString === 'yang-ext:mount/' && sa.storage === 'operational';\r
- })[0];\r
-\r
- if(rootOperSubApi) {\r
- var rootConfigSubApi = rootOperSubApi.clone(), //clone it and...\r
- firstConfigSubApiIndex = findFirstSubApiIndex(rootApi.subApis); //we need to find first index of config subApi - because generating treeApis depends on order\r
-\r
- //set storage to config\r
- rootConfigSubApi.storage = 'config';\r
- rootConfigSubApi.pathArray[0].name = 'config';\r
-\r
- //and add it to rest of the apis\r
- rootApi.subApis.splice(firstConfigSubApiIndex, 0, rootConfigSubApi);\r
- rootConfigSubApi.parent = rootApi;\r
- }\r
-\r
- var mountPointTreeApis = YangUtilsService.generateApiTreeData(mountPointApis);\r
-\r
- MountPointsConnectorService.updateMountPointApis($scope.selSubApi.pathArray, mountPointApis);\r
- //$scope.initMp(mountPointStructure, mountPointTreeApis, mountPointApis, mpAugments, getMpBasePathWOStorage(path));\r
- $scope.initMp(mountPointStructure, mountPointTreeApis, mountPointApis, mpAugments);\r
- $scope.processingModulesSuccessCallback();\r
- } else {\r
- $scope.processingModulesErrorCallback();\r
- $scope.mountPointStructure = [];\r
- $timeout(function(){\r
- alert('No mount points to display');\r
- $scope.unsetCustomFunctionality();\r
- },100);\r
- }\r
-\r
- $scope.mpSynchronizer.removeRequest(reqId);\r
-\r
- var pathItems = path.split('/');\r
- $scope.treeName = pathItems[pathItems.length-1] + ' [ ' + $filter('translate')('YANGUI_MOUNT_POINT') + ' ] ';\r
-\r
- $scope.selCustFunctButts.push(MountPointsConnectorService.createCustomButton(\r
- 'YANGUI_CANCEL_MP',\r
- function(){\r
- return $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS';\r
- },\r
- function(){\r
- $scope.unsetCustomFunctionality();\r
- })\r
- );\r
- },\r
- reqId = $scope.mpSynchronizer.spawnRequest(loadId++);\r
-\r
- $scope.mountPointStructure = [];\r
- MountPointsConnectorService.discoverMountPoints(path, getNodesMPData, createMPStructure);\r
- };\r
-\r
- return {\r
- module: ['network-topology','opendaylight-inventory','network-topology','opendaylight-inventory'],\r
- revision: null,\r
- pathString: ['operational/network-topology:network-topology/topology/{topology-id}/node/{node-id}/','operational/opendaylight-inventory:nodes/node/{id}/'],\r
- label: 'YANGUI_CUST_MOUNT_POINTS',\r
-// view: './src/app/yangui/cf/cv/cvmountpoints.tpl.html',\r
- hideButtonOnSelect: true,\r
- getCallback: fnc\r
- \r
- };\r
- });\r
-});
\ No newline at end of file
+++ /dev/null
-define(['app/yangui/yangui.module', 'common/sigmatopology/sigma.directive'], function(yangui) {\r
-\r
- yangui.register.factory('displayTopology', function($http, RequestBuilderService, YangUtilsService) {\r
-\r
- var fnc = function($scope) {\r
- if($scope.node &&\r
- $scope.node.getChildren('list', 'topology').length > 0 &&\r
- $scope.node.getChildren('list', 'topology')[0].actElemStructure) {\r
- var dataList = [],\r
- dataObj = {};\r
-\r
- $scope.node.getChildren('list', 'topology')[0].actElemStructure.listElemBuildRequest(RequestBuilderService, dataList);\r
- dataObj = {'network-topology': { 'topology': dataList }};\r
-\r
- var topoDataYang = YangUtilsService.transformTopologyData(dataObj),\r
- topoData = {\r
- nodes: [],\r
- links: []\r
- };\r
-\r
- topoData.nodes = topoDataYang.nodes.map(function(node){\r
- return {\r
- 'id': 'n' + node.id,\r
- 'label': node.label,\r
- 'size': 3,\r
- 'x': Math.random(),\r
- 'y': Math.random(),\r
- 'color': '#fff'\r
- };\r
- });\r
-\r
- topoData.links = topoDataYang.links.map(function(link){\r
- return {\r
- id: 'e' + link.id,\r
- source: 'n' + link.from,\r
- target: 'n' + link.to,\r
- color: '#fff'\r
- };\r
- });\r
-\r
- // console.info('topoData', topoData);\r
- $scope.topologyData = topoData;\r
- $scope.topologyData.delay = 500;\r
-\r
- } else {\r
- alert('No topology data to display');\r
- }\r
- };\r
-\r
- return {\r
- module: ['network-topology'],\r
- revision: null,\r
- pathString: ['operational/network-topology:network-topology/'],\r
- label: 'YANGUI_CUST_TOPOLOGY',\r
- getCallback: fnc,\r
- hideButtonOnSelect: false,\r
- view: './src/app/yangui/cf/cv/cvtopology.tpl.html'\r
- };\r
- });\r
-});
\ No newline at end of file
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('AugmentationModalCtrl', AugmentationModalCtrl);
-
- AugmentationModalCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function AugmentationModalCtrl($scope){
- $scope.init = init;
-
- function init(node){
- $scope.node = node;
- }
- }
-
-});
+++ /dev/null
-define([], function (){
- 'use strict';
- angular.module('app.yangui').controller('CaseCtrl', CaseCtrl);
-
- CaseCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function CaseCtrl($scope) {
-
- $scope.augModalView = false;
- $scope.empty = (
- $scope.case.children.length === 0 ||
- (
- $scope.case.children.length === 1 &&
- $scope.case.children[0].children.length === 0
- )
- );
-
- $scope.toggleExpandedAugModal = toggleExpandedAugModal;
-
- function toggleExpandedAugModal(){
- $scope.augModalView = !$scope.augModalView;
- }
- }
-
-});
+++ /dev/null
-define([], function (){
- 'use strict';
- angular.module('app.yangui').controller('ChoiceCtrl', ChoiceCtrl);
-
- ChoiceCtrl.$inject = ['$scope', 'constants'];
-
- // todo: comment the whole controller
- function ChoiceCtrl($scope, constants) {
-
- $scope.augModalView = false;
- $scope.constants = constants;
-
- $scope.caseShowing = caseShowing;
- $scope.toggleExpanded = toggleExpanded;
- $scope.toggleExpandedAugModal = toggleExpandedAugModal;
-
-
- function toggleExpandedAugModal(){
- $scope.augModalView = !$scope.augModalView;
- }
-
- function toggleExpanded(){
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- function caseShowing(node) {
- return !node.augmentationId ?
- true :
- $scope.augmentations.getAugmentation(node.parent, node.augmentationId).expanded;
- }
- }
-
-});
+++ /dev/null
-define([], function (){
- 'use strict';
- angular.module('app.yangui').controller('CollBoxCtrl', CollBoxCtrl);
-
- CollBoxCtrl.$inject = ['$scope', 'HistoryService'];
-
- // todo: comment the whole controller
- function CollBoxCtrl($scope, HistoryService) {
-
- $scope.collection = {
- name: '',
- group: '',
- };
- $scope.editBox = false;
- $scope.selectedRequest = null;
-
- $scope.addHistoryItemToColl = addHistoryItemToColl;
- $scope.moveHistoryItemToGroup = moveHistoryItemToGroup;
-
- $scope.$on('COLL_CLEAR_VAL_SET_REQ', collClearVal);
-
- function addHistoryItemToColl(){
- var elemToAdd = $scope.selectedRequest.clone();
-
- HistoryService.setNameAndGroup($scope.collection.name, $scope.collection.group, elemToAdd);
- $scope.saveElemToList(elemToAdd);
-
- if ($scope.editBox) {
- $scope.deleteRequestItem($scope.selectedRequest, 'collectionList');
- }
-
- $scope.hideCollBox();
- }
-
- function moveHistoryItemToGroup(elem) {
- var elemToMove = elem.clone();
-
- HistoryService.setNameAndGroup($scope.collection.name, $scope.collection.group, elemToMove);
- $scope.saveElemToList(elemToMove);
- $scope.deleteRequestItem(elem, 'collectionList');
- $scope.hideCollBox();
- }
-
- function collClearVal(e, req, edit){
- $scope.collection.name = edit ? req.name : '';
- $scope.collection.group = edit ? req.groupName : '';
- $scope.selectedRequest = req;
- $scope.editBox = edit;
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('ContainerCtrl', ContainerCtrl);
-
- ContainerCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function ContainerCtrl($scope) {
-
- $scope.augModalView = false;
-
- $scope.toggleExpanded = toggleExpanded;
- $scope.toggleExpandedAugModal = toggleExpandedAugModal;
-
- function toggleExpandedAugModal(){
- $scope.augModalView = !$scope.augModalView;
- }
-
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('FilterTypeBitCtrl', FilterTypeBitCtrl);
-
- FilterTypeBitCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function FilterTypeBitCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- $scope.type.setLeafValue($scope.type.bitsValues, true);
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('FilterTypeEmptyCtrl', FilterTypeEmptyCtrl);
-
- FilterTypeEmptyCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function FilterTypeEmptyCtrl($scope){
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- $scope.type.setLeafValue($scope.type.emptyValue);
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- // todo: seems to be not used, check
- angular.module('app.yangui').controller('FilterTypeEnumCtrl', FilterTypeEnumCtrl);
-
- FilterTypeEnumCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function FilterTypeEnumCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- var value = $scope.type.selEnum && $scope.type.selEnum.label ? $scope.type.selEnum.label : '';
-
- $scope.type.setLeafValue(value);
-
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('FilterTypeCtrl', FilterTypeCtrl);
-
- FilterTypeCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function FilterTypeCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('FilterCtrl', FilterCtrl);
-
- FilterCtrl.$inject = ['$scope', 'ListFilteringService'];
-
- // todo: comment the whole controller
- function FilterCtrl($scope, ListFilteringService){
-
- $scope.isFilter = true;
-
- $scope.getFilterTypeArray = getFilterTypeArray;
-
- function getFilterTypeArray(type){
- return ListFilteringService.getFilterTypeArray(type);
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('InputCtrl', InputCtrl);
-
- InputCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function InputCtrl($scope) {
-
- $scope.augModalView = false;
-
- $scope.toggleExpanded = toggleExpanded;
- $scope.toggleExpandedAugModal = toggleExpandedAugModal;
-
- function toggleExpandedAugModal(){
- $scope.augModalView = !$scope.augModalView;
- }
-
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('LeafListCtrl', LeafListCtrl);
-
- LeafListCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function LeafListCtrl($scope) {
-
- $scope.addListElem = addListElem;
- $scope.changed = changed;
- $scope.removeListElem = removeListElem;
- $scope.toggleExpanded = toggleExpanded;
-
- function addListElem() {
- $scope.node.addListElem();
- }
-
- function removeListElem(elem){
- $scope.node.removeListElem(elem);
- }
-
- function changed() {
- $scope.preview();
- }
-
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('LeafCtrl', LeafCtrl);
-
- LeafCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function LeafCtrl($scope) {
- var types = [
- 'binary',
- 'bits',
- 'boolean',
- 'decimal64',
- 'enumeration',
- 'empty',
- 'identityref',
- 'instance-identifier',
- 'int16',
- 'int32',
- 'int64',
- 'int8',
- 'leafref',
- 'string',
- 'uint16',
- 'uint32',
- 'uint64',
- 'uint8',
- 'union',
- ];
-
- $scope.displayValue = displayValue;
- $scope.getLeafType = getLeafType;
-
- function getLeafType(){
- var label = $scope.node.getChildren('type')[0].label;
- return types.indexOf(label) !== -1 ? label : 'default';
- }
-
- function displayValue() {
- return $scope.node.typeChild.label !== 'empty';
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('ListCtrl', ListCtrl);
-
- ListCtrl.$inject = ['$scope', 'ListFilteringService', 'NodeWrapperService'];
-
- // todo: comment the whole controller
- function ListCtrl($scope, ListFilteringService, NodeWrapperService) {
-
- $scope.actElement = null;
- $scope.augModalView = false;
- $scope.currentDisplayIndex = 1;
- $scope.displayOffsets = [-1, 0, 1];
- $scope.filterListHover = 0;
- $scope.showListFilter = false;
- $scope.showModal = false;
-
- $scope.activeFilter = activeFilter;
- $scope.addListElem = addListElem;
- $scope.applyFilter = applyFilter;
- $scope.clearFilterData = clearFilterData;
- $scope.createNewFilter = createNewFilter;
- $scope.existsActiveFilter = existsActiveFilter;
- $scope.getFilterData = getFilterData;
- $scope.getListName = getListName;
- $scope.removeListElem = removeListElem;
- $scope.shiftDisplayNext = shiftDisplayNext;
- $scope.shiftDisplayPrev = shiftDisplayPrev;
- $scope.showListFilterWin = showListFilterWin;
- $scope.showModalWin = showModalWin;
- $scope.showNextButton = showNextButton;
- $scope.showPrevButton = showPrevButton;
- $scope.switchFilter = switchFilter;
- $scope.toggleExpanded = toggleExpanded;
- $scope.toggleExpandedAugModal = toggleExpandedAugModal;
-
- $scope.$on('EV_REFRESH_LIST_INDEX', refreshListIndex);
-
- $scope.$on('EV_DISABLE_ADDING_LIST_ELEMENT', function() {
- $scope.init();
- });
-
- /**
- * Disable adding more then one element
- */
- $scope.init = function() {
- $scope.disableAddingListElement = $scope.checkAddingListElement($scope.node);
-
- if($scope.disableAddingListElement) {
- $scope.addListElem();
- }
- };
-
- function toggleExpandedAugModal(){
- $scope.augModalView = !$scope.augModalView;
- }
-
- function refreshListIndex() {
- $scope.currentDisplayIndex = 1;
- }
-
- function addListElem() {
- $scope.showListFilter = false;
- $scope.showModal = false;
- ListFilteringService.removeEmptyFilters($scope.node);
- $scope.node.addListElem();
- }
-
- function removeListElem(elemIndex, fromFilter) {
- $scope.node.removeListElem(elemIndex, fromFilter);
- $scope.preview();
- $scope.currentDisplayIndex = Math.max(
- Math.min($scope.currentDisplayIndex, $scope.node.listData.length - 2), 1
- );
- }
-
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
-
- function shiftDisplayNext(typeListData) {
- $scope.currentDisplayIndex = Math.min($scope.currentDisplayIndex + 3, $scope.node[typeListData].length - 2);
- }
-
- function shiftDisplayPrev() {
- $scope.currentDisplayIndex = Math.max($scope.currentDisplayIndex - 3, 1);
- }
-
- function showPrevButton() {
- return $scope.currentDisplayIndex > 1;
- }
-
- function showNextButton(typeListData) {
- return $scope.node[typeListData] &&
- // node is selected after view is loaded
- $scope.currentDisplayIndex < $scope.node[typeListData].length - 2;
- }
-
- function showModalWin() {
- $scope.showModal = !$scope.showModal;
- if ($scope.showListFilter){
- $scope.showListFilter = !$scope.showListFilter;
- }
- }
-
- function showListFilterWin() {
- $scope.showListFilter = !$scope.showListFilter;
- if ($scope.showModal){
- $scope.showModal = !$scope.showModal;
- }
- ListFilteringService.showListFilterWin($scope.filterRootNode, $scope.node);
- }
-
- function getFilterData() {
- ListFilteringService.getFilterData($scope.node);
- }
-
- function switchFilter(showedFilter) {
- ListFilteringService.switchFilter($scope.node, showedFilter);
- }
-
- function createNewFilter() {
- ListFilteringService.createNewFilter($scope.node);
- }
-
- function existsActiveFilter() {
- return $scope.node.filters.some(function(filter) {
- return filter.active == 1;
- });
- }
-
- function applyFilter() {
- ListFilteringService.applyFilter($scope.node);
- $scope.showListFilter = !$scope.showListFilter;
- $scope.currentDisplayIndex = 1;
- if ($scope.node.filteredListData.length){
- $scope.node.doubleKeyIndexes = NodeWrapperService.checkKeyDuplicity($scope.node.filteredListData, $scope.node.refKey);
- $scope.setStatusMessage('success', 'YANGUI_FILTER_MATCH_SUCCESS', e.message);
- }
- else {
- $scope.node.doubleKeyIndexes = NodeWrapperService.checkKeyDuplicity(
- $scope.node.listData,
- $scope.node.refKey
- );
-
- if($scope.existsActiveFilter()) {
- $scope.setStatusMessage('danger', 'YANGUI_FILTER_MATCH_ERROR', e.message);
- }
- }
- }
-
- function clearFilterData(changeAct, filterForClear, removeFilters) {
- ListFilteringService.clearFilterData($scope.node, changeAct, filterForClear, removeFilters);
- if (changeAct) {
- $scope.showListFilter = !$scope.showListFilter;
- }
- $scope.node.doubleKeyIndexes = NodeWrapperService.checkKeyDuplicity(
- $scope.node.listData,
- $scope.node.refKey
- );
- }
-
- function activeFilter(filter) {
- if (filter.active === 1) {
- filter.active = 2;
- }
- else {
- filter.active = 1;
- }
- }
-
- function getListName(offset, config) {
- var createdListItemName = $scope.node.createListName($scope.currentDisplayIndex + offset);
-
- if ( createdListItemName.length > 33 ) {
- return {
- name: createdListItemName.substring(0, 30) + '...',
- tooltip: createdListItemName,
- };
- } else {
- return {
- name: config ?
- createdListItemName || '[' + ($scope.currentDisplayIndex + offset) + ']' :
- createdListItemName,
- tooltip: '',
- };
- }
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('OutputCtrl', OutputCtrl);
-
- OutputCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function OutputCtrl($scope) {
-
- $scope.augModalView = false;
- $scope.notEditable = true;
-
- $scope.toggleExpanded = toggleExpanded;
- $scope.toggleExpandedAugModal = toggleExpandedAugModal;
-
- function toggleExpandedAugModal(){
- $scope.augModalView = !$scope.augModalView;
- }
-
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('RpcCtrl', RpcCtrl);
-
- RpcCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function RpcCtrl($scope) {
-
- $scope.toggleExpanded = toggleExpanded;
-
- function toggleExpanded() {
- $scope.node.expanded = !$scope.node.expanded;
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('TypeBitCtrl', TypeBitCtrl);
-
- TypeBitCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function TypeBitCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- $scope.type.setLeafValue($scope.type.bitsValues);
-
- if ($scope.previewVisible) {
- $scope.preview();
- }
- else {
- $scope.buildRoot();
- }
-
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('TypeEmptyCtrl', TypeEmptyCtrl);
-
- TypeEmptyCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function TypeEmptyCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- $scope.type.setLeafValue($scope.type.emptyValue);
-
- if ($scope.previewVisible) {
- $scope.preview();
- } else {
- $scope.buildRoot();
- }
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('TypeEnumCtrl', TypeEnumCtrl);
-
- TypeEnumCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function TypeEnumCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- var value = $scope.type.selEnum && $scope.type.selEnum.label ? $scope.type.selEnum.label : '';
-
- $scope.type.setLeafValue(value);
-
- if ($scope.previewVisible) {
- $scope.preview();
- }
- else {
- $scope.buildRoot();
- }
-
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('TypeCtrl', TypeCtrl);
-
- TypeCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function TypeCtrl($scope){
-
- $scope.valueChanged = valueChanged;
-
- function valueChanged(){
- if ($scope.previewVisible) {
- $scope.preview();
- } else {
- $scope.buildRoot();
- }
-
- $scope.node.checkValueType();
- $scope.node.fill($scope.node.label, $scope.node.value);
- }
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('ReqInHistoryCtrl', ReqInHistoryCtrl);
-
- ReqInHistoryCtrl.$inject = ['$scope'];
-
- // todo: comment the whole controller
- function ReqInHistoryCtrl($scope) {
-
- $scope.rList = null;
- $scope.showData = false;
-
- $scope.executeRequest = executeRequest;
- $scope.expandHistoryData = expandHistoryData;
- $scope.fillRequest = fillRequest;
- $scope.init = init;
- $scope.showRhistoryData = showRhistoryData;
- $scope.showShistoryData = showShistoryData;
-
- function init(list) {
- $scope.rList = list;
- }
-
- function showShistoryData(){
- $scope.$broadcast('YANGUI_SHOW_SEND_HISTORY_DATA');
- $scope.expandHistoryData();
- }
-
- function showRhistoryData(){
- $scope.$broadcast('YANGUI_SHOW_RECEIVED_HISTORY_DATA');
- $scope.expandHistoryData();
- }
-
- function expandHistoryData(){
- $scope.showData = !$scope.showData;
- }
-
- function executeRequest(){
- $scope.$broadcast('YANGUI_EXECUTE_REQ');
- }
-
- function fillRequest(){
- $scope.$broadcast('YANGUI_FILL_REQ');
- }
- }
-
-});
+++ /dev/null
-define(['app/yangui/services/handle-file.services'], function () {
- 'use strict';
-
- angular.module('app.yangui').controller('RequestHistoryCtrl', RequestHistoryCtrl);
-
- RequestHistoryCtrl.$inject = ['$filter', '$scope', '$rootScope', 'PathUtilsService', 'HistoryService',
- 'HandleFileService', 'YangUtilsService', 'constants',
- 'MountPointsConnectorService', 'ParsingJsonService',
- ];
-
- // todo: comment the whole controller
- function RequestHistoryCtrl($filter, $scope, $rootScope, PathUtilsService, HistoryService, HandleFileService,
- YangUtilsService, constants, MountPointsConnectorService, ParsingJsonService) {
-
- $scope.collectionBoxView = false;
- $scope.collectionList = HistoryService.createEmptyCollectionList('collectionList', $scope.getApiCallback);
- $scope.groupView = {};
- $scope.parameterList = HistoryService.createEmptyParamList('parameterList');
- $scope.parameterList.loadListFromStorage();
- $scope.popupHistory = { show: false };
- $scope.requestList = HistoryService.createEmptyHistoryList('requestList', $scope.getApiCallback);
-
- $scope.addRequestToList = addRequestToList;
- $scope.clearHistoryData = clearHistoryData;
- $scope.checkParamIsNotInList = checkParamIsNotInList;
- $scope.deleteRequestItem = deleteRequestItem;
- $scope.executeCollectionRequest = executeCollectionRequest;
- $scope.exportHistoryData = exportHistoryData;
- $scope.getApiCallback = getApiCallback;
- $scope.hideCollBox = hideCollBox;
- $scope.readCollectionFromFile = readCollectionFromFile;
- $scope.reqHistoryFunc = reqHistoryFunc;
- $scope.saveElemToList = saveElemToList;
- $scope.saveParamToList = saveParamToList;
- $scope.setGroupView = setGroupView;
- $scope.showCollBox = showCollBox;
- $scope.toggleExpanded = toggleExpanded;
-
- $scope.$on('GET_PARAMETER_LIST', getParametersList);
- $scope.$on('LOAD_REQ_DATA', loadReqData);
- $scope.$on('REFRESH_HISTORY_REQUEST_APIS', refreshHistoryApis);
- $scope.$on('YUI_ADD_TO_HISTORY', addToHistory);
-
- var mountPrefix = constants.MPPREFIX;
-
-
- function getApiCallback(pathString) {
- var snp = PathUtilsService.getStorageAndNormalizedPath(pathString),
- // if the path is for mountpoint then get the path to treedata structure
- mpSearchPath = MountPointsConnectorService.alterMpPath(pathString),
- apiIndexes = PathUtilsService.searchNodeByPath(mpSearchPath, $scope.treeApis, $scope.treeRows),
- selApi = apiIndexes ? $scope.apis[apiIndexes.indexApi] : null,
- selSubApi = selApi ? selApi.subApis[apiIndexes.indexSubApi] : null,
- copiedApi = selSubApi ?
- selSubApi.clone({ storage: snp.storage, withoutNode: true, clonePathArray: true }) :
- null;
-
- if (copiedApi) {
- copiedApi.pathArray.forEach(function (p) {
- p.hover = false;
- });
-
- PathUtilsService.fillPath(copiedApi.pathArray, snp.normalizedPath);
- }
-
- var searchedModule = PathUtilsService.getModuleNameFromPath(pathString);
-
- if (mpSearchPath.indexOf(mountPrefix) !== -1 && copiedApi){
- copiedApi = $scope.selSubApi &&
- searchedModule === $scope.selSubApi.pathArray[1].module ?
- copiedApi :
- null;
- }
-
- return copiedApi;
- }
-
- function refreshHistoryApis(event){
- $scope.requestList.refresh();
- $scope.collectionList.refresh();
- }
-
- function getParametersList(event, callback){
- callback($scope.parameterList);
- }
-
- function addToHistory(event, status, data, requestData, operation, requestPath) {
- $scope.addRequestToList(status, data, requestData, operation, requestPath);
- }
-
- function addRequestToList(status, receivedData, sentData, operation, path) {
- if (typeof (Storage) !== 'undefined') {
-
- var rList = HistoryService.createEmptyHistoryList(),
- reqObj = HistoryService.createHistoryRequest(sentData, receivedData, path, null, operation,
- status, null, null, $scope.getApiCallback);
-
- reqObj.refresh($scope.getApiCallback);
-
- $scope.requestList.addRequestToList(reqObj);
- $scope.requestList.saveToStorage();
- }
- }
-
- function reqHistoryFunc(){
- $scope.popupHistory.show = !$scope.popupHistory.show;
-
- $scope.requestList.loadListFromStorage();
- $scope.collectionList.loadListFromStorage();
- $scope.requestList.show = false;
- }
-
- function showCollBox(req, edit){
- $scope.collectionBoxView = true;
- $scope.$broadcast('COLL_CLEAR_VAL_SET_REQ', req, edit);
- }
-
- function hideCollBox(){
- $scope.collectionBoxView = false;
- }
-
- function saveElemToList(elem) {
- $scope.collectionList.addRequestToList(elem);
- $scope.collectionList.saveToStorage();
- }
-
- function saveParamToList(elem, oldElem) {
- $scope.parameterList.saveRequestToList(elem, oldElem);
- }
-
- function deleteRequestItem(elem, list){
- $scope[list].deleteRequestItem(elem);
- $scope[list].saveToStorage();
- }
-
- function clearHistoryData(list){
- $scope[list].clear();
- $scope[list].saveToStorage();
- }
-
- function clearFileInputValue() {
- var el = document.getElementById('upload-collection');
- el.value = '';
- }
-
- function exportHistoryData() {
- var cListJSON = localStorage.getItem('collectionList');
-
- HandleFileService.downloadFile('requestCollection.json', cListJSON, 'json', 'charset=utf-8', function () {
- $scope.setStatusMessage('success', 'EXPORT_COLLECTIONS_SUCCESS');
- }, function (e){
- if(e == -1) {
- $scope.setStatusMessage('danger', 'EXPORT_COLLECTIONS_ERROR_BROWSER');
- }
- else {
- $scope.setStatusMessage('danger', 'EXPORT_COLLECTIONS_ERROR', e);
- // console.error('ExportCollection error:', e);
- }
- });
- }
-
- function readCollectionFromFile($fileContent) {
- var data = $fileContent,
- checkArray = [
- 'sentData',
- 'receivedData',
- 'path',
- 'group',
- 'parametrizedPath',
- 'method',
- 'status',
- 'name',
- ];
-
- if (data && HistoryService.validateFile(data, checkArray)){
- try {
- $scope.collectionList.loadListFromFile(data);
- $scope.collectionList.saveToStorage();
- $scope.setStatusMessage('success', 'LOAD_COLLECTIONS_SUCCESS');
- clearFileInputValue();
- }
- catch (e) {
- clearFileInputValue();
- $scope.setStatusMessage('danger', 'PARSE_JSON_FILE_ERROR', e);
- // console.error('DataStorage error:', e);
- }
- }
- else {
- $scope.setStatusMessage('danger', 'PARSE_JSON_FILE_ERROR');
- clearFileInputValue();
- }
- }
-
- function checkParamIsNotInList(req) {
- var regexp = /<<([^>]+)>>/g;
- var sParam = angular.toJson(req).match(regexp);
-
- return sParam && sParam.some(function(parameter) {
- parameter = parameter.replace(/[<>]/g, '');
-
- return $filter('filter')($scope.parameterList.list, {'name': parameter}).length < 1;
- });
- }
-
- function executeCollectionRequest(req, dataForView, showData) {
- var sdata = dataForView ? ParsingJsonService.parseJson(dataForView) : req.sentData,
- path = req.parametrizedPath && showData ? req.parametrizedPath : req.api.buildApiRequestString(),
- paramResult = checkParamIsNotInList(sdata);
-
- path = $scope.parameterizeData(path);
- $scope.fillStandardApi(path, req.path);
-
- if(sdata && !paramResult) {
- $scope.fillApiData(sdata);
- }
-
- var requestPath = req.api.parent.basePath + path;
-
- if(!paramResult) {
- $scope.executeOperation(req.method, function(data){
- if ( !data && req.receivedData ){
- $scope.node.fill($scope.node.label,req.receivedData[$scope.node.label]);
- }
- }, requestPath);
- }
- else {
- $scope.setStatusMessage('danger', 'YANGUI_PARAMETER_MISSING_ERROR', e.message);
- }
- }
-
- function setGroupView(key) {
- $scope.groupView[key] = false;
- }
-
- function toggleExpanded(key) {
- $scope.groupView[key] = !$scope.groupView[key];
- }
-
- function loadReqData(){
- $scope.reqHistoryFunc();
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('HistoryParamCtrl', HistoryParamCtrl);
-
- HistoryParamCtrl.$inject = ['$scope', 'HistoryService', 'HandleFileService'];
-
- // todo: comment the whole controller
- function HistoryParamCtrl($scope, HistoryService, HandleFileService){
-
- $scope.createNewParam = createNewParam;
- $scope.exportParametersData = exportParametersData;
- $scope.readParametersFromFile = readParametersFromFile;
- $scope.showParamBox = showParamBox;
-
- function showParamBox(param){
- $scope.$broadcast('HISTORY_INIT_PARAM', param);
- }
-
- function createNewParam(){
- return HistoryService.createParameter('', '');
- }
-
- function clearFileInputValue() {
- var el = document.getElementById('upload-parameters');
- el.value = '';
- }
-
- function exportParametersData() {
- var cListJSON = localStorage.getItem('parameterList');
-
- HandleFileService.downloadFile('parameters.json', cListJSON, 'json', 'charset=utf-8', function (){
- $scope.setStatusMessage('success', 'EXPORT_PARAMETERS_SUCCESS');
- }, function (e){
- if(e == -1) {
- $scope.setStatusMessage('danger', 'EXPORT_PARAMETERS_ERROR_BROWSER');
- }
- else {
- $scope.setStatusMessage('danger', 'EXPORT_PARAMETERS_ERROR', e);
- // console.error('ExportCollection error:', e);
- }
- });
- }
-
- function readParametersFromFile($fileContent) {
- var data = $fileContent,
- checkArray = ['name', 'value'];
-
- if (data && HistoryService.validateFile(data, checkArray)) {
- try {
- $scope.parameterList.loadListFromFile(data);
- $scope.parameterList.saveToStorage();
- $scope.setStatusMessage('success', 'LOAD_PARAMETERS_SUCCESS');
- clearFileInputValue();
- }
- catch (e) {
- clearFileInputValue();
- $scope.setStatusMessage('danger', 'PARSE_JSON_FILE_ERROR', e);
- // console.error('DataStorage error:', e);
- }
- }
- else {
- $scope.setStatusMessage('danger', 'PARSE_JSON_FILE_ERROR');
- clearFileInputValue();
- }
- }
-
- }
-
-});
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('ParamBoxCtrl', ParamBoxCtrl);
-
- ParamBoxCtrl.$inject = ['$scope', 'HistoryService', 'EventDispatcherService', 'constants'];
-
- // todo: comment the whole controller
- function ParamBoxCtrl($scope, HistoryService, EventDispatcherService, constants) {
-
- $scope.boxView = false;
- $scope.duplicateParam = null;
- $scope.editingParameters = true;
- $scope.oldParam = null;
- $scope.paramObj = null;
-
- $scope.hideParamBox = hideParamBox;
- $scope.saveParam = saveParam;
-
- $scope.$on('HISTORY_INIT_PARAM', historyInitParam);
-
- EventDispatcherService.registerHandler(constants.EV_PARAM_EDIT_SUCC, addEditSuccessfull);
-
- function hideParamBox(){
- $scope.boxView = false;
- $scope.paramObj = $scope.createNewParam();
- }
-
- function addEditSuccessfull() {
- $scope.hideParamBox();
- $scope.parameterList.saveToStorage();
- }
-
- function saveParam(){
- $scope.duplicateParam = $scope.parameterList.getParamListObjsByName($scope.paramObj.name, null);
- if (!$scope.duplicateParam.length) {
- $scope.saveParamToList($scope.paramObj, $scope.oldParam);
- }
- }
-
- function historyInitParam(e, obj){
- if ( obj ){
- $scope.paramObj = obj.clone();
- $scope.oldParam = obj;
- $scope.boxView = true;
- $scope.editingParameters = (obj.name !== "");
- }
- }
- }
-});
-
+++ /dev/null
-define([], function () {
- 'use strict';
- angular.module('app.yangui').controller('ParamsViewCtrl', ParamsViewCtrl);
-
- ParamsViewCtrl.$inject = ['$scope', 'PathUtilsService', 'YangUtilsService',
- 'RequestDataService', 'ParsingJsonService'];
-
- // todo: comment the whole controller
- function ParamsViewCtrl($scope, PathUtilsService, YangUtilsService, RequestDataService, ParsingJsonService){
-
- $scope.dataEditorOptions = {
- mode: 'javascript',
- lineNumbers: true,
- theme: 'eclipse',
- readOnly: false,
- lineWrapping: true,
- matchBrackets: true,
- extraKeys: { 'Ctrl-Space': 'autocomplete' },
- onLoad: function (cmInstance){
- setInstanceEvents(cmInstance);
- cmInstance.data = { parameterListObj: $scope.parameterList };
- },
- };
- $scope.isSentData = false;
- $scope.paramsArray = [];
- $scope.paramsBoxView = false;
- $scope.rDataForView = null;
- $scope.sDataForView = null;
-
- $scope.clearParametrizedData = clearParametrizedData;
- $scope.fillRequestData = fillRequestData;
- $scope.getDataEditorOptions = getDataEditorOptions;
- $scope.hideParamListBox = hideParamListBox;
- $scope.saveParametrizedData = saveParametrizedData;
-
- $scope.$on('YANGUI_EXECUTE_REQ', executeCollReq);
- $scope.$on('YANGUI_FILL_REQ', fillApiData);
- $scope.$on('YANGUI_SHOW_RECEIVED_HISTORY_DATA', showReceivedHistoryData);
- $scope.$on('YANGUI_SHOW_SEND_HISTORY_DATA', showSendHistoryData);
-
- function setInstanceEvents(cmInstance){
- cmInstance.on('changes', function (){
- if (angular.isFunction(cmInstance.showHint)) {
- cmInstance.showHint();
- }
- });
-
- cmInstance.on('cursorActivity', function (){
- var lineString = cmInstance.getLine(cmInstance.getCursor().line);
- $scope.paramsArray = RequestDataService.scanDataParams($scope.parameterList, lineString);
- $scope.paramsBoxView = $scope.paramsArray.length > 0;
-
- if (!$scope.$$phase) {
- $scope.$apply();
- }
- });
- }
-
- function hideParamListBox(){
- $scope.paramsBoxView = false;
- }
-
- function clearParametrizedData(){
- $scope.req.clearParametrizedData();
- var dataForViewObj = $scope.req.sentData;
-
- $scope.sDataForView = dataForViewObj ? $scope.req.setDataForView(true, dataForViewObj) : '';
- }
-
- function fillRequestData(pathElem, identifier) {
- if ($scope.req.api &&
- $scope.req.api.clonedPathArray.indexOf(pathElem) === ($scope.req.api.clonedPathArray.length - 1)) {
- var data = ParsingJsonService.parseJson($scope.sDataForView);
- PathUtilsService.fillListRequestData(data, pathElem.name, identifier.label, identifier.value);
- var strippedData = YangUtilsService.stripAngularGarbage(data, $scope.req.getLastPathDataElemName());
-
- angular.copy(strippedData, ParsingJsonService.parseJson($scope.sDataForView));
- $scope.sDataForView = JSON.stringify(strippedData, null, 4);
- }
-
- $scope.req.parametrizedPath = PathUtilsService.translatePathArray($scope.req.api.clonedPathArray).join('/');
- }
-
- function getDataEditorOptions(read, theme){
- $scope.dataEditorOptions.readOnly = read;
- $scope.dataEditorOptions.theme = theme;
-
- return $scope.dataEditorOptions;
- }
-
- function saveParametrizedData(list){
- var parametrizedPath = $scope.req.api.parent.basePath +
- PathUtilsService.translatePathArray($scope.req.api.clonedPathArray).join('/'),
- jsonParsingErrorClbk = function (e){
- $scope.setStatusMessage('danger', 'YANGUI_JSON_PARSING_ERROR', e.message);
- },
- newReq = $scope.req.copyWithParametrizationAsNatural(
- parametrizedPath,
- $scope.getApiCallback,
- $scope.sDataForView,
- jsonParsingErrorClbk
- );
-
- if (newReq){
- var paramResult = $scope.checkParamIsNotInList(newReq);
-
- if(!paramResult) {
- $scope.req.clearParametrizedData();
-
- list.addRequestToList(newReq);
- list.saveToStorage();
-
- $scope.expandHistoryData();
- $scope.setStatusMessage('success', 'YANGUI_PARAMETRIZED_DATA_SAVED', e.message);
- }
- else {
- $scope.setStatusMessage('danger', 'YANGUI_PARAMETER_MISSING_ERROR', e.message);
- return false;
- }
- }
- return true;
- }
-
- function setSentData(isSentData) {
- $scope.isSentData = isSentData ? isSentData : $scope.isSentData;
- }
-
- function showSendHistoryData() {
- $scope.sDataForView = $scope.req.setDataForView(true, $scope.req.sentData);
- setSentData(true);
- }
-
-
- function showReceivedHistoryData() {
- $scope.rDataForView = $scope.req.setDataForView(false, $scope.req.receivedData);
- setSentData(false);
- }
-
- function executeCollReq(){
- $scope.executeCollectionRequest($scope.req, $scope.sDataForView, $scope.showData);
- }
-
- function fillApiData(){
- $scope.fillApiAndData($scope.req, $scope.isSentData ? $scope.sDataForView : $scope.rDataForView );
- }
- }
-
-});
+++ /dev/null
-
-define(
- [
- 'app/yangui/services/yangui.services',
- 'app/yangui/services/history.services',
- 'app/yangui/services/request-data.services',
- 'app/yangui/services/custom-funct-unsetter.services',
- 'app/yangui/services/plugin-handler.services',
- 'app/yangui/services/mount-points-connector.services',
- 'app/yangui/services/design-utils.services',
- 'app/yangui/services/handle-file.services',
- 'app/yangui/directives/abn_tree.directive',
- 'app/yangui/directives/sticky.directive',
- 'app/yangui/directives/read_file.directive',
- 'app/yangui/directives/ui-codemirror.directive',
- 'app/yangui/controllers/api/augmentation-modal.controller',
- 'app/yangui/controllers/api/case.controller',
- 'app/yangui/controllers/api/coll-box.controller',
- 'app/yangui/controllers/api/container.controller',
- 'app/yangui/controllers/api/filter.controller',
- 'app/yangui/controllers/api/filter-type.controller',
- 'app/yangui/controllers/api/filter-type-bit.controller',
- 'app/yangui/controllers/api/filter-type-empty.controller',
- 'app/yangui/controllers/api/filter-type-enum.controller',
- 'app/yangui/controllers/parameters/history-param.controller',
- 'app/yangui/controllers/api/choice.controller',
- 'app/yangui/controllers/api/input.controller',
- 'app/yangui/controllers/api/leaf.controller',
- 'app/yangui/controllers/api/leaf-list.controller',
- 'app/yangui/controllers/api/list.controller',
- 'app/yangui/controllers/api/output.controller',
- 'app/yangui/controllers/parameters/param-box.controller',
- 'app/yangui/controllers/parameters/params-view.controller',
- 'app/yangui/controllers/history/req-in-history.controller',
- 'app/yangui/controllers/history/request-history.controller',
- 'app/yangui/controllers/api/rpc.controller',
- 'app/yangui/controllers/api/type.controller',
- 'app/yangui/controllers/api/type-bit.controller',
- 'app/yangui/controllers/api/type-empty.controller',
- 'app/yangui/controllers/api/type-enum.controller',
- ], function () {
- 'use strict';
-
- angular.module('app.yangui').controller('YanguiCtrl', YanguiCtrl);
-
- YanguiCtrl.$inject = ['$scope', '$timeout', '$rootScope', '$http', '$filter', 'YangUtilsRestangularService',
- 'YangUtilsService', 'RequestBuilderService', 'CustomFuncService', 'PluginHandlerService', 'PathUtilsService',
- 'constants', 'NodeWrapperService', 'MountPointsConnectorService', 'DesignUtilsService',
- 'EventDispatcherService', 'SyncService', 'CustomFunctUnsetterService', 'HistoryService', 'DataBackupService',
- 'ParsingJsonService'];
-
- // todo: comment the whole controller
- function YanguiCtrl($scope, $timeout, $rootScope, $http, $filter, YangUtilsRestangularService, YangUtilsService,
- RequestBuilderService, CustomFuncService, PluginHandlerService, PathUtilsService, constants,
- NodeWrapperService, MountPointsConnectorService, DesignUtilsService, EventDispatcherService,
- SyncService, CustomFunctUnsetterService, HistoryService, DataBackupService, ParsingJsonService){
-
-
- $rootScope.section_logo = 'assets/images/logo_yangui.gif';
- $scope.apiType = '';
- $scope.constants = constants;
- $scope.currentPath = 'src/app/yangui/views/';
- $scope.defaultTreeName = $filter('translate')('YANGUI_ROOT');
- $scope.filterConstants = constants;
- $scope.filterRootNode = null;
- $scope.mainTabs = {
- api: true,
- history: false,
- collection: false,
- parameters: false,
- };
- $scope.mpSynchronizer = SyncService.generateObj();
- $scope.previewDelay = 2000;
- $scope.previewValidity = true;
- $scope.selCustFunct = null;
- $scope.selCustFunctButts = [];
- $scope.status = {
- type: 'noreq',
- msg: null,
- };
- $scope.treeName = $scope.defaultTreeName;
-
- $scope.__test = {
- loadApis: loadApis,
- processingModulesErrorCallback: $scope.processingModulesErrorCallback,
- requestErrorCallback: requestErrorCallback,
- requestSuccessCallback: requestSuccessCallback,
- requestWorkingCallback: requestWorkingCallback,
- processingModulesCallback: processingModulesCallback,
- processingModulesSuccessCallback: $scope.processingModulesSuccessCallback,
- };
-
- $scope.buildPreview = buildPreview;
- $scope.buildRoot = buildRoot;
- $scope.changePathInPreview = changePathInPreview;
- $scope.checkAddingListElement = checkAddingListElement;
- $scope.close_popup = close_popup;
- $scope.copyReqPathToClipboard = copyReqPathToClipboard;
- $scope.dismissStatus = dismissStatus;
- $scope.executeCustFunctionality = executeCustFunctionality;
- $scope.executeOperation = executeOperation;
- $scope.fallback = fallback;
- $scope.fillApi = fillApi;
- $scope.fillApiAndData = fillApiAndData;
- $scope.fillApiData = fillApiData;
- $scope.fillMPApi = fillMPApi;
- $scope.fillNodeData = fillNodeData;
- $scope.fillStandardApi = fillStandardApi;
- $scope.getNodeName = getNodeName;
- $scope.hidePreview = hidePreview;
- $scope.initMp = initMp;
- $scope.invalidatePreview = invalidatePreview;
- $scope.isMountPointSelected = isMountPointSelected;
- $scope.isPreviewValid = isPreviewValid;
- $scope.loadController = loadController;
- $scope.parameterizeData = parameterizeData;
- $scope.preview = preview;
- $scope.processingModulesErrorCallback = processingModulesErrorCallback;
- $scope.processingModulesSuccessCallback = processingModulesSuccessCallback;
- $scope.removeMountPointPath = removeMountPointPath;
- $scope.selectMP = selectMP;
- $scope.setApiNode = setApiNode;
- $scope.setNode = setNode;
- $scope.setStatusMessage = setStatusMessage;
- $scope.show_add_data_popup = show_add_data_popup;
- $scope.showCustFunctButton = showCustFunctButton;
- $scope.showCustFunctCancelButton = showCustFunctCancelButton;
- $scope.showModalRequestWin = showModalRequestWin;
- $scope.showPreview = showPreview;
- $scope.showTabs = showTabs;
- $scope.tabs = tabs;
- $scope.unsetCustomFunctionality = unsetCustomFunctionality;
- $scope.validatePreview = validatePreview;
-
- $scope.$on('SET_SCOPE_TREE_ROWS', setScopeTreeRows);
-
- var mountPrefix = constants.MPPREFIX;
-
- EventDispatcherService.registerHandler(constants.EV_SRC_MAIN, statusChangeEvent);
- EventDispatcherService.registerHandler(constants.EV_FILL_PATH, fillPathIdentifiersByKey);
- EventDispatcherService.registerHandler(constants.EV_LIST_CHANGED, fillPathIdentifiersByListData);
-
- $scope.loadController();
-
- function showTabs(tabs, tabName){
- for (var prop in tabs){
- tabs[prop] = tabName === prop;
- }
-
- DesignUtilsService.triggerWindowResize(100);
- }
-
- function statusChangeEvent(messages) {
- // var newMessage = $scope.status.rawMsg + '\r\n' + messages.join('\r\n');
- processingModulesCallback(messages[0]);
- }
-
- function fillPathIdentifiersByKey(inputs) {
- var node = inputs[0],
- value = inputs[1] || '';
-
- // or $scope.node === node.parent?
- if ($scope.selSubApi && node.parent && $scope.selSubApi.node.id === node.parent.id) {
- var identifiers = $scope.selSubApi.pathArray[$scope.selSubApi.pathArray.length - 1].identifiers;
- PathUtilsService.fillIdentifiers(identifiers, node.label, value);
- }
- }
-
- function fillPathIdentifiersByListData(inputs) {
- var node = inputs[0];
-
- if ($scope.selSubApi && node && $scope.selSubApi.node.id === node.id) { // or $scope.node === node.parent?
- var identifiers = $scope.selSubApi.pathArray[$scope.selSubApi.pathArray.length - 1].identifiers,
- keys = node.refKey;
-
- keys.forEach(function (key) {
- PathUtilsService.fillIdentifiers(identifiers, key.label, key.value);
- });
- }
- }
-
- function parameterizeData(path) {
- var parameterList = null;
-
- $scope.$broadcast('GET_PARAMETER_LIST', function (parameters) {
- parameterList = parameters;
- });
-
- return HistoryService.parametrizeData(parameterList.list, path);
- }
-
- function processingModulesCallback(e) {
- $scope.status = {
- isWorking: true,
- type: 'warning',
- msg: 'PROCESSING_MODULES',
- rawMsg: e || '',
- };
- }
-
- function processingModulesSuccessCallback(e) {
- $scope.status = {
- type: 'success',
- msg: 'PROCESSING_MODULES_SUCCESS',
- rawMsg: e || '',
- };
- }
-
- function processingModulesErrorCallback(e) {
- $scope.status = {
- type: 'danger',
- msg: 'PROCESSING_MODULES_ERROR',
- rawMsg: e || '',
- };
- }
-
- function requestWorkingCallback() {
- $scope.status = {
- isWorking: true,
- type: 'warning',
- msg: 'SEND_WAIT',
- };
- }
-
- function requestSuccessCallback() {
- $scope.status = {
- type: 'success',
- msg: 'SEND_SUCCESS',
- };
- }
-
- function setStatusMessage(type, msg, e){
- $scope.status = {
- type: type,
- msg: msg,
- rawMsg: e || '',
- };
- }
-
- function requestErrorCallback(e, resp) {
- var errorMessages = YangUtilsService.errorMessages,
- msg = errorMessages.method[resp.config.method] ?
- errorMessages.method[resp.config.method][resp.status] ?
- errorMessages.method[resp.config.method][resp.status] :
- 'SEND_ERROR' :
- 'SEND_ERROR';
-
- $scope.status = {
- type: 'danger',
- msg: msg,
- rawMsg: e.toString(),
- };
- }
-
- function setCustFunct(apis) {
- PluginHandlerService.plugAll($scope.apis, $scope);
- }
-
- function removeMountPointPath(pathArray){
- var mpPathIndex = pathArray.length;
-
- pathArray.some(function (pathElem, index) {
- var isMPElem = pathElem.name === mountPrefix;
- if (isMPElem) {
- mpPathIndex = index;
- }
-
- return isMPElem;
- });
-
- var pathCopy = pathArray.slice(0, mpPathIndex);
- return pathCopy;
- }
-
- function invalidatePreview() {
- $scope.previewValidity = false;
- }
-
- function validatePreview() {
- $scope.previewValidity = true;
- }
-
- function isPreviewValid() {
- return $scope.previewValidity;
- }
-
- function preview() {
- if ($scope.isPreviewValid()) {
- $scope.invalidatePreview();
-
- $timeout(function () {
- $scope.buildPreview();
- $scope.validatePreview();
- }, $scope.previewDelay);
- }
- }
-
- function buildPreview() {
- if ($scope.node) {
- var reqString = $scope.selSubApi.buildApiRequestString(),
- requestData = {};
-
- // create request
- $scope.node.buildRequest(RequestBuilderService, requestData, $scope.node.module);
- // update request data (remove envelope from POST request etc.)
- requestData = YangUtilsService.prepareRequestData(
- requestData,
- $scope.selectedOperation,
- reqString,
- $scope.selSubApi
- );
-
- var jsonRequestData = requestData ? JSON.stringify(requestData, null, 4) : '';
- // preview data
- $scope.previewValue = $scope.selApi.basePath + reqString;
- $scope.previewValue = $scope.previewValue + '\r\n' + jsonRequestData;
- } else {
- $scope.previewValue = '';
- }
- }
-
- function getNodeName(localeLabel, label) {
- var localeResult = $filter('translate')(localeLabel);
- return localeResult.indexOf(constants.LOCALE_PREFIX) === 0 ? label : localeResult;
- }
-
- function showCustFunctButton() {
- return $scope.selCustFunct === null;
- }
-
- function showCustFunctCancelButton() {
- return $scope.selCustFunct !== null;
- }
-
- function unsetCustomFunctionality() {
- if ($scope.selCustFunct) {
- CustomFunctUnsetterService.unset($scope.selCustFunct, $scope);
- }
- $scope.selCustFunct = null;
- $scope.treeName = $scope.defaultTreeName;
- $scope.selCustFunctButts = [];
- }
-
- function loadApis() {
- $scope.apis = [];
- $scope.allNodes = [];
- $scope.treeApis = [];
- $scope.augmentations = {};
-
- processingModulesCallback();
- YangUtilsService.generateNodesToApis(function (apis, allNodes, augGroups) {
- $scope.apis = apis;
- $scope.allNodes = allNodes;
- $scope.augmentations = augGroups;
- console.info('got data', $scope.apis, $scope.allNodes, $scope.augmentations);
- $scope.treeApis = YangUtilsService.generateApiTreeData(apis);
- console.info('tree api', $scope.treeApis);
- $scope.processingModulesSuccessCallback();
-
- setCustFunct($scope.apis);
- $scope.$broadcast('LOAD_REQ_DATA');
- }, function (e) {
- $scope.processingModulesErrorCallback(e);
- });
- }
-
- function isMountPointSelected() {
- return $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS';
- }
-
- function dismissStatus() {
- $scope.status = {};
- }
-
- function setNode() {
- $scope.node = $scope.selSubApi.node;
- }
-
- function setApiNode(indexApi, indexSubApi) {
- $scope.selectedOperation = null;
-
- if (indexApi !== undefined && indexSubApi !== undefined ) {
- $scope.selApi = $scope.apis[indexApi];
- $scope.selSubApi = $scope.selApi.subApis[indexSubApi];
-
- $scope.apiType = $scope.selSubApi.pathArray[0].name === 'operational' ? 'operational/' : '';
- $scope.node = $scope.selSubApi.node;
- $scope.filterRootNode = $scope.selSubApi.node;
- $scope.node.clear();
-
- if ($scope.selSubApi && $scope.selSubApi.operations) {
- $scope.selectedOperation = $scope.selSubApi.operations[0];
- }
-
- // TODO: uncomment this broadcast and check why does it cause adding element to list in operational portion twice
- //$scope.$broadcast('EV_DISABLE_ADDING_LIST_ELEMENT');
-
- $scope.$broadcast('EV_REFRESH_LIST_INDEX');
- DesignUtilsService.triggerWindowResize(100);
- } else {
- $scope.selApi = null;
- $scope.selSubApi = null;
- $scope.node = null;
- }
- }
-
- /**
- * Checks if the element list should be disabled
- */
- function checkAddingListElement(node) {
- return $scope.node === node && $scope.node.type === 'list' && $scope.node.refKey && $scope.node.refKey.length;
- }
-
- function loadController() {
- $scope.flows = [];
- $scope.devices = [];
- $scope.apis = [];
- $scope.previewVisible = false;
- $scope.previewValue = '';
- $scope.popupData = { show: false };
- $scope.dataToFill = '';
- $scope.apiToFill = '';
-
- loadApis();
-
- $rootScope.$on('$includeContentLoaded', function () {
- DesignUtilsService.setDraggablePopups();
- // DesignUtilsService.getHistoryPopUpWidth();
- });
- }
-
- function executeOperation(operation, callback, reqPath) {
- var reqString = $scope.selSubApi.buildApiRequestString(),
- requestData = {},
- preparedRequestData = {},
- headers = null;
-
- reqString = reqPath ? reqPath.slice($scope.selApi.basePath.length, reqPath.length) : reqString;
- var requestPath = $scope.selApi.basePath + reqString;
-
- operation = YangUtilsService.prepareOperation(operation);
-
- if (operation !== 'REMOVE'){
- $scope.node.buildRequest(RequestBuilderService, requestData, $scope.node.module);
- angular.copy(requestData, preparedRequestData);
-
- preparedRequestData = YangUtilsService.prepareRequestData(
- preparedRequestData,
- operation,
- reqString,
- $scope.selSubApi
- );
- }
-
- headers = YangUtilsService.prepareHeaders(preparedRequestData);
-
- requestWorkingCallback();
-
- YangUtilsRestangularService.one('restconf').customOperation(
- operation.toLowerCase(),
- reqString,
- null,
- headers,
- preparedRequestData
- ).then(
- function (data) {
- if (operation === 'REMOVE'){
- $scope.node.clear();
- }
-
- if (data) {
- $scope.node.clear();
- var props = Object.getOwnPropertyNames(data);
-
- // fill each property - needed for root mountpoint node,
- // in other cases there should be only one property anyway
- props.forEach(function (p) {
- $scope.node.fill(p, data[p]);
- });
- $scope.node.expanded = true;
- }
-
- requestSuccessCallback();
- // TODO after first GET we have set $scope.node with data
- // so build from the top of this function return requestData
- if (operation === 'GET'){
- requestData = {};
- }
- $scope.$broadcast('YUI_ADD_TO_HISTORY',
- 'success',
- data,
- preparedRequestData,
- operation,
- requestPath
- );
-
- if ( angular.isFunction(callback) ) {
- callback(data);
- }
-
- if ($scope.previewVisible === true){
- $scope.preview();
- }
-
- }, function (resp) {
- var errorMsg = '';
-
- if (resp.data && resp.data.errors && resp.data.errors.error && resp.data.errors.error.length) {
- errorMsg = ': ' + resp.data.errors.error.map(function (e) {
- return e['error-message'];
- }).join(', ');
- }
-
- requestErrorCallback(errorMsg, resp);
-
- // TODO after first GET we have set $scope.node with data
- // so build from the top of this function return requestData
- if (operation === 'GET'){
- requestData = {};
- }
- $scope.$broadcast(
- 'YUI_ADD_TO_HISTORY',
- 'error',
- resp.data,
- preparedRequestData,
- operation,
- requestPath
- );
-
- console.info(
- 'error sending request to',
- $scope.selSubApi.buildApiRequestString(),
- 'reqString',
- reqString,
- 'got',
- resp.status,
- 'data',
- resp.data
- );
- }
- );
- }
-
- function executeCustFunctionality(custFunct) {
- custFunct.runCallback($scope);
- $scope.selCustFunct = custFunct;
- }
-
- function fillNodeData(pathElem, identifier) {
- if ($scope.selSubApi && $scope.selSubApi.storage === 'config' &&
- $scope.selSubApi.pathArray.indexOf(pathElem) === ($scope.selSubApi.pathArray.length - 1)) {
- PathUtilsService.fillListNode($scope.node, identifier.label, identifier.value);
- }
- }
-
- function showPreview() {
- $scope.previewVisible = true;
- $scope.buildPreview();
- }
-
- function hidePreview() {
- $scope.previewVisible = false;
- }
-
- function copyReqPathToClipboard(req){
- var reqPath = req ? req.api.parent.basePath : $scope.selApi.basePath;
-
- reqPath += req ?
- req.parametrizedPath ?
- $scope.parameterizeData(req.parametrizedPath) :
- req.api.buildApiRequestString() :
- $scope.selSubApi.buildApiRequestString();
-
- return reqPath;
- }
-
- function fallback(path) {
- window.prompt($filter('translate')('YANGUI_CLIPBOARD_ALERT_MSG'), path);
- }
-
- function buildRoot() {
- $scope.node.buildRequest(RequestBuilderService, {}, $scope.node.module);
- }
-
- function changePathInPreview() {
- $scope.preview();
- }
-
- function fillApiAndData(req, dataForView, fromSetCustApi) {
- var path = req.parametrizedPath ? req.parametrizedPath : req.path,
- rdata = req.receivedData,
- sdata = dataForView ? ParsingJsonService.parseJson(dataForView) : req.sentData;
-
- if (path) {
- $scope.fillApi(path, fromSetCustApi);
-
- if ($scope.node && (rdata || sdata)) {
- if (rdata) {
- $scope.fillApiData(rdata);
- }
-
- if (sdata) {
- $scope.fillApiData(sdata);
- }
- }
- }
-
- $scope.selectedOperation = req.method;
- }
-
- function fillStandardApi(searchPath, fillPath, fromSetCustApi) {
- fillPath = fillPath || searchPath;
-
- var moduleNew = PathUtilsService.getModuleNameFromPath(searchPath),
- moduleOld = $scope.selSubApi &&
- $scope.selSubApi.pathArray.length > 1 ? $scope.selSubApi.pathArray[1].module : null;
-
- if (
- (
- fromSetCustApi && searchPath.indexOf(mountPrefix) === -1 &&
- $scope.selCustFunct && $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS'
- ) ||
- (
- fromSetCustApi && searchPath.indexOf(mountPrefix) !== -1 &&
- $scope.selCustFunct &&
- $scope.selCustFunct.label === 'YANGUI_CUST_MOUNT_POINTS' &&
- moduleNew !== moduleOld
- )
- ){
- $scope.unsetCustomFunctionality();
- }
-
- var apiIndexes = fromSetCustApi ?
- PathUtilsService.searchNodeByPath(searchPath, $scope.treeApis, $scope.treeRows) :
- PathUtilsService.searchNodeByPath(
- MountPointsConnectorService.alterMpPath(searchPath),
- $scope.treeApis,
- $scope.treeRows
- );
-
- if (apiIndexes) {
- $scope.setApiNode(apiIndexes.indexApi, apiIndexes.indexSubApi);
- if ($scope.selSubApi) {
- PathUtilsService.fillPath($scope.selSubApi.pathArray, fillPath);
- }
- }
- }
-
- function fillApi(path, fromSetCustApi) {
- var parameterizedPath = $scope.parameterizeData(path),
- fillPath = parameterizedPath;
-
- if (parameterizedPath.indexOf(mountPrefix) !== -1) {
- fillPath = parameterizedPath.replace('restconf/config', 'restconf/operational');
- }
-
- $scope.fillStandardApi(fillPath, null, fromSetCustApi);
-
- if (path.indexOf(mountPrefix) !== -1 && $scope.selSubApi) {
- $scope.selSubApi.pathArray = $scope.removeMountPointPath($scope.selSubApi.pathArray);
- $scope.selectMP();
-
- $scope.mpSynchronizer.waitFor(function () {
- $scope.fillMPApi(parameterizedPath);
- });
- }
- }
-
- function selectMP() {
- var mpCF = CustomFuncService.getMPCustFunctionality($scope.selSubApi.custFunct);
- if (mpCF) {
- $scope.executeCustFunctionality(mpCF);
- } else {
- console.warn(
- 'Mountpoint custom functionality for api',
- $scope.selSubApi.buildApiRequestString(),
- ' is not set');
- }
- }
-
- function fillMPApi(path) {
- var mpPath = MountPointsConnectorService.alterMpPath(path),
- apiIndexes = PathUtilsService.searchNodeByPath(mpPath, $scope.treeApis, $scope.treeRows);
- if (apiIndexes) {
- $scope.setApiNode(apiIndexes.indexApi, apiIndexes.indexSubApi);
- if ($scope.selSubApi) {
- PathUtilsService.fillPath($scope.selSubApi.pathArray, path);
- }
- }
- }
-
- function fillApiData(data){
- var parametrizedData = $scope.parameterizeData(data),
- obj = null;
-
- obj = typeof parametrizedData === 'object' ?
- parametrizedData :
- ParsingJsonService.parseJson(parametrizedData);
-
- if (obj !== null && typeof obj === 'object') {
- var p = Object.keys(obj)[0];
- $scope.node.fill(p, obj[p]);
- }
- }
-
- function show_add_data_popup(){
- $scope.popupData.show = true;
- }
-
- function close_popup(popObj){
- popObj.show = false;
- }
-
- function tabs(event, index){
- var tabDom = $(event.target).closest('.tabs');
-
- tabDom.find(' > .tab-content').children('.tab-pane')
- .removeClass('active')
- .eq(index).addClass('active');
-
- tabDom.find('> .nav-tabs').children('li')
- .removeClass('btn-selected')
- .eq(index).addClass('btn-selected');
- }
-
- function initMp(mountPointStructure, mountPointTreeApis, mountPointApis, augmentations){
- DataBackupService.storeFromScope([
- 'treeApis',
- 'treeRows',
- 'apis',
- 'node',
- 'selApi',
- 'selSubApi',
- 'augmentations',
- ], $scope);
- $scope.filterRootNode = null;
- $scope.node = null;
- $scope.treeApis = mountPointTreeApis;
- $scope.apis = mountPointApis;
- $scope.processingModulesSuccessCallback();
- $scope.augmentations = augmentations;
- $scope.$broadcast('REFRESH_HISTORY_REQUEST_APIS');
- }
-
- function showModalRequestWin(){
- $scope.$broadcast('LOAD_REQ_DATA');
- }
-
- function setScopeTreeRows(e, rows){
- $scope.treeRows = rows;
- }
-
- }
-
- angular.module('app.yangui').filter('onlyConfigStmts', function (NodeUtilsService){
- return function (nodes){
-
- if (nodes.length) {
- nodes = nodes.filter(function (n){
- return NodeUtilsService.isOnlyOperationalNode(n);
- });
- }
-
- return nodes;
- };
- });
-
-});
+++ /dev/null
-define(['app/yangui/yangui.module'], function(yangui) {\r
-\r
- yangui.register.directive('abnTree', [\r
- '$timeout', function($timeout) {\r
- return {\r
- restrict: 'E',\r
- templateUrl: 'src/app/yangui/views/abn-tree.tpl.html',\r
- replace: true,\r
- scope: {\r
- treeData: '=',\r
- onSelect: '&',\r
- initialSelection: '@',\r
- treeControl: '=',\r
- treeRows: '='\r
- },\r
- link: function(scope, element, attrs) {\r
- var error, expand_all_parents, expand_level, for_all_ancestors, for_each_branch, get_parent, n, on_treeData_change, select_branch, selected_branch, tree;\r
- error = function(s) {\r
- console.log('ERROR:' + s);\r
- //debugger;\r
- return void 0;\r
- };\r
- if (attrs.iconExpand == null) {\r
- attrs.iconExpand = 'icon-plus glyphicon glyphicon-plus fa fa-plus';\r
- }\r
- if (attrs.iconCollapse == null) {\r
- attrs.iconCollapse = 'icon-minus glyphicon glyphicon-minus fa fa-minus';\r
- }\r
- if (attrs.iconLeaf == null) {\r
- attrs.iconLeaf = 'icon-file glyphicon glyphicon-file fa fa-file';\r
- }\r
- if (attrs.expandLevel == null) {\r
- attrs.expandLevel = '3';\r
- }\r
- expand_level = parseInt(attrs.expandLevel, 10);\r
- if (!scope.treeData) {\r
- console.warn('no treeData defined for the tree!');\r
- return;\r
- }\r
- if (scope.treeData.length == null) {\r
- if (treeData.label != null) {\r
- scope.treeData = [treeData];\r
- } else {\r
- console.warn('treeData should be an array of root branches');\r
- return;\r
- }\r
- }\r
- for_each_branch = function(f) {\r
- var do_f, root_branch, _i, _len, _ref, _results;\r
- do_f = function(branch, level) {\r
- var child, _i, _len, _ref, _results;\r
- f(branch, level);\r
- if (branch.children != null) {\r
- _ref = branch.children;\r
- _results = [];\r
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r
- child = _ref[_i];\r
- _results.push(do_f(child, level + 1));\r
- }\r
- return _results;\r
- }\r
- };\r
- _ref = scope.treeData;\r
- _results = [];\r
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r
- root_branch = _ref[_i];\r
- _results.push(do_f(root_branch, 1));\r
- }\r
- return _results;\r
- };\r
- selected_branch = null;\r
- select_branch = function(branch) {\r
- if (!branch) {\r
- if (selected_branch != null) {\r
- selected_branch.selected = false;\r
- }\r
- selected_branch = null;\r
- return;\r
- }\r
- if (branch !== selected_branch) {\r
- if (selected_branch != null) {\r
- selected_branch.selected = false;\r
- }\r
- branch.selected = true;\r
- selected_branch = branch;\r
- expand_all_parents(branch);\r
- if (branch.onSelect != null) {\r
- return $timeout(function() {\r
- return branch.onSelect(branch);\r
- });\r
- } else {\r
- if (scope.onSelect != null) {\r
- return $timeout(function() {\r
- return scope.onSelect({\r
- branch: branch\r
- });\r
- });\r
- }\r
- }\r
- }\r
- };\r
- scope.user_clicks_branch = function(branch) {\r
- \r
- scope.tree_rows.forEach(function(item){\r
- item.branch.selected = false;\r
- });\r
-\r
- if (branch !== selected_branch) {\r
- return select_branch(branch);\r
- } else {\r
- branch.selected = true;\r
- }\r
- };\r
-\r
- get_parent = function(child) {\r
- var parent;\r
- parent = void 0;\r
- if (child.parent_uid) {\r
- for_each_branch(function(b) {\r
- if (b.uid === child.parent_uid) {\r
- return parent = b;\r
- }\r
- });\r
- }\r
- return parent;\r
- };\r
- for_all_ancestors = function(child, fn) {\r
- var parent;\r
- parent = get_parent(child);\r
- if (parent != null) {\r
- fn(parent);\r
- return for_all_ancestors(parent, fn);\r
- }\r
- };\r
- expand_all_parents = function(child) {\r
- return for_all_ancestors(child, function(b) {\r
- return b.expanded = true;\r
- });\r
- };\r
- \r
- scope.expandedTree = false;\r
- scope.expand_collapse_all_items = function(){\r
-\r
- var expand = !scope.expandedTree ? true : false;\r
-\r
- scope.tree_rows.forEach(function(child){\r
- child.branch.expanded = expand;\r
- });\r
-\r
- scope.expandedTree = !scope.expandedTree;\r
- // console.log(scope.tree_rows);\r
- };\r
- scope.collapse_others = function(){\r
- var parentId = null,\r
- expandParent = function(parentId){\r
- if ( parentId ) {\r
- scope.tree_rows.forEach(function(child){\r
- if ( child.branch.uid === parentId ) {\r
- child.branch.expanded = true;\r
- parentId = child.branch.parent_uid;\r
- \r
- if ( parentId ) {\r
- expandParent(parentId);\r
- }\r
- }\r
- });\r
- }\r
- };\r
-\r
- scope.tree_rows.forEach(function(child){\r
- if ( child.branch.selected ) {\r
- parentId = child.branch.parent_uid;\r
- }\r
- child.branch.expanded = child.branch.selected ? child.branch.expanded : false;\r
- });\r
-\r
- if ( parentId ) {\r
- expandParent(parentId);\r
- }\r
-\r
- };\r
-\r
- scope.$watch('tree_rows', function() {\r
- scope.treeRows = scope.tree_rows;\r
- scope.$emit('SET_SCOPE_TREE_ROWS', scope.treeRows);\r
- });\r
-\r
- scope.tree_rows = [];\r
- on_treeData_change = function() {\r
- var add_branch_to_list, root_branch, _i, _len, _ref, _results;\r
- for_each_branch(function(b, level) {\r
- if (!b.uid) {\r
- return b.uid = "" + Math.random();\r
- }\r
- });\r
- // console.log('UIDs are set.');\r
- for_each_branch(function(b) {\r
- var child, _i, _len, _ref, _results;\r
- if (angular.isArray(b.children)) {\r
- _ref = b.children;\r
- _results = [];\r
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r
- child = _ref[_i];\r
- _results.push(child.parent_uid = b.uid);\r
- }\r
- return _results;\r
- }\r
- });\r
- scope.tree_rows = [];\r
- for_each_branch(function(branch) {\r
- var child, f;\r
- if (branch.children) {\r
- if (branch.children.length > 0) {\r
- f = function(e) {\r
- if (typeof e === 'string') {\r
- return {\r
- label: e,\r
- children: []\r
- };\r
- } else {\r
- return e;\r
- }\r
- };\r
- return branch.children = (function() {\r
- var _i, _len, _ref, _results;\r
- _ref = branch.children;\r
- _results = [];\r
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r
- child = _ref[_i];\r
- _results.push(f(child));\r
- }\r
- return _results;\r
- })();\r
- }\r
- } else {\r
- return branch.children = [];\r
- }\r
- });\r
- add_branch_to_list = function(level, branch, visible) {\r
- var child, child_visible, tree_icon, _i, _len, _ref, _results;\r
- if (branch.expanded == null) {\r
- branch.expanded = false;\r
- }\r
- if (!branch.children || branch.children.length === 0) {\r
- tree_icon = attrs.iconLeaf;\r
- } else {\r
- if (branch.expanded) {\r
- tree_icon = attrs.iconCollapse;\r
- } else {\r
- tree_icon = attrs.iconExpand;\r
- }\r
- }\r
- scope.tree_rows.push({\r
- level: level,\r
- branch: branch,\r
- label: branch.label,\r
- tree_icon: tree_icon,\r
- visible: visible\r
- });\r
- if (branch.children != null) {\r
- _ref = branch.children;\r
- _results = [];\r
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r
- child = _ref[_i];\r
- child_visible = visible && branch.expanded;\r
- _results.push(add_branch_to_list(level + 1, child, child_visible));\r
- }\r
- return _results;\r
- }\r
- };\r
- _ref = scope.treeData;\r
- _results = [];\r
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r
- root_branch = _ref[_i];\r
- _results.push(add_branch_to_list(1, root_branch, true));\r
- }\r
- return _results;\r
- };\r
- scope.$watch('treeData', on_treeData_change, true);\r
- if (attrs.initialSelection != null) {\r
- for_each_branch(function(b) {\r
- if (b.label === attrs.initialSelection) {\r
- return $timeout(function() {\r
- return select_branch(b);\r
- });\r
- }\r
- });\r
- }\r
- n = scope.treeData.length;\r
- // console.log('num root branches = ' + n);\r
- for_each_branch(function(b, level) {\r
- b.level = level;\r
- return b.expanded = b.level < expand_level;\r
- });\r
- if (scope.treeControl != null) {\r
- if (angular.isObject(scope.treeControl)) {\r
- tree = scope.treeControl;\r
- tree.expand_all = function() {\r
- return for_each_branch(function(b, level) {\r
- return b.expanded = true;\r
- });\r
- };\r
- tree.collapse_all = function() {\r
- return for_each_branch(function(b, level) {\r
- return b.expanded = false;\r
- });\r
- };\r
- tree.get_first_branch = function() {\r
- n = scope.treeData.length;\r
- if (n > 0) {\r
- return scope.treeData[0];\r
- }\r
- };\r
- tree.select_first_branch = function() {\r
- var b;\r
- b = tree.get_first_branch();\r
- return tree.select_branch(b);\r
- };\r
- tree.get_selected_branch = function() {\r
- return selected_branch;\r
- };\r
- tree.get_parent_branch = function(b) {\r
- return get_parent(b);\r
- };\r
- tree.select_branch = function(b) {\r
- select_branch(b);\r
- return b;\r
- };\r
- tree.get_children = function(b) {\r
- return b.children;\r
- };\r
- tree.select_parent_branch = function(b) {\r
- var p;\r
- if (b == null) {\r
- b = tree.get_selected_branch();\r
- }\r
- if (b != null) {\r
- p = tree.get_parent_branch(b);\r
- if (p != null) {\r
- tree.select_branch(p);\r
- return p;\r
- }\r
- }\r
- };\r
- tree.add_branch = function(parent, new_branch) {\r
- if (parent != null) {\r
- parent.children.push(new_branch);\r
- parent.expanded = true;\r
- } else {\r
- scope.treeData.push(new_branch);\r
- }\r
- return new_branch;\r
- };\r
- tree.add_root_branch = function(new_branch) {\r
- tree.add_branch(null, new_branch);\r
- return new_branch;\r
- };\r
- tree.expand_branch = function(b) {\r
- if (b == null) {\r
- b = tree.get_selected_branch();\r
- }\r
- if (b != null) {\r
- b.expanded = true;\r
- return b;\r
- }\r
- };\r
- tree.collapse_branch = function(b) {\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- b.expanded = false;\r
- return b;\r
- }\r
- };\r
- tree.get_siblings = function(b) {\r
- var p, siblings;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- p = tree.get_parent_branch(b);\r
- if (p) {\r
- siblings = p.children;\r
- } else {\r
- siblings = scope.treeData;\r
- }\r
- return siblings;\r
- }\r
- };\r
- tree.get_next_sibling = function(b) {\r
- var i, siblings;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- siblings = tree.get_siblings(b);\r
- n = siblings.length;\r
- i = siblings.indexOf(b);\r
- if (i < n) {\r
- return siblings[i + 1];\r
- }\r
- }\r
- };\r
- tree.get_prev_sibling = function(b) {\r
- var i, siblings;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- siblings = tree.get_siblings(b);\r
- n = siblings.length;\r
- i = siblings.indexOf(b);\r
- if (i > 0) {\r
- return siblings[i - 1];\r
- }\r
- };\r
- tree.select_next_sibling = function(b) {\r
- var next;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- next = tree.get_next_sibling(b);\r
- if (next != null) {\r
- return tree.select_branch(next);\r
- }\r
- }\r
- };\r
- tree.select_prev_sibling = function(b) {\r
- var prev;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- prev = tree.get_prev_sibling(b);\r
- if (prev != null) {\r
- return tree.select_branch(prev);\r
- }\r
- }\r
- };\r
- tree.get_first_child = function(b) {\r
- var _ref;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- if (((_ref = b.children) != null ? _ref.length : void 0) > 0) {\r
- return b.children[0];\r
- }\r
- }\r
- };\r
- tree.get_closest_ancestor_next_sibling = function(b) {\r
- var next, parent;\r
- next = tree.get_next_sibling(b);\r
- if (next != null) {\r
- return next;\r
- } else {\r
- parent = tree.get_parent_branch(b);\r
- return tree.get_closest_ancestor_next_sibling(parent);\r
- }\r
- };\r
- tree.get_next_branch = function(b) {\r
- var next;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- next = tree.get_first_child(b);\r
- if (next != null) {\r
- return next;\r
- } else {\r
- next = tree.get_closest_ancestor_next_sibling(b);\r
- return next;\r
- }\r
- }\r
- };\r
- tree.select_next_branch = function(b) {\r
- var next;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- next = tree.get_next_branch(b);\r
- if (next != null) {\r
- tree.select_branch(next);\r
- return next;\r
- }\r
- }\r
- };\r
- tree.last_descendant = function(b) {\r
- var last_child;\r
- if (b == null) {\r
- //debugger;\r
- }\r
- n = b.children.length;\r
- if (n === 0) {\r
- return b;\r
- } else {\r
- last_child = b.children[n - 1];\r
- return tree.last_descendant(last_child);\r
- }\r
- };\r
- tree.get_prev_branch = function(b) {\r
- var parent, prev_sibling;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- prev_sibling = tree.get_prev_sibling(b);\r
- if (prev_sibling != null) {\r
- return tree.last_descendant(prev_sibling);\r
- } else {\r
- parent = tree.get_parent_branch(b);\r
- return parent;\r
- }\r
- }\r
- };\r
- return tree.select_prev_branch = function(b) {\r
- var prev;\r
- if (b == null) {\r
- b = selected_branch;\r
- }\r
- if (b != null) {\r
- prev = tree.get_prev_branch(b);\r
- if (prev != null) {\r
- tree.select_branch(prev);\r
- return prev;\r
- }\r
- }\r
- };\r
- }\r
- }\r
- }\r
- };\r
- }\r
- ]);\r
-});\r
+++ /dev/null
-define(['app/yangui/yangui.module'], function(yangui) {\r
-\r
- yangui.register.directive('onReadFile', function ($parse) {\r
- return {\r
- restrict: 'A',\r
- scope: false,\r
- link: function(scope, element, attrs) {\r
- var fn = $parse(attrs.onReadFile);\r
- \r
- element.on('change', function(onChangeEvent) {\r
- var reader = new FileReader();\r
- \r
- reader.onload = function(onLoadEvent) {\r
- scope.$apply(function() {\r
- fn(scope, {$fileContent:onLoadEvent.target.result});\r
- });\r
- };\r
-\r
- reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]);\r
- });\r
- }\r
- };\r
- });\r
-});
\ No newline at end of file
+++ /dev/null
-define(['app/yangui/yangui.module'], function(yangui) {\r
-\r
- yangui.register.directive('sticky', ['$timeout', function($timeout){\r
- return {\r
- restrict: 'A',\r
- scope: {\r
- offset: '@',\r
- },\r
- link: function($scope, $elem, $attrs){\r
- $timeout(function(){\r
- var offsetTop = $scope.offset || 0,\r
- $window = angular.element(window),\r
- doc = document.documentElement,\r
- initialPositionStyle = $elem.css('position'),\r
- stickyLine,\r
- scrollTop,\r
- randomNum = Math.floor((Math.random() * 1000) + 1),\r
- $wrapper = $('<div class="sticky-element'+randomNum+'"></div>');\r
-\r
-\r
- // Set the top offset\r
- //\r
- $elem.css('top', offsetTop+'px');\r
-\r
-\r
- // Get the sticky line\r
- //\r
- function setInitial(){\r
- $elem.addClass('not-sticky');\r
- $elem.wrap($wrapper);\r
- getStickyLine();\r
- checkSticky();\r
- }\r
-\r
- function getStickyLine(){\r
- //stickyLine = $elem[0].offsetTop - offsetTop;\r
- stickyLine = $($elem).offset().top - offsetTop;\r
- }\r
-\r
- // Check if the window has passed the sticky line\r
- //\r
- function checkSticky(){\r
- scrollTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\r
- // $('.sticky-element'+randomNum).css('height', parseInt($elem.css('height')) === 0 ? 'auto' : $elem.css('height'));\r
-\r
- if ( scrollTop >= stickyLine ){\r
- $elem.css('position', 'fixed').removeClass('not-sticky').addClass('is-sticky');\r
- $('.sticky-element'+randomNum).css('height', parseInt($elem.css('height')) === 0 ? 'auto' : $elem.css('height'));\r
-\r
- } else {\r
- $elem.css('position', initialPositionStyle).removeClass('is-sticky').addClass('not-sticky');\r
- $('.sticky-element'+randomNum).css('height','auto');\r
- }\r
-\r
- var _ = $elem.hasClass('not-sticky') ? getStickyLine() : null;\r
-\r
- }\r
-\r
-\r
- // Handle the resize event\r
- //\r
- function resize(){\r
- // $elem.css('position', initialPositionStyle);\r
- // $timeout(setInitial);\r
- }\r
-\r
-\r
- // Attach our listeners\r
- //\r
- $window.on('scroll', checkSticky);\r
- $window.on('resize', resize);\r
- \r
- setInitial();\r
- });\r
- },\r
- };\r
- }]);\r
-});
\ No newline at end of file
+++ /dev/null
-//angular.module('ui.codemirror', [])
-// .constant('uiCodemirrorConfig', {})
-// .directive('uiCodemirror', uiCodemirrorDirective);
-define(['app/yangui/yangui.module'], function(yangui) {
-
- yangui.register.constant('uiCodemirrorConfig', {});
- yangui.register.directive('uiCodemirror', uiCodemirrorDirective);
-
- /**
- * @ngInject
- */
- function uiCodemirrorDirective($timeout, uiCodemirrorConfig) {
-
- return {
- restrict: 'EA',
- require: '?ngModel',
- compile: function compile() {
-
- // Require CodeMirror
- if (angular.isUndefined(window.CodeMirror)) {
- throw new Error('ui-codemirror needs CodeMirror to work... (o rly?)');
- }
-
- return postLink;
- }
- };
-
- function postLink(scope, iElement, iAttrs, ngModel) {
- var codemirrorOptions = angular.extend(
- { value: iElement.text() },
- uiCodemirrorConfig.codemirror || {},
- scope.$eval(iAttrs.uiCodemirror),
- scope.$eval(iAttrs.uiCodemirrorOpts)
- );
-
- var codemirror = newCodemirrorEditor(iElement, codemirrorOptions);
-
- configOptionsWatcher(
- codemirror,
- iAttrs.uiCodemirror || iAttrs.uiCodemirrorOpts,
- scope
- );
-
- configNgModelLink(codemirror, ngModel, scope);
-
- configUiRefreshAttribute(codemirror, iAttrs.uiRefresh, scope);
-
- // Allow access to the CodeMirror instance through a broadcasted event
- // eg: $broadcast('CodeMirror', function(cm){...});
- scope.$on('CodeMirror', function(event, callback) {
- if (angular.isFunction(callback)) {
- callback(codemirror);
- } else {
- throw new Error('the CodeMirror event requires a callback function');
- }
- });
-
- // onLoad callback
- if (angular.isFunction(codemirrorOptions.onLoad)) {
- codemirrorOptions.onLoad(codemirror);
- }
- }
-
- function newCodemirrorEditor(iElement, codemirrorOptions) {
- var codemirrot;
-
- if (iElement[0].tagName === 'TEXTAREA') {
- // Might bug but still ...
- codemirrot = window.CodeMirror.fromTextArea(iElement[0], codemirrorOptions);
- } else {
- iElement.html('');
- codemirrot = new window.CodeMirror(function(cm_el) {
- iElement.append(cm_el);
- }, codemirrorOptions);
- }
-
- return codemirrot;
- }
-
- function configOptionsWatcher(codemirrot, uiCodemirrorAttr, scope) {
- if (!uiCodemirrorAttr) { return; }
-
- var codemirrorDefaultsKeys = Object.keys(window.CodeMirror.defaults);
- scope.$watch(uiCodemirrorAttr, updateOptions, true);
- function updateOptions(newValues, oldValue) {
- if (!angular.isObject(newValues)) { return; }
- codemirrorDefaultsKeys.forEach(function(key) {
- if (newValues.hasOwnProperty(key)) {
-
- if (oldValue && newValues[key] === oldValue[key]) {
- return;
- }
-
- codemirrot.setOption(key, newValues[key]);
- }
- });
- }
- }
-
- function configNgModelLink(codemirror, ngModel, scope) {
- if (!ngModel) { return; }
- // CodeMirror expects a string, so make sure it gets one.
- // This does not change the model.
- ngModel.$formatters.push(function(value) {
- if (angular.isUndefined(value) || value === null) {
- return '';
- } else if (angular.isObject(value) || angular.isArray(value)) {
- throw new Error('ui-codemirror cannot use an object or an array as a model');
- }
- return value;
- });
-
-
- // Override the ngModelController $render method, which is what gets called when the model is updated.
- // This takes care of the synchronizing the codeMirror element with the underlying model, in the case that it is changed by something else.
- ngModel.$render = function() {
- //Code mirror expects a string so make sure it gets one
- //Although the formatter have already done this, it can be possible that another formatter returns undefined (for example the required directive)
- var safeViewValue = ngModel.$viewValue || '';
- codemirror.setValue(safeViewValue);
- };
-
-
- // Keep the ngModel in sync with changes from CodeMirror
- codemirror.on('change', function(instance) {
- var newValue = instance.getValue();
- if (newValue !== ngModel.$viewValue) {
- scope.$evalAsync(function() {
- ngModel.$setViewValue(newValue);
- });
- }
- });
-
-
- // Fix for using codemirror in tabs (or modal window)
- codemirror.on('changes', function(instance, changes) {
- $timeout(function(){
- instance.refresh();
- });
- });
- }
-
- function configUiRefreshAttribute(codeMirror, uiRefreshAttr, scope) {
- if (!uiRefreshAttr) { return; }
-
- scope.$watch(uiRefreshAttr, function(newVal, oldVal) {
- // Skip the initial watch firing
- if (newVal !== oldVal) {
- $timeout(function() {
- codeMirror.refresh();
- });
- }
- });
- }
-
- }
- uiCodemirrorDirective.$inject = ["$timeout", "uiCodemirrorConfig"];
-
-});
+++ /dev/null
-/**
- * Created by dakuzma on 25. 8. 2015.
- */
-require.config({
-});
-
-define(['app/yangui/yangui.module']);
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- angular.module('app.yangui').service('CustomFunctUnsetterService',
- ['PathUtilsService', 'DataBackupService', CustomFunctUnsetterService]);
-
- function CustomFunctUnsetterService(PathUtilsService, DataBackupService){
- var service = {
- 'YANGUI_CUST_MOUNT_POINTS': yanguiCustMountPoints,
- unset: unset,
- };
-
- return service;
-
- // TODO: add service's description
- function yanguiCustMountPoints(scope){
- DataBackupService.getToScope(['treeApis', 'treeRows', 'apis', 'node',
- 'selApi', 'selSubApi', 'augmentations'], scope);
-
- scope.$broadcast('REFRESH_HISTORY_REQUEST_APIS');
-
- var path = scope.selApi.basePath + scope.selSubApi.buildApiRequestString();
- PathUtilsService.searchNodeByPath(path, scope.treeApis, scope.treeRows);
- }
-
- // TODO: add service's description
- function unset(custFunct, scope) {
- if (service.hasOwnProperty(custFunct.label)) {
- service[custFunct.label](scope);
- }
- }
-
- }
-
-});
+++ /dev/null
-define(['app/yangui/yangui.module'], function (yangui) {
- 'use strict';
-
- yangui.register.service('DesignUtilsService', DesignUtilsService);
-
- function DesignUtilsService(){
-
- var service = {
- getHistoryPopUpWidth: getHistoryPopUpWidth,
- setDraggablePopups: setDraggablePopups,
- triggerWindowResize: triggerWindowResize,
- };
-
- return service;
-
- // TODO: add service's description
- function setDraggablePopups(){
- $( '.draggablePopup' ).draggable({
- opacity: 0.35,
- containment: '#page-wrapper',
- cancel: 'pre, input, textarea, span, select',
- });
-
- $(function () {
- $( '.resizable-se' ).resizable({ handles: 'se' });
- $( '.resizable-s' ).resizable({ handles: 's', minHeight: 200 });
- });
- }
-
- // TODO: add service's description
- function getHistoryPopUpWidth(){
-
- if ( getWidth() !== null ) {
- $('.topologyContainer.previewContainer.historyPopUp').css({ 'marginLeft': '-' + (getWidth() / 2 ) + 'px' });
- }
-
- function getWidth(){
- return $('.topologyContainer.previewContainer.historyPopUp').width();
- }
- }
-
- // TODO: add service's description
- function triggerWindowResize(timeout) {
- var t = timeout ? timeout : 1;
-
- setTimeout(function (){
- $(window).trigger('resize');
- }, t);
- }
-
- }
-
-});
+++ /dev/null
-define(['angular', 'app/yangui/yangui.module'], function (angular, yangui) {
- 'use strict';
-
- yangui.register.service('HandleFileService', HandleFileService);
-
- function HandleFileService(){
- var service = {
- downloadFile: downloadFile,
- };
-
- return service;
-
- /**
- * Service for preparing file and creating link for downloading
- * @param filename
- * @param data
- * @param format
- * @param charset
- * @param successCbk
- * @param errorCbk
- */
- function downloadFile(filename, data, format, charset, successCbk, errorCbk){
- try {
- var blob = new Blob([data], { type: 'application/' + format + '; ' + charset + ';' }),
- downloadLink = angular.element('<a></a>');
-
- var clickEvent = new MouseEvent('click', {
- 'view': window,
- 'bubbles': true,
- 'cancelable': false
- });
-
- downloadLink.attr('href', window.URL.createObjectURL(blob));
-
- // Check if download attribute is supported
- if(downloadLink.attr('download', filename) !== undefined) {
- downloadLink[0].dispatchEvent(clickEvent);
- successCbk();
- }
- else {
- throw -1;
- }
- } catch (e) {
- errorCbk(e);
- }
- }
- }
-});
+++ /dev/null
-define(['angular', 'app/yangui/yangui.module', 'common/yangutils/constants'], function (angular, yangui, constants) {
- 'use strict';
-
- yangui.register.service('HistoryService', ['PathUtilsService', 'YangUtilsService', '$filter',
- 'EventDispatcherService', 'ParsingJsonService', HistoryService]);
-
- function HistoryService(PathUtilsService, YangUtilsService, $filter, EventDispatcherService, ParsingJsonService){
- var service = {
- createEmptyCollectionList: createEmptyCollectionList,
- createEmptyHistoryList: createEmptyHistoryList,
- createEmptyParamList: createEmptyParamList,
- createHistoryRequest: createHistoryRequest,
- createHistoryRequestFromElement: createHistoryRequestFromElement,
- createParameter: createParameter,
- parametrizeData: parametrizeData,
- replaceStringInText: replaceStringInText,
- setNameAndGroup: setNameAndGroup,
- validateFile: validateFile,
- };
-
- return service;
-
- /**
- * Service for replacing string in text
- * @param text
- * @param strToReplace
- * @param newStr
- * @returns {*}
- */
- function replaceStringInText(text, strToReplace, newStr) {
- var replacedText = text;
- if (text.indexOf(strToReplace) > -1) {
- replacedText = text.split(strToReplace).join(newStr);
- }
- return replacedText;
- }
-
- // TODO: add service's description
- function parametrizeData(parameters, data) {
- var dataStr = JSON.stringify(data);
-
- parameters.forEach(function (param){
- dataStr = service.replaceStringInText(dataStr, '<<' + param.name + '>>', param.value);
- });
- data = ParsingJsonService.parseJson(dataStr);
-
- return data;
- }
-
- // TODO: add service's description
- function validateFile(data, checkArray){
- try {
- var obj = ParsingJsonService.parseJson(data);
-
- return obj && obj.every(function (el){
- return checkArray.every(function (arr){
- return el.hasOwnProperty(arr);
- });
- });
- } catch (e) {
- return e;
- }
- }
-
- // TODO: add service's description
- function createHistoryRequestFromElement(elem, getApiFunction) {
- return service.createHistoryRequest(elem.sentData, elem.receivedData,
- elem.path, elem.parametrizedPath,
- elem.method, elem.status, elem.name,
- elem.group, getApiFunction);
- }
-
- /**
- * Service for creating basic history object
- * @param sentData
- * @param receivedData
- * @param path
- * @param parametrizedPath
- * @param operation
- * @param status
- * @param name
- * @param group
- * @param getApiFunction
- * @returns {HistoryRequest}
- */
- function createHistoryRequest(sentData, receivedData, path, parametrizedPath, operation, status, name, group, getApiFunction){
- var api = getApiFunction ? getApiFunction(path) : nullFunction(),
- receivedDataProcessed = status === 'success' ? receivedData : null;
-
- return new HistoryRequest(sentData, receivedDataProcessed, status, path, parametrizedPath, operation, api, name, group);
- }
-
- /**
- * Service for creating empty history list
- * @param name
- * @param getApiFunction
- * @returns {HistoryList}
- */
- function createEmptyHistoryList(name, getApiFunction){
- return new HistoryList(name, getApiFunction);
- }
-
- /**
- * Service for creating empty collection list
- * @param name
- * @param getApiFunction
- * @returns {CollectionList}
- */
- function createEmptyCollectionList(name, getApiFunction){
- return new CollectionList(name, getApiFunction);
- }
-
- /**
- * Service for creating parameter object
- * @param name
- * @param value
- * @returns {Parameter}
- */
- function createParameter(name, value){
- return new Parameter(name, value);
- }
-
- /**
- * Service for creating empty parameters list
- * @param name
- * @returns {ParameterList}
- */
- function createEmptyParamList(name){
- return new ParameterList(name);
- }
-
- // TODO: add service's description
- function setNameAndGroup(name, group, elem) {
- if (name) {
- elem.name = name;
- }
-
- if (group) {
- elem.groupName = group;
- } else {
- elem.groupName = '';
- }
- }
-
- /**
- * Base list object for extending history and collection object
- * @param name
- * @constructor
- */
- function BaseList(name) {
- this.name = name;
-
- this.createEntry = function (elem) {
- return elem;
- };
-
- this.addRequestToList = function () {};
-
- this.refresh = function () {};
-
- this.successfullEditCbk = function () {};
-
- this.errorEditCbk = function () {};
-
- this.loadListFromStorage = function (){
- var storageList = localStorage.getItem(this.name),
- self = this;
-
- if (storageList){
- self.clear();
- ParsingJsonService.parseJson(storageList).map(function (elem) {
- return self.createEntry(elem);
- }).forEach(function (elem) {
- self.addRequestToList(elem);
- });
- }
- };
-
- this.saveToStorage = function (){
- try {
- localStorage.setItem(this.name, JSON.stringify(this.toJSON()));
- } catch (e) {
- console.info('DataStorage error:', e);
- }
- };
-
- this.addFromJSON = function (json) {
- var self = this;
-
- json.forEach(function (elem) {
- var req = self.createEntry(elem);
- self.addRequestToList(req);
- });
- };
- }
-
- /**
- * Base history list object
- * @param name
- * @param getApiFunction
- * @constructor
- */
- function HistoryList(name, getApiFunction){
- BaseList.call(this, name);
- this.list = [];
- this.getApiFunction = getApiFunction;
-
- this.createEntry = function (elem) {
- return service.createHistoryRequestFromElement(elem, this.getApiFunction);
- };
-
- this.addRequestToList = function (reqObj){
- this.list.push(reqObj);
- };
-
- this.refresh = function () {
- var self = this;
-
- this.list.forEach(function (elem) {
- elem.refresh(self.getApiFunction);
- });
- };
-
- this.deleteRequestItem = function (elem){
- this.list.splice(this.list.indexOf(elem), 1);
- };
-
- this.clear = function () {
- this.list = [];
- };
-
- this.toJSON = function () {
- return this.list.map(function (elem) {
- return elem.toJSON();
- });
- };
- }
-
- HistoryList.prototype = Object.create(BaseList.prototype);
-
- /**
- * Base collection list object
- * @param name
- * @param getApiFunction
- * @constructor
- */
- function CollectionList(name, getApiFunction){
- BaseList.call(this, name);
- this.groups = {};
- this.groupsKeys = [];
- this.ungrouped = [];
- this.getApiFunction = getApiFunction;
-
- this.createEntry = function (elem) {
- return service.createHistoryRequestFromElement(elem, this.getApiFunction);
- };
-
- this.hasGroupKey = function (key) {
- return this.groupsKeys.indexOf(key) !== -1 && this.groups.hasOwnProperty(key);
- };
-
- this.refreshGroupKeys = function () {
- this.groupsKeys = Object.keys(this.groups);
- };
-
- this.addRequestToList = function (reqObj){
- if (reqObj.groupName) {
- if (this.hasGroupKey(reqObj.groupName) === false) {
- this.groups[reqObj.groupName] = [];
- this.refreshGroupKeys();
- }
-
- this.groups[reqObj.groupName].push(reqObj);
- } else {
- this.ungrouped.push(reqObj);
- }
- };
-
- this.refresh = function () {
- var self = this;
- this.groupsKeys.forEach(function (key) {
- self.groups[key].forEach(function (elem) {
- elem.refresh(self.getApiFunction);
- });
- });
-
- this.ungrouped.forEach(function (elem) {
- elem.refresh(self.getApiFunction);
- });
- };
-
- this.deleteRequestItem = function (elem){
- var groupList = this.hasGroupKey(elem.groupName) ? this.groups[elem.groupName] : this.ungrouped;
- groupList.splice(groupList.indexOf(elem), 1);
-
- if (groupList.length === 0 && this.hasGroupKey(elem.groupName)) {
- delete this.groups[elem.groupName];
- this.refreshGroupKeys();
- }
- };
-
- this.clear = function () {
- this.groups = {};
- this.ungrouped = [];
- this.groupsKeys = [];
- };
-
- this.toJSON = function (group) {
- var list = [],
- self = this;
-
-
- if (group && this.groups[group]) {
- list = this.groups[group].map(function (elem) {
- return elem.toJSON();
- });
- } else {
- this.groupsKeys.forEach(function (key) {
- self.groups[key].forEach(function (elem) {
- list.push(elem.toJSON());
- });
- });
-
- this.ungrouped.forEach(function (elem) {
- list.push(elem.toJSON());
- });
- }
-
- return list;
- };
-
- this.toJSONungrouped = function () {
- return this.ungrouped.map(function (elem) {
- return elem.toJSON();
- });
- };
-
- this.loadListFromFile = function (data){
- var self = this;
-
- if (data){
- self.clear();
- ParsingJsonService.parseJson(data).map(function (elem) {
- return service.createHistoryRequest(elem.sentData, elem.receivedData, elem.path,
- elem.parametrizedPath, elem.method, elem.status,
- elem.name, elem.group, self.getApiFunction);
- }).forEach(function (elem) {
- self.addRequestToList(elem);
- });
- }
- };
- }
- CollectionList.prototype = Object.create(BaseList.prototype);
-
- /**
- * Base parameter list object
- * @param name
- * @constructor
- */
- function ParameterList(name){
- HistoryList.call(this, name);
- this.list = [];
-
- this.successfullEditCbk = function () {
- // console.debug('success');
- EventDispatcherService.dispatch(constants.EV_PARAM_EDIT_SUCC);
- };
-
- this.errorEditCbk = function () {
- alert($filter('translate')('YANGUI_EXISTING_PARAMETER'));
- };
-
- this.createEntry = function (elem) {
- return new Parameter(elem.name, elem.value);
- };
-
- this.getParamListObjsByName = function (wantedName, exceptObj){
- return this.list.filter(function (o){
- if (exceptObj){
- return o.name === wantedName && o !== exceptObj;
- } else {
- return o.name === wantedName;
- }
- });
- };
-
- this.saveRequestToList = function (reqObj, oldReqObj){
- if (oldReqObj instanceof Parameter && oldReqObj.name){
- var oldParamObjsInList = this.getParamListObjsByName(oldReqObj.name),
- existingObjsWithSameName = this.getParamListObjsByName(reqObj.name, oldReqObj);
-
- if (oldParamObjsInList.length === 1 && existingObjsWithSameName.length === 0){
- this.editRequestInList(reqObj, oldParamObjsInList[0]);
- } else {
- this.errorEditCbk();
- }
- } else {
- if (this.getParamListObjsByName(reqObj.name).length){
- this.errorEditCbk();
- } else {
- this.addRequestToList(reqObj);
- this.successfullEditCbk();
- }
- }
- };
-
- this.editRequestInList = function (reqObj, oldReqObjInList){
- oldReqObjInList.name = reqObj.name;
- oldReqObjInList.value = reqObj.value;
- this.successfullEditCbk();
- };
-
- this.addRequestToList = function (reqObj, oldReqObj){
- this.list.push(reqObj);
- this.successfullEditCbk();
- };
-
- this.deleteRequestItem = function (elem){
- this.list.splice(this.list.indexOf(elem), 1);
- };
-
- this.clear = function () {
- this.list = [];
- };
-
- this.toJSON = function () {
- return this.list.map(function (elem) {
- return elem.toJSON();
- });
- };
-
- this.loadListFromFile = function (data){
- var self = this;
-
- if (data){
- self.clear();
- ParsingJsonService.parseJson(data).map(function (elem) {
- return service.createParameter(elem.name, elem.value);
- }).forEach(function (elem) {
- self.addRequestToList(elem);
- });
- }
- };
- }
- ParameterList.prototype = Object.create(HistoryList.prototype);
-
- /**
- * Base parameter object
- * @param name
- * @param value
- * @constructor
- */
- function Parameter(name, value) {
- this.name = name;
- this.value = value;
-
- this.toJSON = function () {
- var obj = {
- name: this.name,
- value: this.value,
- };
-
- return obj;
- };
-
- this.clone = function () {
- return new Parameter(this.name, this.value);
- };
- }
-
- /**
- * Base history request object
- * @param sentData
- * @param receivedData
- * @param status
- * @param path
- * @param parametrizedPath
- * @param operation
- * @param api
- * @param name
- * @param group
- * @constructor
- */
- function HistoryRequest(sentData, receivedData, status, path, parametrizedPath, operation, api, name, group){
- this.sentData = sentData === null || sentData === undefined || $.isEmptyObject(sentData) ? null : sentData;
- this.name = name;
- this.path = path;
- this.parametrizedPath = parametrizedPath;
- this.method = operation;
- this.status = status;
- this.receivedData = receivedData === null || receivedData === undefined || $.isEmptyObject(receivedData) ? null : receivedData;
- this.show = false;
- this.api = api;
- this.availability = (api !== null);
- this.groupName = group;
-
- this.getIdentifiers = function () {
- var identifiers = [];
-
- api.pathArray.forEach(function (elem) {
- elem.identifiers.forEach(function (i) {
- identifiers.push(i);
- });
- });
-
- return identifiers;
- };
-
- this.refresh = function (getApiFunction) {
- var refreshedApi = getApiFunction(this.path);
-
- this.api = refreshedApi;
- this.availability = (refreshedApi !== null);
- };
-
- this.toJSON = function () {
- var obj = {
- sentData: this.sentData,
- receivedData: this.receivedData,
- path: this.path,
- group: this.groupName,
- parametrizedPath: this.parametrizedPath,
- method: this.method,
- status: this.status,
- name: this.name,
- };
-
- return obj;
- };
-
- this.clonePathArray = function () {
- if ( this.api && this.api.pathArray ) {
- this.api.clonedPathArray = this.api.pathArray.map(function (pe) {
- return pe.clone();
- });
- } else {
- this.api.clonedPathArray = [];
- }
- };
-
- this.setParametrizedPath = function (){
- this.clonePathArray();
- PathUtilsService.fillPath(this.api.clonedPathArray, this.parametrizedPath);
- };
-
- this.getLastPathDataElemName = function () {
- var pathArray = this.path.split(':');
- return pathArray[pathArray.length - 1];
- };
-
- this.setDataForView = function (sent, data){
- var newData = {},
- parsedData = '';
-
- angular.copy(data, newData);
- parsedData = JSON.stringify(
- YangUtilsService.stripAngularGarbage(newData, this.getLastPathDataElemName()), null, 4);
-
- if ( sent && this.api ) {
- if ( this.parametrizedPath ) {
- this.setParametrizedPath();
- } else {
- this.clonePathArray();
- }
- }
-
- return parsedData;
- };
-
- this.clearParametrizedData = function () {
- this.parametrizedPath = null;
- this.clonePathArray();
- };
-
- this.clone = function () {
- return new HistoryRequest(this.sentData, this.receivedData, this.status, this.path,
- this.parametrizedPath, this.method, this.api, this.name, this.groupName);
- };
-
- this.copyWithParametrizationAsNatural = function (parametrizedPath, getApiFunction, dataForView, JSONparsingErrorClbk){
-
- var parsedJsonObj = null,
- result = null;
-
- parsedJsonObj = ParsingJsonService.parseJson(dataForView, JSONparsingErrorClbk);
-
- if (parsedJsonObj){
- result = new HistoryRequest(parsedJsonObj, this.receivedData, this.status,
- parametrizedPath, '', this.method, this.api, this.name, this.groupName);
- result.api = getApiFunction ? getApiFunction(result.path) : nullFunction();
- }
-
- return result;
- };
-
- }
-
- /**
- * Helper
- * @returns {null}
- */
- function nullFunction() {
- return null;
- }
-
- }
-
-});
+++ /dev/null
-define(['app/yangui/yangui.module', 'common/yangutils/constants'], function (yangui, constants) {
- 'use strict';
-
- yangui.register.service('MountPointsConnectorService', ['YangUiApisService', 'NodeWrapperService',
- 'YangUtilsService', 'EventDispatcherService',
- 'YinParserService', 'PathUtilsService',
- function (YangUiApisService, NodeWrapperService, YangUtilsService, EventDispatcherService, YinParserService,
- PathUtilsService){
-
- var mountPrefix = constants.MPPREFIX,
- service = {
- addPathElemsToPathArray: addPathElemsToPathArray,
- alterMpPath: alterMpPath,
- createCustomButton: createCustomButton,
- createMPRootNode: createMPRootNode,
- discoverMountPoints: discoverMountPoints,
- getMPModulesAPI: getMPModulesAPI,
- updateMountPointApis: updateMountPointApis,
- };
-
- return service;
-
- // TODO: add service's description
- function createMPRootNode(mpNodes) {
- var node = null,
- yangParser = YinParserService.yangParser;
-
- yangParser.setCurrentModuleObj(new YinParserService.Module('yang-ext', null, null));
- node = yangParser.createNewNode('mount', 'container', null, constants.NODE_UI_DISPLAY);
- NodeWrapperService.wrapAll(node);
-
- node.buildRequest = function (builder, req, module) {
- var added = false,
- builderNodes = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- if (builderNodes.length) {
- builderNodes.forEach(function (child) {
- var childAdded = child.buildRequest(builder, req, module);
- });
- }
-
- return added;
- };
-
- node.fill = function (name, data) {
- var nodesToFill = node.getChildren(null, null, constants.NODE_UI_DISPLAY);
-
- nodesToFill.forEach(function (child) {
- var childFilled = child.fill(name, data);
- });
- };
-
-
- mpNodes.forEach(function (mp){
- node.addChild(mp);
- });
-
- return node;
- }
-
- // TODO: add service's description
- function addPathElemsToPathArray(pathElems, pathArray, index) {
- var updatedPath = pathArray.slice();
-
- pathElems.forEach(function (pe, offset) {
- // pe.disabled = true; //add disabled flag so user won't be able to change it in the UI
- updatedPath.splice(index + offset, 0, pe);
- });
-
- return updatedPath;
- }
-
- // TODO: add service's description
- function alterMpPath(path) {
- var pathParts = path.split('/'),
- restconfIndex = PathUtilsService.findIndexOfStrInPathStr(pathParts, 'restconf'),
- mpIndex = PathUtilsService.findIndexOfStrInPathStr(pathParts, mountPrefix),
- mpPath = path.slice(),
- mpPathParts = '';
-
- if (mpIndex !== -1){
- mpPathParts = pathParts.slice(mpIndex);
-
- var unshiftIndex = restconfIndex !== -1 ? restconfIndex + 1 : 0;
-
- mpPathParts.unshift(pathParts[unshiftIndex]);
- mpPath = mpPathParts.join('/');
- }
-
- return mpPath;
- }
-
- /**
- * function for adding path to mountpoint + yang:ext-mount to mount point patharray so the request string
- * will be built correctly
- * @param basePathArray
- * @param mpApis
- */
- function updateMountPointApis(basePathArray, mpApis) {
- var actualPath = basePathArray.slice(1); // we don't want to have config/operational storage in path
- // actualPath.push(PathUtilsService.createPathElement(mountPrefix, null, null, false));
- // we want to push yang-ext:mount to the path - not if we have yang-ext:mount rootNode
-
- mpApis.forEach(function (api) {
- api.subApis.forEach(function (subApi) {
- subApi.pathArray = addPathElemsToPathArray(actualPath, subApi.pathArray, 1);
- });
- });
- }
-
- // TODO: add service's description
- function getMPModulesAPI(api) {
- var apiArray = api.split('/'),
- yangExtMountStr = mountPrefix;
-
- if (apiArray[apiArray.length - 1] !== yangExtMountStr) {
- apiArray.push(yangExtMountStr);
- }
-
- return apiArray.slice(1).join('/');
- }
-
- // TODO: add service's description
- function discoverMountPoints(api, getModulesCbk, callback) {
- var modulesCbk = getModulesCbk || function () { return []; },
- mpNodes = [],
- baseApiPath = getMPModulesAPI(api);
-
- YangUiApisService.getCustomModules(baseApiPath).then(
- function (data) {
- YangUtilsService.processModulesMP(data.modules, baseApiPath, function (result, augments) {
- EventDispatcherService.dispatch(constants.EV_SRC_MAIN, 'Linking modules to Apis');
- var allRootNodes = result.map(function (node) {
- var copy = node.deepCopy(['augmentionGroups', 'augmentationId']);
-
- NodeWrapperService.wrapAll(copy);
- return copy;
- });
-
- var moduleNames = data.modules.module.map(function (m) {
- return m.name;
- });
-
- allRootNodes.forEach(function (n) {
- if (moduleNames.indexOf(n.module) > -1 && ['container', 'list'].indexOf(n.type) > -1) {
- mpNodes.push(n);
- }
- });
-
- console.info('loaded mount point nodes', mpNodes);
- callback(mpNodes, augments);
- });
- }, function (result) {
- console.error('Error getting Mount point data:', result);
- callback([]);
- });
- }
-
- // TODO: add service's description
- function createCustomButton(label, show, click){
- return {
- label: label,
- show: show,
- onclick: click,
- };
- }
- },
- ]);
-
-});
+++ /dev/null
-var pluginsFactories = [
- 'displayTopology',
- 'checkFlow',
- 'displayMountPoints',
-];
-
-var pluginContollers = [
- 'cvTopology',
-];
-
-define(['app/yangui/yangui.module'].concat(pluginsFactories.map(function (plugin) {
- 'use strict';
- return 'app/yangui/cf/' + plugin + '.services';
-})).concat(pluginContollers.map(function (ctrl) {
- 'use strict';
- return 'app/yangui/cf/cv/' + ctrl + '.controller';
-})), function (yangui, yangutils) {
- 'use strict';
-
- yangui.register.service('PluginHandlerService', PluginHandlerService);
-
- function PluginHandlerService($http, $injector, CustomFuncService, displayTopology, checkFlow) {
-
- var service = {
- addPlugins: addPlugins,
- plugAll: plugAll,
- plugins: [],
- };
-
- service.addPlugins();
-
- return service;
-
- // TODO: add service's description
- function addPlugins() {
- pluginsFactories.forEach(function (pluginFactFullName) {
- var pluginServiceName = pluginFactFullName.split('/'),
- pluginName = pluginServiceName[pluginServiceName.length - 1].split('.')[0];
-
- $injector.invoke([pluginName, function (pluginFact) {
- service.plugins.push(pluginFact);
- }]);
- });
-
- }
-
- // TODO: add service's description
- function plugAll(apis) {
- service.plugins.forEach(function (plugin) {
- console.info('adding plugin', plugin.label);
- plugin.module.forEach(function (plModule, i){
- CustomFuncService.createCustomFunctionalityApis(apis, plModule, plugin.revision,
- plugin.pathString[i], plugin.label,
- plugin.getCallback, plugin.view,
- plugin.hideButtonOnSelect);
- });
- });
- }
- }
-});
+++ /dev/null
-define(['angular'], function (angular) {
- 'use strict';
-
- angular.module('app.yangui').service('RequestDataService', ['HistoryService', RequestDataService]);
-
- function RequestDataService(HistoryService){
- var service = {
- scanDataParams: scanDataParams,
- };
-
- return service;
-
- // TODO: add service's description
- function scanDataParams(paramsObj, lineString) {
- var usedParamLabelArray = [];
-
- var params = lineString ? lineString.match(/<<(?!<<)[a-zA-Z0-9]+>>/g) : null;
-
- if ( params ) {
- params
- .filter(onlyUnique)
- .forEach(function (i) {
- usedParamLabelArray.push(removeUnwantedChars(i));
- });
- }
-
- var returnedParamsList = paramsObj.list.filter(function (i){
- var nameIndex = usedParamLabelArray.indexOf(i.name);
- if ( nameIndex !== -1 ) {
- return usedParamLabelArray.splice(nameIndex, 1).length;
- }
- });
-
- usedParamLabelArray.forEach(function (i){
- returnedParamsList.push(HistoryService.createParameter(i, undefined));
- });
-
- return returnedParamsList;
-
- // TODO: add function's description
- function removeUnwantedChars(val){
- var string = val.substring(2);
- return string.substring(0, string.indexOf('>>'));
- }
-
- // TODO: add function's description
- function onlyUnique(value, index, self) {
- return self.indexOf(value) === index;
- }
- }
- }
-
-});
+++ /dev/null
-define(['app/yangui/yangui.module'], function (yangui) {
- 'use strict';
-
- yangui.register.service('YanguiService', function (){
-
- var service = {};
-
- return service;
-
- });
-
-});
+++ /dev/null
-<div class="treeWrapper">
-
- <button class="btn btn-primary btn-slim" ng-click='expand_collapse_all_items()'>
- <i class="icon-caret-down" ng-show="expandedTree"></i>
- <i class="icon-caret-right" ng-show="!expandedTree"></i>
- {{ expandedTree ? "Collapse all" : "Expand all" }}
- </button>
- <button class="btn btn-primary btn-slim" ng-click='collapse_others()'>
- {{ 'YANGUI_COLLAPSE_OTHERS' | translate }}
- </button>
-
- <div class="treeList">
- <ul class="nav nav-list nav-pills nav-stacked abn-tree">
- <li ng-repeat="row in tree_rows | filter:{visible:true} track by row.branch.uid" ng-animate="'abn-tree-animate'" ng-class="'level-' + {{ row.level }} + (row.branch.selected ? ' active':'')" class="abn-tree-row">
- <a ng-click="user_clicks_branch(row.branch); row.branch.expanded = !row.branch.expanded">
- <i ng-class="row.tree_icon" class="indented tree-icon"></i>
- <span ng-click="" class="indented tree-label">{{ row.label }} {{ row.branch.identifier }}</span>
- </a>
- </li>
- </ul>
- </div>
-
-</div>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="CaseCtrl" ng-hide="empty">\r
- <!-- Augmentation control -->\r
- <div ng-controller="AugmentationModalCtrl" ng-init="init(case)" class="modalWrapper" ng-if="case.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="case.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_CASE_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- <div ng-repeat="node in case.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded"></div>\r
-</div>\r
+++ /dev/null
-<div ng-controller="ChoiceCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>{{getNodeName(node.localeLabel, node.label)}}</span>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- <select class="form-control input-sm" style="width:300px" ng-model="node.choice" ng-options="node.label for node in node.getChildren(null, null, constants.NODE_UI_DISPLAY) | filter:caseShowing">\r
- <option value="">-</option>\r
- </select>\r
- </div>\r
-\r
- <div ng-repeat="case in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+case.type+'.tpl.html'" ng-show="node.choice.id === case.id && node.expanded" ng-if="!(case.augmentationId && !augmentations.getAugmentation(case.parent, case.augmentationId).expanded)"></div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-<div>\r
+++ /dev/null
-<div ng-controller="ContainerCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-if="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_CON' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name btn-slim">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
-\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- </div>\r
-\r
- <div ng-if="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<button class="yangButton inlineBlock" ng-class="node.referenceNode && node.referenceNode.filters.length > 0 ? 'iconFilterFull' : 'iconFilterEmpty'" ng-click="showListFilterWin()" ng-show="node.listData.length && !(showListFilter) && !showModal" ng-mouseenter="filterListHover = true" ng-mouseleave="filterListHover = false"></button>\r
-\r
-<div class="modalWrapper" ng-show="filterListHover && !showListFilter && node.referenceNode && node.referenceNode.filters.length > 0">\r
- <div class="listModal simpleContainer listFilterWindow">\r
- <div class="listWrapper">\r
- <ul>\r
- <li ng-repeat="filter in node.referenceNode.filters" class="pr50 pl30">\r
- <button class="btn btn-primary btn-filter btn-slim">{{ filter.name }} </button>\r
- <button class="yangButton ng-scope btn-filter-high btn-filter-active" ng-class="filter.active == 1 ? 'iconFilterFull' : 'iconFilterEmpty'"></button>\r
- </li>\r
- </ul>\r
- </div>\r
- </div>\r
-</div>\r
-\r
-<div class="modalWrapper">\r
- <div ng-controller="FilterCtrl" class="listModal simpleContainer listFilterWindow" ng-show="node.listData.length && showListFilter && node.referenceNode && node.referenceNode.filters.length > 0">\r
- <button class="yangButton iconFilterFullBck inlineBlock iconFilterOver" ng-click="showListFilterWin()"></button>\r
- <div class="leaf ng-scope">\r
- <button class="yangButton icon-remove close" ng-click="showListFilterWin()"></button>\r
- <button class="btn-slim btn-name inlineBlock">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ 'YANGUI_LIST_LABEL' | translate }}\r
- </button>\r
- <button class="yangButton iconPlus ng-scope" tooltip="{{ 'YANGUI_CREATE_NEW_FILTER' | translate }}" ng-click="createNewFilter()"></button>\r
- </div>\r
-\r
- <div class="filterList inlineBlock" ng-if="node.referenceNode.filters.length > 1">\r
- <div class="leaf ng-scope displayTable" ng-repeat="filter in node.referenceNode.filters">\r
- <div ng-if="$index != node.currentFilter" class="inlineBlock">\r
- <button class="btn btn-primary btn-filter btn-slim" ng-if="$index != node.currentFilter" ng-click="switchFilter($index)" tooltip="{{ 'YANGUI_SWITCH_FILTER' | translate }}">{{ filter.name }} </button>\r
- <button class="yangButton iconClose ng-scope" tooltip="{{ 'YANGUI_REMOVE_FILTER' | translate }}" ng-click="clearFilterData(false,($index+1),false)"></button>\r
- <button class="yangButton ng-scope" ng-class="filter.active == 1 ? 'iconFilterFull' : 'iconFilterEmpty'" tooltip="{{ 'YANGUI_ACTIVATE_DEACTIVATE_FILTER' | translate }}"\r
- ng-click="activeFilter(filter)"></button>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <div class="leaf ng-scope" ng-repeat="filter in node.referenceNode.filters">\r
- <div ng-if="$index == node.currentFilter">\r
- <input type="text" class="leaf-input form-control input-small ng-scope ng-pristine ng-valid" ng-model="node.referenceNode.filters[node.currentFilter].name">\r
- <button class="yangButton iconClose ng-scope btn-filter-high" tooltip="{{ 'YANGUI_REMOVE_FILTER' | translate }}" ng-click="clearFilterData(false,($index+1),false)"></button>\r
- <button class="yangButton ng-scope btn-filter-high" ng-class="filter.active == 1 ? 'iconFilterFull' : 'iconFilterEmpty'" tooltip="{{ 'YANGUI_ACTIVATE_DEACTIVATE_FILTER' | translate }}" ng-click="activeFilter(filter)"></button>\r
- </div>\r
- </div>\r
-\r
- <div ng-if="node" class="ng-scope filterContainer">\r
- <div ng-repeat="node in node.referenceNode.filterNodes" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <div class="leaf ng-scope">\r
- <button class="btn btn-primary btn-filter-right btn-slim" ng-click="applyFilter()">{{ 'YANGUI_OK' | translate }}</button>\r
- <button class="btn btn-primary btn-filter-right btn-slim" ng-click="clearFilterData(true,null,true)">{{ 'YANGUI_REMOVE_ALL' | translate }}</button>\r
- <button class="btn btn-primary btn-filter-right btn-slim" ng-click="clearFilterData(true,null,false)">{{ 'YANGUI_DEACTIVATE_ALL' | translate }}</button>\r
- </div>\r
- </div>\r
-</div>\r
+++ /dev/null
-<div ng-controller="CaseCtrl" ng-hide="empty">\r
- <div ng-repeat="node in case.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'" ></div>\r
-</div>\r
+++ /dev/null
-<div ng-controller="ChoiceCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>{{getNodeName(node.localeLabel, node.label)}}</span>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <select class="form-control input-sm" style="width:300px" ng-model="node.choice" ng-options="node.label for node in node.getChildren(null, null, constants.NODE_UI_DISPLAY)">\r
- <option value="">-</option>\r
- </select>\r
- </div>\r
-\r
- <div ng-repeat="case in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+case.type+'.tpl.html'" ng-show="node.choice.id === case.id && node.expanded" ></div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-<div>\r
+++ /dev/null
-<div ng-controller="ContainerCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node && (node.parent !== null)">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_CON' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name btn-slim">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div ng-controller="InputCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- </span>\r
-\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="LeafListCtrl" class="customContainer leaflist {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node && (node.parent !== null)">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name ng-scope btn-slim">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <button class="yangButton iconPlus inlineBlock" ng-click='addListElem()' tooltip="{{ 'LIST_ADD_ITEM' | translate }}" title="{{ 'LEAF_LIST_ADD_ELEM' | translate }}"></button>\r
- </div>\r
-\r
- <div class="leafListValue" ng-repeat="elem in node.value" ng-show="node.expanded">\r
- <input type="text" class="leaf-list-value form-control input-small" ng-model="elem.value" ng-change="changed()" />\r
- <!-- <button class="btn btn-md btn-danger btn-slim" ng-click='removeListElem(elem)'><i class="icon-remove-sign"></i> {{ 'REMOVE_ELEM' | translate }}</button> -->\r
- <button class="yangButton iconClose" tooltip="{{ 'REMOVE_ELEM' | translate }}" ng-click='removeListElem(elem)'></button>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div class="leaf" ng-controller="LeafCtrl">\r
- <span class="treeBullet" ng-show="node !== selSubApi.node && (node.parent !== null)">•</span>\r
- <span class="leaf-label col-md-2">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- </span>\r
-\r
- <div ng-controller="FilterTypeCtrl" class="inlineBlock" ng-repeat="type in node.getChildren('type')" ng-include="currentPath+'/filter/types/'+getLeafType()+'.tpl.html'"></div>\r
-\r
- <div class="clear"></div>\r
-</div>\r
+++ /dev/null
-<div ng-controller="ListCtrl" class="customContainer listContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node && (node.parent !== null)">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_LIST' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-slim btn-name inlineBlock">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ 'YANGUI_LIST_LABEL' | translate }}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <button class="yangButton iconPlus inlineBlock" ng-click='addListElem()' tooltip="{{ 'LIST_ADD_ELEM' | translate }}"></button>\r
-\r
- <div class="modalWrapper">\r
- <button ng-click="showModalWin()" ng-show="node.listData.length > 0 && !showModal" tooltip="{{ 'LIST_SHOW_ALL' | translate }}" class="yangButton iconList"></button>\r
- <div class="listModal simpleContainer listFilterWindow" ng-show="showModal && node.listData.length > 0">\r
- <button class="yangButton iconListBck inlineBlock iconFilterOver" ng-click="showModalWin()"></button>\r
- <div class="leaf ng-scope">\r
- <span class="leaf-label list-title">List of nodes</span>\r
- <button class="close" ng-click="showModalWin()">×</button>\r
- </div>\r
- <div class="listWrapper">\r
- <ul>\r
- <li ng-repeat="_ in node.listData" class="pr50 pl30">\r
- <button class="yangButton iconView" ng-if="[currentDisplayIndex, currentDisplayIndex + 1, currentDisplayIndex - 1].indexOf($index) !== -1"></button>\r
- <button class="btn btn-gray {{ (node.actElemIndex === $index ? 'btn-selected':'') }} add-row ng-scope btn-slim" style="margin-right: 5px" ng-click="node.changeActElementData($index)">\r
- {{getNodeName(node.localeLabel, node.label)}} {{node.createListName($index) || '[' + $index + ']'}}\r
- </button>\r
- <button class="yangButton iconClose btn-remove" tooltip="{{ 'LIST_DELETE_ITEM' | translate }}" ng-click='removeListElem($index)'></button>\r
- <button class="yangButton iconDanger btn-double-index" tooltip="{{ 'LIST_INDEX_DUPLICATE' | translate }}" ng-show="node.doubleKeyIndexes.indexOf($index)>-1"></button>\r
- </li>\r
- </ul>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <button class="yangButton inlineBlock" ng-class="node.referenceNode && node.referenceNode.filters.length > 0 ? 'iconFilterFull' : 'iconFilterEmpty'" ng-click="showListFilterWin()" ng-show="node.listData.length && !(showListFilter) && !showModal" ng-mouseenter="filterListHover = true" ng-mouseleave="filterListHover = false"></button>\r
-\r
- <div class="modalWrapper" ng-show="filterListHover && !showListFilter && node.referenceNode && node.referenceNode.filters.length > 0">\r
- <div class="listModal simpleContainer listFilterWindow">\r
- <div class="leaf ng-scope" ng-repeat="filter in node.referenceNode.filters">\r
- <button class="btn add-row btn-gray ng-scope btn-slim btn-filter">{{ filter.name }} </button>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <div class="modalWrapper">\r
- <div ng-controller="FilterCtrl" class="listModal simpleContainer ng-hide listFilterWindow" ng-show="showListFilter">\r
- <button class="yangButton iconFilterFullBck inlineBlock iconFilterOver" ng-click="showListFilterWin()"></button>\r
- <div class="leaf ng-scope">\r
- <button class="close" ng-click="showListFilterWin()">×</button>\r
- <button class="btn-slim btn-name inlineBlock">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ 'YANGUI_LIST_LABEL' | translate }}\r
- </button>\r
- <button class="yangButton iconPlus ng-scope" tooltip="Create new filter" ng-click="createNewFilter()"></button>\r
- </div>\r
-\r
- <div class="leaf ng-scope" ng-repeat="filter in node.referenceNode.filters">\r
- <div ng-if="$index != node.currentFilter">\r
- <button class="btn add-row btn-gray ng-scope btn-slim btn-filter" ng-if="$index != node.currentFilter" ng-click="switchFilter($index)" tooltip="Switch filter">{{ filter.name }} </button>\r
- <button class="yangButton iconClose ng-scope" tooltip="Delete filter" ng-click="clearFilterData(false,($index+1))"></button>\r
- </div>\r
- </div>\r
-\r
- <div class="leaf ng-scope" ng-repeat="filter in node.referenceNode.filters">\r
- <div ng-if="$index == node.currentFilter">\r
- <input type="text" class="leaf-input form-control input-small ng-scope ng-pristine ng-valid" ng-model="node.referenceNode.filters[node.currentFilter].name">\r
- <button class="yangButton iconClose ng-scope btn-filter-high" tooltip="Delete filter" ng-click="clearFilterData(false,($index+1))"></button>\r
- </div>\r
- </div>\r
-\r
- <div ng-if="node" class="ng-scope filterContainer">\r
- <div ng-repeat="node in node.referenceNode.filters[node.currentFilter].filterNodes" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <div class="leaf ng-scope">\r
- <button class="btn add-row btn-gray ng-scope btn-slim btn-filter-right" ng-click="applyFilter()">Ok</button>\r
- <button class="btn add-row btn-gray ng-scope btn-slim btn-filter-right" ng-click="clearFilterData(true)">Clear all</button>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <div class="listItemWrapper" ng-include="currentPath+'/list-data-top.tpl.html'" ng-if="!(node.filteredListData && node.filteredListData.length)"></div>\r
- <div class="listItemWrapper" ng-include="currentPath+'/list-filtered-data-top.tpl.html'" ng-if="(node.filteredListData && node.filteredListData.length)"></div>\r
- </div>\r
-\r
- <!-- <button ng-repeat="_ in node.listData track by $index" class="btn btn-orange {{ (node.actElemIndex === $index ? 'btn-selected':'') }}\r
- {{ ((node.doubleKeyIndexes.indexOf($index)>-1) ? 'btn-red':'') }} add-row ng-scope btn-slim" style="margin-right: 5px" ng-click="node.changeActElementData($index)">\r
- {{node.localeLabel | translate}}{{node.createListName($index)}}\r
- </button> -->\r
-\r
- <div ng-if="node.actElemStructure" ng-show="node.expanded">\r
- <div ng-repeat="node in node.actElemStructure.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- <div class="clear"></div>\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="OutputCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="RpcCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/filter/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="FilterTypeBitCtrl">\r
- <div ng-repeat="bit in type.getChildren('bit')">\r
- <div ng-hide="$index > 3 && !node.expandedBits">\r
- <input class="bitCheckbox" type="checkbox" ng-model="type.bitsValues[$index]" ng-checked="type.bitsValues[$index] === 1" ng-true-value="1" ng-false-value="0" ng-change="valueChanged()">\r
- <span>{{bit.label}}</span>\r
- </div>\r
- <div class='clear'></div>\r
- </div>\r
-\r
- <button ng-if="type.getChildren('bit').length > 4" class="yangButton inlineBlock filterBitsIcon" ng-class="node.expandedBits ? 'iconCollapseBits' : 'iconExpandBits'" tooltip="EXPAND" ng-click="node.expandedBits = !node.expandedBits"></button>\r
-\r
- <div class="filterBitsValue">\r
- <input class="leaf-input form-control input-small" type="text" ng-model="node.filterBitsValue" ng-show="node.filterType !== 'range'" placeholder="Value"></input>\r
-\r
- <input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
- <input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
- <select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.string"></select>\r
- </div>\r
-</div>\r
+++ /dev/null
-<input type="radio" ng-change="valueChanged()" ng-model="node.value" value="true"> True\r
-<input type="radio" ng-change="valueChanged()" ng-model="node.value" value="false"> False
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.string"></select>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="FilterTypeEmptyCtrl">
- <input class="bitCheckbox" type="checkbox" ng-model="type.emptyValue" ng-checked="type.emptyValue === 1" ng-true-value="1" ng-false-value="0" ng-change="valueChanged()" ng-disabled="{{ notEditable }}">
- <div class='clear'></div>
-</div>
+++ /dev/null
-<div class="inlineBlock">\r
- <div ng-controller="FilterTypeBitCtrl">\r
- <span>Options</span>\r
- <div ng-repeat="bit in type.getChildren('enum')">\r
- <input class="bitCheckbox" type="checkbox" ng-model="node.filterSelectboxBitsValue[$index]" ng-checked="node.filterSelectboxBitsValue[$index] === 1" ng-true-value="'{{bit.label}}'" ng-false-value="false">\r
- <span>{{bit.label}}</span>\r
- <div class='clear'></div>\r
- </div>\r
- </div>\r
-</div>\r
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}">\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.string"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}">\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.string"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.string"></select>\r
-\r
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" ng-change="valueChanged()" type="text" ng-model="node.value" tooltip="{{type.label}}" ng-show="node.filterType !== 'range'">\r
-\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeFrom" placeholder="From" ng-show="node.filterType === 'range'"></input>\r
-<input class="leaf-input form-control input-small adv-fil-range" type="text" ng-model="node.filterRangeTo" placeholder="To" ng-show="node.filterType === 'range'"></input>\r
-\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>\r
-\r
-<select class="form-control input-sm adv-fil-sel" ng-model="node.filterType" ng-options="value as value for value in filterConstants.ADVANCED_FILTERING_TYPES.number"></select>
\ No newline at end of file
+++ /dev/null
-<div class="tabs unionType">\r
- <ul class="nav nav-tabs">\r
- <li class="{{$index === 0 ? 'active' : ''}} btn-like-tab" ng-repeat="type in type.getChildren('type') track by $index" ng-click="tabs($event, $index)">\r
- <a data-target="{{'#' + type.label + type.id + $index}}" data-toggle="tab"><span>{{type.label}}</span></a>\r
- </li>\r
- </ul>\r
-\r
- <div class="tab-content">\r
- <div id="{{'' + type.label + type.id + $index}}" class="tab-pane {{ $index === 0 ? 'active' : ''}}" ng-repeat="type in type.getChildren('type') track by $index">\r
- <div ng-include="currentPath+'/filter/types/'+type.label+'.tpl.html'"></div>\r
- </div>\r
- </div>\r
-</div>
\ No newline at end of file
+++ /dev/null
-<div class="mt20 yangUIwrapper">\r
-\r
- <section class="tabs mainTabsWrapper">\r
- <ul class="nav nav-tabs">\r
- <li class="btn-like-tab {{ mainTabs['api'] ? 'btn-selected' : '' }}" ng-click="showTabs(mainTabs, 'api')">\r
- <a><span>{{'API' | translate}}</span></a>\r
- </li>\r
- <li class="btn-like-tab {{ mainTabs['history'] ? 'btn-selected' : '' }}" ng-click="showTabs(mainTabs, 'history')">\r
- <a><span>{{'YANGUI_HISTORY_TAB' | translate}}</span></a>\r
- </li>\r
- <li class="btn-like-tab {{ mainTabs['collection'] ? 'btn-selected' : '' }}" ng-click="showTabs(mainTabs, 'collection')">\r
- <a><span>{{'YANGUI_COLLECTION_TAB' | translate}}</span></a>\r
- </li>\r
- <li class="btn-like-tab {{ mainTabs['parameters'] ? 'btn-selected' : '' }}" ng-click="showTabs(mainTabs, 'parameters')">\r
- <a><span>{{'YANGUI_PARAMETERS_TAB' | translate}}</span></a>\r
- </li>\r
- </ul>\r
-\r
- <div class="tab-content simpleContainer resizable-s treeContainer">\r
- <!-- APIS -->\r
- <div class="tab-panel" ng-include src="currentPath + 'parts/apis-tab.tpl.html'" ng-show="mainTabs.api"></div>\r
-\r
- <section ng-controller="RequestHistoryCtrl" class="historyPopUp" ng-hide="mainTabs.api">\r
- <!-- HISTORY -->\r
- <div class="tab-panel" ng-include src="currentPath + 'parts/history-tab.tpl.html'" ng-show="mainTabs.history"></div>\r
- <!-- COLLECTION -->\r
- <div class="tab-panel" ng-include src="currentPath + 'parts/collection-tab.tpl.html'" ng-show="mainTabs.collection"></div>\r
- <!-- PARAMETERS -->\r
- <div class="tab-panel" ng-include src="currentPath + 'parts/parameters-tab.tpl.html'" ng-show="mainTabs.parameters"></div>\r
-\r
- <!-- ADD/EDIT BOX REQ TO COLL -->\r
- <div class="collBox popupContainer draggablePopup" ng-include src="currentPath + 'parts/add-collection-box.tpl.html'" ng-show="collectionBoxView"></div>\r
- </section>\r
-\r
- </div>\r
- </section>\r
-\r
- <!-- Preview box -->\r
- <div ng-show="previewVisible" class="topologyContainer previewContainer draggablePopup resizable-se" ng-include src="currentPath+'/parts/preview-box.tpl.html'"></div>\r
- <!-- Custom api box -->\r
- <div ng-show="popupData.show" ng-include src="currentPath + 'parts/custom-request-box.tpl.html'" class="topologyContainer previewContainer dataPopup draggablePopup resizable-se"></div>\r
-\r
- <!-- Custom plugins views -->\r
- <div ng-show="selCustFunct && selCustFunct.viewStr">\r
- <div ng-include src="selCustFunct.viewStr"></div>\r
- </div>\r
-\r
- <!-- ACTIONS BUTTON -->\r
- <div sticky class="actionBtnApiPathWrapper simpleContainer">\r
-\r
- <div class="in">\r
-\r
- <div class="actionButtons">\r
- <div ng-show="selSubApi.pathArray.length" class="inline">\r
-\r
- <select class="form-control input-sm" ng-hide="node === null" ng-model="selectedOperation" ng-options="operation for operation in selSubApi.operations"></select>\r
-\r
- <div class="pathWrapper"><!--\r
- --><span class="pathElem" ng-repeat="pathElem in selSubApi.pathArray">{{pathElem.moduleChanged ? '/'+pathElem.module+':': '/'}}{{pathElem.name}}<!--\r
- --><span ng-show="pathElem.hasIdentifier()"><!--\r
- --><span class="" ng-repeat="identifier in pathElem.identifiers"><!--\r
- -->/<input type="text" class="form-control input-small" ng-model="identifier.value" ng-change="changePathInPreview(); fillNodeData(pathElem, identifier)"><!--\r
- --></span><!--\r
- --></span><!--\r
- --></span>\r
- </div>\r
- <!-- copy to clipboard -->\r
- <div class="inlineBlock">\r
- <button clip-click-fallback="fallback(copyReqPathToClipboard())" clip-copy="copyReqPathToClipboard()" class="btn btn-primary" tooltip="{{ 'YANGUI_COPY_TO_CLIPBOARD' | translate }}"><i class="icon-paste"></i></button>\r
- </div>\r
- <!-- send button -->\r
- <button ng-hide="node === null || selectedOperation === null" class="btn btn-primary" ng-click="executeOperation(selectedOperation)">{{ 'YANGUI_SEND' | translate }}</button>\r
- <!-- preview button -->\r
- <button ng-click="showPreview()" class="btn btn-primary" tooltip="{{ 'SHOW_PREVIEW' | translate }}"><i class="icon-eye-open"></i></button>\r
- </div>\r
- <button ng-repeat="custFunct in selSubApi.custFunct" ng-show="showCustFunctButton() || !custFunct.hideButtonOnSelect" class="btn btn-primary" ng-click="executeCustFunctionality(custFunct)">{{ custFunct.label | translate }}</button>\r
- <button ng-repeat="selCustFuncButt in selCustFunctButts" ng-show="selCustFuncButt.show()" ng-click="selCustFuncButt.onclick()" class="btn btn-primary">{{ selCustFuncButt.label | translate }}</button>\r
-\r
- <button class="btn btn-primary" ng-click='show_add_data_popup()'>{{ 'YANGUI_CUSTOM_API_REQUEST' | translate }}</button>\r
- </div>\r
-\r
- </div>\r
-\r
- </div>\r
-\r
- <alert type="{{status.type}}" ng-show="status.msg" close="dismissStatus()">\r
- <i ng-show="status.isWorking" class="icon-refresh icon-spin"></i>\r
- <b> {{status.msg | translate }}</b>\r
- <b>{{ status.rawMsg ? (' - ' + status.rawMsg) : ''}}</b>\r
- </alert>\r
-\r
- <div class="form-inline">\r
- <div ng-if="node" ng-include src="currentPath+'/'+ apiType + node.type+'.tpl.html'"></div>\r
- </div>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="InputCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="LeafListCtrl" class="customContainer leaflist {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name ng-scope btn-slim">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <button class="yangButton iconPlus inlineBlock" ng-click='addListElem()' tooltip="{{ 'LIST_ADD_ITEM' | translate }}" title="{{ 'LEAF_LIST_ADD_ELEM' | translate }}"></button>\r
- </div>\r
-\r
- <div class="leafListValue" ng-repeat="elem in node.value" ng-show="node.expanded">\r
- <input type="text" class="leaf-list-value form-control input-small" ng-model="elem.value" ng-change="changed()" />\r
- <!-- <button class="btn btn-md btn-danger btn-slim" ng-click='removeListElem(elem)'><i class="icon-remove-sign"></i> {{ 'REMOVE_ELEM' | translate }}</button> -->\r
- <button class="yangButton iconClose" tooltip="{{ 'REMOVE_ELEM' | translate }}" ng-click='removeListElem(elem)'></button>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div class="leaf" ng-controller="LeafCtrl">\r
- <span class="treeBullet" ng-show="node !== selSubApi.node">•</span>\r
- <span class="leaf-label col-md-2">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- <i ng-if="node.isKey()" class="icon-key" tooltip="{{'key of '+node.parent.label+' list'}}"></i>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- </span>\r
-\r
- <div ng-controller="TypeCtrl" class="inlineBlock" ng-repeat="type in node.getChildren('type')" ng-include="currentPath+'/types/'+getLeafType()+'.tpl.html'"></div>\r
-\r
- <div class="clear"></div>\r
-</div>\r
+++ /dev/null
-<button ng-click="shiftDisplayPrev()" ng-show="showPrevButton()" tooltip="{{ 'LIST_PREV_ITEM' | translate }}" class="yangButton iconPrev"></button>\r
-<div class="listButtonWrapper" ng-repeat="offset in displayOffsets" ng-if="currentDisplayIndex + offset > -1 && node.listData.length > currentDisplayIndex + offset">\r
- <button class="btn btn-like-tab {{ (currentDisplayIndex + offset === node.actElemIndex ? 'btn-selected':'') }}" ng-click="node.changeActElementData(currentDisplayIndex + offset)" tooltip="{{getListName(offset, false).tooltip}}">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ getListName(offset, true).name }}\r
- </button>\r
- <button ng-disabled="disableAddingListElement" class="yangButton iconClose" tooltip="{{ 'LIST_DELETE_ITEM' | translate }}" ng-click='removeListElem(currentDisplayIndex + offset,false)'></button>\r
- <button class="yangButton iconDanger" tooltip="{{ 'LIST_INDEX_DUPLICATE' | translate }}" ng-show="node.doubleKeyIndexes.indexOf(currentDisplayIndex + offset)>-1"></button>\r
-</div>\r
-<button ng-click="shiftDisplayNext('listData')" ng-show="showNextButton('listData')" tooltip="{{ 'LIST_NEXT_ITEM' | translate }}" class="yangButton iconNext"></button>
\ No newline at end of file
+++ /dev/null
-<button ng-click="shiftDisplayPrev()" ng-show="showPrevButton()" tooltip="{{ 'LIST_PREV_ITEM' | translate }}" class="yangButton iconPrev"></button>\r
-<div class="listButtonWrapper" ng-repeat="offset in displayOffsets" ng-if="currentDisplayIndex + offset > -1 && node.filteredListData.length > currentDisplayIndex + offset">\r
- <button class="btn btn-like-tab {{ (currentDisplayIndex + offset === node.actElemIndex ? 'btn-selected':'') }}" ng-click="node.changeActElementData(currentDisplayIndex + offset,false)" tooltip="{{getListName(offset, false).tooltip}}">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ getListName(offset, true).name }}\r
- </button>\r
- <button class="yangButton iconClose" tooltip="{{ 'LIST_DELETE_ITEM' | translate }}" ng-click='removeListElem(currentDisplayIndex + offset,true)'></button>\r
- <button class="yangButton iconDanger" tooltip="{{ 'LIST_INDEX_DUPLICATE' | translate }}" ng-show="node.doubleKeyIndexes.indexOf(currentDisplayIndex + offset)>-1"></button>\r
-</div>\r
-<button ng-click="shiftDisplayNext('filteredListData')" ng-show="showNextButton('filteredListData')" tooltip="{{ 'LIST_NEXT_ITEM' | translate }}" class="yangButton iconNext"></button>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="ListCtrl" class="customContainer listContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-if="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_LIST' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-slim btn-name inlineBlock">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ 'YANGUI_LIST_LABEL' | translate }}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
-\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
-\r
- <button ng-disabled="disableAddingListElement" class="yangButton iconPlus inlineBlock" ng-click='addListElem()' tooltip="{{ 'LIST_ADD_ELEM' | translate }}"></button>\r
-\r
- <div class="modalWrapper">\r
- <button ng-click="showModalWin()" ng-show="node.listData.length > 0 && !showModal" tooltip="{{ 'LIST_SHOW_ALL' | translate }}" class="yangButton iconList"></button>\r
- <div class="listModal simpleContainer listFilterWindow" ng-if="showModal && node.listData.length > 0">\r
- <button class="yangButton iconListBck inlineBlock iconFilterOver" ng-click="showModalWin()"></button>\r
- <div class="leaf ng-scope">\r
- <span class="leaf-label list-title">{{ 'YANGUI_LIST_OF_NODES' | translate }}</span>\r
- <button class="yangButton icon-remove close" ng-click="showModalWin()"></button>\r
- </div>\r
- <div class="listWrapper">\r
- <ul>\r
- <li ng-repeat="_ in node.listData" class="pr50 pl30">\r
- <button class="yangButton iconView" ng-if="[currentDisplayIndex, currentDisplayIndex + 1, currentDisplayIndex - 1].indexOf($index) !== -1"></button>\r
- <button class="btn btn-like-tab {{ (node.actElemIndex === $index ? 'btn-selected':'') }}" style="margin-right: 5px" ng-click="node.changeActElementData($index)">\r
- {{getNodeName(node.localeLabel, node.label)}} {{node.createListName($index) || '[' + $index + ']'}}\r
- </button>\r
- <button class="yangButton iconClose btn-remove" tooltip="{{ 'LIST_DELETE_ITEM' | translate }}" ng-click='removeListElem($index)'></button>\r
- <button class="yangButton iconDanger btn-double-index" tooltip="{{ 'LIST_INDEX_DUPLICATE' | translate }}" ng-show="node.doubleKeyIndexes.indexOf($index)>-1"></button>\r
- </li>\r
- </ul>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <ng-include src="currentPath+'/filter.tpl.html'"></ng-include>\r
-\r
- <div class="listItemWrapper" ng-include="currentPath+'/list-data-top.tpl.html'" ng-if="!(node.filteredListData && node.filteredListData.length)"></div>\r
- <div class="listItemWrapper" ng-include="currentPath+'/list-filtered-data-top.tpl.html'" ng-if="(node.filteredListData && node.filteredListData.length)"></div>\r
- </div>\r
-\r
- <!-- <button ng-repeat="_ in node.listData track by $index" class="btn btn-orange {{ (node.actElemIndex === $index ? 'btn-selected':'') }}\r
- {{ ((node.doubleKeyIndexes.indexOf($index)>-1) ? 'btn-red':'') }} add-row ng-scope btn-slim" style="margin-right: 5px" ng-click="node.changeActElementData($index)">\r
- {{node.localeLabel | translate}}{{node.createListName($index)}}\r
- </button> -->\r
-\r
- <div ng-if="node.actElemStructure" ng-show="node.expanded">\r
- <div ng-repeat="node in node.actElemStructure.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">\r
- <div class="clear"></div>\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<span ng-click="toggleExpandedAugModal()" class="augmentIcon" tooltip="{{'YANGUI_HAS_AUGMENT' | translate}}">A</span>\r
-<div class="listModal simpleContainer augmentationModal" ng-if="augModalView">\r
- <button class="augmentIcon active modalIconOver" ng-click="toggleExpandedAugModal()">A</button>\r
- <div class="leaf ng-scope">\r
- <span class="leaf-label list-title">{{ 'YANGUI_LIST_OF_AUGMENTATIONS' | translate }}</span>\r
- <button class="yangButton icon-remove close" ng-click="toggleExpandedAugModal()"></button>\r
- </div>\r
- <div class="listWrapper">\r
- <ul>\r
- <li ng-repeat="augmentation in node.augmentionGroups" class="pr50 pl30">\r
- <button ng-show="augmentations.getAugmentation(node, augmentation).expanded" class="yangButton iconView"></button>\r
- <button ng-click="augmentations.getAugmentation(node, augmentation).toggleExpand()" class="btn btn-like-tab" style="margin-right: 5px">\r
- {{augmentation}}\r
- </button>\r
- </li>\r
- </ul>\r
- </div> \r
-</div>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="CaseCtrl" ng-show="case.isFilled() && !empty">\r
- <!-- Augmentation control -->\r
- <div ng-controller="AugmentationModalCtrl" ng-init="init(case)" class="modalWrapper" ng-if="case.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="case.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_CASE_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- <div ng-repeat="node in case.getChildren(null,null,constants.NODE_UI_DISPLAY) | filter:filterNodes" ng-include="currentPath+'/operational/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded"></div>\r
-</div>\r
+++ /dev/null
-<div ng-controller="ChoiceCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>{{getNodeName(node.localeLabel, node.label)}}</span>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- <span><strong>{{node.choice.label}}</strong></span>\r
- </div>\r
-\r
- <div ng-repeat="case in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | filter:filterNodes" ng-include="currentPath+'/operational/'+case.type+'.tpl.html'" ng-show="node.choice.id === case.id && node.expanded" ng-if="!(case.augmentationId && !augmentations.getAugmentation(case.parent, case.augmentationId).expanded)"></div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-<div>\r
+++ /dev/null
-<div ng-controller="ContainerCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-if="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_CON' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name btn-slim">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
-\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- </div>\r
-\r
- <div ng-if="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | filter:filterNodes" ng-include="currentPath+'/operational/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded"></div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div ng-controller="InputCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/operational/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="LeafListCtrl" class="customContainer leaflist {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name ng-scope btn-slim">\r
- {{getNodeName(node.localeLabel, node.label)}}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- </div>\r
-\r
- <div class="leafListValue" ng-repeat="elem in node.value" ng-show="node.expanded">\r
- <span class="block"><strong>{{elem.value}}</strong></span>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div class="leaf" ng-controller="LeafCtrl" ng-show='node.isFilled()'>
- <span class="treeBullet" ng-show="node !== selSubApi.node">•</span>
- <span class="leaf-label col-md-2">
- {{getNodeName(node.localeLabel, node.label)}}
- <i ng-if="node.isKey()" class="icon-key" tooltip="{{'key of '+node.parent.label+' list'}}"></i>
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>
- </span>
- <span class="leaf-label col-md-9"><strong>{{node.value}}</strong></span>
- <div class="clear"></div>
-</div>
+++ /dev/null
-<button ng-click="shiftDisplayPrev()" ng-show="showPrevButton()" tooltip="{{ 'LIST_PREV_ITEM' | translate }}" class="yangButton iconPrev"></button>\r
-<div class="listButtonWrapper" ng-repeat="offset in displayOffsets" ng-if="currentDisplayIndex + offset > -1 && node.listData.length > currentDisplayIndex + offset">\r
- <button class="btn btn-like-tab {{ (currentDisplayIndex + offset === node.actElemIndex ? 'btn-selected':'') }}" ng-click="node.changeActElementData(currentDisplayIndex + offset)" tooltip="{{getListName(offset, false).tooltip}}">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ getListName(offset, false).name }}\r
- </button>\r
-</div>\r
-<button ng-click="shiftDisplayNext('listData')" ng-show="showNextButton('listData')" tooltip="{{ 'LIST_NEXT_ITEM' | translate }}" class="yangButton iconNext"></button>
\ No newline at end of file
+++ /dev/null
-<button ng-click="shiftDisplayPrev()" ng-show="showPrevButton()" tooltip="{{ 'LIST_PREV_ITEM' | translate }}" class="yangButton iconPrev"></button>\r
-<div class="listButtonWrapper" ng-repeat="offset in displayOffsets" ng-if="currentDisplayIndex + offset > -1 && node.filteredListData.length > currentDisplayIndex + offset">\r
- <button class="btn btn-like-tab {{ (currentDisplayIndex + offset === node.actElemIndex ? 'btn-selected':'') }}" ng-click="node.changeActElementData(currentDisplayIndex + offset,false)" tooltip="{{getListName(offset, false).tooltip}}">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ getListName(offset, true).name }}\r
- </button>\r
-</div>\r
-<button ng-click="shiftDisplayNext('filteredListData')" ng-show="showNextButton('filteredListData')" tooltip="{{ 'LIST_NEXT_ITEM' | translate }}" class="yangButton iconNext"></button>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="ListCtrl" class="customContainer listContainer {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-if="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_LIST' | translate }}" ng-click='toggleExpanded()'></button>\r
- <button class="btn-slim btn-name inlineBlock">\r
- {{getNodeName(node.localeLabel, node.label)}} {{ 'YANGUI_LIST_LABEL' | translate }}\r
- </button>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
-\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
-\r
- <div class="modalWrapper">\r
- <button ng-click="showModalWin()" ng-show="node.listData.length > 0 && !showModal" tooltip="{{ 'LIST_SHOW_ALL' | translate }}" class="yangButton iconList"></button>\r
- <div class="listModal simpleContainer listFilterWindow" ng-if="showModal && node.listData.length > 0">\r
- <button class="yangButton iconListBck inlineBlock iconFilterOver" ng-click="showModalWin()"></button>\r
- <div class="leaf ng-scope">\r
- <span class="leaf-label list-title">{{ 'YANGUI_LIST_OF_NODES' | translate }}</span>\r
- <button class="yangButton icon-remove close" ng-click="showModalWin()"></button>\r
- </div>\r
- <div class="listWrapper">\r
- <ul>\r
- <li ng-repeat="_ in node.listData" class="pl30">\r
- <button class="yangButton iconView" ng-if="[currentDisplayIndex, currentDisplayIndex + 1, currentDisplayIndex - 1].indexOf($index) !== -1"></button>\r
- <button class="btn btn-like-tab {{ (node.actElemIndex === $index ? 'btn-selected':'') }} {{ ((node.doubleKeyIndexes.indexOf($index)>-1) ? 'btn-red':'') }}" style="margin-right: 5px" ng-click="node.changeActElementData($index)">\r
- {{getNodeName(node.localeLabel, node.label)}} {{node.createListName($index)}}\r
- </button>\r
- </li>\r
- </ul>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <ng-include src="currentPath+'/filter.tpl.html'"></ng-include>\r
-\r
- <div class="listItemWrapper" ng-include="currentPath+'/operational/list-data-top.tpl.html'" ng-if="!(node.filteredListData && node.filteredListData.length)"></div>\r
- <div class="listItemWrapper" ng-include="currentPath+'/operational/list-filtered-data-top.tpl.html'" ng-if="(node.filteredListData && node.filteredListData.length)"></div>\r
- </div>\r
-\r
- <!-- <button ng-repeat="_ in node.listData" class="btn btn-orange {{ (node.actElemIndex === $index ? 'btn-selected':'') }} {{ ((node.doubleKeyIndexes.indexOf($index)>-1) ? 'btn-red':'') }} add-row ng-scope btn-slim" style="margin-right: 5px" ng-click="node.changeActElementData($index)">\r
- {{node.localeLabel | translate}} {{node.createListName($index)}}\r
- </button> -->\r
-\r
- <div ng-if="node.actElemStructure" ng-show="node.expanded"><!-- class="simpleContainer" -->\r
- <div ng-repeat="node in node.actElemStructure.getChildren(null,null,constants.NODE_UI_DISPLAY) | filter:filterNodes" ng-include="currentPath+'/operational/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded" >\r
- <div class="clear"></div>\r
- </div>\r
- </div>\r
-\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div ng-controller="OutputCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/operational/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="RpcCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}" ng-show='node.isFilled()'>\r
- <div class="topContainerPart">\r
- <span class="treeBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY)" ng-include="currentPath+'/operational/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<div ng-controller="OutputCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <!-- Augmentation control -->\r
- <div class="modalWrapper" ng-if="node.augmentionGroups.length" ng-include src="currentPath + 'modal/augmentation-modal.tpl.html'"></div>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- <!-- Augmentation control end -->\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+node.type+'.tpl.html'" ng-hide="node.augmentationId && !augmentations.getAugmentation(node.parent, node.augmentationId).expanded">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-\r
-</div>\r
+++ /dev/null
-<div ng-controller="CollBoxCtrl">\r
- <button class="yangButton icon-remove close" ng-click="hideCollBox()"></button>\r
-\r
- <label>{{'YANGUI_HISTORY_NAME' | translate}}:</label>\r
- <input class="form-control" ng-model="collection.name" type="text">\r
-\r
- <label>{{'YANGUI_HISTORY_SELECT_GROUP' | translate}}:</label>\r
- <select class="form-control" ng-model="collection.group" ng-options="group for group in collectionList.groupsKeys">\r
- <option value="">{{ 'YANGUI_SEL_OPTION' | translate }}</option>\r
- </select>\r
-\r
- <label>{{'YANGUI_HISTORY_ADD_GROUP' | translate}}:</label>\r
- <input class="form-control" ng-model="collection.group" type="text">\r
-\r
- <button class="btn btn-primary btn-slim mt10" ng-click="addHistoryItemToColl(req)">{{ editBox ? 'YANGUI_SAVE_PARAMETER' : 'YANGUI_HISTORY_ADD_BUTTON' | translate}}</button>\r
-</div>\r
+++ /dev/null
-<!-- ABN TREE -->\r
-<span><strong>{{ treeName }}</strong></span>\r
-<abn-tree tree-data="treeApis" tree-rows="treeRows" on-select="setApiNode(branch.indexApi, branch.indexSubApi)"></abn-tree>\r
+++ /dev/null
-<div class="tableWrapper">\r
- <div class="table dataTable reqHistory">\r
- <div class="thdiv">\r
- <div class="tddiv rh-col1"></div>\r
- <div class="tddiv rh-col2">{{ 'YANGUI_HISTORY_METHOD' | translate }}</div>\r
- <div class="tddiv rh-col8">{{ 'YANGUI_HISTORY_NAME_CAPITAL' | translate }}</div>\r
- <div class="tddiv rh-col3c">{{ 'YANGUI_HISTORY_PATH' | translate }}</div>\r
- <div class="tddiv rh-col4">{{ 'YANGUI_HISTORY_STATUS' | translate }}</div>\r
- <div class="tddiv rh-col5"></div>\r
- <div class="tddiv rh-col6"></div>\r
- <div class="actions tddiv rh-col7">{{ 'YANGUI_HISTORY_ACTION' | translate }}</div>\r
- </div>\r
-\r
- <div class="scroll">\r
- <div ng-repeat="req in collectionList.ungrouped track by $index" class="trdiv">\r
- <div ng-controller="ReqInHistoryCtrl" ng-init="init(collectionList)">\r
- <div class="tddiv rh-col1"><button class="yangButton iconDanger" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_API_NOT_AVAILABLE' | translate }}" ng-hide="req.availability"></button></div>\r
- <div class="tddiv rh-col2"><span>{{ req.method }}</span></div>\r
- <div class="tddiv rh-col8"><span>{{ req.name }}</span></div>\r
- <div class="tddiv rh-col3c"><span>{{ req.path }}</span></div>\r
- <div class="tddiv rh-col4"><span>{{ req.status }}</span></div>\r
- <div class="tddiv rh-col5">\r
- <div tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.sentData ? '' : 'YANGUI_HISTORY_NO_SEND_DATA_TT' | translate }}">\r
- <button class="btn btn-primary ng-scope btn-slim {{!req.sentData ? 'disabled' : ''}}" ng-click='showShistoryData()'>\r
- {{ 'YANGUI_HISTORY_SEND_DATA' | translate }}\r
- </button>\r
- </div>\r
- </div>\r
- <div class="tddiv rh-col6">\r
- <div tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.receivedData ? '' : 'YANGUI_HISTORY_NO_REC_DATA_TT' | translate }}">\r
- <button class="btn btn-primary ng-scope btn-slim {{!req.receivedData ? 'disabled' : ''}}" ng-click='showRhistoryData()'>\r
- {{ 'YANGUI_HISTORY_REC_DATA' | translate }}\r
- </button>\r
- </div>\r
- </div>\r
- <div class="tddiv rh-col7">\r
- <div class="requestActions">\r
-\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.availability ? 'YANGUI_RUN' : 'YANGUI_API_NA_ERROR_TT' | translate }}">\r
- <button ng-disabled="!req.availability" class="yangButton iconNext {{ req.availability ? '' : 'disabled' }}" ng-click='executeCollectionRequest(req, dataForView, showData)'>\r
- </button>\r
- </div>\r
-\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.availability ? (req.receivedData || req.sentData) ? 'YANGUI_FILL_DATA_TT' : 'YANGUI_REC_SENT_DATA_ERROR_TT' : 'YANGUI_API_NA_ERROR_TT' | translate }}">\r
- <button class="yangButton iconFillData {{ req.availability && (req.receivedData || req.sentData) ? '' : 'disabled' }}" ng-click='fillApiAndData(req, dataForView)'>\r
- </button>\r
- </div>\r
-\r
- <div class="inlineBlock historyRequestBox" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_CHANGE_GROUP' | translate }}">\r
- <div class="yangButton iconEdit inlineBlock" ng-click="showCollBox(req, true)"></div>\r
- </div>\r
- <button class="yangButton iconClose" ng-click="deleteRequestItem(req, 'collectionList')" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_DELETE' | translate }}"></button>\r
- </div>\r
- </div>\r
-\r
- <div ng-show="showData" class="trdiv pre-div" ng-include src="currentPath + 'parts/history-dataview-part.tpl.html'"></div>\r
- </div>\r
-\r
-\r
-\r
-\r
-\r
- </div>\r
-\r
- <div ng-repeat="(key, value) in collectionList.groups track by $index" class="groupWrapper" ng-init="setGroupView(key)">\r
- <section class="groupHeader" ng-click="toggleExpanded(key)">\r
- {{key}} <i class="{{groupView[key] ? 'icon-caret-down':'icon-caret-right'}}"></i>\r
- </section>\r
-\r
- <section ng-repeat="req in value" ng-show="groupView[key]" class="trdiv groupList">\r
- <div ng-controller="ReqInHistoryCtrl" ng-init="init(collectionList)">\r
- <div class="tddiv rh-col1"><button class="yangButton iconDanger" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_API_NOT_AVAILABLE' | translate }}" ng-hide="req.availability"></button></div>\r
- <div class="tddiv rh-col2"><span>{{ req.method }}</span></div>\r
- <div class="tddiv rh-col8"><span>{{ req.name }}</span></div>\r
- <div class="tddiv rh-col3c"><span>{{ req.path }}</span></div>\r
- <div class="tddiv rh-col4"><span>{{ req.status }}</span></div>\r
- <div class="tddiv rh-col5">\r
- <div tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.sentData ? '' : 'YANGUI_HISTORY_NO_SEND_DATA_TT' | translate }}">\r
- <button class="btn btn-primary ng-scope btn-slim {{!req.sentData ? 'disabled' : ''}}" ng-click='showShistoryData()'>\r
- {{ 'YANGUI_HISTORY_SEND_DATA' | translate }}\r
- </button>\r
- </div>\r
- </div>\r
- <div class="tddiv rh-col6">\r
- <div tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.receivedData ? '' : 'YANGUI_HISTORY_NO_REC_DATA_TT' | translate }}">\r
- <button class="btn btn-primary ng-scope btn-slim {{!req.receivedData ? 'disabled' : ''}}" ng-click='showRhistoryData()'>\r
- {{ 'YANGUI_HISTORY_REC_DATA' | translate }}\r
- </button>\r
- </div>\r
- </div>\r
- <div class="tddiv rh-col7">\r
- <div class="requestActions">\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.availability ? 'YANGUI_RUN' : 'YANGUI_API_NA_ERROR_TT' | translate }}">\r
- <button ng-disabled="!req.availability" class="yangButton iconNext {{ req.availability ? '' : 'disabled' }}" ng-click='executeCollectionRequest(req, dataForView, showData)'>\r
- </button>\r
- </div>\r
-\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.availability ? (req.receivedData || req.sentData) ? 'YANGUI_FILL_DATA_TT' : 'YANGUI_REC_SENT_DATA_ERROR_TT' : 'YANGUI_API_NA_ERROR_TT' | translate }}">\r
- <button class="yangButton iconFillData {{ req.availability && (req.receivedData || req.sentData) ? '' : 'disabled' }}" ng-click='fillApiAndData(req, dataForView)'>\r
- </button>\r
- </div>\r
-\r
- <div class="inlineBlock historyRequestBox" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_CHANGE_GROUP' | translate }}">\r
- <div class="yangButton iconEdit inlineBlock" ng-click="showCollBox(req, true)"></div>\r
- </div>\r
-\r
- <button class="yangButton iconClose" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" ng-click="deleteRequestItem(req, 'collectionList')" tooltip="{{ 'YANGUI_DELETE' | translate }}"></button>\r
- </div>\r
- </div>\r
-\r
- <div ng-show="showData" class="trdiv pre-div" ng-include src="currentPath + 'parts/history-dataview-part.tpl.html'"></div>\r
- </div>\r
-\r
-\r
- </section>\r
-\r
- </div>\r
- </div>\r
-\r
-\r
- </div>\r
- <button class="btn btn-primary ng-scope btn-slim" ng-click='clearHistoryData("collectionList")'>\r
- {{ 'YANGUI_CLEAR_COLLECTION' | translate }}\r
- </button>\r
- <span class="ml30">\r
- {{ 'YANGUI_IMPORT_COLLECTION' | translate }} :\r
- </span>\r
- <input class="btn btn-primary ng-scope btn-slim upload-collection" id="upload-collection" type="file" on-read-file="readCollectionFromFile($fileContent)"/>\r
- <button class="btn btn-primary ng-scope btn-slim" ng-click='exportHistoryData()' ng-href="{{ url }}">\r
- {{ 'YANGUI_EXPORT_COLLECTION' | translate }}\r
- </button>\r
-</div>\r
+++ /dev/null
-<button class="yangButton icon-remove close" ng-click="close_popup(popupData)"></button>\r
-<div>\r
- <label class="block classic">{{ 'YANGUI_API_PATH' | translate }}:</label>\r
- <input class="leaf-input form-control input-small" type="text" ng-model="apiToFill">\r
- <label class="block classic">{{ 'YANGUI_API_DATA' | translate }}:</label>\r
-</div>\r
-<textarea ng-model="dataToFill" ></textarea>\r
-<button class="btn btn-primary ng-scope btn-slim" ng-click='fillApiAndData({path: apiToFill, sentData: dataToFill}, null, true)' style="position: absolute; bottom: 20px; right:20px;">\r
- <i class="icon-upload-alt "></i>\r
- {{ 'YANGUI_PUSH_CONFIG' | translate }}\r
-</button>
\ No newline at end of file
+++ /dev/null
-<section ng-controller="ParamsViewCtrl">
- <div class="api axisX" ng-show="req.sentData && req.api">
- <span class="input-sm">{{'YANGUI_API_PATH' | translate}}</span>
-
- <div class="pathWrapper"><!--
- --><span class="pathElem" ng-repeat="pathElem in req.api.clonedPathArray">{{pathElem.moduleChanged ? '/'+pathElem.module+':': '/'}}{{pathElem.name}}<!--
- --><span ng-show="pathElem.hasIdentifier()"><!--
- --><span ng-repeat="identifier in pathElem.identifiers"><!--
- -->/<input type="text" class="form-control input-small" ng-model="identifier.value" ng-change="fillRequestData(pathElem, identifier)"><!--
- --></span><!--
- --></span><!--
- --></span>
- </div>
- <button clip-click-fallback="fallback(copyReqPathToClipboard(req))" clip-copy="copyReqPathToClipboard(req)" class="btn btn-primary" tooltip="{{ 'YANGUI_COPY_TO_CLIPBOARD' | translate }}"><i class="icon-paste"></i></button>
- <button class="btn btn-primary" ng-click="clearParametrizedData()">{{'YANGUI_CLEAR_PAR_DATA_BTN' | translate}}</button>
- <button class="btn btn-primary" ng-click="saveParametrizedData(rList)">{{'YANGUI_SAVE_PAR_DATA_BTN' | translate}}</button>
- </div>
-
- <div class="textareaWrapper">
- <button class="yangButton icon-remove close closeData ng-scope" ng-click="expandHistoryData()" tooltip="Close"></button>
-
- <!-- sent data -->
- <div ng-show="isSentData" ng-model="sDataForView" ui-codemirror ui-codemirror-opts="getDataEditorOptions(!req.availability, 'eclipse')"></div>
- <!-- received data -->
- <div ng-hide="isSentData" ng-model="rDataForView" ui-codemirror ui-codemirror-opts="getDataEditorOptions(true, 'eclipse-disabled')"></div>
-
- <div ng-show="paramsBoxView" class="paramsBox" >
- <div ng-repeat="param in paramsArray" class="line">
- <strong><<{{param.name}}>></strong> : <span>{{param.value !== undefined ? param.value : 'YANGUI_PARAM_DONT_REPLACE' | translate}}</span>
- </div>
- </div>
- </div>
-</section>
+++ /dev/null
-<div class="tableWrapper">\r
- <div class="table dataTable reqHistory">\r
- <div class="thdiv">\r
- <div class="tddiv rh-col1"></div>\r
- <div class="tddiv rh-col2">{{ 'YANGUI_HISTORY_METHOD' | translate }}</div>\r
- <div class="tddiv rh-col3">{{ 'YANGUI_HISTORY_PATH' | translate }}</div>\r
- <div class="tddiv rh-col4">{{ 'YANGUI_HISTORY_STATUS' | translate }}</div>\r
- <div class="tddiv rh-col5"></div>\r
- <div class="tddiv rh-col6"></div>\r
- <div class="tddiv actions rh-col7">{{ 'YANGUI_HISTORY_ACTION' | translate }}</div>\r
- </div>\r
-\r
- <div class="scroll">\r
- <div ng-repeat="req in requestList.list track by $index" class="trdiv">\r
- <div ng-controller="ReqInHistoryCtrl" ng-init="init(requestList)">\r
- <div class="tddiv rh-col1"><button class="yangButton iconDanger" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_API_NOT_AVAILABLE' | translate }}" ng-hide="req.availability"></button></div>\r
- <div class="tddiv rh-col2"><span>{{ req.method }}</span></div>\r
- <div class="tddiv rh-col3"><span>{{ req.path }}</span></div>\r
- <div class="tddiv rh-col4"><span>{{ req.status }}</span></div>\r
- <div class="tddiv rh-col5">\r
- <div tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.sentData ? '' : 'YANGUI_HISTORY_NO_SEND_DATA_TT' | translate }}">\r
- <button class="btn btn-primary ng-scope btn-slim {{!req.sentData ? 'disabled' : ''}}" ng-click='showShistoryData()'>\r
- {{ 'YANGUI_HISTORY_SEND_DATA' | translate }}\r
- </button>\r
- </div>\r
- </div>\r
- <div class="tddiv rh-col6">\r
- <div tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.receivedData ? '' : 'YANGUI_HISTORY_NO_REC_DATA_TT' | translate }}">\r
- <button class="btn btn-primary ng-scope btn-slim {{!req.receivedData ? 'disabled' : ''}}" ng-click='showRhistoryData()'>\r
- {{ 'YANGUI_HISTORY_REC_DATA' | translate }}\r
- </button>\r
- </div>\r
- </div>\r
- <div class="tddiv rh-col7">\r
- <div class="requestActions">\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.availability ? 'YANGUI_RUN' : 'YANGUI_API_NA_ERROR_TT' | translate }}">\r
- <button ng-disabled="!req.availability" class="yangButton iconNext {{ req.availability ? '' : 'disabled' }}" ng-click="executeRequest()"></button>\r
- </div>\r
-\r
- <div class="inlineBlock historyRequestBox" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_ADD_TO_COLLECTION' | translate }}">\r
- <div class="yangButton iconPlus inlineBlock" ng-click='showCollBox(req)'></div>\r
- </div>\r
-\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ req.availability ? (req.receivedData || req.sentData) ? 'YANGUI_FILL_DATA_TT' : 'YANGUI_REC_SENT_DATA_ERROR_TT' : 'YANGUI_API_NA_ERROR_TT' | translate }}">\r
- <button class="yangButton iconFillData {{ req.availability && (req.receivedData || req.sentData) ? '' : 'disabled' }}" ng-disabled="!req.availability\r
- || !(req.receivedData || req.sentData)" ng-click="fillRequest()"></button>\r
- </div>\r
-\r
- <button class="yangButton iconClose" ng-click="deleteRequestItem(req, 'requestList')" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_DELETE' | translate }}"></button>\r
-\r
- </div>\r
- </div>\r
-\r
- <div ng-show="showData" class="trdiv pre-div" ng-include src="currentPath + 'parts/history-dataview-part.tpl.html'"></div>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- </div>\r
- <button class="btn btn-primary ng-scope btn-slim" ng-click='clearHistoryData("requestList")'>\r
- {{ 'YANGUI_CLEAR_HISTORY' | translate }}\r
- </button>\r
-</div>\r
+++ /dev/null
-<div class="paramBox popupContainer draggablePopup" ng-controller="ParamBoxCtrl" ng-show="boxView">\r
- <button class="yangButton icon-remove close" ng-click="hideParamBox()"></button>\r
- <form name="paramForm" novalidate="novalidate">\r
- <label>\r
- {{'YANGUI_PARAMETER_NAME_LC' | translate}}\r
- <i id="paramCheck" class="icon-exclamation-sign red" ng-show="paramForm.name.$error.required || paramForm.name.$error.pattern || duplicateParam.length"\r
- tooltip="{{paramForm.name.$error.required ? ('YANGUI_REQUIRED' | translate) : paramForm.name.$error.pattern ? ('YANGUI_ALPHANUMERIC' | translate) : duplicateParam.length ? ('YANGUI_DUPLICATE' | translate) : ''}}" ></i>\r
- </label>\r
- <input class="form-control" ng-model="paramObj.name" type="text" name="name" ng-required="true" ng-pattern="/^[a-zA-Z0-9]*$/" ng-disabled="editingParameters">\r
-\r
- <label>{{'YANGUI_PARAMETER_VALUE_LC' | translate}}</label>\r
- <input class="form-control" ng-model="paramObj.value" type="text">\r
-\r
- <button class="btn btn-primary btn-slim mt10" ng-click="saveParam()" ng-disabled="paramForm.$invalid">{{'YANGUI_SAVE_PARAMETER' | translate}}</button>\r
- </form>\r
-</div>\r
+++ /dev/null
-<div class="tableWrapper" ng-controller="HistoryParamCtrl">\r
- <!-- Box -->\r
- <div ng-include src="currentPath + 'parts/param-box.tpl.html'"></div>\r
-\r
- <!-- Table -->\r
- <div class="table dataTable reqParams">\r
- <div class="thdiv">\r
- <div class="tddiv rh-col1"></div>\r
- <div class="tddiv rh-col2">{{ 'YANGUI_PARAMETER_NAME' | translate }}</div>\r
- <div class="tddiv rh-col3">{{ 'YANGUI_PARAMETER_VALUE' | translate }}</div>\r
- <div class="tddiv actions rh-col4">{{ 'YANGUI_ACTION' | translate }}</div>\r
- </div>\r
-\r
- <perfect-scrollbar class="scroll">\r
- <div ng-repeat="param in parameterList.list track by $index" class="trdiv" ng-class="$index === 0 ? 'no-border' : ''">\r
- <div>\r
- <div class="tddiv rh-col1"><span></span></div>\r
- <div class="tddiv rh-col2"><span><<{{ param.name }}>></span></div>\r
- <div class="tddiv rh-col3"><span>{{ param.value }}</span></div>\r
- <div class="tddiv rh-col4">\r
- <div class="requestActions">\r
- <div>\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_EDIT' | translate }}">\r
- <button class="yangButton iconEdit" ng-click="showParamBox(param)"></button>\r
- </div>\r
- <div class="inlineBlock" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_DELETE' | translate }}">\r
- <button class="yangButton iconClose" ng-click="deleteRequestItem(param, 'parameterList')" tooltip-placement="{{ $index ? 'top' : 'bottom' }}" tooltip="{{ 'YANGUI_DELETE' | translate }}"></button>\r
- </div>\r
- </div>\r
- </div>\r
- </div>\r
- </div>\r
- </div>\r
- </perfect-scrollbar>\r
-\r
-\r
- </div>\r
- <div>\r
- <button class="btn btn-primary ng-scope btn-slim" ng-click="showParamBox(createNewParam())">\r
- {{ 'YANGUI_ADD_PARAMETER' | translate }}\r
- </button>\r
- <button class="btn btn-primary ng-scope btn-slim" ng-click='clearHistoryData("parameterList")'>\r
- {{ 'YANGUI_CLEAR_PARAMETERS' | translate }}\r
- </button>\r
- <span class="ml30">\r
- {{ 'YANGUI_IMPORT_PARAMETERS' | translate }} :\r
- </span>\r
- <input class="btn btn-primary ng-scope btn-slim upload-collection" id="upload-parameters" type="file" on-read-file="readParametersFromFile($fileContent)"/>\r
- <button class="btn btn-primary ng-scope btn-slim" ng-click='exportParametersData()' ng-href="{{ url }}">\r
- {{ 'YANGUI_EXPORT_PARAMETERS' | translate }}\r
- </button>\r
- </div>\r
-</div>\r
+++ /dev/null
-<label class="classic">{{ 'YANGUI_PREVIEW' | translate }}: </label>\r
-<button class="yangButton icon-remove close" ng-click="hidePreview()"></button>\r
-<div class="previewWrapper">\r
- <pre>{{previewValue.length ? previewValue : 'YANGUI_NO_DATA' | translate}}</pre>\r
-</div>
\ No newline at end of file
+++ /dev/null
-<div class="main" ui-view></div>\r
+++ /dev/null
-<div ng-controller="RpcCtrl" class="customContainer {{ node.expanded ? '' : 'withoutBorder' }}">\r
- <div class="topContainerPart">\r
- <span class="treeBullet" ng-show="node !== selSubApi.node">•</span>\r
- <button class="yangButton {{ node.expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="{{ 'SHOW_HIDE_ELEM' | translate }}" ng-click='toggleExpanded()'></button>\r
- <span>\r
- <b>{{getNodeName(node.localeLabel, node.label)}}</b>\r
- <button ng-if="node.getChildren('description', null, null, 'label').length > 0" class="yangButton iconQuestion inlineBlock" tooltip="{{node.getChildren('description', null, null, 'label')[0]}}" ></button>\r
- <span ng-if="node.augmentationId" class="augmentIcon reversed" tooltip="{{ 'YANGUI_IS_AUGMENT' | translate }} {{ node.augmentationId }}">A</span>\r
- </span>\r
- </div>\r
-\r
- <div ng-show="node.expanded">\r
- <div ng-repeat="node in node.getChildren(null,null,constants.NODE_UI_DISPLAY) | onlyConfigStmts" ng-include="currentPath+'/'+node.type+'.tpl.html'">\r
- </div>\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow" ng-show="node.expanded"></i>\r
-</div>\r
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="TypeBitCtrl">\r
- <div ng-repeat="bit in type.getChildren('bit')">\r
- <input class="bitCheckbox" type="checkbox" ng-model="type.bitsValues[$index]" ng-checked="type.bitsValues[$index] === 1" ng-true-value="1" ng-false-value="0" ng-change="valueChanged()" ng-disabled="{{ notEditable }}">\r
- <span>{{bit.label}}</span>\r
- <div class='clear'></div>\r
- </div>\r
-</div>\r
+++ /dev/null
-<input type="radio" ng-change="valueChanged()" ng-model="node.value" value="true" id="{{node.label+node.id}}" ng-disabled="{{ notEditable }}"> True\r
-<input type="radio" ng-change="valueChanged()" ng-model="node.value" value="false" id="{{node.label+node.id}}" ng-disabled="{{ notEditable }}"> False
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<div ng-controller="TypeEmptyCtrl">\r
- <input class="bitCheckbox" type="checkbox" ng-model="type.emptyValue" ng-checked="type.emptyValue === 1" ng-true-value="1" ng-false-value="0" ng-change="valueChanged()" ng-disabled="{{ notEditable }}">\r
- <div class='clear'></div>\r
-</div>\r
+++ /dev/null
-<select ng-controller="TypeEnumCtrl" class="form-control input-sm" style="width:300px" ng-model="type.selEnum" ng-options="enum.label for enum in type.getChildren('enum')" ng-change="valueChanged()" ng-disabled="{{ notEditable }}">\r
- <option value="">-</option>\r
-</select>\r
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" type="text" ng-change="valueChanged()" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<input class="leaf-input form-control input-small" ng-change="valueChanged()" type="text" ng-model="node.value" tooltip="{{type.label}}" ng-disabled="{{ notEditable }}">\r
-<button class="yangButton iconDanger" tooltip="{{type.errors.join('\n')}}" ng-show="type.errors.length > 0"></button>
\ No newline at end of file
+++ /dev/null
-<div class="tabs unionType">\r
- <ul class="nav nav-tabs">\r
- <li class="{{$index === 0 ? 'btn-selected' : ''}} btn-like-tab" ng-repeat="type in type.getChildren('type') track by $index" ng-click="tabs($event, $index)">\r
- <a data-target="{{'#' + type.label + type.id}}" data-toggle="tab"><span>{{type.label}}</span></a>\r
- </li>\r
- </ul>\r
-\r
- <div class="tab-content simpleContainer">\r
- <div id="{{type.label + type.id}}" class="tab-pane {{ $index === 0 ? 'active' : ''}}" ng-repeat="type in type.getChildren('type') track by $index">\r
- <div ng-include="currentPath+'/types/'+type.label+'.tpl.html'"></div>\r
- </div>\r
- </div>\r
-</div>
\ No newline at end of file
+++ /dev/null
-@iconsNewRootPath : '../src/app/yangui/assets/images/';\r
-\r
-/******** WINDOW SCROLLBARS *****/\r
-::-webkit-scrollbar {\r
- width: 13px;\r
- height: 13px;\r
-}\r
-\r
-::-webkit-scrollbar-corner {\r
- background: #000;\r
-}\r
-\r
-::-webkit-scrollbar-corner:window-inactive {\r
- background: #fff;\r
-}\r
-\r
-::-webkit-scrollbar-track-piece:disabled {\r
- display: none !important;\r
-}\r
-\r
-::-webkit-scrollbar-button:disabled {\r
- display: none !important;\r
-}\r
-\r
-::-webkit-scrollbar-track:disabled {\r
- margin: 6px;\r
-}\r
-\r
-/* Horizontal Scrollbar Styles */\r
-\r
-::-webkit-scrollbar:horizontal {\r
- background: #b3b2b3;\r
-}\r
-\r
-::-webkit-scrollbar-thumb:horizontal {\r
- background: #807f80;\r
- min-width: 20px;\r
-}\r
-\r
-/* Vertical Scrollbar Styles */\r
-\r
-::-webkit-scrollbar:vertical {\r
- background: #b3b2b3;\r
-}\r
-\r
-\r
-::-webkit-scrollbar-thumb:vertical {\r
- background: #807f80;\r
- min-height: 20px;\r
-}\r
-/******** WINDOW SCROLLBARS END *****/\r
-\r
-.simpleContainer {\r
- border: 1px solid #7a7a7a;\r
- margin: 5px;\r
- padding: 10px;\r
- z-index: 11;\r
- width:auto;\r
- position: relative;\r
-\r
- &.treeContainer{\r
- height: 450px;\r
- position: relative;\r
- }\r
-}\r
-\r
-/*.previewContainer {\r
- border: 2px solid #7a7a7a;\r
- margin: 5px;\r
- padding: 5px;\r
- position: fixed;\r
- top: 150px;\r
- right: 10px;\r
- width: 35%;\r
- height: 50%;\r
- z-index: 1000;\r
- overflow: auto;\r
- word-wrap: normal;\r
- white-space: pre;\r
-}*/\r
-\r
-.previewContainer{\r
- min-width:204px;\r
- min-height:97px;\r
-}\r
-\r
-.leaf {\r
- margin: 5px;\r
- padding-left: 5px;\r
- position: relative;\r
-}\r
-\r
-.leaf-label {\r
- margin-right: 10px;\r
- font-weight: bold;\r
- .inlineBlock;\r
- /*width: 170px;*/\r
- padding-top: 6px;\r
- button.iconQuestion{\r
- margin-top: -2px;\r
- }\r
-\r
- i.icon-key {\r
- font-size: 1.3em;\r
- padding-left: 5px;\r
- }\r
-}\r
-\r
-.yangInput{\r
- border: 2px solid #ebecec;\r
- .roundedCorners(0px);\r
- margin: 0 3px 0 5px;\r
-}\r
-\r
-.leaf-input {\r
- width: 300px;\r
- .inlineBlock;\r
- border: 2px solid #ebecec;\r
- .roundedCorners(0px);\r
-}\r
-\r
-.dataPopup {\r
- top: 160px;\r
- left: calc(~"100% - 850px");\r
- min-height: 322px;\r
-\r
- .leaf-input {\r
- width: 100%;\r
- }\r
-}\r
-\r
-INPUT.leaf-input{\r
-// height: 30px;\r
-}\r
-\r
-.clear{\r
- clear: both;\r
-}\r
-\r
-.floatRight {\r
- position: relative;\r
- float: right;\r
- display:inline-block;\r
-}\r
-\r
-.btn-slim {\r
- font-weight: bold;\r
- padding-top: 2px;\r
- padding-bottom: 2px;\r
-}\r
-\r
-.btn-filter{\r
- margin: 2px 0px;\r
-}\r
-\r
-.btn-filter-high{\r
- margin-top: 3px !important;\r
-}\r
-\r
-.btn-filter-right{\r
- float: right;\r
- margin-left: 15px;\r
- margin-bottom: 10px;\r
-}\r
-\r
-input[type="file"].upload-collection{\r
- display: inline-block;\r
-}\r
-\r
-.filterBitsIcon{\r
- position: absolute !important;\r
- left: 130px;\r
- bottom: 55px;\r
-}\r
-\r
-.filterBitsValue{\r
- margin-top: 10px;\r
- margin-bottom: 20px;\r
-}\r
-\r
-.bitCheckbox{\r
- float: left;\r
- margin: 4px 3px 0px 0px !important;\r
-}\r
-\r
-.form-inline select.form-control.adv-fil-sel{\r
- width:80px;\r
- height: 34px;\r
-\r
- background-color: #58595B;\r
- color: white;\r
- border: 2px solid #ebecec;\r
- border-radius: 0px;\r
-}\r
-\r
-\r
-.adv-fil-range{\r
- width:148px !important;\r
-}\r
-\r
-.iconFilterOver{\r
- position: absolute !important;\r
- top: 9px;\r
- left: -15px;\r
-}\r
-\r
-.btn-red {\r
- background: red;\r
-}\r
-\r
-.btn-selected {\r
- background: rgb(255,69,0);\r
-}\r
-\r
-/* --------------------------------------------------------------------------------- COMMON OWN RULES */\r
-.opacityDeph(@opacity: 0.5){\r
- -ms-filter: ~"'progid:DXImageTransform.Microsoft.Alpha(Opacity=" @opacity*100 ~")'";\r
- filter: ~"alpha(opacity=" @opacity*100 ~")";\r
- -moz-opacity: @opacity;\r
- -khtml-opacity: @opacity;\r
- opacity: @opacity;\r
-}\r
-\r
-.roundedCorners (@radius: 5px) {\r
- -webkit-border-radius: @radius;\r
- -moz-border-radius: @radius;\r
- -ms-border-radius: @radius;\r
- -o-border-radius: @radius;\r
- border-radius: @radius;\r
-}\r
-\r
-.transition (@time: 500ms){\r
- -webkit-transition: all @time linear;\r
- -moz-transition: all @time linear;\r
- -ms-transition: all @time linear;\r
- -o-transition: all @time linear;\r
- transition: all @time linear;\r
-}\r
-\r
-.left{ float: left;}\r
-.right{ float: right;}\r
-.clear{ clear: both; float: none!important;}\r
-.outline{ outline: 0 none;}\r
-.block{ display: block;}\r
-.blockNone{ display: none;}\r
-.displayTable{\r
- display: table;\r
-}\r
-.inlineBlock {\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
-}\r
-.classicLink{\r
- .outline;\r
- text-decoration: none;\r
- &:hover{\r
- text-decoration: underline;\r
- }\r
-}\r
-.boxSizing{\r
- -moz-box-sizing: border-box;\r
- -webkit-box-sizing: border-box;\r
- box-sizing: border-box;\r
-}\r
-.mt10{margin-top: 10px;}\r
-.mt20{margin-top: 20px;}\r
-.mt30{margin-top: 30px;}\r
-.mt40{margin-top: 40px;}\r
-.mb10{margin-bottom: 10px;}\r
-.mb20{margin-bottom: 20px;}\r
-.mb30{margin-bottom: 30px;}\r
-.mb40{margin-bottom: 40px;}\r
-.nmb{margin-bottom: 0!important}\r
-.pr30{padding-right: 30px;}\r
-.pr40{padding-right: 40px;}\r
-.pr50{padding-right: 50px;}\r
-.pr60{padding-right: 60px;}\r
-.pl30{padding-left: 30px;}\r
-.ml20{margin-left: 20px;}\r
-.ml30{margin-left: 30px;}\r
-\r
-.inline{\r
- display: inline;\r
-}\r
-/* --------------------------------------------------------------------------------- COMMON OWN RULES - END */\r
-\r
-\r
-\r
-\r
-/* --------------------------------------------------------------------------------- YANG UI */\r
-.yangUIwrapper{\r
-\r
- input[type=text]{\r
- background-color: #58595B;\r
- color: white;\r
- }\r
-\r
- span{\r
- color: white;\r
- }\r
-\r
- .yangUIwrapper .CodeMirror span{\r
- color: auto;\r
- }\r
-\r
- ::-webkit-scrollbar {\r
- width: 10px;\r
- height: 10px;\r
- }\r
-\r
- .alert{\r
- .roundedCorners(0px);\r
-\r
- .close{\r
- span{\r
- color: @text-color;\r
- }\r
- }\r
- }\r
-\r
- .btn, .form-control{\r
- .roundedCorners(3px);\r
- }\r
-\r
- input[type=text].form-control{\r
- .roundedCorners(0px);\r
- }\r
-\r
- .btn-orange{\r
- background: orange;\r
- color: #fff;\r
- font-weight: bold;\r
- }\r
-\r
- button.btn-like-tab{\r
- //line-height: 1em;\r
- outline: 0 none;\r
- //height: 30px;\r
- margin: 0;\r
- border: none;\r
- font-weight: bold;\r
- background: transparent;\r
- .transition(100ms);\r
- color: #fff;\r
- margin-bottom: 2px;\r
- padding-top: 0;\r
-\r
- &:hover, &.active, &.btn-selected{\r
- border-bottom: 2px solid orange;\r
- margin-bottom: 0px;\r
- }\r
-\r
- }\r
-\r
- li.btn-like-tab{\r
- line-height: 1em;\r
- outline: 0 none;\r
- margin: 0;\r
- border: none;\r
- font-weight: bold;\r
- .transition(100ms);\r
- color: buttontext;\r
- background: transparent;\r
-\r
- &.btn-selected, &:hover{\r
- border-bottom: 2px solid orange;\r
- }\r
- }\r
-\r
- .form-control {\r
- &.inline {\r
- width: 100px;\r
- display: inline;\r
- }\r
- }\r
-\r
- .btn-primary{\r
- font-weight: bold;\r
- background: #fff;\r
- .roundedCorners(0px);\r
- .transition(100ms);\r
- color: buttontext;\r
- border-bottom: 3px solid orange;\r
- border-width: 0 0 3px 0;\r
-\r
- &:hover{\r
- background: orange;\r
- color: #fff;\r
- }\r
-\r
- &.btn-selected{\r
- background: #ffa500;\r
- }\r
-\r
- &.disabled, &[disabled] {\r
- background: #ebecec;\r
- cursor: not-allowed;\r
- pointer-events: none;\r
- opacity: 0.65;\r
- filter: alpha(opacity=65);\r
- -webkit-box-shadow: none;\r
- box-shadow: none;\r
- }\r
-\r
- &:focus {\r
- background: #ebecec;\r
- color: buttontext;\r
- }\r
- }\r
-}\r
-\r
-\r
-\r
-.leaflist{\r
- .leafListValue{\r
- margin-top: 5px;\r
- margin-left: 10px;\r
- input[type=text], button{\r
- .inlineBlock;\r
- }\r
- input[type=text]{\r
- width: 20%;\r
- border: 2px solid #ebecec;\r
- /*background-color: #414042;*/\r
- .roundedCorners(0px);\r
- }\r
- button{\r
- margin-top: 4px;\r
- margin-left: 5px;\r
- }\r
- }\r
-}\r
-\r
-.mainTabsWrapper{\r
-\r
- .simpleContainer{\r
- margin: 5px 0;\r
-\r
- &.treeContainer{\r
- margin-top: 0;\r
- }\r
- }\r
-\r
- .nav-tabs{\r
- border-bottom: 0;\r
- margin: 0 5px;\r
-\r
- li{\r
- .roundedCorners(0px);\r
- margin-right: 3px;\r
-\r
- &:hover{\r
- // background-color: #e4e6e9;\r
- }\r
-\r
- a{\r
- background: none;\r
- border: 0;\r
- .outline;\r
- }\r
- }\r
- }\r
-\r
- .tab-panel{\r
- height: 100%;\r
- }\r
-\r
-}\r
-\r
-.treeWrapper{\r
- height: calc(~"100% - 20px");\r
- margin: 10px 0;\r
-\r
- .treeList{\r
- margin: 10px 0;\r
- height: calc(~"100% - 40px");\r
- overflow-y: auto;\r
- }\r
-}\r
-\r
-.actionBtnApiPathWrapper{\r
-\r
- &.simpleContainer{\r
- margin: 5px 0;\r
- }\r
-\r
- &.is-sticky{\r
- width: 100%;\r
- .boxSizing;\r
- padding: 0 20px 0 270px;\r
- right: 0;\r
- z-index: 100;\r
- margin: 0;\r
- border: 0;\r
-\r
- div.in{\r
- border: 1px solid #7a7a7a;\r
- background: #414042;\r
- padding-left: 15px;\r
- padding-top: 10px;\r
- }\r
- }\r
-\r
-}\r
-\r
-label.classic{\r
- color: #fff;\r
- min-width: 120px;\r
-}\r
-\r
-.actionButtons, .api{\r
- white-space: nowrap;\r
- overflow-x: auto;\r
- max-width: 100%;\r
- //padding-bottom: 10px;\r
- height: 50px;\r
-\r
- input[type="text"]{\r
- width: 150px;\r
- display: inline!important;\r
- margin: 0 5px;\r
- height: 34px;\r
- .roundedCorners(0px);\r
- border: 0;\r
- }\r
-\r
- label.classic{\r
- min-width: 90px;\r
- }\r
-\r
- span.input-sm{\r
- line-height: 34px;\r
- .inlineBlock;\r
- padding: 0 10px;\r
- }\r
-\r
- .input-sm{\r
- height: 34px;\r
- display: inline;\r
- line-height: 34px;\r
- background: @text-color;\r
- color: #fff;\r
- border: 0;\r
- width: 100px;\r
- -webkit-border-radius: 3px 0 0 3px;\r
- border-radius: 3px 0 0 3px;\r
- }\r
-\r
- .btn{\r
- display: inline;\r
- }\r
-\r
- .pathWrapper{\r
- //display: inline;\r
- .inlineBlock;\r
- background: #58595B;\r
- padding: 0 5px;\r
- margin-right: 5px;\r
- height: 34px;\r
- -webkit-border-radius: 0px 3px 3px 0px;\r
- border-radius: 0px 3px 3px 0px;\r
-\r
- input[type=text]{\r
- border: 2px solid #ebecec;\r
- }\r
-\r
- .pathElem{\r
- line-height: 33px;\r
- }\r
- }\r
-\r
- div.in{\r
- padding: 0 10px;\r
- }\r
-}\r
-\r
-//.api{\r
-// .input-sm{\r
-// padding-top: 0;\r
-// padding-bottom: 0;\r
-// font-weight: bold;\r
-// width: auto;\r
-// }\r
-//}\r
-\r
-.dataPopupWrapper{\r
- position: relative;\r
- .dataPopup{\r
- position: absolute;\r
- right: auto;\r
- }\r
-}\r
-\r
-.nav-tabs li a{\r
- cursor: pointer;\r
-}\r
-\r
-div.overlay{\r
- position: fixed;\r
- z-index: 1;\r
- width: 100%;\r
- height: 100%;\r
- background: rgba(0,0,0,0.5);\r
- top: 0;\r
- left: 0;\r
-}\r
-\r
-div.popUpWrapperFix{\r
- position: fixed;\r
- //width: calc(~"100% - 250px");\r
- height: 100%;\r
- //margin-left: 250px;\r
- z-index: 11;\r
- top: 0;\r
- left: 0;\r
-}\r
-\r
-.collBox{\r
- position: absolute;\r
- width: 450px;\r
- top: 50%;\r
- left: 50%;\r
- margin-left: -225px;\r
- margin-top: -127px;\r
- z-index: 5;\r
-}\r
-\r
-div.requestActions{\r
- width: 150px;\r
- position: relative;\r
-\r
- .historyRequestBox{\r
- position: relative;\r
-\r
- .changeGroup{\r
- left: -365px;\r
- }\r
- }\r
-}\r
-\r
-.paramBox{\r
- position: absolute;\r
- width: 450px;\r
- top: 0;\r
- left: -360px;\r
- z-index: 1;\r
- left: 50%;\r
- top: 50%;\r
- margin-left: -225px;\r
- margin-top: -98px;\r
-\r
- .close{\r
- position: absolute;\r
- top: 5px;\r
- right: 5px;\r
- color: #C4C4C4;\r
- z-index: 1;\r
- }\r
-}\r
-\r
-.parameterEditBox{\r
- position: relative;\r
-}\r
-\r
-div.mountPoints{\r
- // color: #fff!important;\r
- height: auto;\r
- min-height: 0;\r
- .leaf-label{\r
- cursor:pointer;\r
- }\r
- .mpInner{\r
- overflow-y: scroll;\r
- margin-top: 20px;\r
- height: 100%;\r
- margin-bottom: 20px;\r
- .mpApi{\r
- padding-right: 10px;\r
- a{\r
- color: #FFFFFF !important;\r
- display: block;\r
- padding-top: 3px;\r
- padding-bottom: 3px;\r
- &:hover{\r
- background: #808285;\r
- text-decoration: none;\r
- cursor: pointer;\r
- .roundedCorners(4px);\r
- /*i, span{\r
- color: @blue;\r
- }*/\r
- }\r
- &.mpApiLink{\r
- font-weight: bold;\r
- padding-left: 10px;\r
- }\r
- }\r
- span{\r
- padding-left: 5px;\r
- }\r
- .mpSubApi{\r
- a{\r
- padding-left: 30px;\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-/* --------------------------------------------------------------------------------- YANG UI - END */\r
-\r
-\r
-\r
-\r
-\r
-/* --------------------------------------------------------------------------------- YANG UI TREE */\r
-\r
-.listContainer{\r
- position: relative;\r
-}\r
-\r
-.listModal{\r
- position: absolute;\r
- top: 0px;\r
- margin: 0 0 0 20px!important;\r
- left: 100%;\r
- background: #393939;\r
- z-index: 99;\r
- /*width: 245px;*/\r
- .btn{\r
- /*width: 200px;*/\r
- }\r
- button.iconView{\r
- position: absolute;\r
- left: 0px;\r
- top: 0;\r
- margin: 0;\r
- }\r
- li{\r
- margin: 5px 0;\r
- position: relative;\r
- .btn-remove,.btn-filter-active{\r
- position: absolute;\r
- right: 29px;\r
- top: 0;\r
- margin: 0;\r
- }\r
- .btn-filter-active{\r
- right: 20px;\r
- }\r
- .btn-double-index{\r
- position: absolute;\r
- right: 3px;\r
- top: 0;\r
- margin: 0;\r
- }\r
- .btn-view{\r
- position: absolute;\r
- left: 0px;\r
- top: 0;\r
- }\r
-\r
- }\r
- ul{\r
- padding: 0 15px 0 10px;\r
- }\r
- button.close{\r
- position: absolute;\r
- top: 0px;\r
- right: 5px;\r
- color: #ebecec;\r
- opacity: 1;\r
- }\r
- .listWrapper{\r
- overflow-y: scroll;\r
- max-height: 200px;\r
- }\r
-\r
- &.augmentationModal{\r
- padding-left: 15px;\r
- left: -6px;\r
- top: -10px;\r
- border: 1px solid #7a7a7a;\r
- }\r
-}\r
-\r
-.popupContainer{\r
- background: #414042;\r
- border: 1px solid #7a7a7a;\r
- border-radius: 5px;\r
- padding: 20px;\r
-}\r
-\r
-.historyPopUp{\r
- height: 100%;\r
- color: #fff;\r
-\r
- .groupWrapper{\r
- .groupHeader{\r
- font-weight: bold;\r
- border-bottom: 2px solid #dddddd;\r
- padding: 8px;\r
- cursor: pointer;\r
- }\r
- }\r
-\r
-\r
- .tableWrapper{\r
- margin-bottom: 10px;\r
- max-height: calc(~"100% - 51px");\r
- height: 90000px;\r
-\r
- .reqHistory,.reqParams{\r
-\r
- width:100%;\r
- height: 100%;\r
- display:block;\r
-\r
- .tddiv{\r
- /*border: 1px dotted brown;*/\r
- display: inline-block;\r
- }\r
-\r
- .thdiv{\r
- border-bottom: 2px solid #dddddd;\r
-\r
- .tddiv{\r
- padding: 8px;\r
- text-align: left;\r
- vertical-align: bottom;\r
- font-weight: bold;\r
- }\r
-\r
- .rh-col3{\r
- width: calc(~"100% - 660px");\r
- }\r
-\r
- .rh-col3c{\r
- width: calc(~"100% - 804px");\r
- }\r
- }\r
-\r
- .scroll{\r
- overflow-y: auto;\r
- position: relative;\r
- height: calc(~"100% - 50px");\r
- }\r
-\r
-\r
- .trdiv{\r
- border-top: 2px solid #dddddd;\r
-\r
- &:first-child{\r
- border-top: 0;\r
- }\r
-\r
- &.no-border{\r
- border: 0;\r
- }\r
- .tddiv{\r
- padding: 8px;\r
- text-align: left;\r
- vertical-align: top;\r
- word-wrap: break-word;\r
- line-height: 26px;\r
- }\r
- &.pre-div{\r
- position: relative;\r
- border: 0;\r
- margin: 10px 0 20px;\r
- padding: 0px 10px;\r
-\r
- button.close{\r
- color: #000;\r
- right: 30px;\r
- top: 10px;\r
- z-index: 3;\r
- width: 15px;\r
- height: 15px;\r
- background: transparent url('@{iconsNewRootPath}icon-close-small.png') no-repeat center center;\r
- .opacityDeph(1);\r
-\r
- &:before{\r
- content: "";\r
- }\r
-\r
- &:hover{\r
- background-position: center center!important;\r
- .opacityDeph(1);\r
- }\r
- }\r
-\r
- button.white-cross{\r
- color: #fff;\r
- }\r
-\r
- .textareaWrapper{\r
- position: relative;\r
- border: 1px solid silver;\r
-\r
- span{\r
- color: auto;\r
- }\r
-\r
- pre span{\r
- color: auto;\r
- }\r
-\r
-\r
- textarea{\r
- width: 100%;\r
- min-height: 50px;\r
- overflow-y: scroll;\r
- height: 200px;\r
- max-width: 100%;\r
- }\r
-\r
- .paramsBox{\r
- position: absolute;\r
- right: 55px;\r
- top: 12px;\r
-\r
- z-index: 4;\r
- color: @text-color;\r
-\r
- .line{\r
- color: @text-color;\r
- padding: 4px 30px 4px 20px;\r
- background: #cdcdce;\r
- margin-bottom: 1px;\r
- font-size: 12px;\r
- }\r
-\r
- span{\r
- color: @text-color;\r
- }\r
-\r
- }\r
- }\r
- }\r
- }\r
-\r
- .rh-col1{\r
- width: 27px;\r
- }\r
- .rh-col2{\r
- width: 90px;\r
- }\r
- .rh-col3{\r
- width: calc(~"100% - 641px");\r
- }\r
- .rh-col3c{\r
- width: calc(~"100% - 786px");\r
- min-width: 100px;\r
- }\r
- .rh-col4{\r
- width: 80px;\r
- }\r
- .rh-col5{\r
- width: 110px;\r
- }\r
- .rh-col6{\r
- width: 140px;\r
- }\r
- .rh-col7{\r
- width: 170px;\r
- }\r
- .rh-col8{\r
- width: 140px;\r
- }\r
- }\r
-\r
-\r
- .reqParams {\r
-\r
- .thdiv{\r
- .rh-col3{\r
- width: calc(~"100% - 450px");\r
- }\r
- }\r
-\r
- .rh-col2{\r
- width: 235px;\r
- }\r
- .rh-col3{\r
- width: calc(~"100% - 433px");\r
- }\r
- .rh-col4{\r
- width: 100px;\r
- }\r
- }\r
- }\r
-\r
- .btn-like-tab{\r
- .roundedCorners(0);\r
- margin-left: 2px;\r
- }\r
-\r
- .nav-tabs li a{\r
- margin-right: 0;\r
- }\r
-\r
- td{\r
- textarea{\r
- width: 100%;\r
- min-height: 400px;\r
- }\r
- }\r
-\r
- table{\r
- color: #fff;\r
- th{\r
- &.actions{\r
- width: 150px;\r
- }\r
- }\r
- }\r
- pre{\r
- position: relative;\r
- button.close{\r
- color: #000;\r
- }\r
- }\r
-}\r
-\r
-.topologyContainer{\r
- position: fixed !important;\r
- width: 800px;\r
- height: 500px;\r
- top: 150px;\r
- left: calc(~"100% - 900px");\r
- // z-index: 1100;\r
- overflow: hidden;\r
- background: #393939;\r
- border: 1px solid #7a7a7a;\r
- padding: 20px;\r
- z-index: 15;\r
- button.close{\r
- position: absolute;\r
- top: 5px;\r
- right: 5px;\r
- color: #C4C4C4;\r
- z-index: 1;\r
- }\r
- .graph-frame{\r
- width: 100%!important;\r
- }\r
- #graph-container{\r
- min-height: 460px;\r
- padding: 0;\r
- background: #414042;\r
- }\r
- &.previewContainer{\r
- width: 40%;\r
- height: 40%;\r
- .previewWrapper{\r
- overflow-y: scroll;\r
- min-height: 30px;\r
- min-width: 162px;\r
- height: calc(~"100% - 25px");\r
-\r
- pre{\r
- -webkit-border-radius: 0;\r
- border-radius: 0;\r
- margin: 0;\r
- min-height:100%;\r
- }\r
- }\r
- .restUrl{\r
- margin-bottom: 10px;\r
- .title{\r
- display: block;\r
- }\r
- }\r
- &.dataPopup{\r
- min-width: 320px;\r
- textarea{\r
- width: 100%;\r
- min-height: 150px;\r
- margin: 0px 0 10px;\r
- resize: none;\r
- height: calc(~"100% - 130px");\r
- }\r
- input{\r
- margin: 0px 0 10px;\r
- }\r
- }\r
- }\r
-}\r
-\r
-.mountPointsContainer{\r
- background: #393939;\r
- border: 1px solid #7a7a7a;\r
- border-radius: 5px;\r
- padding: 20px;\r
- position: fixed !important;\r
- width: 430px;\r
- height: 45%;\r
- min-height: 215px;\r
- min-width: 430px;\r
- top: 150px;\r
- left: calc(~"100% - 700px");\r
- z-index: 100;\r
- //overflow: hidden;\r
-\r
- button.close{\r
- position: absolute;\r
- top: 5px;\r
- right: 5px;\r
- color: #C4C4C4;\r
- }\r
-\r
- i.icon-refresh {\r
- color: white;\r
- }\r
-}\r
-\r
-i.icon-spinner{\r
- margin: 3px 3px 0px 0px;\r
-}\r
-\r
-.alertInner{\r
- margin-bottom: 10px;\r
- span{\r
- margin-left: 10px;\r
- }\r
-}\r
-\r
-.modalWrapper{\r
- position: relative;\r
- .inlineBlock;\r
- /*z-index: 20;*/\r
-}\r
-\r
-.list-title{\r
- line-height: 14px;\r
- margin-bottom: 10px;\r
-}\r
-\r
-.customContainer{\r
- border-left: 1px solid #7a7a7a;\r
- margin: 35px 5px 5px 15px;\r
- padding: 5px;\r
- /*z-index: 10;*/\r
- width:auto;\r
- position: relative;\r
- &.withoutBorder{\r
- border-left: 0;\r
- padding-bottom: 0;\r
- .treeBullet.containerBullet{\r
- left: -25px;\r
- top: -25px;\r
- }\r
- }\r
-}\r
-\r
-\r
-\r
-.btn-show-custom{\r
- width: 22px;\r
- line-height: 22px;\r
- -webkit-border-radius: 11px;\r
- border-radius: 11px;\r
- text-align: center;\r
- padding: 0!important;\r
-}\r
-\r
-.btn-double-index{\r
- /*cursor: auto;\r
- &:hover, &:focus{\r
- background: #d9534f!important;\r
- border-color: #d9534f!important;\r
- }*/\r
-}\r
-\r
-.btn-view{\r
- cursor: auto;\r
- &:hover, &:focus{\r
- background: orange!important;\r
- border-color: orange!important;\r
- }\r
-}\r
-\r
-.topContainerPart{\r
- margin-left: -19px;\r
- margin-top: -28px;\r
- margin-bottom: 10px;\r
-}\r
-\r
-.listItemWrapper{\r
- margin: 0 10px 0 20px;\r
- .inlineBlock;\r
- .listButtonWrapper{\r
- margin: 2px 15px 0 5px;\r
- .inlineBlock;\r
-\r
- button.yangButton{\r
- margin: 0px;\r
- }\r
-\r
- &:last-child{\r
- margin-right: 0;\r
- }\r
-\r
-\r
-\r
- .iconClose, .iconDanger{\r
- padding: 0;\r
- }\r
-\r
- // button.yangButton{\r
- // margin: 4px 0;\r
- // }\r
-\r
- // .iconDanger{\r
- // width: 10px;\r
- // margin: 4px 0;\r
- // height: 24px;\r
- // border: 0;\r
- // }\r
- // .iconClose{\r
- // width: 16px;\r
- // }\r
- }\r
-}\r
-\r
-.btn-name{\r
- -webkit-border-radius: 5px;\r
- border-radius: 5px;\r
- background: transparent;\r
- font-weight: bold;\r
- color: #ebecec;\r
- border: 2px solid #ebecec;\r
- cursor: auto;\r
-}\r
-\r
-.borderArrow{\r
- color: #7a7a7a;\r
- position: absolute;\r
- bottom: -6px;\r
- left: -6px;\r
- font-size: 1.3em;\r
-}\r
-\r
-.btn.btn-arrow{\r
- /*font-size: 12px;*/\r
-}\r
-\r
-.treeBullet{\r
- font-size: 25px;\r
- color: #7a7a7a;\r
- position: absolute;\r
- left: -15px;\r
- top: 0;\r
- &.containerBullet{\r
-/* margin: 0 0px 0 -14px;\r
- line-height: 25px;*/\r
- top: -25px;\r
- left: -25px;\r
- }\r
-}\r
-\r
-.tooltip-inner{\r
- color: #fff;\r
- white-space: pre-wrap; /* CSS3 */\r
- white-space: -moz-pre-wrap; /* Firefox */\r
- white-space: -pre-wrap; /* Opera <7 */\r
- white-space: -o-pre-wrap; /* Opera 7 */\r
- word-wrap: break-word; /* IE */\r
-}\r
-\r
-.listElemButton{\r
- /*max-width: 250px;*/\r
- /*overflow: hidden;*/\r
-}\r
-\r
-.listFilterWindow{\r
- left: -6px;\r
- top: -10px;\r
- border: 2px solid #ebecec;\r
-}\r
-\r
-.filterContainer .leaf{\r
- min-width: 585px;\r
-}\r
-\r
-.filterContainer{\r
- margin-top:20px;\r
- margin-right: 40px;\r
- margin-bottom: 20px;\r
-}\r
-\r
-.filterContainer .col-md-2{\r
- width: 150px;\r
-}\r
-/* --------------------------------------------------------------------------------- YANG UI TREE - END */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-@iconsRootPath : 'images/yang-ui-icons/';\r
-/* --------------------------------------------------------------------------------- YANG UI BUTTONS */\r
-button, div{\r
- &.yangButton{\r
- cursor: pointer;\r
- position: relative;\r
- width: 24px;\r
- height: 24px;\r
- border: 0;\r
- margin: 2px;\r
- .inlineBlock;\r
- &.iconClose{\r
- opacity: 1;\r
- width: 24px;\r
- background: transparent url('@{iconsRootPath}icon-close.png') no-repeat center top;\r
-\r
- &.active{\r
- background-position: 0 -24px!important;\r
- }\r
- }\r
- &.closeData{\r
- position: absolute;\r
- top: 5px;\r
- right: 22px;\r
- }\r
- &.iconNext{\r
- background: transparent url('@{iconsRootPath}icon-next.png') no-repeat center top;\r
- &.disabled{\r
- background-position: center top!important;\r
- .opacityDeph(0.6);\r
- }\r
- }\r
- &.iconPlus{\r
- background: transparent url('@{iconsRootPath}icon-plus.png') no-repeat center top;\r
- }\r
- &.iconChangeGroup{\r
- background: transparent url('@{iconsRootPath}icon-expand-bits.png') no-repeat center top;\r
- }\r
- &.iconArrowUp{\r
- background: transparent url('@{iconsRootPath}icon-arrow-up.png') no-repeat center top;\r
- }\r
- &.iconArrowDown{\r
- background: transparent url('@{iconsRootPath}icon-arrow-down.png') no-repeat center top;\r
- }\r
- &.iconFillData{\r
- background: transparent url('@{iconsRootPath}icon-fill-data.png') no-repeat center top;\r
- &.disabled{\r
- background-position: center top!important;\r
- .opacityDeph(0.6);\r
- }\r
- }\r
- &.iconArrowRight{\r
- background: transparent url('@{iconsRootPath}icon-arrow-right.png') no-repeat center top;\r
- }\r
- &.iconFilterEmpty{\r
- background: transparent url('@{iconsRootPath}icon-filter-empty.png') no-repeat center top;\r
- }\r
- &.iconFilterFull{\r
- background: transparent url('@{iconsRootPath}icon-filter-full.png') no-repeat center top;\r
- }\r
- &.iconFilterFullBck{\r
- background: transparent url('@{iconsRootPath}icon-filter-full.png') no-repeat center top;\r
- }\r
- &.iconList{\r
- background: transparent url('@{iconsRootPath}icon-list.png') no-repeat center top;\r
- }\r
- &.iconListBck{\r
- background: transparent url('@{iconsRootPath}icon-list-bck.png') no-repeat center top;\r
- }\r
- &.iconQuestion{\r
- background: transparent url('@{iconsRootPath}icon-question.png') no-repeat center top;\r
- }\r
- &.iconExpandBits{\r
- background: transparent url('@{iconsRootPath}icon-expand-bits.png') no-repeat center top;\r
- }\r
- &.iconCollapseBits{\r
- background: transparent url('@{iconsRootPath}icon-collapse-bits.png') no-repeat center top;\r
- }\r
- &.iconPrev{\r
- background: transparent url('@{iconsRootPath}icon-prev.png') no-repeat center top;\r
- }\r
- &.iconEdit{\r
- /*background: none;\r
- span{\r
- vertical-align: text-top;\r
- }*/\r
- background: transparent url('@{iconsRootPath}icon-edit.png') no-repeat center top;\r
- }\r
- &.iconDanger{\r
- background: transparent url('@{iconsRootPath}icon-danger.png') no-repeat center top;\r
- &:hover{\r
- background-position: 0 0!important;\r
- }\r
- }\r
- &.iconView{\r
- background: transparent url('@{iconsRootPath}icon-view.png') no-repeat center top;\r
- &:hover{\r
- background-position: 0 0!important;\r
- }\r
- }\r
- &:hover{\r
- background-position: 0 -24px!important;\r
- }\r
- /*&:hover{\r
- .opacityDeph(0.8);\r
- }*/\r
- }\r
-}\r
-\r
-.augmentIcon{\r
- .inlineBlock;\r
- background: transparent;\r
- font-weight: bold;\r
- color: #ebecec;\r
- border: 2px solid #ebecec;\r
- cursor: pointer;\r
- width: 26px;\r
- height: 26px;\r
- line-height: 22px;\r
- .boxSizing;\r
- .roundedCorners(13px);\r
- text-align: center;\r
- margin-left: 5px;\r
-\r
- &:hover, &.active{\r
- color: #000;\r
- border-color: orange;\r
- background: orange;\r
- }\r
-\r
- &.reversed{\r
- color: #F5F5F5;\r
- // background: #393939;\r
- border-color:orange;\r
- width: 20px;\r
- height: 20px;\r
- line-height: 16px;\r
- margin-top: 4px;\r
- font-size: 12px;\r
- }\r
-}\r
-\r
-.modalIconOver{\r
- position: absolute!important;\r
- top: 9px;\r
- left: -16px;\r
-}\r
-/* --------------------------------------------------------------------------------- YANG UI BUTTONS - END */\r
-\r
-\r
-\r
-/* --------------------------------------------------------------------------------- YANG UI TYPE UNION */\r
-.unionType.tabs{\r
- margin: 10px 0;\r
-\r
- .nav-tabs{\r
- border: 0;\r
-\r
- li{\r
- margin-right: 2px;\r
-\r
- a{\r
- border: 0;\r
- }\r
-\r
- &.btn-selected, &:hover{\r
-\r
- a{\r
- background: transparent;\r
- }\r
- }\r
- }\r
- }\r
-\r
- div.tab-content{\r
- margin: 0;\r
- }\r
-}\r
-/* --------------------------------------------------------------------------------- YANG UI TYPE UNION - END */\r
-\r
-\r
-@media screen and (max-height: 700px) {\r
- .topologyContainer.previewContainer.historyPopUp{\r
- height: 80%;\r
-\r
- .tab-content{\r
- height: 82%;\r
- .tab-pane{\r
- height: 100%;\r
- }\r
- }\r
-\r
- .tabs{\r
- height: 95%;\r
- }\r
-\r
- .tab-pane .tableWrapper{\r
- max-height: 100%;\r
- height: 100%;\r
- }\r
- }\r
-}\r
-\r
-.resizable-s {\r
- > .ui-resizable-e{\r
- display: none!important;\r
- }\r
-\r
- > .ui-resizable-se{\r
- display: none!important;\r
- }\r
-}\r
-\r
-\r
-\r
-.ui-resizable-handle {\r
- &.ui-resizable-se{\r
- width: 20px;\r
- height: 20px;\r
- position: absolute;\r
- background: transparent url('images/resize_handle.gif') no-repeat;\r
- cursor: se-resize;\r
- }\r
-}\r
-\r
-\r
-.ui-resizable-s {\r
- cursor: s-resize;\r
- height: 7px;\r
- width: 100%;\r
- bottom: 0px;\r
- position: absolute;\r
- left: 0;\r
-}\r
-\r
-.ui-resizable-se {\r
- right: 5px;\r
- bottom: 5px;\r
-}\r
-\r
-.mountPointsWrapper {\r
- height: calc(~"100% - 45px");\r
-}\r
+++ /dev/null
-var modules = [\r
- 'ZeroClipboard',\r
- 'angularAMD',\r
- 'app/routingConfig',\r
- 'ui-bootstrap',\r
- 'Restangular',\r
- 'angular-translate',\r
- 'jquery-ui',\r
- 'codemirror',\r
- 'codeMirror-showHint',\r
- 'codeMirror-jsonParametersHint',\r
- 'codeMirror-javascriptMode',\r
- 'codeMirror-matchBrackets',\r
- 'ngClip',\r
- 'angular-translate-loader-partial',\r
- 'common/yangutils/yangutils.module'\r
- ],\r
- ZeroClipboard = null;\r
-\r
-define(modules, function(ZC) {\r
- ZeroClipboard = ZC;\r
-\r
- var yangui = angular.module('app.yangui', ['ui.router.state','app.core', 'app.common.yangUtils', 'ui.bootstrap', 'restangular', 'pascalprecht.translate', 'ngClipboard']);\r
-\r
- yangui.register = yangui;\r
-\r
- yangui.config(function ($stateProvider, $compileProvider, $controllerProvider, $provide, $filterProvider, $translateProvider,$translatePartialLoaderProvider, NavHelperProvider, ngClipProvider) {\r
-\r
- $translatePartialLoaderProvider.addPart('app/yangui/assets/data/locale');\r
-\r
- ngClipProvider.setPath("assets/ZeroClipboard.swf");\r
-\r
- yangui.register = {\r
- directive : $compileProvider.directive,\r
- controller : $controllerProvider.register,\r
- factory : $provide.factory,\r
- filter: $filterProvider.register,\r
- service : $provide.service,\r
- constant : $provide.constant\r
- };\r
-\r
- NavHelperProvider.addControllerUrl('app/yangui/controllers/yangui.controller');\r
- NavHelperProvider.addToMenu('yangui', {\r
- "link": "#/yangui/index",\r
- "active": "main.yangui",\r
- "title": "Yang UI",\r
- "icon": "icon-level-down",\r
- "page": {\r
- "title": "Yang UI",\r
- "description": "Yang UI"\r
- }\r
- });\r
-\r
- var access = routingConfig.accessLevels;\r
- $stateProvider.state('main.yangui', {\r
- url: 'yangui',\r
- abstract: true,\r
- views : {\r
- 'content' : {\r
- templateUrl: 'src/app/yangui/views/root.tpl.html'\r
- }\r
- }\r
- });\r
-\r
- $stateProvider.state('main.yangui.index', {\r
- url: '/index',\r
- access: access.admin,\r
- views: {\r
- '': {\r
- controller: 'YanguiCtrl',\r
- templateUrl: 'src/app/yangui/views/index.tpl.html'\r
- }\r
- }\r
- });\r
- });\r
-\r
- return yangui;\r
-});\r
+++ /dev/null
-/**\r
- * Copyright (c) 4.7.2014 Cisco. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-define(['app/yangui/yangui.test.module.loader', 'common/layout/layout.module'], function () {\r
- 'use strict';\r
-\r
- describe('yangui', function () {\r
- var yangUtils,\r
- nodeWrapper,\r
- Restangular,\r
- reqBuilder,\r
- apiConnector,\r
- yinParser,\r
- yangParser,\r
- constants;\r
-\r
-\r
- beforeEach(angular.mock.module('app.common.layout'));\r
- beforeEach(angular.mock.module('app.yangui'));\r
-\r
- beforeEach(angular.mock.inject(\r
- function (_YangConfigRestangular_, _yangUtils_, _nodeWrapper_, _reqBuilder_, _apiConnector_, _yinParser_,\r
- _constants_) {\r
- yangUtils = _yangUtils_;\r
- nodeWrapper = _nodeWrapper_;\r
- Restangular = _YangConfigRestangular_;\r
- reqBuilder = _reqBuilder_;\r
- apiConnector = _apiConnector_;\r
- yinParser = _yinParser_;\r
- constants = _constants_;\r
-\r
- yangParser = yinParser.__test.yangParser;\r
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));\r
- }\r
- ));\r
-\r
- describe( 'ContainerCtrl', function () {\r
- var containerCtrl,\r
- $scope,\r
- node;\r
-\r
- beforeEach( inject( function ($controller, $rootScope ) {\r
- $scope = $rootScope.$new();\r
-\r
- var node = yinParser.__test.yangParser.createNewNode('C', 'container', null);\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
-\r
- containerCtrl = $controller( 'ContainerCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('toggleExpanded', inject( function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- }));\r
-\r
- });\r
-\r
- describe( 'CaseCtrl', function () {\r
- var $scope,\r
- node;\r
-\r
- beforeEach( inject( function ($rootScope ) {\r
- $scope = $rootScope.$new();\r
-\r
- node = yinParser.__test.yangParser.createNewNode('CASE', 'case', null);\r
- nodeWrapper.wrapAll(node);\r
-\r
- $scope.case = node;\r
- }));\r
-\r
- it('empty - 0 children', inject( function ($controller) {\r
- var CaseCtrl = $controller('CaseCtrl', { $scope: $scope });\r
- expect($scope.empty).toBe(true);\r
- }));\r
-\r
- it('empty - 1 child w/ 0 children', inject( function ($controller) {\r
- var nodeChild = yinParser.__test.yangParser.createNewNode('CONT', 'container', $scope.case);\r
- nodeWrapper.wrapAll(nodeChild);\r
- var CaseCtrl = $controller( 'CaseCtrl', { $scope: $scope });\r
- expect($scope.empty).toBe(true);\r
- }));\r
-\r
- it('empty - 1 child w/ 1 children', inject( function ($controller) {\r
- var nodeChild = yinParser.__test.yangParser.createNewNode('CONT', 'container', $scope.case);\r
- var nodeChildChild = yinParser.__test.yangParser.createNewNode('LEAF', 'leaf', nodeChild);\r
- nodeWrapper.wrapAll(nodeChild);\r
- nodeWrapper.wrapAll(nodeChildChild);\r
- var CaseCtrl = $controller( 'CaseCtrl', { $scope: $scope });\r
- expect($scope.empty).toBe(false);\r
- }));\r
-\r
- });\r
-\r
- describe('LeafListCtrl', function () {\r
- var node,\r
- leafListCtrl,\r
- $scope,\r
- testValue;\r
-\r
- beforeEach(angular.mock.inject( function ($controller, $rootScope ) {\r
- $scope = $rootScope.$new();\r
- var node = yinParser.__test.yangParser.createNewNode('LEAFLIST', 'leaf-list', null);\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
- $scope.preview = function () {\r
- testValue = true;\r
- };\r
-\r
- leafListCtrl = $controller('LeafListCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('addListElem', function () {\r
- $scope.addListElem();\r
- $scope.addListElem();\r
- $scope.addListElem();\r
-\r
- expect($scope.node.value.length).toBe(3);\r
- });\r
-\r
- it('removeListElem', function () {\r
- $scope.addListElem();\r
- $scope.addListElem();\r
- $scope.addListElem();\r
-\r
- $scope.removeListElem($scope.node.value[1]);\r
-\r
- expect($scope.node.value.length).toBe(2);\r
- });\r
-\r
- it('changed', function () {\r
- testValue = false;\r
- $scope.changed();\r
- expect(testValue).toBe(true);\r
- });\r
-\r
- it('toggleExpanded', inject( function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- }));\r
- });\r
-\r
- describe('ChoiceCtrl', function () {\r
- var ctrl,\r
- $scope,\r
- previewCalled;\r
-\r
- beforeEach( angular.mock.inject( function ($controller, $rootScope ) {\r
- $scope = $rootScope.$new();\r
- var node = yinParser.__test.yangParser.createNewNode('N', 'choice', null);\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
-\r
- ctrl = $controller('ChoiceCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('toggleExpanded', inject( function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- }));\r
- });\r
-\r
- describe('RpcCtrl', function () {\r
- var ctrl,\r
- $scope,\r
- previewCalled;\r
-\r
- beforeEach( angular.mock.inject( function ($controller, $rootScope ) {\r
- $scope = $rootScope.$new();\r
- var node = yinParser.__test.yangParser.createNewNode('N', 'rpc', null);\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
-\r
- ctrl = $controller('RpcCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('toggleExpanded', inject( function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- }));\r
- });\r
-\r
- describe('InputCtrl', function () {\r
- var ctrl,\r
- $scope,\r
- previewCalled;\r
-\r
- beforeEach( angular.mock.inject( function ($controller, $rootScope ) {\r
- $scope = $rootScope.$new();\r
- var node = yinParser.__test.yangParser.createNewNode('N', 'input', null);\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
-\r
- ctrl = $controller('InputCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('toggleExpanded', function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- });\r
- });\r
-\r
- describe('OutputCtrl', function () {\r
- var ctrl,\r
- $scope,\r
- previewCalled;\r
-\r
- beforeEach( angular.mock.inject( function ($controller, $rootScope ) {\r
- $scope = $rootScope.$new();\r
- var node = yinParser.__test.yangParser.createNewNode('N', 'output', null);\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
-\r
- ctrl = $controller('OutputCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('toggleExpanded', inject( function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- }));\r
- });\r
-\r
- describe('ListCtrl', function () {\r
- var node,\r
- listCtrl,\r
- $scope,\r
- testValue;\r
-\r
- beforeEach(angular.mock.inject( function ($controller, $rootScope, _constants_ ) {\r
- $scope = $rootScope.$new();\r
- var node = yinParser.__test.yangParser.createNewNode('LIST', 'list', null);\r
- yinParser.__test.yangParser.createNewNode(\r
- 'REALLYREALLYLONGNAMEFORLEAFTHATISINKEY',\r
- 'leaf',\r
- node,\r
- _constants_.NODE_UI_DISPLAY\r
- );\r
- yinParser.__test.yangParser.createNewNode(\r
- 'REALLYREALLYLONGNAMEFORLEAFTHATISINKEY',\r
- 'key',\r
- node,\r
- _constants_.NODE_ALTER\r
- );\r
- nodeWrapper.wrapAll(node);\r
- $scope.node = node;\r
- $scope.preview = function () {\r
- testValue = true;\r
- };\r
-\r
- listCtrl = $controller('ListCtrl', { $scope: $scope });\r
- }));\r
-\r
- it('addListElem', function () {\r
- $scope.addListElem();\r
- $scope.addListElem();\r
-\r
- expect($scope.node.actElemIndex).toBe(1);\r
- expect($scope.node.listData.length).toBe(2);\r
- });\r
-\r
- it('removeListElem', function () {\r
- testValue = false;\r
- $scope.addListElem();\r
- $scope.addListElem();\r
- $scope.removeListElem($scope.node.listData[0]);\r
-\r
- expect($scope.node.listData.length).toBe(1);\r
- expect(testValue).toBe(true);\r
- });\r
-\r
- it('toggleExpanded', inject( function () {\r
- $scope.node.expanded = false;\r
-\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(true);\r
- $scope.toggleExpanded();\r
- expect($scope.node.expanded).toBe(false);\r
- }));\r
-\r
- // fix when filtering is done\r
- // it('shiftDisplayNext', function() {\r
- // for(var i = 0; i < 10; i++) {\r
- // $scope.addListElem();\r
- // }\r
-\r
- // expect($scope.currentDisplayIndex).toBe(1);\r
- // $scope.shiftDisplayNext();\r
- // expect($scope.currentDisplayIndex).toBe(4);\r
- // $scope.shiftDisplayNext();\r
- // expect($scope.currentDisplayIndex).toBe(7);\r
- // $scope.shiftDisplayNext();\r
- // expect($scope.currentDisplayIndex).toBe(8);\r
- // });\r
-\r
- // it('shiftDisplayPrev', function() {\r
- // for(var i = 0; i < 10; i++) {\r
- // $scope.addListElem();\r
- // }\r
-\r
- // $scope.shiftDisplayNext();\r
- // $scope.shiftDisplayNext();\r
- // $scope.shiftDisplayNext();\r
- // $scope.shiftDisplayPrev();\r
- // expect($scope.currentDisplayIndex).toBe(5);\r
- // $scope.shiftDisplayPrev();\r
- // expect($scope.currentDisplayIndex).toBe(2);\r
- // $scope.shiftDisplayPrev();\r
- // expect($scope.currentDisplayIndex).toBe(1);\r
- // });\r
-\r
- // it('showNextButton', function() {\r
- // for(var i = 0; i < 10; i++) {\r
- // $scope.addListElem();\r
- // }\r
-\r
- // expect($scope.showNextButton()).toBe(true);\r
- // $scope.shiftDisplayNext();\r
- // $scope.shiftDisplayNext();\r
- // $scope.shiftDisplayNext();\r
- // expect($scope.showNextButton()).toBe(false);\r
- // });\r
-\r
- // it('showPrevButton', function() {\r
- // for(var i = 0; i < 10; i++) {\r
- // $scope.addListElem();\r
- // }\r
-\r
- // expect($scope.showPrevButton()).toBe(false);\r
- // $scope.shiftDisplayNext();\r
- // expect($scope.showNextButton()).toBe(true);\r
- // });\r
-\r
- // it('showModalWin', function() {\r
- // var showModelBefore = $scope.showModalWin;\r
-\r
- // $scope.showModalWin();\r
- // expect($scope.showNextButton()).toBe(!showModelBefore);\r
- // });\r
-\r
- it('getListName', function () {\r
- $scope.currentDisplayIndex = 0;\r
- $scope.addListElem();\r
- $scope.node.actElemStructure.children[0].value = 12345;\r
- $scope.node.changeActElementData(0);\r
-\r
- var createResult = $scope.getListName(0, false),\r
- expectedName = ' <' +\r
- $scope.node.actElemStructure.children[0].label +\r
- ':' +\r
- $scope.node.actElemStructure.children[0].value +\r
- '>';\r
-\r
- expect(createResult.tooltip).toBe(expectedName);\r
- expect(createResult.name).toBe(expectedName.substring(0, 30) + '...');\r
-\r
- $scope.node.actElemStructure.children[0].label = 'SHORTNAME';\r
- $scope.node.refKey[0] = $scope.node.actElemStructure.children[0];\r
- $scope.node.changeActElementData(0);\r
-\r
- createResult = $scope.getListName(0, false);\r
- expectedName = ' <' +\r
- $scope.node.actElemStructure.children[0].label +\r
- ':' +\r
- $scope.node.actElemStructure.children[0].value +\r
- '>';\r
- expect(createResult.tooltip).toBe('');\r
- expect(createResult.name).toBe(expectedName);\r
-\r
- $scope.node.actElemStructure.children[0].value = '';\r
- $scope.node.changeActElementData(0);\r
-\r
- createResult = $scope.getListName(0, true);\r
- expectedName = '[0]';\r
- expect(createResult.tooltip).toBe('');\r
- expect(createResult.name).toBe(expectedName);\r
- });\r
-\r
- });\r
-\r
- describe('YanguiCtrl', function () {\r
- var yanguiCtrl,\r
- $scope,\r
- $timeout,\r
- $httpBackend,\r
- Restangular,\r
- pathUtils,\r
- constants,\r
- custFunct;\r
-\r
- beforeEach(angular.mock.inject( function (\r
- $controller, $rootScope, _$timeout_, _$http_, _$httpBackend_,\r
- _YangConfigRestangular_, _pathUtils_, _constants_, _custFunct_\r
- ) {\r
- $scope = $rootScope.$new();\r
- $httpBackend = _$httpBackend_;\r
- pathUtils = _pathUtils_;\r
- constants = _constants_;\r
- custFunct = _custFunct_;\r
- $timeout = _$timeout_;\r
-\r
- yangUtils.generateNodesToApis = function (success, error) {\r
- var apis,\r
- allNodes = [],\r
- pathString = '/config/M:N/',\r
- pathStringOper = '/operational/M:N/';\r
-\r
- var subApi1 = new apiConnector.__test.SubApi(pathString, ['GET', 'PUT']);\r
- var subApi2 = new apiConnector.__test.SubApi(pathStringOper, ['GET', 'PUT']);\r
-\r
- subApi1.setPathArray(pathUtils.translate(pathString, null, null));\r
- subApi2.setPathArray(pathUtils.translate(pathStringOper, null, null));\r
- var leaf = yinParser.__test.yangParser.createNewNode(\r
- 'LEAF',\r
- 'leaf',\r
- null,\r
- constants.NODE_UI_DISPLAY\r
- );\r
- nodeWrapper.wrapAll(leaf);\r
- subApi1.setNode(leaf);\r
- subApi2.setNode(leaf);\r
-\r
- apis = [{ basePath: 'dummyBase', module: 'M', revision: '1', subApis: [subApi1, subApi2] }];\r
- success(apis, allNodes);\r
- };\r
-\r
- // $httpBackend.when('PUT', 'dummyBase/config/M:N').respond({});\r
-\r
- yanguiCtrl = $controller('YanguiCtrl', { $scope: $scope, $rootScope: $rootScope, $http: _$http_,\r
- Restangular: Restangular,\r
- yangUtils: yangUtils,\r
- reqBuilder: reqBuilder,\r
- apiConnector: apiConnector,\r
- });\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
- }));\r
-\r
- afterEach(function () {\r
- $httpBackend.verifyNoOutstandingExpectation();\r
- $httpBackend.verifyNoOutstandingRequest();\r
- });\r
-\r
- it('status callbacks', function (){\r
- var e = 'dummyString';\r
- $scope.status = {};\r
- $scope.__test.processingModulesCallback();\r
- expect($scope.status.isWorking).toBe(true);\r
- $scope.status = {};\r
- $scope.__test.processingModulesSuccessCallback();\r
- expect($scope.status.type).toBe('success');\r
- $scope.status = {};\r
- $scope.__test.processingModulesErrorCallback(e);\r
- expect($scope.status.type).toBe('danger');\r
- $scope.status = {};\r
- $scope.__test.requestWorkingCallback();\r
- expect($scope.status.isWorking).toBe(true);\r
- $scope.status = {};\r
- $scope.__test.requestSuccessCallback();\r
- expect($scope.status.type).toBe('success');\r
- $scope.status = {};\r
- $scope.__test.requestErrorCallback();\r
- expect($scope.status.type).toBe('danger');\r
- });\r
-\r
- it('dismissStatus', function () {\r
- var emptyObj = {};\r
- $scope.status = {\r
- type: 'dummyType',\r
- };\r
-\r
- expect($scope.status.type).toBe('dummyType');\r
- $scope.dismissStatus();\r
- expect($scope.status.type).toBeUndefined();\r
- });\r
-\r
- it('loadApis', function () {\r
- $scope.__test.loadApis();\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
- expect($scope.apis.length).toBe(1);\r
- expect($scope.apis[0].subApis.length).toBe(2);\r
- });\r
-\r
- it('loadApis - error', function () {\r
- yangUtils.generateNodesToApis = function (success, error) {\r
- error('dummyError');\r
- };\r
- $scope.__test.loadApis();\r
- });\r
-\r
- it('loadController', function () {\r
- $scope.loadController();\r
-\r
- // $httpBackend.flush();\r
- // $timeout.flush();\r
- expect($scope.apis.length).toBe(1);\r
- expect($scope.apis[0].subApis.length).toBe(2);\r
- });\r
-\r
- it('setApiNode', function () {\r
- var branch = { indexApi: 0, indexSubApi: 0 };\r
- $scope.setApiNode(branch.indexApi, branch.indexSubApi);\r
- expect($scope.selApi).toBe($scope.apis[branch.indexApi]);\r
- expect($scope.selSubApi).toBe($scope.apis[branch.indexApi].subApis[branch.indexSubApi]);\r
- expect($scope.apiType).toBe('');\r
- expect($scope.node).toBe($scope.apis[branch.indexApi].subApis[branch.indexSubApi].node);\r
-\r
- $scope.setApiNode();\r
- expect($scope.selApi).toBe(null);\r
- expect($scope.selSubApi).toBe(null);\r
- expect($scope.node).toBe(null);\r
-\r
- branch = { indexApi: 0, indexSubApi: 1 };\r
- $scope.setApiNode(branch.indexApi, branch.indexSubApi);\r
- expect($scope.selApi).toBe($scope.apis[branch.indexApi]);\r
- expect($scope.selSubApi).toBe($scope.apis[branch.indexApi].subApis[branch.indexSubApi]);\r
- expect($scope.apiType).toBe('operational/');\r
- expect($scope.node).toBe($scope.apis[branch.indexApi].subApis[branch.indexSubApi].node);\r
- });\r
-\r
- it('setNode', function () {\r
- $scope.selSubApi = { node: $scope.apis[0].subApis[0].node };\r
-\r
- $scope.setNode();\r
- expect($scope.node).toBe($scope.selSubApi.node);\r
- });\r
-\r
- });\r
- });\r
-});\r
+++ /dev/null
-define(['app/yangui/yangui.module', \r
- 'app/yangui/yangui.controller', \r
- 'app/yangui/yangui.services'\r
- ], function() {});
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2014 Inocybe Technologies, and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>dlux-parent</artifactId>
- <version>0.7.0-SNAPSHOT</version>
- <relativePath>../../</relativePath>
- </parent>
-
- <artifactId>dlux.yangvisualizer.resources</artifactId>
- <name>${project.artifactId}</name>
- <description>Yang Visualizer Module Resources</description>
- <packaging>jar</packaging>
-
-</project>
+++ /dev/null
-{
- "YANGVISUALIZER_MENU_LABEL": "Yang Visualizer",
- "YANGVISUALIZER_NODE_NAME": "name",
- "YANGVISUALIZER_NODE_TYPE": "type",
- "PROCESSING_NODES": "Loading nodes from controller",
- "PROCESSING_NODES_SUCCESS": "Loading completed successfully",
- "PROCESSING_NODES_ERROR": "Error in loading nodes... ",
- "YANGVISUALIZER_MODEL": "Model",
- "YANGVISUALIZER_SET_LVL": "Model depth from top",
- "YANGVISUALIZER_SHOW_NODES": "show all nodes",
- "YANGVISUALIZER_HIDE_NODES": "hide nodes",
- "YANGVISUALIZER_LABEL_VIEW": "View",
- "YANGVISUALIZER_SHOW_DEFAULT": "Default",
- "YANGVISUALIZER_SHOW_TYPES": "Types",
- "YANGVISUALIZER_SHOW_MODULES": "Modules",
- "YANGVISUALIZER_SHOW_NAMESPACES": "Namespaces",
- "YANGVISUALIZER_LABEL_LEGEND": "Legend",
- "YANGVISUALIZER_LABEL_SEL_NODE": "Selected node",
- "YANGVISUALIZER_SEL_NODE_DETAIL": "Detail info of selected node",
- "YANGVISUALIZER_TD_ID": "ID",
- "YANGVISUALIZER_TD_NAME": "Name",
- "YANGVISUALIZER_TD_TYPE": "Type",
- "YANGVISUALIZER_TD_MODULE": "Module",
- "YANGVISUALIZER_TD_NAMESPACE": "Namespace",
- "YANGVISUALIZER_TD_REVISION": "Revision",
- "YANGVISUALIZER_LABEL_CHILD_NODE": "Children nodes",
- "YANGVISUALIZER_LABEL_PAR_NODE": "Path to root",
- "YANGVISUALIZER_SHOW_ALL" : "Display all labels",
- "YANGVISUALIZER_SAVE_MODEL": "save model layout",
- "YANGVISUALIZER_LOAD_MODEL" : "load model layout",
- "YANGVISUALIZER_RESET_MODEL" : "reset model layout",
- "YANGVISUALIZER_SHOW_WHOLE_MODEL" : "Show whole model",
- "YANGVISUALIZER_BTN_BACK" : "Back",
- "YANGVISUALIZER_BTN_TT_HIGHLIGHT_TYPE" : "Highlight specific type of nodes",
- "YANGVISUALIZER_BTN_TT_REMOVE_HIGHLIGHTING_TYPE" : "Remove highlighting of specific type of nodes"
-
-}
\ No newline at end of file
+++ /dev/null
-<div class="yangVisualizer ">
- <div class="topLine col-md-12">
- <div class="clearfix">
- <div class="col-md-2">{{ 'YANGVISUALIZER_MODEL' | translate }} :</div>
- <div class="col-md-4">
- <select ng-model="currentTopologyNode" ng-change="updateTopologyData(null, true)" ng-options="node.label for node in filteredNodes | orderBy:'label'">
- <option value="">-</option>
- </select>
- </div>
- </div>
-
- <div class="clearfix">
- <div class="col-md-2">{{ 'YANGVISUALIZER_SET_LVL' | translate }} :</div>
- <div class="col-md-4 slider">
- <input ng-model="sliderValue" type="text" id="mySlider1" slider ng-change="updateTopologyData(null)" options="sliderSettings" />
- </div>
- </div>
-
- <div class="clearfix" ng-controller="layoutCtrl">
- <div class="col-md-4 col-md-offset-2">
- <button ng-show="currentTopologyNode" class="btn btn-orange btn-slim" ng-click="saveLayout()">{{ 'YANGVISUALIZER_SAVE_MODEL' | translate }}</button>
- <button ng-show="modelLayout" class="btn btn-orange btn-slim" ng-click="loadLayout()">{{ 'YANGVISUALIZER_LOAD_MODEL' | translate }}</button>
- <button ng-show="currentTopologyNode" class="btn btn-orange btn-slim" ng-click="resetLayout()">{{ 'YANGVISUALIZER_RESET_MODEL' | translate }}</button>
- </div>
- </div>
-
-
-
- </div>
- <div class="sigma col-md-12">
- <div class="viewNav">
- <ul class="navWrapper">
- <li>{{ 'YANGVISUALIZER_LABEL_VIEW' | translate }} : </li>
-
- <li><span class="active" ng-click="setColorScheme($event,'default')">{{ 'YANGVISUALIZER_SHOW_DEFAULT' | translate }}</span></li>
- <li><span ng-click="setColorScheme($event,'type')">{{ 'YANGVISUALIZER_SHOW_TYPES' | translate }}</span></li>
- <li><span ng-click="setColorScheme($event,'module')">{{ 'YANGVISUALIZER_SHOW_MODULES' | translate }}</span></li>
- <li><span ng-click="setColorScheme($event,'namespace')">{{ 'YANGVISUALIZER_SHOW_NAMESPACES' | translate }}</span></li>
- </ul>
- </div>
- <div class="viewNav margin-legend">
- <div class="clear"></div>
- <div class="legend" ng-show="legend">
- <ul ng-init="showText = true">
- <li>
- <span>{{ 'YANGVISUALIZER_LABEL_LEGEND' | translate }} : </span>
- </li>
- <li>
- <button ng-show="isSelectedSpecificType" class="btn btn-orange btn-slim btn-graph" ng-click="resetSize()" tooltip="{{ 'YANGVISUALIZER_BTN_TT_REMOVE_HIGHLIGHTING_TYPE' | translate }}">
- <i class="icon-rotate-right"></i>
- </button>
- <span>{{ 'YANGVISUALIZER_SHOW_ALL' | translate }}</span><input class="showChckbx" type="checkbox" ng-model="showText"></li>
- <li ng-repeat="(key, value) in legend">
- <div class="itemWrapper left cursor-pointer" ng-click="clickLegend(value, key)" tooltip="{{ 'YANGVISUALIZER_BTN_TT_HIGHLIGHT_TYPE' | translate }}">
- <div class="color left" style="background: {{value}};"></div>
- <div class="left text" ng-hide="!showText">{{key}}</div>
- <div class="clear"></div>
- </div>
- <div class="clear"></div>
- </li>
- </ul>
- </div>
- </div>
- <sigma-topology drag-nodes="true" topology-data="topologyData" trigger-resize-sigma="triggerResizeSigma" panel="panel" topology-custfunc="topologyCustfunc"></sigma-toppology>
- </div>
-
- <!-- RIGHT PANEL -->
- <div class="rightPanel {{ panel.show ? 'panel-show' : 'panel-hide' }} col-md-6">
- <div class="topButtons">
- <button class="btn btn-show add-row btn-orange btn-slim btn-show-custom" ng-click='triggerExpanded(panel, triggerResize)'>
- <i class="icon-caret-right" ng-show="panel.show"></i>
- <i class="icon-caret-left" ng-show="!panel.show"></i>
- </button>
- <div class="clear mt20"></div>
- <!-- <button class="btn add-row btn-orange btn-slim ng-scope" ng-click="expandAllNodes()">
- {{ expandedNodes ? 'YANGVISUALIZER_HIDE_NODES' : 'YANGVISUALIZER_SHOW_NODES' | translate }}
- </button> -->
- <button class="btn btn-orange btn-slim btn-graph" ng-click="sigma.resetZoom()">
- <i class="icon-resize-full"></i>
- </button>
- </div>
-
- <div class="inner-content">
- <table>
- <thead>
- <th colspan="2">{{ 'YANGVISUALIZER_SEL_NODE_DETAIL' | translate }}</th>
- </thead>
- <tbody>
- <tr>
- <td>{{ 'YANGVISUALIZER_TD_ID' | translate }}</td>
- <td>{{ selectedNode.id }}</td>
- </tr>
- <tr>
- <td>{{ 'YANGVISUALIZER_TD_NAME' | translate }}</td>
- <td>{{ selectedNode.label }}</td>
- </tr>
- <tr>
- <td>{{ 'YANGVISUALIZER_TD_TYPE' | translate }}</td>
- <td>{{ selectedNode.type }}</td>
- </tr>
- <tr>
- <td>{{ 'YANGVISUALIZER_TD_MODULE' | translate }}</td>
- <td>{{ selectedNode.module }}</td>
- </tr>
- <tr>
- <td>{{ 'YANGVISUALIZER_TD_NAMESPACE' | translate }}</td>
- <td>{{ selectedNode.namespace }}</td>
- </tr>
- <tr>
- <td>{{ 'YANGVISUALIZER_TD_REVISION' | translate }}</td>
- <td>{{ selectedNode.moduleRevision }}</td>
- </tr>
- </tbody>
- </table>
-
- <label>{{ 'YANGVISUALIZER_LABEL_SEL_NODE' | translate }} :</label>
- <table>
- <thead>
- <tr>
- <th>{{ 'YANGVISUALIZER_TD_ID' | translate }}</th>
- <th class="bigger">{{ 'YANGVISUALIZER_TD_NAME' | translate }}</th>
- <th>{{ 'YANGVISUALIZER_TD_TYPE' | translate }}</th>
- <th class="bigger">{{ 'YANGVISUALIZER_TD_MODULE' | translate }}</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>{{ selectedNode.id }}</td>
- <td>{{ selectedNode.label.length > 30 ? selectedNode.label.substring(0,26) + '...' : selectedNode.label }}</td>
- <td>{{ selectedNode.type }}</td>
- <td>{{ selectedNode.module.length > 30 ? selectedNode.module.substring(0,26) + '...' : selectedNode.module }}</td>
- </tr>
- </tbody>
- </table>
-
- <label>{{ 'YANGVISUALIZER_LABEL_PAR_NODE' | translate }} :</label>
- <table>
- <thead>
- <tr>
- <th>{{ 'YANGVISUALIZER_TD_ID' | translate }}</th>
- <th class="bigger">{{ 'YANGVISUALIZER_TD_NAME' | translate }}</th>
- <th>{{ 'YANGVISUALIZER_TD_TYPE' | translate }}</th>
- <th class="bigger">{{ 'YANGVISUALIZER_TD_MODULE' | translate }}</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="node in parentNodes.list track by $index">
- <td><span class="link" ng-click="zoomToNode(node.graphId)">{{ node.id }}</span></td>
- <td>{{ node.label.length > 30 ? node.label.substring(0,26) + '...' : node.label }}</td>
- <td>{{ node.type }}</td>
- <td>{{ node.module.length > 30 ? node.module.substring(0,26) + '...' : node.module }}</td>
- </tr>
- </tbody>
- </table>
-
- <label>{{ 'YANGVISUALIZER_LABEL_CHILD_NODE' | translate }} :</label>
- <table>
- <thead>
- <tr>
- <th>{{ 'YANGVISUALIZER_TD_ID' | translate }}</th>
- <th class="bigger">{{ 'YANGVISUALIZER_TD_NAME' | translate }}</th>
- <th>{{ 'YANGVISUALIZER_TD_TYPE' | translate }}</th>
- <th class="bigger">{{ 'YANGVISUALIZER_TD_MODULE' | translate }}</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="node in childrenNodes.list track by $index">
- <td><span class="link" ng-click="zoomToNode(node.graphId)">{{ node.id }}</span></td>
- <td>{{ node.label.length > 30 ? node.label.substring(0,26) + '...' : node.label }}</td>
- <td>{{ node.type }}</td>
- <td>{{ node.module.length > 30 ? node.module.substring(0,26) + '...' : node.module }}</td>
- </tr>
- </tbody>
- </table>
-
- <button ng-show="clickedNodesHistory.length > 1" ng-click="backToNode()" class="btn btn-orange btn-slim">{{ 'YANGVISUALIZER_BTN_BACK' | translate }}</button>
- </div>
- </div>
-
- <div class="clear"></div>
-
-</div>
\ No newline at end of file
+++ /dev/null
-<div class="main" ui-view></div>
+++ /dev/null
-define(['app/yangvisualizer/yangvisualizer.module', 'app/yangvisualizer/yangvisualizer.services', 'common/sigmatopology/sigma.directive'], function(yangvisualizer) {
-
- yangvisualizer.register.controller('yangvisualizerCtrl', ['$scope', '$rootScope', '$http', 'YangConfigRestangular','visualizerUtils', 'DesignVisualizerFactory', 'yvConstants',
- function ($scope, $rootScope, $http, Restangular, visualizerUtils, DesignVisualizerFactory, yvConstants) {
- $rootScope['section_logo'] = 'logo_yangvis';
-
- $scope.currentPath = './assets/views/yangvisualizerCtrl';
- $scope.topologyData = { nodes: [], edges: []};
- $scope.currentTopologyNode = {};
- $scope.filteredNodes = [];
- $scope.selectedProperty = null;
- $scope.selectedNode = null;
- $scope.isSelectedSpecificType = false;
- $scope.childrenNodes = {
- list: [],
- show: true
- };
- $scope.parentNodes = {
- list: [],
- show: true
- };
- $scope.panel = {
- show: false
- };
- $scope.sigma = null;
- $scope.triggerResizeSigma = false;
- $scope.legend = [];
-
- $scope.sliderValue = 4;
- $scope.sliderSettings = yvConstants.sliderSettings;
- $scope.clickedNodesHistory = [];
-
- var lastSelectedNode = null,
- maxLvlToSHow = 4,
- getSlowDownNumFun;
-
- var processingNodesCallback = function() {
- $scope.status = {
- isWorking: true,
- type: 'warning',
- msg: 'PROCESSING_NODES'
- };
- };
-
- var processingNodesSuccessCallback = function() {
- $scope.status = {
- type: 'success',
- msg: 'PROCESSING_NODES_SUCCESS'
- };
- };
-
- var processingNodesErrorCallback = function(e) {
- $scope.status = {
- type: 'danger',
- msg: 'PROCESSING_NODES_ERROR',
- rawMsg: e.toString()
- };
- };
-
- var expandNodeFunc = function(expandNode, mlts){
- var nodeCounter = 0;
- expandNode.expand = false;
- expandNode.size = expandNode.node.parent !== null ? 7 : 20;
- expandNode.label = expandNode.label.substring(expandNode.label.indexOf(']') + 2);
- expandNode.node.children.forEach(function(child){
- var topoData = visualizerUtils.getTopologyData(child, mlts, false, expandNode.lvl),
- edge,
- position = -1;
-
- nodeCounter = nodeCounter + topoData.nodes.length;
-
- topoData.nodes.forEach(function(node){
- position = -position;
- node.x = (expandNode.x + (Math.floor(Math.random() * topoData.nodes.length * 5) + 2)) * position;
- node.y = (expandNode.y + (Math.floor(Math.random() * topoData.nodes.length * 5) + 2)) * position;
- node.size = node.node.children.length && node.expand ? 12 : 7;
- node.parent = child.graphId;
- $scope.sigma.graph.addNode(node);
- });
-
- edge = visualizerUtils.getEdge(expandNode.node, child);
- $scope.sigma.graph.addEdge(edge);
-
- topoData.links.forEach(function(edge){
- $scope.sigma.graph.addEdge(edge);
- });
- });
-
- var configAtlas = {
- adjustSizes: true,
- // scalingRatio: 10,
- gravity: 1,
- slowDown: getSlowDownNumFun(nodeCounter)
- };
-
- $scope.sigma.startForceAtlas2(configAtlas);
- $scope.setColorScheme(null, $scope.selectedProperty);
-
- };
-
- var collapseNodeFunc = function(collapseNode){
- var nodes = $scope.sigma.graph.nodes(),
- nodeChildren = visualizerUtils.getAllChildrenArray(collapseNode);
-
-
- if ( nodeChildren.nodesArray.length ) {
- nodeChildren.nodesArray.forEach(function(id){
- $scope.sigma.graph.dropNode(id);
- });
- collapseNode.expand = true;
- collapseNode.label = '['+ nodeChildren.numOfChildren + '] ' + (collapseNode.label.length > 20 ? collapseNode.label.substring(0, 17) + '...' : collapseNode.label);
- collapseNode.size = collapseNode.node.parent !== null ? 12 : 20;
- collapseNode.labelToShow = collapseNode.label;
-
- var configAtlas = {
- adjustSizes: true,
- // scalingRatio: 10,
- gravity: 1,
- slowDown: getSlowDownNumFun($scope.sigma.graph.nodes().length)
- };
- $scope.sigma.startForceAtlas2(configAtlas);
- }
-
- };
-
- $scope.selectedNodeColor = null;
-
- var selectNode = function(node) {
- var selNode = node,
- edges = $scope.sigma.graph.edges();
- if ( lastSelectedNode ) {
- visualizerUtils.clearEdgeColors();
- lastSelectedNode.color = $scope.selectedNodeColor ? $scope.selectedNodeColor : lastSelectedNode.color;
- }
-
- $scope.selectedNodeColor = selNode.color;
- selNode.color = '#ffffff';
- lastSelectedNode = selNode;
- $scope.selectedNode = selNode.node;
- $scope.childrenNodes.list = selNode.node.children.length ? selNode.node.children : [];
- $scope.parentNodes.list = visualizerUtils.getParentNodes(selNode.node);
- visualizerUtils.updateSelectedEdgesColors(edges, selNode);
- selNode.size = selNode.size === 100 ? 100 : selNode.node.parent !== null ? 10 : 20;
- $scope.sigma.refresh();
- $scope.$apply();
- };
-
- var setCameraToNode = function(node){
- $scope.sigma.camera.goTo({
- x: node['read_cam0:x'],
- y: node['read_cam0:y']
- });
- };
-
-
- $scope.topologyCustfunc = function(sigmaIstance, getSlowDownNum, dragListener, resize){
-
- if ( resize && lastSelectedNode !== null ) {
- lastSelectedNode = visualizerUtils.setDefaultSigmaValues(sigmaIstance, lastSelectedNode);
- }
-
- DesignVisualizerFactory.setMainClass();
-
- $scope.sigma = sigmaIstance;
- getSlowDownNumFun = getSlowDownNum;
-
- sigmaIstance.bind('clickStage', function(e){
- sigmaIstance.killForceAtlas2();
- });
-
- sigmaIstance.bind('clickNode', function(e) {
- selectNode(e.data.node);
- $scope.clickedNodesHistory = [e.data.node.id];
- });
-
-
- sigmaIstance.bind('doubleClickNode', function(e){
- var selNode = e.data.node;
-
- $scope.sigma.killForceAtlas2();
-
-
- setTimeout(function(){
- if ( selNode.expand ) {
- expandNodeFunc(selNode, $scope.sliderValue);
- } else {
- collapseNodeFunc(selNode);
- }
- }, 100);
-
- });
-
- sigmaIstance.bind('overNode', function(e){
- var node = e.data.node;
-
- if ( node.labelToShow === null ) {
- node.labelToShow = node.label;
- }
- node.label = node.node.label;
- sigmaIstance.refresh();
- });
-
- sigmaIstance.bind('outNode', function(e){
- var node = e.data.node;
-
- if ( node.labelToShow !== null ) {
- if ( !node.expand && node.labelToShow.indexOf(']') ) {
- node.label = node.labelToShow.substring(node.labelToShow.indexOf(']') + 1);
- } else {
- node.label = node.labelToShow;
- }
-
- }
-
- node.labelToShow = null;
- sigmaIstance.refresh();
-
- });
-
- if ( $scope.selectedProperty ){
- $scope.setColorScheme(null, $scope.selectedProperty);
- }
- };
-
-
- var updateSliderSettings = function(){
- $scope.sliderSettings.to = visualizerUtils.getMaxNodeLvl($scope.currentTopologyNode);
- $scope.sliderValue = 4;
- };
-
-
- $scope.loadController = function(){
-
- processingNodesCallback();
-
- visualizerUtils.getAllnodes(function(allNodes){
- $scope.filteredNodes = allNodes.filter(function(node){
- return node.nodeType === 1;
- });
-
- $scope.currentTopologyNode = $scope.filteredNodes[0];
- updateSliderSettings();
- $scope.$broadcast('YV_MODEL_CHANGE');
-
- processingNodesSuccessCallback();
- $scope.topologyData = visualizerUtils.getTopologyData($scope.currentTopologyNode, $scope.sliderValue);
- }, function(e){
- processingNodesErrorCallback(e);
- });
- };
-
-
-
- $scope.updateTopologyData = function(mlts, modelChanged){
- if ( modelChanged ) {
- updateSliderSettings();
- }
-
- $scope.topologyData = visualizerUtils.getTopologyData($scope.currentTopologyNode, mlts !== null ? mlts : $scope.sliderValue, true);
- $scope.selectedNode = null;
- $scope.childrenNodes.list = [];
- $scope.parentNodes.list = [];
- lastSelectedNode = null;
- $scope.expandedNodes = !modelChanged ? $scope.expandedNodes : false;
- $scope.legend = [];
- $scope.clickedNodesHistory = [];
-
- if ( modelChanged ) {
- $scope.selectedProperty = null;
- $('.yangVisualizerWrapper div.viewNav li span').removeClass('active').parent().eq(0).find('span').addClass('active');
- $scope.$broadcast('YV_MODEL_CHANGE');
- }
-
- $scope.isSelectedSpecificType = false;
- };
-
- $scope.triggerExpanded = function(nodes,cbk){
- if($('#graph-container').hasClass('col-md-12')){
- $('#graph-container').removeClass('col-md-12').addClass('col-md-6');
- }else{
- $('#graph-container').removeClass('col-md-6').addClass('col-md-12');
- }
-
- nodes.show = !nodes.show;
-
- if ( angular.isFunction(cbk) ){
- cbk();
- }
- };
-
- $scope.setColorScheme = function(e,property){
- $scope.selectedProperty = property !== 'default' ? property : null;
-
- if ( e !== null ) {
- $('.yangVisualizerWrapper div.viewNav li span').removeClass('active');
- $(e.target).addClass('active');
- }
-
- $scope.legend = visualizerUtils.setNodesColor(property, $scope.sigma.graph.nodes(), $scope.currentTopologyNode);
- $scope.sigma.refresh();
- };
-
- $scope.clickLegend = function(value, key){
-
- if($scope.selectedProperty !== 'default'){
- var wasChanged = false;
-
- $scope.sigma.graph.nodes().forEach(function(node){
- if(node.node[$scope.selectedProperty] === key){
- node.size = 100;
- wasChanged = true;
- }else{
- node.size = 10;
- }
- });
-
- if(!wasChanged){
- $scope.resetSize();
- $scope.isSelectedSpecificType = false;
- }else{
- $scope.isSelectedSpecificType = true;
- }
-
- $scope.sigma.refresh();
- }
- };
-
- $scope.resetSize = function(){
- $scope.sigma.graph.nodes().forEach(function(node){
- node.size = node.parent === null ? 20 : node.expand ? 12 : 7;
- });
-
- $scope.isSelectedSpecificType = false;
- $scope.sigma.refresh();
- };
-
- $scope.triggerResize = function(){
- $scope.triggerResizeSigma = !$scope.triggerResizeSigma;
- };
-
- var selectGraphNode = function(node) {
- selectNode(node);
- setCameraToNode(node);
- };
-
- $scope.zoomToNode = function(id){
- var nodeToZoom = visualizerUtils.getNodeById($scope.sigma.graph.nodes(), id);
- $scope.sigma.killForceAtlas2();
-
- $scope.clickedNodesHistory.push(id);
-
- if( nodeToZoom ) {
- selectGraphNode(nodeToZoom);
- }
- };
-
- $scope.backToNode = function(){
- $scope.clickedNodesHistory.pop();
-
- if ( $scope.clickedNodesHistory.length ){
- var nodeId = $scope.clickedNodesHistory[$scope.clickedNodesHistory.length - 1],
- nodeObjToBack = visualizerUtils.getNodeById($scope.sigma.graph.nodes(), nodeId);
-
- if ( nodeObjToBack ) {
- selectGraphNode(nodeObjToBack);
- }
- }
- };
-
- $scope.expandedNodes = false;
- $scope.expandAllNodes = function(){
-
- if ( !$scope.expandedNodes ) {
- $scope.updateTopologyData(Infinity);
- } else {
- $scope.updateTopologyData(null);
- }
-
- $scope.expandedNodes = !$scope.expandedNodes;
- };
-
- $scope.$on('YV_UPDATE_TOPODATA',function(event, data){
- $scope.topologyData = data.topoData;
- $scope.sliderValue = data.sv;
- console.log('data', data);
- });
-
- $scope.$on('YV_UPDATE_CTN', function(event, slider){
- visualizerUtils.getTopologyData($scope.currentTopologyNode, slider, true);
- });
-
- $scope.loadController();
-
- $scope.__test = {
- processingNodesErrorCallback: processingNodesErrorCallback,
- processingNodesSuccessCallback: processingNodesSuccessCallback,
- processingNodesCallback: processingNodesCallback,
- lastSelectedNode: lastSelectedNode,
- expandNodeFunc: expandNodeFunc,
- collapseNodeFunc: collapseNodeFunc
- };
-
- }]);
-
- yangvisualizer.register.controller('layoutCtrl',['$scope', '$rootScope','VizualiserLayoutFactory', function($scope, $rootScope, VizualiserLayoutFactory){
-
- $scope.modelLayout = null;
-
- var configAtlas = {
- adjustSizes: true,
- gravity: 1
- };
-
- $scope.setLayout = function(node){
- $scope.modelLayout = VizualiserLayoutFactory.loadLayout($scope.currentTopologyNode);
- console.log('$scope.modelLayout', $scope.modelLayout);
- };
-
- $scope.saveLayout = function(){
- $scope.modelLayout = VizualiserLayoutFactory.saveLayout($scope.currentTopologyNode, $scope.sigma, $scope.sliderValue, $scope.selectedNodeColor);
- console.log('$scope.modelLayout', $scope.modelLayout);
- };
-
- $scope.loadLayout = function(){
- $scope.$emit('YV_UPDATE_CTN', $scope.modelLayout['slider-value']);
- var topologyData = VizualiserLayoutFactory.getTopoData($scope.currentTopologyNode, $scope.modelLayout);
- $scope.$emit('YV_UPDATE_TOPODATA', { topoData: topologyData, sv: $scope.modelLayout['slider-value'] });
- };
-
- $scope.resetLayout = function(){
- $scope.sigma.startForceAtlas2(configAtlas);
- };
-
- $scope.$on('YV_MODEL_CHANGE', function(){
- $scope.setLayout();
- });
-
- }]);
-
-});
\ No newline at end of file
+++ /dev/null
-.yangVisualizerWrapper.col-xs-12{
- margin-bottom: 0px!important;
- background: #000;
- color: #f4f3f5;
- height: 100%;
- padding: 0;
- position: relative;
-
- .btn-graph{
- min-width: 22px;
- line-height: 22px;
- text-align: center;
- padding: 0!important;
- }
-
- .cursor-pointer{
- cursor: pointer;
- }
-
- div.rightPanel{
- background: #000;
- position: absolute;
- height: calc(~'100% - 143px');
- padding-bottom: 20px;
- padding-top: 20px;
- top: 143px;
- border-left: 1px solid #7e8083;
- &.panel-show{
- right: 0;
- left: auto;
- }
- &.panel-hide{
- right: auto;
- left: calc(~'100% - 150px');
- }
- div.inner-content{
- overflow-y: scroll;
- overflow-x: hidden;
- height: 100%;
- }
- div.topButtons{
- position: absolute;
- top: 15px;
- right: 100%;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- padding-right: 10px;
- width: 200px;
- text-align: right;
- button.btn-show{
- background: #f4f3f5!important;
- }
- }
- label{
- font-weight: normal;
- padding-left: 15px;
- }
- table{
- width: 100%;
- margin-bottom: 30px;
- thead{
- th{
- font-weight: normal;
- padding-left: 15px;
- min-width: 150px;
- border-bottom: 1px solid #7e8083;
- text-transform: uppercase;
- &.bigger{
- min-width: 230px;
- }
- }
- }
- tbody{
- td{
- padding: 0 15px;
- vertical-align: top;
- span.link{
- color: #009ee3;
- cursor: pointer;
- &:hover{
- text-decoration: underline;
- }
- }
- }
- }
- }
- }
- div.main{
- top: 0;
- }
- div.topLine{
- border-bottom: 1px solid #7e8083;
- line-height: 44px;
- padding-top: 10px;
- min-height: 100%;
- select{
- background: transparent;
- color: #f4f3f5;
- border: 0;
- option{
- color: #000;
- background: #fff;
- }
- }
- }
- div.sigma{
- position: relative;
- div.viewNav{
- position: absolute;
- z-index: 1;
- top: 10px;
- left: 15px;
- &.margin-legend{
- margin-top: 40px;
- }
- ul.navWrapper{
- margin: 0;
- padding: 0;
- li{
- display: -moz-inline-stack;
- display: inline-block;
- vertical-align: top;
- zoom: 1;
- *display: inline;
- span{
- .transition(150ms);
- cursor: pointer;
- color: #f4f3f5;
- outline: 0 none;
- text-decoration: none;
- margin-left: 10px;
- &:hover, &.active{
- color: #f6a000;
- }
- }
- }
- }
- div.legend{
- ul{
- padding: 0;
- margin: 0;
- list-style: none;
- }
- li{
- margin-bottom: 5px;
- .textHidden{
- display: none;
- }
- .text{
- margin-left: 10px;
- line-height: 18px;
- }
- .showChckbx{
- position: relative;
- top: 2px;
- left: 5px;
- }
- .itemWrapper{
- &:hover{
- .text{
- display: block !important;
- }
- }
- }
-
- }
- div.color{
- /*margin-right: 15px;*/
- width: 18px;
- height: 18px;
- -webkit-border-radius: 9px;
- border-radius: 9px;
- cursor: pointer;
- }
- }
- }
- }
- .yangVisualizer{
- .childrenForm{
- color: #fff;
- }
- .portlet{
- border: 1px solid orange;
- .title{
- padding: 5px 10px;
- background: orange;
- color: #fff;
- line-height: 22px;
- }
- .bodyWrapper{
- padding: 10px;
- }
- }
- }
-
- .jslider_round.sliderCSS.jslider{
- .jslider-pointer{
- border: 1px solid #88838A;
- -webkit-box-shadow:inset 0 0 1px 1px #88838A;
- box-shadow:inset 0 0 1px 1px #88838A;
- }
-
- .jslider-value{
- color: buttontext;
-
- span{
- color: buttontext;
- }
- }
-
- .jslider-label{
- color: #fff;
- -ms-filter: ~"'progid:DXImageTransform.Microsoft.Alpha(Opacity=" 1*100 ~")'";
- filter: ~"alpha(opacity=" 1*100 ~")";
- -moz-opacity: 1;
- -khtml-opacity: 1;
- opacity: 1;
- }
- }
-
- .slider{
- padding-top: 15px;
- }
-}
-
-
-
-#graph-container {
- min-height: 550px;
- height: 100%;
- background: #000;
- /*width: 100%;*/
-}
-
-
-body{
- position: relative;
- overflow-x: hidden;
-}
+++ /dev/null
-var modules = [
- 'angularAMD',
- 'app/routingConfig',
- 'common/yangutils/yangutils.module',
- 'ui-bootstrap',
- 'Restangular',
- 'angular-translate',
- 'ngSlider'
-];
-
-define(modules, function() {
-
- var yangvisualizer = angular.module('app.yangvisualizer', ['ui.router.state','app.core', 'app.common.yangUtils', 'ui.bootstrap',
- 'restangular', 'pascalprecht.translate', 'ngSlider', 'app.common.yangUtils']);
-
- yangvisualizer.register = yangvisualizer;
-
- yangvisualizer.config(function ($stateProvider, $compileProvider, $controllerProvider, $provide, $translateProvider, $translatePartialLoaderProvider, NavHelperProvider) {
-
- $translatePartialLoaderProvider.addPart('app/yangvisualizer/assets/data/locale');
-
- yangvisualizer.register = {
- directive : $compileProvider.directive,
- controller : $controllerProvider.register,
- factory : $provide.factory,
- service : $provide.service
- };
-
- NavHelperProvider.addControllerUrl('app/yangvisualizer/yangvisualizer.controller');
- NavHelperProvider.addToMenu('yangvisualizer', {
- "link": "#/yangvisualizer/index",
- "active": "main.yangvisualizer",
- "title": "Yang Visualizer",
- "icon": "icon-eye-open",
- "page": {
- "title": "Yang Visualizer",
- "description": "Yang Visualizer"
- }
- });
-
- var access = routingConfig.accessLevels;
- $stateProvider.state('main.yangvisualizer', {
- url: 'yangvisualizer',
- abstract: true,
- views : {
- 'content' : {
- templateUrl: 'src/app/yangvisualizer/views/root.tpl.html'
- }
- }
- });
-
- $stateProvider.state('main.yangvisualizer.index', {
- url: '/index',
- access: access.admin,
- views: {
- '': {
- controller: 'yangvisualizerCtrl',
- templateUrl: 'src/app/yangvisualizer/views/index.tpl.html'
- }
- }
- });
- });
-
- return yangvisualizer;
-});
\ No newline at end of file
+++ /dev/null
-define(['app/yangvisualizer/yangvisualizer.module'], function(yangvisualizer) {
-
- yangvisualizer.register.factory('YangConfigRestangular', function(Restangular, ENV) {
- return Restangular.withConfig(function(RestangularConfig) {
- RestangularConfig.setBaseUrl(ENV.baseURL);
- });
- });
-
- yangvisualizer.register.factory('visualizerUtils', function(YangUtilsRestangularService, YangUtilsService, $http){
- var visualizerUtils = {},
- nodeArray = [],
- linkArray = [],
- propertyNodesArray = [],
- lastNodesId = null,
- lastEdgesId = null,
- edgesToClear = {node: {}, edges: []},
- monochromeColorsArray = [],
- colors = {
- edges: '#856700',
- monochrome: '#f39222',
- edgeParent: '#BE3E3B',
- edgeChild: '#3ea64d'
- },
- findParentByChildId = function(edges, nodeId, parentArray){
- var filteredEdge = edges.filter(function(edge){
- return edge.target === nodeId;
- })[0];
-
- if(filteredEdge) {
- parentArray.push(filteredEdge);
- findParentByChildId(edges, filteredEdge.source, parentArray);
- }
- },
- getAllEdgesByNodeId = function(edges, nodeId){
- return edges.filter(function(edge){
- return edge.source === nodeId;
- });
- },
- getParentsByNode = function(node, parentsArray){
- if ( node.parent !== null ) {
- parentsArray.push(node.parent);
- return getParentsByNode(node.parent, parentsArray);
- } else {
- return parentsArray;
- }
- },
- generateColor = function(id) {
- var n = id * Math.PI;
- var colorCode = '#'+(Math.floor((n - Math.floor(n)) * 16777215)).toString(16);
- return colorCode;
- },
- getColors = function(array){
- var colors = {};
- if ( array.length ) {
- for(var index in array) {
- var item = array[index];
- if(!colors.hasOwnProperty(item)) {
- colors[item] = generateColor(array.indexOf(item) + 1);
- }
- }
- return colors;
- } else {
- return null;
- }
-
- },
- getPropertyNodes = function(property, node){
- if ( propertyNodesArray.indexOf(node[property]) === -1 && node[property] !== undefined ) {
- propertyNodesArray.push(node[property]);
- }
-
- if ( node.children.length ) {
- node.children.forEach(function(child){
- getPropertyNodes(property, child);
- });
- }
- return propertyNodesArray;
- },
- updateNodesColor = function(property, nodes, colorsArray, monochromeColorsArray, defaultColor){
- nodes.forEach(function(node){
- // console.log(node.node[property], colorsArray);
- node.color = !defaultColor ? colorsArray[node.node[property]] : monochromeColorsArray[node.lvl];//'#f39222';
- });
- },
- maxMClvl = 0,
- getMaxLvl = function(node, lvl){
- if ( node.children.length > 0 ) {
- lvl++;
- maxMClvl = maxMClvl > lvl ? maxMClvl : lvl;
- node.children.forEach(function(child){
- getMaxLvl(child, lvl);
- });
- }
- return maxMClvl;
- },
- getMonochromeColors = function(hex, lvls, reverse, node){
- var monochromeColors = [],
- hexToRgb = function(hex) {
- var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
- return result ? {
- r: parseInt(result[1], 16),
- g: parseInt(result[2], 16),
- b: parseInt(result[3], 16)
- } : null;
- },
- componentToHex = function(c) {
- var hex = c.toString(16);
- return hex.length == 1 ? "0" + hex : hex;
- },
- rgbToHex = function(r, g, b) {
- return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
- };
-
- if ( lvls === Infinity ) {
- maxMClvl = 0;
- getMaxLvl(node, 0);
- lvls = maxMClvl + 2;
- }
-
- var lvlSteps = Math.round(lvls / 2),
- tintStep = 0.4 / lvlSteps,
- tint = 0.3,
- shadeStep = 0.6 / lvlSteps,
- shade = 0.9,
- rgb = hexToRgb(hex),
- ra, ga, ba, i;
-
- if ( rgb ) {
- for ( i=1; i < lvlSteps; i++ ) {
- ra=Math.round(rgb.r+(255-rgb.r)*tint);
- ga=Math.round(rgb.g+(255-rgb.g)*tint);
- ba=Math.round(rgb.b+(255-rgb.b)*tint);
- tint = tint - tintStep;
- monochromeColors.push(rgbToHex(ra, ga, ba));
- }
-
- monochromeColors.push(hex);
-
- for ( i=1; i < lvlSteps; i++ ) {
- ra=Math.round(rgb.r*shade);
- ga=Math.round(rgb.g*shade);
- ba=Math.round(rgb.b*shade);
- shade = shade - shadeStep;
- monochromeColors.push(rgbToHex(ra, ga, ba));
- }
-
- return reverse ? monochromeColors.reverse() : monochromeColors;
- } else {
- return null;
- }
-
-
- },
- getNumberOfChildren = function(node){
- var numOfChild = 0,
- numOfChildFunc = function(parentNode){
- parentNode.children.forEach(function(child){
- numOfChild++;
- numOfChildFunc(child);
- });
- };
-
- numOfChildFunc(node);
- return numOfChild;
- },
- getAllChildrenByNode = function(parentNode){
- var childrenArray = [],
- getChildrenArray = function(node){
- node.children.forEach(function(child){
- getChildrenArray(child);
- if ( child.hasOwnProperty('graphId') ) {
- childrenArray.push(child.graphId);
- delete child['graphId'];
- }
- });
- };
- getChildrenArray(parentNode);
- return childrenArray;
-
- },
- getNodeById = function(nodes, id){
- var node = nodes.filter(function(item){
- return item.id === id;
- });
-
- return node.length ? node[0] : null;
- };
-
-
- visualizerUtils.getMaxNodeLvl = function(node){
- var maxLvl = 0,
- getLvl = function(node, lvl){
- if ( node.children.length > 0 ) {
- lvl++;
- maxLvl = maxLvl > lvl ? maxLvl : lvl;
- node.children.forEach(function(child){
- getLvl(child, lvl);
- });
- }
- };
-
- getLvl(node, 0);
- return maxLvl;
- };
-
- visualizerUtils.getTopologyData = function(node, lts, newModel, fromLvl){
- var topologyData = [],
- // topologyNodeSize = 10,
- topologyNodeId = 0,
- topologyLinkId = 0,
- transformData = function(node, nodeArray, linkArray, parentId, lvl){
- topologyNodeId++;
- // topologyNodeSize--;
- node.graphId = 'n'+topologyNodeId;
- var currentNodeId = topologyNodeId,
- nodeLabel = node.label.length > 20 ? node.label.substring(0, 17) + '...' : node.label,
- nodeData = {
- 'id': 'n'+currentNodeId,
- 'label': lts > lvl ? nodeLabel : getNumberOfChildren(node) !== 0 ? '[' + getNumberOfChildren(node
- ) + '] ' + nodeLabel : nodeLabel,//node.label,
- x: Math.random(),
- y: Math.random(),
- size: parentId === null ? 20 : lts > lvl ? 7 : 12,
- color: monochromeColorsArray[lvl],
- node: node,
- type: node.type,
- lvl: lvl,
- parent: parentId,
- expand: lts > lvl ? false : true,
- labelToShow: null
- },
- linkData = {};
-
-
- if ( node.children.length > 0 && lts > lvl ) {
- lvl++;
- maxMClvl = maxMClvl > lvl ? maxMClvl : lvl;
- node.children.forEach(function(child){
- transformData(child, nodeArray, linkArray, currentNodeId, lvl);
- });
- }
-
- if ( parentId !== null ) {
- topologyLinkId++;
- linkData = {
- id: 'l'+topologyLinkId,
- 'source': 'n'+parentId,
- 'target': 'n'+currentNodeId,
- color: colors.edges
- };
- linkArray.push(linkData);
- }
-
- nodeArray.push(nodeData);
-
- };
-
- nodeArray = [];
- linkArray = [];
-
- topologyNodeId = lastNodesId && !newModel ? lastNodesId : 0;
- topologyLinkId = lastEdgesId && !newModel ? lastEdgesId : 0;
-
- //adding +1 for monochrome colors to get color for parent node too
- monochromeColorsArray = getMonochromeColors(colors.monochrome, lts + 1, false, node);
- transformData(node, nodeArray, linkArray, null, fromLvl ? fromLvl : 0);
- lastNodesId = topologyNodeId;
- lastEdgesId = topologyLinkId;
-
- return { nodes: nodeArray, links: linkArray };
- };
-
- visualizerUtils.setDefaultSigmaValues = function(sigmaInstance, lastSelectedNode){
- var lsn = getNodeById(sigmaInstance.graph.nodes(), lastSelectedNode.id);
-
-
- if ( edgesToClear ){
- var parentsEdgesArray = [],
- childEdges = getAllEdgesByNodeId(sigmaInstance.graph.edges(),edgesToClear.node.id),
- nodeToClear = getNodeById(sigmaInstance.graph.nodes(), edgesToClear.node.id);
-
- findParentByChildId(sigmaInstance.graph.edges(), edgesToClear.node.id, parentsEdgesArray);
-
- edgesToClear.node = nodeToClear ? nodeToClear : edgesToClear.node;
- edgesToClear.edges = childEdges.concat(parentsEdgesArray);
- }
-
- return lsn ? lsn : lastSelectedNode;
- };
-
- visualizerUtils.updateSelectedEdgesColors = function(edges, node){
- var parentsEdgesArray = [],
- childEdges = getAllEdgesByNodeId(edges,node.id);
-
- findParentByChildId(edges, node.id, parentsEdgesArray);
-
- edgesToClear.node = node;
-
- parentsEdgesArray.forEach(function(edge){
- edge.color = colors.edgeParent;
- edgesToClear.edges.push(edge);
- });
-
- childEdges.forEach(function(edge){
- edge.color = colors.edgeChild;
- edgesToClear.edges.push(edge);
- });
-
- };
-
- visualizerUtils.clearEdgeColors = function(edgesObj){
-
- edgesTC = edgesObj ? edgesObj : edgesToClear;
-
- edgesTC.node.size = edgesTC.node.size === 100 ? 100 : edgesTC.node.parent === null ? 20 : edgesTC.node.expand ? 12 : 7;
-
- edgesTC.edges.forEach(function(edge){
- edge.color = colors.edges;
- });
-
- };
-
- visualizerUtils.getEdgesToClear = function(){
- return {
- node: edgesToClear.node,
- edges: edgesToClear.edges.map(function(e){
- return e.id;
- })
- };
- };
-
- visualizerUtils.getParentNodes = function(node){
- var parentsArray = [];
- return node ? getParentsByNode(node, parentsArray) : [];
- };
-
- visualizerUtils.getAllnodes = function(callback, errorCbk){
- $http.get(YangUtilsRestangularService.configuration.baseUrl+'/restconf/modules/').success(function (data) {
- YangUtilsService.processModules(data.modules, function(result) {
- callback(result);
- });
- }).error(function(result) {
- errorCbk(result);
- });
- };
-
- visualizerUtils.setNodesColor = function(property, nodes, currentNode){
- propertyNodesArray = [];
- var colorsArray = [];
- if ( property !== 'default' ) {
- getPropertyNodes(property, currentNode);
- colorsArray = getColors(propertyNodesArray);
- if ( colorsArray ) {
- updateNodesColor(property, nodes, colorsArray, monochromeColorsArray);
- }
- return colorsArray;
- } else {
- updateNodesColor(property, nodes, colorsArray, monochromeColorsArray, true);
- return null;
- }
-
- };
-
- visualizerUtils.getEdge = function(node, child){
- lastEdgesId++;
- return {
- id: 'l'+lastEdgesId,
- 'source': node.graphId,
- 'target': child.graphId,
- color: colors.edges
- };
- };
-
- visualizerUtils.getAllChildrenArray = function(parentNode){
- return {
- numOfChildren : getNumberOfChildren(parentNode.node),
- nodesArray : getAllChildrenByNode(parentNode.node)
- };
- };
-
- visualizerUtils.getNodeById = function(nodes, id){
- var nodesArray = nodes.filter(function(node){
- return node.node.graphId === id;
- });
-
- return nodesArray.length ? nodesArray[0] : null;
- };
-
- visualizerUtils.__test = {
- findParentByChildId: findParentByChildId,
- getAllEdgesByNodeId: getAllEdgesByNodeId,
- getParentsByNode: getParentsByNode,
- nodeArray: nodeArray,
- edgesToClear: edgesToClear,
- generateColor: generateColor,
- getPropertyNodes: getPropertyNodes,
- updateNodesColor: updateNodesColor,
- getColors: getColors,
- getMonochromeColors: getMonochromeColors,
- getMaxLvl: getMaxLvl
- };
-
- return visualizerUtils;
- });
-
- yangvisualizer.register.factory('VizualiserLayoutFactory', ['visualizerUtils', function(visualizerUtils){
- var vl = {},
- removeNodesObj = function(nodes){
- var changedNodes = [];
- nodes.forEach(function(n){
- var nodeObj = n.node,
- copyN = {};
- n.node = n.node.localeLabel;
- angular.copy(n, copyN);
- changedNodes.push(copyN);
- n.node = nodeObj;
- });
- return changedNodes;
- },
- clearNode = function(node, lnodes, color){
- var nodeTCHC = lnodes.filter(function(ln){
- return ln.id === node.id;
- });
-
- if ( nodeTCHC.length ){
- nodeTCHC[0].color = color;
- nodeTCHC[0].size = nodeTCHC[0].parent === null ? 20 : nodeTCHC[0].expand ? 12 : 7;
- }
- },
- clearEdges = function(edges, edgesIds){
- var edgesTC = edges.filter(function(e){
- return edgesIds.indexOf(e.id) !== -1;
- }),
- obj = {
- node: {},
- edges: edgesTC
- };
-
- visualizerUtils.clearEdgeColors(obj);
- };
-
- vl.loadLayout = function(node){
- if(typeof(Storage) !== "undefined") {
- var lList = JSON.parse(localStorage.getItem("modelLayouts"));
- lList = lList !== null ? lList : {};
- return lList[node.label] ? lList[node.label] : null;
- } else {
- return null;
- }
- };
-
- vl.getTopoData = function(node, model){
- var topoNodes = [],
- topoLinks = [],
- modelCopy = {},
- createNodes = function(n){
- var findNode = function(){
- var node = modelCopy.nodes.filter(function(i){
- return (i.id === n.graphId) && (i.node === n.localeLabel);
- });
- return node.length ? node[0] : null;
- },
- gNode = findNode();
-
- if ( n.children.length ){
- n.children.forEach(function(child){
- createNodes(child);
- });
- }
-
- if ( gNode ) {
- gNode.node = n;
- topoNodes.push(gNode);
- }
- },
- createEdges = function(){
- var nodes = [],
- verifyNode = function(node){
- var addNode = function(nodeId){
- nodes.push(nodeId);
- return true;
- };
-
- if ( nodes.indexOf(node) !== -1 ){
- return true;
- } else {
- var nd = topoNodes.filter(function(n){
- return n.id === node;
- });
-
- return nd.length ? addNode(node) : false;
- }
- };
-
- modelCopy.edges.forEach(function(e){
- if ( verifyNode(e.source) && verifyNode(e.target) ){
- topoLinks.push(e);
- }
- });
- };
-
- angular.copy(model, modelCopy);
-
- createNodes(node);
- createEdges();
-
- return {
- nodes: topoNodes,
- links: topoLinks,
- disabledAtlas: true
- };
- };
-
- vl.saveLayout = function(node, sigma, sliderValue, nodeColor){
- var edgesCopy = [];
-
- angular.copy(sigma.graph.edges(), edgesCopy);
-
- var layout = {
- nodes: sigma.graph.nodes(),
- edges: edgesCopy,
- 'slider-value': sliderValue
- },
- edgesToClearObj = visualizerUtils.getEdgesToClear();
-
- clearEdges(layout.edges, edgesToClearObj.edges);
- layout.nodes = removeNodesObj(layout.nodes);
- clearNode(edgesToClearObj.node, layout.nodes, nodeColor);
-
- if(typeof(Storage) !== "undefined") {
- var lList = JSON.parse(localStorage.getItem("modelLayouts"));
- lList = lList !== null ? lList : {};
- lList[node.label] = layout;
-
- console.log('lList', lList);
-
- try {
- localStorage.setItem("modelLayouts", JSON.stringify(lList));
- return lList[node.label];
- } catch(e) {
- console.info('DataStorage error:', e);
- }
- } else {
- return null;
- }
- };
-
- return vl;
- }]);
-
- yangvisualizer.register.factory('DesignVisualizerFactory', function(){
-
- var dvf = {};
-
- dvf.setMainClass = function(){
- if ( $('.yangVisualizer').length ) {
- $('.yangVisualizer').closest('.col-xs-12').addClass('yangVisualizerWrapper');
-
- $('#graph-container').height($(window).height() - 206);
-
- $(window).resize(function(){
- $('#graph-container').height($(window).height() - 206);
- });
- }
- };
-
- return dvf;
-
- });
-
- yangvisualizer.register.factory('yvConstants', function(){
- var yvc = {};
-
- yvc.sliderSettings = {
- from: 1,
- to: 10,
- step: 1,
- dimension: ' lvl',
- vertical: false,
- css: {
- background: {'background-color': '#fff'},
- before: {'background-color': '#f6a000'},
- default: {'background-color': 'white'},
- after: {'background-color': '#f6a000'},
- pointer: {'background-color': '#fff'}
- }
- };
-
- return yvc;
- });
-
-});
\ No newline at end of file
+++ /dev/null
-/**
- * Copyright (c) 4.7.2014 Cisco. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-define(['app/yangvisualizer/yangvisualizer.test.module.loader', 'common/layout/layout.module'], function() {
- describe('yangvisualizer', function() {
- var yangUtils, yinParser, yangParser, constants, $httpBackend, $timeout, visualizerUtils;
- var port = 8181;
-
- beforeEach(angular.mock.module('app.common.layout'));
- beforeEach(angular.mock.module('app.yangvisualizer'));
-
- beforeEach(angular.mock.inject(function(_yangUtils_, _yinParser_, _constants_, _$httpBackend_, _$timeout_, _visualizerUtils_) {
- yangUtils = _yangUtils_;
- yinParser = _yinParser_;
- constants = _constants_;
- yangParser = yinParser.__test.yangParser;
- $httpBackend = _$httpBackend_;
- $timeout = _$timeout_;
- visualizerUtils = _visualizerUtils_;
-
- }));
-
- describe('yangvisualizerCtrl', function(){
- var yangvisualizerCtrl, $scope, sigmaElem;
-
- beforeEach( angular.mock.inject( function($controller, $rootScope, _$compile_) {
- $scope = $rootScope.$new();
- $compile = _$compile_;
-
- yangvisualizerCtrl = $controller('yangvisualizerCtrl', {$scope: $scope });
- }));
-
- it('triggerExpanded', function(){
- var nodes = {
- show: false
- };
-
- expect(nodes.show).toBe(false);
- $scope.triggerExpanded(nodes);
- expect(nodes.show).toBe(true);
- });
-
- it('status callbacks', function(){
- var e = 'dummyString';
- $scope.status = {};
- $scope.__test.processingNodesCallback();
- expect($scope.status.isWorking).toBe(true);
- $scope.status = {};
- $scope.__test.processingNodesSuccessCallback();
- expect($scope.status.type).toBe('success');
- $scope.status = {};
- $scope.__test.processingNodesErrorCallback(e);
- expect($scope.status.type).toBe('danger');
- });
-
- it('updateTopologyData', function(){
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));
-
- var nodeN1 = yangParser.createNewNode('list', 'list', null, constants.NODE_UI_DISPLAY),
- nodeN2 = yangParser.createNewNode('leaf', 'leaf', nodeN1, constants.NODE_UI_DISPLAY),
- nodeN3 = yangParser.createNewNode('list', 'list', nodeN2, constants.NODE_UI_DISPLAY),
- nodeN4 = yangParser.createNewNode('leaf', 'leaf', nodeN3, constants.NODE_UI_DISPLAY);
-
- $scope.currentTopologyNode = nodeN1;
- $scope.topologyData = null;
- $scope.selectedNode = 'dummyData';
- $scope.childrenNodes.list = ['dummyData', 'dummyData', 'dummyData'];
- $scope.parentNodes.list = ['dummyData', 'dummyData', 'dummyData', 'dummyData'];
-
- $scope.updateTopologyData();
-
- expect($scope.childrenNodes.list.length).toBe(0);
- expect($scope.parentNodes.list.length).toBe(0);
- expect($scope.selectedNode).toBe(null);
- expect($scope.topologyData.nodes.length).toBe(4);
- expect($scope.topologyData.links.length).toBe(3);
-
- });
-
- it('getAllNodes callbacks success', function(){
- var hostPort = 'http://localhost:' + port,
- baseUrl = hostPort+'/restconf',
- // modules = {"modules":{"module":[{"name":"MA"},{"name":"MB"},{"name":"MC"}]}},
- modules = {"modules":{module: [{ 'name': 'MA', revision: 'dummyRev'}, { 'name': 'MB', revision: 'dummyRev'}, { 'name': 'MC', revision: 'dummyRev'}]}},
- mA = '<module name="MA">' +
- ' <leaf name="LA"></leaf>' +
- ' <container name="CA"></container>' +
- '</module>',
- mB = '<module name="MB">' +
- '</module>',
- mC = '<module name="MC">' +
- ' <import module="MA">' +
- ' <prefix value="MApref"/>' +
- ' </import>' +
- ' <import module="MB">' +
- ' <prefix value="MBpref"/>' +
- ' </import>' +
- ' <leaf name="LC"></leaf>' +
- ' <augment target-node="/MApref:CA">' +
- ' <leaf name="LAUG1"></leaf>' +
- ' </augment>' +
- ' <augment target-node="/MBpref:CA">' +
- ' <leaf name="LAUG2"></leaf>' +
- ' </augment>' +
- '</module>',
- nodes = [];
-
- $scope.status = null;
-
- $httpBackend.when('GET', baseUrl+'/modules/').respond(modules);
- // $httpBackend.when('GET', './assets/yang2xml/MA.yang.xml').respond(mA);
- // $httpBackend.when('GET', './assets/yang2xml/MB.yang.xml').respond(mB);
- // $httpBackend.when('GET', './assets/yang2xml/MC.yang.xml').respond(mC);
- $httpBackend.when('GET', hostPort + '/restconf/modules/module/MA/dummyRev/schema').respond(mA);
- $httpBackend.when('GET', hostPort + '/restconf/modules/module/MB/dummyRev/schema').respond(mB);
- $httpBackend.when('GET', hostPort + '/restconf/modules/module/MC/dummyRev/schema').respond(mC);
-
- $httpBackend.flush();
- $timeout.flush();
-
- expect($scope.filteredNodes.length).toBe(3);
- expect($scope.status.type).toBe('success');
- expect($scope.topologyData.nodes.length).toBe(1);
- expect($scope.topologyData.links.length).toBe(0);
-
-
- });
-
- it('getAllNodes callbacks failed', function(){
- var hostPort = 'http://localhost:' + port,
- baseUrl = hostPort+'/restconf';
-
- $scope.status = null;
-
- $httpBackend.when('GET', baseUrl+'/modules/').respond(404, 'error');
- $httpBackend.flush();
- expect($scope.status.type).toBe('danger');
- expect($scope.status.rawMsg).toBe('error');
-
- });
-
- describe('sigma func', function(){
-
- var nodeN1, nodeN2, nodeN3, nodeN4, expandNode,hostPort, baseUrl, modules, mA, sigmaElement;
-
- beforeEach(function(){
-
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));
-
- nodeN1 = yangParser.createNewNode('list', 'list', null, constants.NODE_UI_DISPLAY);
- nodeN2 = yangParser.createNewNode('leaf', 'leaf', nodeN1, constants.NODE_UI_DISPLAY);
- nodeN3 = yangParser.createNewNode('list', 'list', nodeN2, constants.NODE_UI_DISPLAY);
- nodeN4 = yangParser.createNewNode('leaf', 'leaf', nodeN3, constants.NODE_UI_DISPLAY);
- expandNode = {
- expand: true,
- node: nodeN2,
- size: 99,
- label: 'list'
- };
- hostPort = 'http://localhost:' + port;
- baseUrl = hostPort+'/restconf';
- // modules = {"modules":{"module":[{"name":"MA"}]}};
- modules = {"modules":{module: [{ 'name': 'MA', revision: 'dummyRev'}]}};
- mA = '<module name="MA">' +
- ' <leaf name="LA"></leaf>' +
- ' <container name="CA"></container>' +
- '</module>';
- sigmaElement = '<sigma-topology topology-data="topologyData" topology-custfunc="topologyCustfunc"></sigma-toppology>';
-
- $httpBackend.when('GET', 'src/app/yangvisualizer/sigma.tpl.html').respond('<div id="graph-container"><+/div>');
- $httpBackend.when('GET', baseUrl+'/modules/').respond(modules);
- // $httpBackend.when('GET', './assets/yang2xml/MA.yang.xml').respond(mA);
- $httpBackend.when('GET', hostPort + '/restconf/modules/module/MA/dummyRev/schema').respond(mA);
- $httpBackend.flush();
-
- if ( !$('#graph-container').length ) {
- $('<div id="graph-container"></div>').appendTo(document.body);
-
-
- }
-
- sigmaElement = $compile(sigmaElement)($scope);
- $scope.$digest();
-
- $scope.topologyData = visualizerUtils.getTopologyData(nodeN1, 4);
- $scope.$apply();
-
-
- });
-
- afterEach(function(){
- $scope.sigma.kill();
- // $('#graph-container').remove();
- });
-
- // it('expandNodeFunc', function(){
-
- // expect($scope.sigma.graph.nodes().length).toBe(4);
-
- // $scope.topologyData = visualizerUtils.getTopologyData(nodeN1, 1);
- // $scope.$apply();
-
- // expect($scope.sigma.graph.nodes().length).toBe(2);
- // $scope.__test.expandNodeFunc(expandNode, 4);
-
- // var nodes = $scope.sigma.graph.nodes();
- // expect(nodes.length).toBe(4);
- // expect($scope.sigma.isForceAtlas2Running()).toBe(true);
-
- // $scope.topologyData = visualizerUtils.getTopologyData(nodeN1, 0);
- // $scope.$apply();
-
- // expandNode.node = nodeN1;
- // $scope.__test.expandNodeFunc(expandNode, 4);
- // expect(expandNode.size).toBe(20);
-
- // });
-
- // it('collapseNodeFunc', function(){
-
- // $scope.__test.collapseNodeFunc(expandNode);
- // expect($scope.sigma.graph.nodes().length).toBe(2);
- // expect($scope.sigma.isForceAtlas2Running()).toBe(true);
- // expect(expandNode.size).toBe(12);
- // expandNode.node = nodeN1;
-
- // $scope.__test.collapseNodeFunc(expandNode);
- // expect($scope.sigma.graph.nodes().length).toBe(1);
- // expect($scope.sigma.isForceAtlas2Running()).toBe(true);
- // expect(expandNode.size).toBe(20);
-
- // $scope.topologyData = visualizerUtils.getTopologyData(nodeN1, 4);
- // $scope.$apply();
-
- // expandNode.node = nodeN4;
- // $scope.__test.collapseNodeFunc(expandNode);
- // expect($scope.sigma.graph.nodes().length).toBe(4);
-
- // });
-
- // it('setColorScheme', function(){
- // var html = '<div class="yangVisualizerWrapper">'+
- // '<div class="viewNav">'+
- // '<ul>'+
- // '<li>'+
- // '<span class="active">'+
- // '</span>'+
- // '</li>'+
- // '<li>'+
- // '<span>'+
- // '</span>'+
- // '</li>'+
- // '</ul>'+
- // '</div>'+
- // '</div>',
- // e = {
- // target: '.yangVisualizerWrapper div.viewNav li:eq(1) span'
- // };
-
- // $(html).appendTo(document.body);
-
- // $scope.currentTopologyNode = nodeN1;
- // $scope.setColorScheme(e, 'namespace');
- // expect($('.yangVisualizerWrapper div.viewNav li:eq(1) span').hasClass('active')).toBe(true);
- // expect($('.yangVisualizerWrapper div.viewNav li:eq(0) span').hasClass('active')).toBe(false);
- // expect($scope.legend.NS).toBe('#243f6a');
-
- // });
-
- // it('zoomToNode', function(){
- // $scope.topologyData = visualizerUtils.getTopologyData(nodeN1, 1);
- // $scope.$apply();
-
- // expect($scope.sigma.isForceAtlas2Running()).toBe(true);
-
- // $scope.zoomToNode('dummyID');
- // expect($scope.sigma.camera.x).toBe(0);
- // expect($scope.sigma.camera.y).toBe(0);
-
- // var node = $scope.sigma.graph.nodes()[1];
-
- // $scope.zoomToNode(node.id);
- // expect($scope.sigma.isForceAtlas2Running()).toBe(null);
-
- // expect($scope.sigma.camera.x).toBe(node['read_cam0:x']);
- // expect($scope.sigma.camera.y).toBe(node['read_cam0:y']);
-
- // node = $scope.sigma.graph.nodes()[0];
- // $scope.zoomToNode(node.id);
- // expect(node.expand).toBe(false);
- // expect($scope.sigma.graph.nodes().length).toBe(4);
-
- // });
-
- // it('expandAllNodes', function(){
-
- // $scope.currentTopologyNode = nodeN1;
-
- // $scope.topologyData = visualizerUtils.getTopologyData(nodeN1, 1);
- // $scope.$apply();
-
- // $scope.expandAllNodes();
- // $scope.$apply();
-
- // expect($scope.sigma.graph.nodes().length).toBe(4);
- // expect($scope.expandedNodes).toBe(true);
-
- // $scope.expandAllNodes();
- // $scope.$apply();
-
- // expect($scope.sigma.graph.nodes().length).toBe(1);
- // expect($scope.expandedNodes).toBe(false);
- // });
-
- });
-
-
-
-
-
- /*it('topologyCustfunc', function(){
- var hostPort = 'http://localhost:8080',
- baseUrl = hostPort+'/restconf',
- modules = {"modules":{"module":[{"name":"MA"}]}},
- mA = '<module name="MA">' +
- ' <leaf name="LA"></leaf>' +
- ' <container name="CA"></container>' +
- '</module>',
- element = '<sigma-topology topology-data="topologyData" topology-custfunc="topologyCustfunc"></sigma-toppology>';
-
- $httpBackend.when('GET', 'src/app/yangvisualizer/sigma.tpl.html').respond('<div id="graph-container"></div>');
- $httpBackend.when('GET', baseUrl+'/modules/').respond(modules);
- $httpBackend.when('GET', './assets/yang2xml/MA.yang.xml').respond(mA);
- $httpBackend.flush();
-
- element = $compile(element)($scope);
- $scope.$digest();
-
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));
- var nodeN1 = yangParser.createNewNode('list', 'list', null, constants.NODE_UI_DISPLAY),
- nodeN2 = yangParser.createNewNode('leaf', 'leaf', nodeN1, constants.NODE_UI_DISPLAY),
- nodeN3 = yangParser.createNewNode('list', 'list', nodeN2, constants.NODE_UI_DISPLAY),
- nodeN4 = yangParser.createNewNode('leaf', 'leaf', nodeN3, constants.NODE_UI_DISPLAY);
-
- $scope.currentTopologyNode = nodeN1;
- $scope.updateTopologyData();
- // element.$scope.$apply();
-
-
- // $httpBackend.flush();
- // $timeout.flush();
-
-
- // element.click();
- // browserTrigger(element,'click');
-
- });*/
-
-
- });
-
- describe('yangvisualizerServices', function(){
- var nodeN1,nodeN2,nodeN3,nodeN4,nodeN5,topologyData = null;
-
- beforeEach(function(){
- yangParser.setCurrentModuleObj(new yinParser.__test.Module('M', 'R', 'NS'));
- nodeN1 = yangParser.createNewNode('list1', 'list', null, constants.NODE_UI_DISPLAY);
- nodeN2 = yangParser.createNewNode('leaf2', 'leaf', nodeN1, constants.NODE_UI_DISPLAY);
- nodeN3 = yangParser.createNewNode('list3', 'list', nodeN2, constants.NODE_UI_DISPLAY);
- nodeN4 = yangParser.createNewNode('leaf2', 'leaf', nodeN3, constants.NODE_UI_DISPLAY);
- nodeN5 = yangParser.createNewNode('leaf123456789123456789', 'leaf', null, constants.NODE_UI_DISPLAY);
-
- topologyData = visualizerUtils.getTopologyData(nodeN1, Infinity);
- });
-
- //visualizerUtils
- it('getTopologyData', function(){
- // console.log(topologyData);
- expect(topologyData.nodes.length).toBe(4);
- expect(topologyData.links.length).toBe(3);
- topologyData = visualizerUtils.getTopologyData(nodeN5);
- expect(topologyData.nodes[0].label.length).toBe(20);
-
- topologyData = visualizerUtils.getTopologyData(nodeN1, 2);
- expect(topologyData.nodes[0].size).toBe(12);
-
- topologyData = visualizerUtils.getTopologyData(nodeN3, 1, false, 3);
- expect(topologyData.nodes[0].label).toBe('[1] list3');
-
- });
-
- it('updateSelectedEdgesColors', function(){
-
- topologyData.links.forEach(function(link){
- link.color = 'dummyColor';
- });
-
- visualizerUtils.updateSelectedEdgesColors(topologyData.links, topologyData.nodes[1]);
-
- expect(topologyData.links[0].color).toBe('#3ea64d');
- expect(topologyData.links[1].color).toBe('#BE3E3B');
- expect(topologyData.links[2].color).toBe('#BE3E3B');
-
- });
-
- it('clearEdgeColors', function(){
-
- visualizerUtils.updateSelectedEdgesColors(topologyData.links, topologyData.nodes[3]);
-
- expect(visualizerUtils.__test.edgesToClear.edges[0].color).toBe('#3ea64d');
- visualizerUtils.clearEdgeColors();
- expect(visualizerUtils.__test.edgesToClear.edges[0].color).toBe('#856700');
- expect(visualizerUtils.__test.edgesToClear.node.size).toBe(20);
-
- visualizerUtils.updateSelectedEdgesColors(topologyData.links, topologyData.nodes[1]);
- visualizerUtils.clearEdgeColors();
- expect(visualizerUtils.__test.edgesToClear.node.size).toBe(7);
-
- topologyData.nodes[0].expand = true;
- visualizerUtils.updateSelectedEdgesColors(topologyData.links, topologyData.nodes[0]);
- visualizerUtils.clearEdgeColors();
- expect(visualizerUtils.__test.edgesToClear.node.size).toBe(12);
-
- // console.log(visualizerUtils.__test.edgesToClear);
-
- });
-
- // it('getChildrenNode', function(){
- // var testNode = topologyData.nodes[3],
- // childrenNode = null;
-
- // childrenNode = visualizerUtils.getChildrenNode(testNode.id);
- // expect(childrenNode.length).toBe(1);
-
- // testNode = topologyData.nodes[0];
- // childrenNode = visualizerUtils.getChildrenNode(testNode.id);
- // expect(childrenNode.length).toBe(0);
-
- // });
-
- it('getParentNodes', function(){
- var parentArray = [];
-
- parentArray = visualizerUtils.getParentNodes(nodeN4, parentArray);
- expect(parentArray.length).toBe(3);
-
- parentArray = visualizerUtils.getParentNodes();
- expect(parentArray.length).toBe(0);
-
- });
-
- it('generateColor', function(){
- var color = visualizerUtils.__test.generateColor(1);
- expect(color).toBe('#243f6a');
- });
-
- it('getColors', function(){
- var propertyArray = ['dummyVal1','dummyVal2','dummyVal3','dummyVal2'],
- colorArray = visualizerUtils.__test.getColors(propertyArray);
-
- expect(colorArray.dummyVal1).toBe('#243f6a');
- expect(colorArray.dummyVal2).toBe('#487ed4');
- expect(colorArray.dummyVal3).toBe('#6cbe3f');
- });
-
- it('getPropertyNodes', function(){
- var propertyNodesArray = visualizerUtils.__test.getPropertyNodes('label', nodeN1);
- expect(propertyNodesArray[0]).toBe('list1');
- expect(propertyNodesArray[1]).toBe('leaf2');
- expect(propertyNodesArray[2]).toBe('list3');
- expect(propertyNodesArray.length).toBe(3);
-
- });
-
- it('updateNodesColor', function(){
- var propertyNodesArray = visualizerUtils.__test.getPropertyNodes('type', nodeN1),
- colorsArray = visualizerUtils.__test.getColors(propertyNodesArray),
- monochromeColorsArray = visualizerUtils.__test.getMonochromeColors('#487ed4', 3);
- nodes = [
- {
- color: '#ddd',
- lvl: 0,
- node: {
- type: 'leaf'
- }
- }
- ];
-
- visualizerUtils.__test.updateNodesColor('type', nodes, colorsArray, monochromeColorsArray);
- expect(nodes[0].color).toBe('#487ed4');
- visualizerUtils.__test.updateNodesColor('type', nodes, colorsArray, monochromeColorsArray, true);
- expect(nodes[0].color).toBe(monochromeColorsArray[0]);
-
- });
-
- it('setNodesColor', function(){
- var nodes = [
- {
- color: '#ddd',
- lvl: 0,
- node: nodeN1
- },
- {
- color: '#ddd',
- lvl: 1,
- node: nodeN2
- },
- {
- color: '#ddd',
- lvl: 2,
- node: nodeN3
- },
- {
- color: '#ddd',
- lvl: 3,
- node: nodeN4
- }
- ],
- colorsArray = visualizerUtils.setNodesColor('module', nodes, nodeN2);
- expect(colorsArray.M).toBe('#243f6a');
-
- colorsArray = visualizerUtils.setNodesColor('default', nodes, nodeN2);
- expect(colorsArray).toBe(null);
-
- colorsArray = visualizerUtils.setNodesColor('dymmyProperty', nodes, nodeN2);
- expect(colorsArray).toBe(null);
- });
-
- it('getMonochromeColors', function(){
- var hex = '#243f6a',
- lvls = 3,
- monochromeColors = [];
-
- monochromeColors = visualizerUtils.__test.getMonochromeColors(hex, lvls, false);
- expect(monochromeColors[0]).toBe('#667997');
- expect(monochromeColors.length).toBe(3);
-
- monochromeColors = visualizerUtils.__test.getMonochromeColors(hex, lvls, true);
- expect(monochromeColors[0]).toBe('#20395f');
-
- hex = 'dummyHex';
- monochromeColors = visualizerUtils.__test.getMonochromeColors(hex, lvls, false);
- expect(monochromeColors).toBe(null);
-
- hex = '#010203';
- monochromeColors = visualizerUtils.__test.getMonochromeColors(hex, lvls, false);
- expect(monochromeColors[0]).toBe('#4d4e4f');
-
-
- });
-
- it('getMaxLvl', function(){
- var maxLvl = visualizerUtils.__test.getMaxLvl(nodeN1, 0);
- expect(maxLvl).toBe(3);
- });
-
- it('getEdge', function(){
- var edge = visualizerUtils.getEdge(nodeN1, nodeN2);
- expect(edge.source).toBe('n1');
- expect(edge.target).toBe('n2');
- });
-
- it('getAllChildrenArray', function(){
- var node = {
- node : nodeN1
- },
- result = visualizerUtils.getAllChildrenArray(node);
- expect(result.numOfChildren).toBe(3);
- expect(result.nodesArray.length).toBe(3);
- result = visualizerUtils.getAllChildrenArray(node);
- expect(result.nodesArray.length).toBe(0);
- });
-
- });
-
-
- });
-
-
-
-
-});
+++ /dev/null
-define(['app/yangvisualizer/yangvisualizer.module',
- 'app/yangvisualizer/yangvisualizer.controller',
- 'app/yangvisualizer/yangvisualizer.services'
- ], function() {});
\ No newline at end of file