# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

OpenIDE-Module-Display-Category=HTML5
OpenIDE-Module-Long-Description=\
    HTML5 Application static client-side project
OpenIDE-Module-Name=HTML5 Project
OpenIDE-Module-Short-Description=HTML5 Application project
Templates/Project/ClientSide=HTML5/JavaScript
Templates/ClientSide=HTML5/JavaScript
Templates/ClientSide/html.html=HTML File
Templates/ClientSide/javascript.js=JavaScript File
Templates/ClientSide/css.css=Cascading Style Sheet
Templates/ClientSide/json.json=JSON File

SOURCES=Sources
SITE_ROOT=Site Root
UNIT_TESTS=Unit Tests
SELENIUM_TESTS=Selenium Tests

# UI Logging - http://wiki.netbeans.org/UsageLoggingSpecification
# when HTML5 project is opened
# {0} browser identifier [string]
# {1} has any tests [boolean - "YES"/"NO"]
# {2} is Cordova enabled [boolean - "YES"/"NO"]
# {3} has Gruntfile.js [boolean - "YES"/"NO"]
# {4} has bower.json [boolean - "YES"/"NO"]
# {5} has package.json [boolean - "YES"/"NO"]
# {6} has gulpfile.js [boolean - "YES"/"NO"]
# {7} has any Selenium tests [boolean - "YES"/"NO"]
# {8} JS platforms ["|" separated string]
USG_PROJECT_HTML5_OPEN=HTML5 project was opened [browser ID: {0}, tests: {1}, cordova: {2}, Gruntfile.js: {3}, bower.json: {4}, package.json: {5}, gulpfile.js: {6}, selenium: {7}, JS platforms: {8}].
# when project convertor is used for creating new project
# {0} file name [string]
USG_PROJECT_CONVERTOR=Project created automatically [file: {0}]
