<!--

    Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!-- common/commonTaskDoc.inc -->

<sun:commonTasksGroup title="$resource{i18n.commonTasks.group.docs}">
    <sun:commonTask
        text="$resource{i18n.commonTasks.task.docpage}"
        toolTip="$resource{i18n.commonTasks.task.docpage.toolTip}"
        onClick="var win=window.open('$resource{i18n.commonTasks.doc.docpage}','_blank');if (win) {win.focus();}; return false;">
    </sun:commonTask>
    <sun:commonTask
        text="$resource{i18n.commonTasks.task.qstart}"
        toolTip="$resource{i18n.commonTasks.task.qstart.toolTip}"
        onClick="var win=window.open('$resource{i18n.commonTasks.doc.qstart}','_blank');if (win) {win.focus();}; return false;">
    </sun:commonTask>
    <sun:commonTask
        text="$resource{i18n.commonTasks.task.adminGuide}"
        toolTip="$resource{i18n.commonTasks.task.adminGuide.toolTip}"
        onClick="var win=window.open('$resource{i18n.commonTasks.doc.adminGuide}','_blank');if (win) {win.focus();}; return false;">
    </sun:commonTask>
    <sun:commonTask
        text="$resource{i18n.commonTasks.task.devGuide}"
        toolTip="$resource{i18n.commonTasks.task.devGuide.toolTip}"
        onClick="var win=window.open('$resource{i18n.commonTasks.doc.devGuide}','_blank');if (win) {win.focus();}; return false;">
    </sun:commonTask>
    <sun:commonTask
        text="$resource{i18n.commonTasks.task.deployGuide}"
        toolTip="$resource{i18n.commonTasks.task.deployGuide.toolTip}"
        onClick="var win=window.open('$resource{i18n.commonTasks.doc.deployGuide}','_blank');if (win) {win.focus();}; return false;">
    </sun:commonTask>
</sun:commonTasksGroup>
