| /** |
| * 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. |
| */ |
| |
| package org.apache.hadoop.yarn.webapp.view; |
| |
| import com.google.common.collect.Lists; |
| |
| import java.util.List; |
| |
| import static org.apache.commons.lang.StringEscapeUtils.*; |
| import static org.apache.hadoop.yarn.util.StringHelper.*; |
| |
| import org.apache.hadoop.yarn.webapp.hamlet.HamletSpec.HTML; |
| |
| public class JQueryUI extends HtmlBlock { |
| |
| // UI params |
| public static final String ACCORDION = "ui.accordion"; |
| public static final String ACCORDION_ID = ACCORDION +".id"; |
| public static final String DATATABLES = "ui.dataTables"; |
| public static final String DATATABLES_ID = DATATABLES +".id"; |
| public static final String DATATABLES_SELECTOR = DATATABLES +".selector"; |
| public static final String DIALOG = "ui.dialog"; |
| public static final String DIALOG_ID = DIALOG +".id"; |
| public static final String DIALOG_SELECTOR = DIALOG +".selector"; |
| public static final String PROGRESSBAR = "ui.progressbar"; |
| public static final String PROGRESSBAR_ID = PROGRESSBAR +".id"; |
| |
| // common CSS classes |
| public static final String _PROGRESSBAR = |
| ".ui-progressbar.ui-widget.ui-widget-content.ui-corner-all"; |
| public static final String C_PROGRESSBAR = |
| _PROGRESSBAR.replace('.', ' ').trim(); |
| public static final String _PROGRESSBAR_VALUE = |
| ".ui-progressbar-value.ui-widget-header.ui-corner-left"; |
| public static final String C_PROGRESSBAR_VALUE = |
| _PROGRESSBAR_VALUE.replace('.', ' ').trim(); |
| public static final String _INFO_WRAP = |
| ".info-wrap.ui-widget-content.ui-corner-bottom"; |
| public static final String _TH = ".ui-state-default"; |
| public static final String C_TH = _TH.replace('.', ' ').trim(); |
| public static final String C_TABLE = "table"; |
| public static final String _INFO = ".info"; |
| public static final String _ODD = ".odd"; |
| public static final String _EVEN = ".even"; |
| |
| @Override |
| protected void render(Block html) { |
| html. |
| link(root_url("static/jquery/themes-1.9.1/base/jquery-ui.css")). |
| link(root_url("static/dt-1.9.4/css/jui-dt.css")). |
| script(root_url("static/jquery/jquery-1.8.2.min.js")). |
| script(root_url("static/jquery/jquery-ui-1.9.1.custom.min.js")). |
| script(root_url("static/dt-1.9.4/js/jquery.dataTables.min.js")). |
| script(root_url("static/yarn.dt.plugins.js")). |
| style("#jsnotice { padding: 0.2em; text-align: center; }", |
| ".ui-progressbar { height: 1em; min-width: 5em }"); // required |
| |
| List<String> list = Lists.newArrayList(); |
| initAccordions(list); |
| initDataTables(list); |
| initDialogs(list); |
| initProgressBars(list); |
| |
| if (!list.isEmpty()) { |
| html. |
| script().$type("text/javascript"). |
| _("$(function() {")._(list.toArray())._("});")._(); |
| } |
| } |
| |
| public static void jsnotice(HTML html) { |
| html. |
| div("#jsnotice.ui-state-error"). |
| _("This page works best with javascript enabled.")._(); |
| html. |
| script().$type("text/javascript"). |
| _("$('#jsnotice').hide();")._(); |
| } |
| |
| protected void initAccordions(List<String> list) { |
| for (String id : split($(ACCORDION_ID))) { |
| if (Html.isValidId(id)) { |
| String init = $(initID(ACCORDION, id)); |
| if (init.isEmpty()) { |
| init = "{autoHeight: false}"; |
| } |
| list.add(join(" $('#", id, "').accordion(", init, ");")); |
| } |
| } |
| } |
| |
| protected void initDataTables(List<String> list) { |
| String defaultInit = "{bJQueryUI: true, sPaginationType: 'full_numbers'}"; |
| for (String id : split($(DATATABLES_ID))) { |
| if (Html.isValidId(id)) { |
| String init = $(initID(DATATABLES, id)); |
| if (init.isEmpty()) { |
| init = defaultInit; |
| } |
| list.add(join(id,"DataTable = $('#", id, "').dataTable(", init, |
| ").fnSetFilteringDelay(188);")); |
| String postInit = $(postInitID(DATATABLES, id)); |
| if(!postInit.isEmpty()) { |
| list.add(postInit); |
| } |
| } |
| } |
| String selector = $(DATATABLES_SELECTOR); |
| if (!selector.isEmpty()) { |
| String init = $(initSelector(DATATABLES)); |
| if (init.isEmpty()) { |
| init = defaultInit; |
| } |
| list.add(join(" $('", escapeJavaScript(selector), "').dataTable(", init, |
| ").fnSetFilteringDelay(288);")); |
| } |
| } |
| |
| protected void initDialogs(List<String> list) { |
| String defaultInit = "{autoOpen: false, show: transfer, hide: explode}"; |
| for (String id : split($(DIALOG_ID))) { |
| if (Html.isValidId(id)) { |
| String init = $(initID(DIALOG, id)); |
| if (init.isEmpty()) { |
| init = defaultInit; |
| } |
| String opener = $(djoin(DIALOG, id, "opener")); |
| list.add(join(" $('#", id, "').dialog(", init, ");")); |
| if (!opener.isEmpty() && Html.isValidId(opener)) { |
| list.add(join(" $('#", opener, "').click(function() { ", |
| "$('#", id, "').dialog('open'); return false; });")); |
| } |
| } |
| } |
| String selector = $(DIALOG_SELECTOR); |
| if (!selector.isEmpty()) { |
| String init = $(initSelector(DIALOG)); |
| if (init.isEmpty()) { |
| init = defaultInit; |
| } |
| list.add(join(" $('", escapeJavaScript(selector), |
| "').click(function() { $(this).children('.dialog').dialog(", |
| init, "); return false; });")); |
| } |
| } |
| |
| protected void initProgressBars(List<String> list) { |
| for (String id : split($(PROGRESSBAR_ID))) { |
| if (Html.isValidId(id)) { |
| String init = $(initID(PROGRESSBAR, id)); |
| list.add(join(" $('#", id, "').progressbar(", init, ");")); |
| } |
| } |
| } |
| |
| public static String initID(String name, String id) { |
| return djoin(name, id, "init"); |
| } |
| |
| public static String postInitID(String name, String id) { |
| return djoin(name, id, "postinit"); |
| } |
| |
| public static String initSelector(String name) { |
| return djoin(name, "selector.init"); |
| } |
| |
| public static StringBuilder tableInit() { |
| return new StringBuilder("{bJQueryUI:true, "). |
| append("sPaginationType: 'full_numbers', iDisplayLength:20, "). |
| append("aLengthMenu:[20, 40, 60, 80, 100]"); |
| } |
| } |