diff --git a/main/webapp/modules/core/MOD-INF/controller.js b/main/webapp/modules/core/MOD-INF/controller.js
index 45177f03b..6d5499697 100644
--- a/main/webapp/modules/core/MOD-INF/controller.js
+++ b/main/webapp/modules/core/MOD-INF/controller.js
@@ -1,634 +1,634 @@
-/*
-
-Copyright 2010,2012 Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
-
-var html = "text/html";
-var encoding = "UTF-8";
-var ClientSideResourceManager = Packages.com.google.refine.ClientSideResourceManager;
-var bundle = true;
-
-var templatedFiles = {
- // Requests with last path segments mentioned here
- // will get served from .vt files with the same names
- "index" : {
- outputEncodings: true
- },
- "preferences" : {
- outputEncodings: false
- },
- "project" : {
- outputEncodings: true
- }
-};
-
-function registerCommands() {
- var RS = Packages.com.google.refine.RefineServlet;
-
- RS.registerCommand(module, "get-version", new Packages.com.google.refine.commands.GetVersionCommand());
-
- RS.registerCommand(module, "get-importing-configuration", new Packages.com.google.refine.commands.importing.GetImportingConfigurationCommand());
- RS.registerCommand(module, "create-importing-job", new Packages.com.google.refine.commands.importing.CreateImportingJobCommand());
- RS.registerCommand(module, "get-importing-job-status", new Packages.com.google.refine.commands.importing.GetImportingJobStatusCommand());
- RS.registerCommand(module, "importing-controller", new Packages.com.google.refine.commands.importing.ImportingControllerCommand());
- RS.registerCommand(module, "cancel-importing-job", new Packages.com.google.refine.commands.importing.CancelImportingJobCommand());
-
- RS.registerCommand(module, "create-project-from-upload", new Packages.com.google.refine.commands.project.CreateProjectCommand());
- RS.registerCommand(module, "import-project", new Packages.com.google.refine.commands.project.ImportProjectCommand());
- RS.registerCommand(module, "export-project", new Packages.com.google.refine.commands.project.ExportProjectCommand());
- RS.registerCommand(module, "export-rows", new Packages.com.google.refine.commands.project.ExportRowsCommand());
-
- RS.registerCommand(module, "get-project-metadata", new Packages.com.google.refine.commands.project.GetProjectMetadataCommand());
- RS.registerCommand(module, "get-all-project-metadata", new Packages.com.google.refine.commands.workspace.GetAllProjectMetadataCommand());
-
- RS.registerCommand(module, "delete-project", new Packages.com.google.refine.commands.project.DeleteProjectCommand());
- RS.registerCommand(module, "rename-project", new Packages.com.google.refine.commands.project.RenameProjectCommand());
-
- RS.registerCommand(module, "get-models", new Packages.com.google.refine.commands.project.GetModelsCommand());
- RS.registerCommand(module, "get-rows", new Packages.com.google.refine.commands.row.GetRowsCommand());
- RS.registerCommand(module, "get-processes", new Packages.com.google.refine.commands.history.GetProcessesCommand());
- RS.registerCommand(module, "get-history", new Packages.com.google.refine.commands.history.GetHistoryCommand());
- RS.registerCommand(module, "get-operations", new Packages.com.google.refine.commands.history.GetOperationsCommand());
- RS.registerCommand(module, "get-columns-info", new Packages.com.google.refine.commands.column.GetColumnsInfoCommand());
- RS.registerCommand(module, "get-scatterplot", new Packages.com.google.refine.commands.browsing.GetScatterplotCommand());
-
- RS.registerCommand(module, "undo-redo", new Packages.com.google.refine.commands.history.UndoRedoCommand());
- RS.registerCommand(module, "apply-operations", new Packages.com.google.refine.commands.history.ApplyOperationsCommand());
- RS.registerCommand(module, "cancel-processes", new Packages.com.google.refine.commands.history.CancelProcessesCommand());
-
- RS.registerCommand(module, "compute-facets", new Packages.com.google.refine.commands.browsing.ComputeFacetsCommand());
- RS.registerCommand(module, "compute-clusters", new Packages.com.google.refine.commands.browsing.ComputeClustersCommand());
-
- RS.registerCommand(module, "edit-one-cell", new Packages.com.google.refine.commands.cell.EditOneCellCommand());
- RS.registerCommand(module, "text-transform", new Packages.com.google.refine.commands.cell.TextTransformCommand());
- RS.registerCommand(module, "mass-edit", new Packages.com.google.refine.commands.cell.MassEditCommand());
- RS.registerCommand(module, "join-multi-value-cells", new Packages.com.google.refine.commands.cell.JoinMultiValueCellsCommand());
- RS.registerCommand(module, "split-multi-value-cells", new Packages.com.google.refine.commands.cell.SplitMultiValueCellsCommand());
- RS.registerCommand(module, "fill-down", new Packages.com.google.refine.commands.cell.FillDownCommand());
- RS.registerCommand(module, "blank-down", new Packages.com.google.refine.commands.cell.BlankDownCommand());
- RS.registerCommand(module, "transpose-columns-into-rows", new Packages.com.google.refine.commands.cell.TransposeColumnsIntoRowsCommand());
- RS.registerCommand(module, "transpose-rows-into-columns", new Packages.com.google.refine.commands.cell.TransposeRowsIntoColumnsCommand());
- RS.registerCommand(module, "key-value-columnize", new Packages.com.google.refine.commands.cell.KeyValueColumnizeCommand());
-
- RS.registerCommand(module, "add-column", new Packages.com.google.refine.commands.column.AddColumnCommand());
- RS.registerCommand(module, "add-column-by-fetching-urls", new Packages.com.google.refine.commands.column.AddColumnByFetchingURLsCommand());
- RS.registerCommand(module, "remove-column", new Packages.com.google.refine.commands.column.RemoveColumnCommand());
- RS.registerCommand(module, "rename-column", new Packages.com.google.refine.commands.column.RenameColumnCommand());
- RS.registerCommand(module, "move-column", new Packages.com.google.refine.commands.column.MoveColumnCommand());
- RS.registerCommand(module, "split-column", new Packages.com.google.refine.commands.column.SplitColumnCommand());
- RS.registerCommand(module, "reorder-columns", new Packages.com.google.refine.commands.column.ReorderColumnsCommand());
-
- RS.registerCommand(module, "denormalize", new Packages.com.google.refine.commands.row.DenormalizeCommand());
-
- RS.registerCommand(module, "reconcile", new Packages.com.google.refine.commands.recon.ReconcileCommand());
- RS.registerCommand(module, "recon-match-best-candidates", new Packages.com.google.refine.commands.recon.ReconMatchBestCandidatesCommand());
- RS.registerCommand(module, "recon-mark-new-topics", new Packages.com.google.refine.commands.recon.ReconMarkNewTopicsCommand());
- RS.registerCommand(module, "recon-discard-judgments", new Packages.com.google.refine.commands.recon.ReconDiscardJudgmentsCommand());
- RS.registerCommand(module, "recon-match-specific-topic-to-cells", new Packages.com.google.refine.commands.recon.ReconMatchSpecificTopicCommand());
- RS.registerCommand(module, "recon-judge-one-cell", new Packages.com.google.refine.commands.recon.ReconJudgeOneCellCommand());
- RS.registerCommand(module, "recon-judge-similar-cells", new Packages.com.google.refine.commands.recon.ReconJudgeSimilarCellsCommand());
- RS.registerCommand(module, "recon-clear-one-cell", new Packages.com.google.refine.commands.recon.ReconClearOneCellCommand());
- RS.registerCommand(module, "recon-clear-similar-cells", new Packages.com.google.refine.commands.recon.ReconClearSimilarCellsCommand());
- RS.registerCommand(module, "recon-copy-across-columns", new Packages.com.google.refine.commands.recon.ReconCopyAcrossColumnsCommand());
-
- RS.registerCommand(module, "guess-types-of-column", new Packages.com.google.refine.commands.recon.GuessTypesOfColumnCommand());
-
- RS.registerCommand(module, "annotate-one-row", new Packages.com.google.refine.commands.row.AnnotateOneRowCommand());
- RS.registerCommand(module, "annotate-rows", new Packages.com.google.refine.commands.row.AnnotateRowsCommand());
- RS.registerCommand(module, "remove-rows", new Packages.com.google.refine.commands.row.RemoveRowsCommand());
- RS.registerCommand(module, "reorder-rows", new Packages.com.google.refine.commands.row.ReorderRowsCommand());
-
- RS.registerCommand(module, "get-expression-language-info", new Packages.com.google.refine.commands.expr.GetExpressionLanguageInfoCommand());
- RS.registerCommand(module, "get-expression-history", new Packages.com.google.refine.commands.expr.GetExpressionHistoryCommand());
- RS.registerCommand(module, "get-starred-expressions", new Packages.com.google.refine.commands.expr.GetStarredExpressionsCommand());
- RS.registerCommand(module, "toggle-starred-expression", new Packages.com.google.refine.commands.expr.ToggleStarredExpressionCommand());
- RS.registerCommand(module, "log-expression", new Packages.com.google.refine.commands.expr.LogExpressionCommand());
- RS.registerCommand(module, "preview-expression", new Packages.com.google.refine.commands.expr.PreviewExpressionCommand());
-
- RS.registerCommand(module, "get-preference", new Packages.com.google.refine.commands.GetPreferenceCommand());
- RS.registerCommand(module, "get-all-preferences", new Packages.com.google.refine.commands.GetAllPreferencesCommand());
- RS.registerCommand(module, "set-preference", new Packages.com.google.refine.commands.SetPreferenceCommand());
- RS.registerCommand(module, "open-workspace-dir", new Packages.com.google.refine.commands.OpenWorkspaceDirCommand());
-
- RS.registerCommand(module, "authorize", new Packages.com.google.refine.commands.auth.AuthorizeCommand());
- RS.registerCommand(module, "deauthorize", new Packages.com.google.refine.commands.auth.DeAuthorizeCommand());
-}
-
-function registerOperations() {
- var OR = Packages.com.google.refine.operations.OperationRegistry;
-
- OR.registerOperation(module, "text-transform", Packages.com.google.refine.operations.cell.TextTransformOperation);
- OR.registerOperation(module, "mass-edit", Packages.com.google.refine.operations.cell.MassEditOperation);
-
- OR.registerOperation(module, "multivalued-cell-join", Packages.com.google.refine.operations.cell.MultiValuedCellJoinOperation);
- OR.registerOperation(module, "multivalued-cell-split", Packages.com.google.refine.operations.cell.MultiValuedCellSplitOperation);
- OR.registerOperation(module, "fill-down", Packages.com.google.refine.operations.cell.FillDownOperation);
- OR.registerOperation(module, "blank-down", Packages.com.google.refine.operations.cell.BlankDownOperation);
- OR.registerOperation(module, "transpose-columns-into-rows", Packages.com.google.refine.operations.cell.TransposeColumnsIntoRowsOperation);
- OR.registerOperation(module, "transpose-rows-into-columns", Packages.com.google.refine.operations.cell.TransposeRowsIntoColumnsOperation);
- OR.registerOperation(module, "key-value-columnize", Packages.com.google.refine.operations.cell.KeyValueColumnizeOperation);
-
- OR.registerOperation(module, "column-addition", Packages.com.google.refine.operations.column.ColumnAdditionOperation);
- OR.registerOperation(module, "column-removal", Packages.com.google.refine.operations.column.ColumnRemovalOperation);
- OR.registerOperation(module, "column-rename", Packages.com.google.refine.operations.column.ColumnRenameOperation);
- OR.registerOperation(module, "column-move", Packages.com.google.refine.operations.column.ColumnMoveOperation);
- OR.registerOperation(module, "column-split", Packages.com.google.refine.operations.column.ColumnSplitOperation);
- OR.registerOperation(module, "column-addition-by-fetching-urls", Packages.com.google.refine.operations.column.ColumnAdditionByFetchingURLsOperation);
- OR.registerOperation(module, "column-reorder", Packages.com.google.refine.operations.column.ColumnReorderOperation);
-
- OR.registerOperation(module, "row-removal", Packages.com.google.refine.operations.row.RowRemovalOperation);
- OR.registerOperation(module, "row-star", Packages.com.google.refine.operations.row.RowStarOperation);
- OR.registerOperation(module, "row-flag", Packages.com.google.refine.operations.row.RowFlagOperation);
- OR.registerOperation(module, "row-reorder", Packages.com.google.refine.operations.row.RowReorderOperation);
-
- OR.registerOperation(module, "recon", Packages.com.google.refine.operations.recon.ReconOperation);
- OR.registerOperation(module, "recon-mark-new-topics", Packages.com.google.refine.operations.recon.ReconMarkNewTopicsOperation);
- OR.registerOperation(module, "recon-match-best-candidates", Packages.com.google.refine.operations.recon.ReconMatchBestCandidatesOperation);
- OR.registerOperation(module, "recon-discard-judgments", Packages.com.google.refine.operations.recon.ReconDiscardJudgmentsOperation);
- OR.registerOperation(module, "recon-match-specific-topic-to-cells", Packages.com.google.refine.operations.recon.ReconMatchSpecificTopicOperation);
- OR.registerOperation(module, "recon-judge-similar-cells", Packages.com.google.refine.operations.recon.ReconJudgeSimilarCellsOperation);
- OR.registerOperation(module, "recon-clear-similar-cells", Packages.com.google.refine.operations.recon.ReconClearSimilarCellsOperation);
- OR.registerOperation(module, "recon-copy-across-columns", Packages.com.google.refine.operations.recon.ReconCopyAcrossColumnsOperation);
-}
-
-function registerImporting() {
- var IM = Packages.com.google.refine.importing.ImportingManager;
-
- /*
- * Formats and their UI class names and parsers:
- * - UI class names are used on the client-side in Javascript to instantiate code that lets the user
- * configure the parser's options.
- * - Parsers are server-side code that do the actual parsing. Because they have access to the raw files,
- * they also generate defaults for the client-side UIs to initialize.
- */
-
- IM.registerFormat("text", "Text files"); // generic format, no parser to handle it
- IM.registerFormat("text/line-based", "Line-based text files", "LineBasedParserUI",
- new Packages.com.google.refine.importers.LineBasedImporter());
- IM.registerFormat("text/line-based/*sv", "CSV / TSV / separator-based files", "SeparatorBasedParserUI",
- new Packages.com.google.refine.importers.SeparatorBasedImporter());
- IM.registerFormat("text/line-based/fixed-width", "Fixed-width field text files", "FixedWidthParserUI",
- new Packages.com.google.refine.importers.FixedWidthImporter());
-
- IM.registerFormat("text/rdf+n3", "RDF/N3 files", "RdfTriplesParserUI", new Packages.com.google.refine.importers.RdfTripleImporter());
-
- IM.registerFormat("text/xml", "XML files", "XmlParserUI", new Packages.com.google.refine.importers.XmlImporter());
- IM.registerFormat("text/xml/xlsx", "Excel (.xlsx) files", "ExcelParserUI", new Packages.com.google.refine.importers.ExcelImporter());
- // TODO: Can we get away with just reusing Excel importer UI?
- IM.registerFormat("text/xml/ods", "Open Document Format spreadsheets (.ods)", "ExcelParserUI", new Packages.com.google.refine.importers.OdsImporter());
- IM.registerFormat("text/xml/rdf", "RDF/XML files", "RdfTriplesParserUI", new Packages.com.google.refine.importers.RdfXmlTripleImporter());
- IM.registerFormat("text/json", "JSON files", "JsonParserUI", new Packages.com.google.refine.importers.JsonImporter());
- IM.registerFormat("text/marc", "MARC files");
-
- IM.registerFormat("binary", "Binary files"); // generic format, no parser to handle it
- IM.registerFormat("binary/xls", "Excel files", "ExcelParserUI", new Packages.com.google.refine.importers.ExcelImporter());
-
- IM.registerFormat("service", "Services"); // generic format, no parser to handle it
-
- /*
- * Extension to format mappings
- */
- IM.registerExtension(".txt", "text/line-based");
- IM.registerExtension(".csv", "text/line-based/*sv");
- IM.registerExtension(".tsv", "text/line-based/*sv");
-
- IM.registerExtension(".xml", "text/xml");
- IM.registerExtension(".rdf", "text/xml/rdf");
-
- IM.registerExtension(".json", "text/json");
- IM.registerExtension(".js", "text/json");
-
- IM.registerExtension(".xls", "binary/xls");
- IM.registerExtension(".xlsx", "text/xml/xlsx");
-
- IM.registerExtension(".ods", "text/xml/ods");
-
- IM.registerExtension(".n3", "text/rdf+n3");
-
- IM.registerExtension(".marc", "text/marc");
- IM.registerExtension(".mrc", "text/marc");
-
- /*
- * Mime type to format mappings
- */
- IM.registerMimeType("text/plain", "text/line-based");
- IM.registerMimeType("text/csv", "text/line-based/*sv");
- IM.registerMimeType("text/x-csv", "text/line-based/*sv");
- IM.registerMimeType("text/tab-separated-value", "text/line-based/*sv");
-
- IM.registerMimeType("text/fixed-width", "text/line-based/fixed-width");
-
- IM.registerMimeType("text/rdf+n3", "text/rdf+n3");
-
- IM.registerMimeType("application/msexcel", "binary/xls");
- IM.registerMimeType("application/x-msexcel", "binary/xls");
- IM.registerMimeType("application/x-ms-excel", "binary/xls");
- IM.registerMimeType("application/vnd.ms-excel", "binary/xls");
- IM.registerMimeType("application/x-excel", "binary/xls");
- IM.registerMimeType("application/xls", "binary/xls");
- IM.registerMimeType("application/x-xls", "text/xml/xlsx");
-
- IM.registerMimeType("application/vnd.oasis.opendocument.spreadsheet","text/xml/ods");
-
- IM.registerMimeType("application/json", "text/json");
- IM.registerMimeType("application/javascript", "text/json");
- IM.registerMimeType("text/json", "text/json");
-
- IM.registerMimeType("application/rdf+xml", "text/xml/rdf");
-
- IM.registerMimeType("application/marc", "text/marc");
-
- /*
- * Format guessers: these take a format derived from extensions or mime-types,
- * look at the actual files' content, and try to guess a better format.
- */
- IM.registerFormatGuesser("text", new Packages.com.google.refine.importers.TextFormatGuesser());
- IM.registerFormatGuesser("text/line-based", new Packages.com.google.refine.importers.LineBasedFormatGuesser());
-
- /*
- * Controllers: these implement high-level UI flows for importing data. For example, the default
- * controller lets the user specify one or more source files, either local or remote or on the clipboard,
- * lets the user select which files to actually import in case any of the original file is an archive
- * containing several files, and then lets the user configure parsing options.
- */
- IM.registerController(
- module,
- "default-importing-controller",
- new Packages.com.google.refine.importing.DefaultImportingController()
- );
-}
-
-/*
- * This optional function is invoked from the module's init() Java function.
- */
-function init() {
- // Packages.java.lang.System.err.println("Initializing by script " + module);
-
- registerCommands();
- registerOperations();
- registerImporting();
-
- var RC = Packages.com.google.refine.model.recon.ReconConfig;
- RC.registerReconConfig(module, "standard-service", Packages.com.google.refine.model.recon.StandardReconConfig);
-
- ClientSideResourceManager.addPaths(
- "index/scripts",
- module,
- [
-
+/*
+
+Copyright 2010,2012 Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ */
+
+var html = "text/html";
+var encoding = "UTF-8";
+var ClientSideResourceManager = Packages.com.google.refine.ClientSideResourceManager;
+var bundle = true;
+
+var templatedFiles = {
+ // Requests with last path segments mentioned here
+ // will get served from .vt files with the same names
+ "index" : {
+ outputEncodings: true
+ },
+ "preferences" : {
+ outputEncodings: false
+ },
+ "project" : {
+ outputEncodings: true
+ }
+};
+
+function registerCommands() {
+ var RS = Packages.com.google.refine.RefineServlet;
+
+ RS.registerCommand(module, "get-version", new Packages.com.google.refine.commands.GetVersionCommand());
+
+ RS.registerCommand(module, "get-importing-configuration", new Packages.com.google.refine.commands.importing.GetImportingConfigurationCommand());
+ RS.registerCommand(module, "create-importing-job", new Packages.com.google.refine.commands.importing.CreateImportingJobCommand());
+ RS.registerCommand(module, "get-importing-job-status", new Packages.com.google.refine.commands.importing.GetImportingJobStatusCommand());
+ RS.registerCommand(module, "importing-controller", new Packages.com.google.refine.commands.importing.ImportingControllerCommand());
+ RS.registerCommand(module, "cancel-importing-job", new Packages.com.google.refine.commands.importing.CancelImportingJobCommand());
+
+ RS.registerCommand(module, "create-project-from-upload", new Packages.com.google.refine.commands.project.CreateProjectCommand());
+ RS.registerCommand(module, "import-project", new Packages.com.google.refine.commands.project.ImportProjectCommand());
+ RS.registerCommand(module, "export-project", new Packages.com.google.refine.commands.project.ExportProjectCommand());
+ RS.registerCommand(module, "export-rows", new Packages.com.google.refine.commands.project.ExportRowsCommand());
+
+ RS.registerCommand(module, "get-project-metadata", new Packages.com.google.refine.commands.project.GetProjectMetadataCommand());
+ RS.registerCommand(module, "get-all-project-metadata", new Packages.com.google.refine.commands.workspace.GetAllProjectMetadataCommand());
+
+ RS.registerCommand(module, "delete-project", new Packages.com.google.refine.commands.project.DeleteProjectCommand());
+ RS.registerCommand(module, "rename-project", new Packages.com.google.refine.commands.project.RenameProjectCommand());
+
+ RS.registerCommand(module, "get-models", new Packages.com.google.refine.commands.project.GetModelsCommand());
+ RS.registerCommand(module, "get-rows", new Packages.com.google.refine.commands.row.GetRowsCommand());
+ RS.registerCommand(module, "get-processes", new Packages.com.google.refine.commands.history.GetProcessesCommand());
+ RS.registerCommand(module, "get-history", new Packages.com.google.refine.commands.history.GetHistoryCommand());
+ RS.registerCommand(module, "get-operations", new Packages.com.google.refine.commands.history.GetOperationsCommand());
+ RS.registerCommand(module, "get-columns-info", new Packages.com.google.refine.commands.column.GetColumnsInfoCommand());
+ RS.registerCommand(module, "get-scatterplot", new Packages.com.google.refine.commands.browsing.GetScatterplotCommand());
+
+ RS.registerCommand(module, "undo-redo", new Packages.com.google.refine.commands.history.UndoRedoCommand());
+ RS.registerCommand(module, "apply-operations", new Packages.com.google.refine.commands.history.ApplyOperationsCommand());
+ RS.registerCommand(module, "cancel-processes", new Packages.com.google.refine.commands.history.CancelProcessesCommand());
+
+ RS.registerCommand(module, "compute-facets", new Packages.com.google.refine.commands.browsing.ComputeFacetsCommand());
+ RS.registerCommand(module, "compute-clusters", new Packages.com.google.refine.commands.browsing.ComputeClustersCommand());
+
+ RS.registerCommand(module, "edit-one-cell", new Packages.com.google.refine.commands.cell.EditOneCellCommand());
+ RS.registerCommand(module, "text-transform", new Packages.com.google.refine.commands.cell.TextTransformCommand());
+ RS.registerCommand(module, "mass-edit", new Packages.com.google.refine.commands.cell.MassEditCommand());
+ RS.registerCommand(module, "join-multi-value-cells", new Packages.com.google.refine.commands.cell.JoinMultiValueCellsCommand());
+ RS.registerCommand(module, "split-multi-value-cells", new Packages.com.google.refine.commands.cell.SplitMultiValueCellsCommand());
+ RS.registerCommand(module, "fill-down", new Packages.com.google.refine.commands.cell.FillDownCommand());
+ RS.registerCommand(module, "blank-down", new Packages.com.google.refine.commands.cell.BlankDownCommand());
+ RS.registerCommand(module, "transpose-columns-into-rows", new Packages.com.google.refine.commands.cell.TransposeColumnsIntoRowsCommand());
+ RS.registerCommand(module, "transpose-rows-into-columns", new Packages.com.google.refine.commands.cell.TransposeRowsIntoColumnsCommand());
+ RS.registerCommand(module, "key-value-columnize", new Packages.com.google.refine.commands.cell.KeyValueColumnizeCommand());
+
+ RS.registerCommand(module, "add-column", new Packages.com.google.refine.commands.column.AddColumnCommand());
+ RS.registerCommand(module, "add-column-by-fetching-urls", new Packages.com.google.refine.commands.column.AddColumnByFetchingURLsCommand());
+ RS.registerCommand(module, "remove-column", new Packages.com.google.refine.commands.column.RemoveColumnCommand());
+ RS.registerCommand(module, "rename-column", new Packages.com.google.refine.commands.column.RenameColumnCommand());
+ RS.registerCommand(module, "move-column", new Packages.com.google.refine.commands.column.MoveColumnCommand());
+ RS.registerCommand(module, "split-column", new Packages.com.google.refine.commands.column.SplitColumnCommand());
+ RS.registerCommand(module, "reorder-columns", new Packages.com.google.refine.commands.column.ReorderColumnsCommand());
+
+ RS.registerCommand(module, "denormalize", new Packages.com.google.refine.commands.row.DenormalizeCommand());
+
+ RS.registerCommand(module, "reconcile", new Packages.com.google.refine.commands.recon.ReconcileCommand());
+ RS.registerCommand(module, "recon-match-best-candidates", new Packages.com.google.refine.commands.recon.ReconMatchBestCandidatesCommand());
+ RS.registerCommand(module, "recon-mark-new-topics", new Packages.com.google.refine.commands.recon.ReconMarkNewTopicsCommand());
+ RS.registerCommand(module, "recon-discard-judgments", new Packages.com.google.refine.commands.recon.ReconDiscardJudgmentsCommand());
+ RS.registerCommand(module, "recon-match-specific-topic-to-cells", new Packages.com.google.refine.commands.recon.ReconMatchSpecificTopicCommand());
+ RS.registerCommand(module, "recon-judge-one-cell", new Packages.com.google.refine.commands.recon.ReconJudgeOneCellCommand());
+ RS.registerCommand(module, "recon-judge-similar-cells", new Packages.com.google.refine.commands.recon.ReconJudgeSimilarCellsCommand());
+ RS.registerCommand(module, "recon-clear-one-cell", new Packages.com.google.refine.commands.recon.ReconClearOneCellCommand());
+ RS.registerCommand(module, "recon-clear-similar-cells", new Packages.com.google.refine.commands.recon.ReconClearSimilarCellsCommand());
+ RS.registerCommand(module, "recon-copy-across-columns", new Packages.com.google.refine.commands.recon.ReconCopyAcrossColumnsCommand());
+
+ RS.registerCommand(module, "guess-types-of-column", new Packages.com.google.refine.commands.recon.GuessTypesOfColumnCommand());
+
+ RS.registerCommand(module, "annotate-one-row", new Packages.com.google.refine.commands.row.AnnotateOneRowCommand());
+ RS.registerCommand(module, "annotate-rows", new Packages.com.google.refine.commands.row.AnnotateRowsCommand());
+ RS.registerCommand(module, "remove-rows", new Packages.com.google.refine.commands.row.RemoveRowsCommand());
+ RS.registerCommand(module, "reorder-rows", new Packages.com.google.refine.commands.row.ReorderRowsCommand());
+
+ RS.registerCommand(module, "get-expression-language-info", new Packages.com.google.refine.commands.expr.GetExpressionLanguageInfoCommand());
+ RS.registerCommand(module, "get-expression-history", new Packages.com.google.refine.commands.expr.GetExpressionHistoryCommand());
+ RS.registerCommand(module, "get-starred-expressions", new Packages.com.google.refine.commands.expr.GetStarredExpressionsCommand());
+ RS.registerCommand(module, "toggle-starred-expression", new Packages.com.google.refine.commands.expr.ToggleStarredExpressionCommand());
+ RS.registerCommand(module, "log-expression", new Packages.com.google.refine.commands.expr.LogExpressionCommand());
+ RS.registerCommand(module, "preview-expression", new Packages.com.google.refine.commands.expr.PreviewExpressionCommand());
+
+ RS.registerCommand(module, "get-preference", new Packages.com.google.refine.commands.GetPreferenceCommand());
+ RS.registerCommand(module, "get-all-preferences", new Packages.com.google.refine.commands.GetAllPreferencesCommand());
+ RS.registerCommand(module, "set-preference", new Packages.com.google.refine.commands.SetPreferenceCommand());
+ RS.registerCommand(module, "open-workspace-dir", new Packages.com.google.refine.commands.OpenWorkspaceDirCommand());
+
+ RS.registerCommand(module, "authorize", new Packages.com.google.refine.commands.auth.AuthorizeCommand());
+ RS.registerCommand(module, "deauthorize", new Packages.com.google.refine.commands.auth.DeAuthorizeCommand());
+}
+
+function registerOperations() {
+ var OR = Packages.com.google.refine.operations.OperationRegistry;
+
+ OR.registerOperation(module, "text-transform", Packages.com.google.refine.operations.cell.TextTransformOperation);
+ OR.registerOperation(module, "mass-edit", Packages.com.google.refine.operations.cell.MassEditOperation);
+
+ OR.registerOperation(module, "multivalued-cell-join", Packages.com.google.refine.operations.cell.MultiValuedCellJoinOperation);
+ OR.registerOperation(module, "multivalued-cell-split", Packages.com.google.refine.operations.cell.MultiValuedCellSplitOperation);
+ OR.registerOperation(module, "fill-down", Packages.com.google.refine.operations.cell.FillDownOperation);
+ OR.registerOperation(module, "blank-down", Packages.com.google.refine.operations.cell.BlankDownOperation);
+ OR.registerOperation(module, "transpose-columns-into-rows", Packages.com.google.refine.operations.cell.TransposeColumnsIntoRowsOperation);
+ OR.registerOperation(module, "transpose-rows-into-columns", Packages.com.google.refine.operations.cell.TransposeRowsIntoColumnsOperation);
+ OR.registerOperation(module, "key-value-columnize", Packages.com.google.refine.operations.cell.KeyValueColumnizeOperation);
+
+ OR.registerOperation(module, "column-addition", Packages.com.google.refine.operations.column.ColumnAdditionOperation);
+ OR.registerOperation(module, "column-removal", Packages.com.google.refine.operations.column.ColumnRemovalOperation);
+ OR.registerOperation(module, "column-rename", Packages.com.google.refine.operations.column.ColumnRenameOperation);
+ OR.registerOperation(module, "column-move", Packages.com.google.refine.operations.column.ColumnMoveOperation);
+ OR.registerOperation(module, "column-split", Packages.com.google.refine.operations.column.ColumnSplitOperation);
+ OR.registerOperation(module, "column-addition-by-fetching-urls", Packages.com.google.refine.operations.column.ColumnAdditionByFetchingURLsOperation);
+ OR.registerOperation(module, "column-reorder", Packages.com.google.refine.operations.column.ColumnReorderOperation);
+
+ OR.registerOperation(module, "row-removal", Packages.com.google.refine.operations.row.RowRemovalOperation);
+ OR.registerOperation(module, "row-star", Packages.com.google.refine.operations.row.RowStarOperation);
+ OR.registerOperation(module, "row-flag", Packages.com.google.refine.operations.row.RowFlagOperation);
+ OR.registerOperation(module, "row-reorder", Packages.com.google.refine.operations.row.RowReorderOperation);
+
+ OR.registerOperation(module, "recon", Packages.com.google.refine.operations.recon.ReconOperation);
+ OR.registerOperation(module, "recon-mark-new-topics", Packages.com.google.refine.operations.recon.ReconMarkNewTopicsOperation);
+ OR.registerOperation(module, "recon-match-best-candidates", Packages.com.google.refine.operations.recon.ReconMatchBestCandidatesOperation);
+ OR.registerOperation(module, "recon-discard-judgments", Packages.com.google.refine.operations.recon.ReconDiscardJudgmentsOperation);
+ OR.registerOperation(module, "recon-match-specific-topic-to-cells", Packages.com.google.refine.operations.recon.ReconMatchSpecificTopicOperation);
+ OR.registerOperation(module, "recon-judge-similar-cells", Packages.com.google.refine.operations.recon.ReconJudgeSimilarCellsOperation);
+ OR.registerOperation(module, "recon-clear-similar-cells", Packages.com.google.refine.operations.recon.ReconClearSimilarCellsOperation);
+ OR.registerOperation(module, "recon-copy-across-columns", Packages.com.google.refine.operations.recon.ReconCopyAcrossColumnsOperation);
+}
+
+function registerImporting() {
+ var IM = Packages.com.google.refine.importing.ImportingManager;
+
+ /*
+ * Formats and their UI class names and parsers:
+ * - UI class names are used on the client-side in Javascript to instantiate code that lets the user
+ * configure the parser's options.
+ * - Parsers are server-side code that do the actual parsing. Because they have access to the raw files,
+ * they also generate defaults for the client-side UIs to initialize.
+ */
+
+ IM.registerFormat("text", "Text files"); // generic format, no parser to handle it
+ IM.registerFormat("text/line-based", "Line-based text files", "LineBasedParserUI",
+ new Packages.com.google.refine.importers.LineBasedImporter());
+ IM.registerFormat("text/line-based/*sv", "CSV / TSV / separator-based files", "SeparatorBasedParserUI",
+ new Packages.com.google.refine.importers.SeparatorBasedImporter());
+ IM.registerFormat("text/line-based/fixed-width", "Fixed-width field text files", "FixedWidthParserUI",
+ new Packages.com.google.refine.importers.FixedWidthImporter());
+
+ IM.registerFormat("text/rdf+n3", "RDF/N3 files", "RdfTriplesParserUI", new Packages.com.google.refine.importers.RdfTripleImporter());
+
+ IM.registerFormat("text/xml", "XML files", "XmlParserUI", new Packages.com.google.refine.importers.XmlImporter());
+ IM.registerFormat("text/xml/xlsx", "Excel (.xlsx) files", "ExcelParserUI", new Packages.com.google.refine.importers.ExcelImporter());
+ // TODO: Can we get away with just reusing Excel importer UI?
+ IM.registerFormat("text/xml/ods", "Open Document Format spreadsheets (.ods)", "ExcelParserUI", new Packages.com.google.refine.importers.OdsImporter());
+ IM.registerFormat("text/xml/rdf", "RDF/XML files", "RdfTriplesParserUI", new Packages.com.google.refine.importers.RdfXmlTripleImporter());
+ IM.registerFormat("text/json", "JSON files", "JsonParserUI", new Packages.com.google.refine.importers.JsonImporter());
+ IM.registerFormat("text/marc", "MARC files");
+
+ IM.registerFormat("binary", "Binary files"); // generic format, no parser to handle it
+ IM.registerFormat("binary/xls", "Excel files", "ExcelParserUI", new Packages.com.google.refine.importers.ExcelImporter());
+
+ IM.registerFormat("service", "Services"); // generic format, no parser to handle it
+
+ /*
+ * Extension to format mappings
+ */
+ IM.registerExtension(".txt", "text/line-based");
+ IM.registerExtension(".csv", "text/line-based/*sv");
+ IM.registerExtension(".tsv", "text/line-based/*sv");
+
+ IM.registerExtension(".xml", "text/xml");
+ IM.registerExtension(".rdf", "text/xml/rdf");
+
+ IM.registerExtension(".json", "text/json");
+ IM.registerExtension(".js", "text/json");
+
+ IM.registerExtension(".xls", "binary/xls");
+ IM.registerExtension(".xlsx", "text/xml/xlsx");
+
+ IM.registerExtension(".ods", "text/xml/ods");
+
+ IM.registerExtension(".n3", "text/rdf+n3");
+
+ IM.registerExtension(".marc", "text/marc");
+ IM.registerExtension(".mrc", "text/marc");
+
+ /*
+ * Mime type to format mappings
+ */
+ IM.registerMimeType("text/plain", "text/line-based");
+ IM.registerMimeType("text/csv", "text/line-based/*sv");
+ IM.registerMimeType("text/x-csv", "text/line-based/*sv");
+ IM.registerMimeType("text/tab-separated-value", "text/line-based/*sv");
+
+ IM.registerMimeType("text/fixed-width", "text/line-based/fixed-width");
+
+ IM.registerMimeType("text/rdf+n3", "text/rdf+n3");
+
+ IM.registerMimeType("application/msexcel", "binary/xls");
+ IM.registerMimeType("application/x-msexcel", "binary/xls");
+ IM.registerMimeType("application/x-ms-excel", "binary/xls");
+ IM.registerMimeType("application/vnd.ms-excel", "binary/xls");
+ IM.registerMimeType("application/x-excel", "binary/xls");
+ IM.registerMimeType("application/xls", "binary/xls");
+ IM.registerMimeType("application/x-xls", "text/xml/xlsx");
+
+ IM.registerMimeType("application/vnd.oasis.opendocument.spreadsheet","text/xml/ods");
+
+ IM.registerMimeType("application/json", "text/json");
+ IM.registerMimeType("application/javascript", "text/json");
+ IM.registerMimeType("text/json", "text/json");
+
+ IM.registerMimeType("application/rdf+xml", "text/xml/rdf");
+
+ IM.registerMimeType("application/marc", "text/marc");
+
+ /*
+ * Format guessers: these take a format derived from extensions or mime-types,
+ * look at the actual files' content, and try to guess a better format.
+ */
+ IM.registerFormatGuesser("text", new Packages.com.google.refine.importers.TextFormatGuesser());
+ IM.registerFormatGuesser("text/line-based", new Packages.com.google.refine.importers.LineBasedFormatGuesser());
+
+ /*
+ * Controllers: these implement high-level UI flows for importing data. For example, the default
+ * controller lets the user specify one or more source files, either local or remote or on the clipboard,
+ * lets the user select which files to actually import in case any of the original file is an archive
+ * containing several files, and then lets the user configure parsing options.
+ */
+ IM.registerController(
+ module,
+ "default-importing-controller",
+ new Packages.com.google.refine.importing.DefaultImportingController()
+ );
+}
+
+/*
+ * This optional function is invoked from the module's init() Java function.
+ */
+function init() {
+ // Packages.java.lang.System.err.println("Initializing by script " + module);
+
+ registerCommands();
+ registerOperations();
+ registerImporting();
+
+ var RC = Packages.com.google.refine.model.recon.ReconConfig;
+ RC.registerReconConfig(module, "standard-service", Packages.com.google.refine.model.recon.StandardReconConfig);
+
+ ClientSideResourceManager.addPaths(
+ "index/scripts",
+ module,
+ [
+
"externals/jquery-1.7.2.min.js",
- "externals/jquery.cookie.js",
- "externals/jquery.eventstack-0.3.js",
+ "externals/jquery.cookie.js",
+ "externals/jquery.eventstack-0.3.js",
"externals/jquery-ui/jquery-ui-1.8.20.custom.min.js",
- "externals/date.js",
-
- "externals/CFInstall.min.js",
- "scripts/chrome-frame.js",
-
- "scripts/util/misc.js",
- "scripts/util/url.js",
- "scripts/util/string.js",
- "scripts/util/ajax.js",
- "scripts/util/menu.js",
- "scripts/util/dialog.js",
- "scripts/util/dom.js",
- "scripts/util/date-time.js",
- "scripts/util/encoding.js",
- "scripts/util/sign.js",
-
- "scripts/index.js",
- "scripts/index/create-project-ui.js",
- "scripts/index/open-project-ui.js",
- "scripts/index/import-project-ui.js",
-
- "scripts/index/default-importing-controller/controller.js",
- "scripts/index/default-importing-controller/file-selection-panel.js",
- "scripts/index/default-importing-controller/parsing-panel.js",
-
- "scripts/index/default-importing-sources/sources.js",
- "scripts/index/parser-interfaces/preview-table.js",
- "scripts/index/parser-interfaces/separator-based-parser-ui.js",
- "scripts/index/parser-interfaces/line-based-parser-ui.js",
- "scripts/index/parser-interfaces/fixed-width-parser-ui.js",
- "scripts/index/parser-interfaces/excel-parser-ui.js",
- "scripts/index/parser-interfaces/xml-parser-ui.js",
- "scripts/index/parser-interfaces/json-parser-ui.js",
- "scripts/index/parser-interfaces/rdf-triples-parser-ui.js"
- ]
- );
-
- ClientSideResourceManager.addPaths(
- "index/styles",
- module,
- [
- "externals/jquery-ui/css/ui-lightness/jquery-ui-1.8.20.custom.css",
- "styles/jquery-ui-overrides.less",
- "styles/common.less",
- "styles/pure.css",
- "styles/util/dialog.less",
- "styles/util/encoding.less",
-
- "styles/index.less",
- "styles/index/create-project-ui.less",
- "styles/index/open-project-ui.less",
- "styles/index/import-project-ui.less",
-
- "styles/index/default-importing-controller.less",
- "styles/index/default-importing-file-selection-panel.less",
- "styles/index/default-importing-parsing-panel.less",
-
- "styles/index/default-importing-sources.less",
- "styles/views/data-table-view.less", // for the preview table's styles
- "styles/index/fixed-width-parser-ui.less",
- "styles/index/xml-parser-ui.less",
- "styles/index/json-parser-ui.less"
- ]
- );
-
- ClientSideResourceManager.addPaths(
- "project/scripts",
- module,
- [
+ "externals/date.js",
+
+ "externals/CFInstall.min.js",
+ "scripts/chrome-frame.js",
+
+ "scripts/util/misc.js",
+ "scripts/util/url.js",
+ "scripts/util/string.js",
+ "scripts/util/ajax.js",
+ "scripts/util/menu.js",
+ "scripts/util/dialog.js",
+ "scripts/util/dom.js",
+ "scripts/util/date-time.js",
+ "scripts/util/encoding.js",
+ "scripts/util/sign.js",
+
+ "scripts/index.js",
+ "scripts/index/create-project-ui.js",
+ "scripts/index/open-project-ui.js",
+ "scripts/index/import-project-ui.js",
+
+ "scripts/index/default-importing-controller/controller.js",
+ "scripts/index/default-importing-controller/file-selection-panel.js",
+ "scripts/index/default-importing-controller/parsing-panel.js",
+
+ "scripts/index/default-importing-sources/sources.js",
+ "scripts/index/parser-interfaces/preview-table.js",
+ "scripts/index/parser-interfaces/separator-based-parser-ui.js",
+ "scripts/index/parser-interfaces/line-based-parser-ui.js",
+ "scripts/index/parser-interfaces/fixed-width-parser-ui.js",
+ "scripts/index/parser-interfaces/excel-parser-ui.js",
+ "scripts/index/parser-interfaces/xml-parser-ui.js",
+ "scripts/index/parser-interfaces/json-parser-ui.js",
+ "scripts/index/parser-interfaces/rdf-triples-parser-ui.js"
+ ]
+ );
+
+ ClientSideResourceManager.addPaths(
+ "index/styles",
+ module,
+ [
+ "externals/jquery-ui/css/ui-lightness/jquery-ui-1.8.20.custom.css",
+ "styles/jquery-ui-overrides.less",
+ "styles/common.less",
+ "styles/pure.css",
+ "styles/util/dialog.less",
+ "styles/util/encoding.less",
+
+ "styles/index.less",
+ "styles/index/create-project-ui.less",
+ "styles/index/open-project-ui.less",
+ "styles/index/import-project-ui.less",
+
+ "styles/index/default-importing-controller.less",
+ "styles/index/default-importing-file-selection-panel.less",
+ "styles/index/default-importing-parsing-panel.less",
+
+ "styles/index/default-importing-sources.less",
+ "styles/views/data-table-view.less", // for the preview table's styles
+ "styles/index/fixed-width-parser-ui.less",
+ "styles/index/xml-parser-ui.less",
+ "styles/index/json-parser-ui.less"
+ ]
+ );
+
+ ClientSideResourceManager.addPaths(
+ "project/scripts",
+ module,
+ [
"externals/jquery-1.7.2.min.js",
- "externals/jquery.cookie.js",
- "externals/jquery.eventstack-0.3.js",
- "externals/suggest/suggest-4_0.min.js",
+ "externals/jquery.cookie.js",
+ "externals/jquery.eventstack-0.3.js",
+ "externals/suggest/suggest-4_1.min.js",
"externals/jquery-ui/jquery-ui-1.8.20.custom.min.js",
- "externals/imgareaselect/jquery.imgareaselect.js",
- "externals/date.js",
-
- "externals/CFInstall.min.js",
- "scripts/chrome-frame.js",
-
- "scripts/project.js",
-
- "scripts/util/misc.js",
- "scripts/util/url.js",
- "scripts/util/string.js",
- "scripts/util/ajax.js",
- "scripts/util/menu.js",
- "scripts/util/dialog.js",
- "scripts/util/dom.js",
- "scripts/util/date-time.js",
- "scripts/util/custom-suggest.js",
- "scripts/util/encoding.js",
- "scripts/util/sign.js",
-
- "scripts/widgets/histogram-widget.js",
- "scripts/widgets/slider-widget.js",
-
- "scripts/project/browsing-engine.js",
- "scripts/project/history-panel.js",
- "scripts/project/process-panel.js",
- "scripts/project/extension-bar.js",
- "scripts/project/summary-bar.js",
- "scripts/project/exporters.js",
- "scripts/project/scripting.js",
-
- "scripts/facets/list-facet.js",
- "scripts/facets/range-facet.js",
- "scripts/facets/timerange-facet.js",
- "scripts/facets/scatterplot-facet.js",
- "scripts/facets/text-search-facet.js",
-
- "scripts/views/data-table/data-table-view.js",
- "scripts/views/data-table/cell-ui.js",
- "scripts/views/data-table/column-header-ui.js",
- "scripts/views/data-table/menu-facets.js",
- "scripts/views/data-table/menu-edit-cells.js",
- "scripts/views/data-table/menu-edit-column.js",
- "scripts/views/data-table/menu-reconcile.js",
-
- "scripts/reconciliation/recon-manager.js",
- "scripts/reconciliation/recon-dialog.js",
- "scripts/reconciliation/freebase-query-panel.js",
- "scripts/reconciliation/standard-service-panel.js",
-
- "scripts/dialogs/expression-preview-dialog.js",
- "scripts/dialogs/clustering-dialog.js",
- "scripts/dialogs/scatterplot-dialog.js",
- "scripts/dialogs/templating-exporter-dialog.js",
- "scripts/dialogs/column-reordering-dialog.js",
- "scripts/dialogs/custom-tabular-exporter-dialog.js"
- ]
- );
-
- ClientSideResourceManager.addPaths(
- "project/styles",
- module,
- [
- "externals/suggest/css/suggest-4_0.min.css",
- "externals/jquery-ui/css/ui-lightness/jquery-ui-1.8.20.custom.css",
- "externals/imgareaselect/css/imgareaselect-default.css",
-
- "styles/jquery-ui-overrides.less",
- "styles/common.less",
- "styles/pure.css",
-
- "styles/util/menu.less",
- "styles/util/dialog.less",
- "styles/util/custom-suggest.less",
- "styles/util/encoding.less",
-
- "styles/project.less",
- "styles/project/sidebar.less",
- "styles/project/facets.less",
- "styles/project/process.less",
-
- "styles/widgets/histogram-widget.less",
- "styles/widgets/slider-widget.less",
-
- "styles/views/data-table-view.less",
-
- "styles/dialogs/expression-preview-dialog.less",
- "styles/dialogs/clustering-dialog.less",
- "styles/dialogs/scatterplot-dialog.less",
- "styles/dialogs/column-reordering-dialog.less",
- "styles/dialogs/custom-tabular-exporter-dialog.less",
-
- "styles/reconciliation/recon-dialog.less",
- "styles/reconciliation/standard-service-panel.less"
- ]
- );
-
- ClientSideResourceManager.addPaths(
- "preferences/scripts",
- module,
- [
+ "externals/imgareaselect/jquery.imgareaselect.js",
+ "externals/date.js",
+
+ "externals/CFInstall.min.js",
+ "scripts/chrome-frame.js",
+
+ "scripts/project.js",
+
+ "scripts/util/misc.js",
+ "scripts/util/url.js",
+ "scripts/util/string.js",
+ "scripts/util/ajax.js",
+ "scripts/util/menu.js",
+ "scripts/util/dialog.js",
+ "scripts/util/dom.js",
+ "scripts/util/date-time.js",
+ "scripts/util/custom-suggest.js",
+ "scripts/util/encoding.js",
+ "scripts/util/sign.js",
+
+ "scripts/widgets/histogram-widget.js",
+ "scripts/widgets/slider-widget.js",
+
+ "scripts/project/browsing-engine.js",
+ "scripts/project/history-panel.js",
+ "scripts/project/process-panel.js",
+ "scripts/project/extension-bar.js",
+ "scripts/project/summary-bar.js",
+ "scripts/project/exporters.js",
+ "scripts/project/scripting.js",
+
+ "scripts/facets/list-facet.js",
+ "scripts/facets/range-facet.js",
+ "scripts/facets/timerange-facet.js",
+ "scripts/facets/scatterplot-facet.js",
+ "scripts/facets/text-search-facet.js",
+
+ "scripts/views/data-table/data-table-view.js",
+ "scripts/views/data-table/cell-ui.js",
+ "scripts/views/data-table/column-header-ui.js",
+ "scripts/views/data-table/menu-facets.js",
+ "scripts/views/data-table/menu-edit-cells.js",
+ "scripts/views/data-table/menu-edit-column.js",
+ "scripts/views/data-table/menu-reconcile.js",
+
+ "scripts/reconciliation/recon-manager.js",
+ "scripts/reconciliation/recon-dialog.js",
+ "scripts/reconciliation/freebase-query-panel.js",
+ "scripts/reconciliation/standard-service-panel.js",
+
+ "scripts/dialogs/expression-preview-dialog.js",
+ "scripts/dialogs/clustering-dialog.js",
+ "scripts/dialogs/scatterplot-dialog.js",
+ "scripts/dialogs/templating-exporter-dialog.js",
+ "scripts/dialogs/column-reordering-dialog.js",
+ "scripts/dialogs/custom-tabular-exporter-dialog.js"
+ ]
+ );
+
+ ClientSideResourceManager.addPaths(
+ "project/styles",
+ module,
+ [
+ "externals/suggest/css/suggest-4_1.min.css",
+ "externals/jquery-ui/css/ui-lightness/jquery-ui-1.8.20.custom.css",
+ "externals/imgareaselect/css/imgareaselect-default.css",
+
+ "styles/jquery-ui-overrides.less",
+ "styles/common.less",
+ "styles/pure.css",
+
+ "styles/util/menu.less",
+ "styles/util/dialog.less",
+ "styles/util/custom-suggest.less",
+ "styles/util/encoding.less",
+
+ "styles/project.less",
+ "styles/project/sidebar.less",
+ "styles/project/facets.less",
+ "styles/project/process.less",
+
+ "styles/widgets/histogram-widget.less",
+ "styles/widgets/slider-widget.less",
+
+ "styles/views/data-table-view.less",
+
+ "styles/dialogs/expression-preview-dialog.less",
+ "styles/dialogs/clustering-dialog.less",
+ "styles/dialogs/scatterplot-dialog.less",
+ "styles/dialogs/column-reordering-dialog.less",
+ "styles/dialogs/custom-tabular-exporter-dialog.less",
+
+ "styles/reconciliation/recon-dialog.less",
+ "styles/reconciliation/standard-service-panel.less"
+ ]
+ );
+
+ ClientSideResourceManager.addPaths(
+ "preferences/scripts",
+ module,
+ [
"externals/jquery-1.7.2.min.js",
- "externals/jquery.cookie.js",
- "externals/suggest/suggest-4_0.min.js",
+ "externals/jquery.cookie.js",
+ "externals/suggest/suggest-4_1.min.js",
"externals/jquery-ui/jquery-ui-1.8.20.custom.min.js",
- "externals/imgareaselect/jquery.imgareaselect.js",
- "externals/date.js",
- "scripts/preferences.js"
- ]
- );
- ClientSideResourceManager.addPaths(
- "preferences/styles",
- module,
- [
- "externals/suggest/css/suggest-4_0.min.css",
- "externals/jquery-ui/css/ui-lightness/jquery-ui-1.8.20.custom.css",
- "styles/jquery-ui-overrides.less",
- "styles/common.less",
- "styles/pure.css",
- "styles/util/dialog.less"
- ]
- );
-}
-
-/*
- * This is the function that is invoked by Butterfly
- */
-function process(path, request, response) {
- if (path == "wirings.js") {
- var wirings = butterfly.getWirings(request);
- butterfly.sendString(
- request,
- response,
- "var ModuleWirings = " + butterfly.toJSONString(wirings) + ";",
- encoding,
- "text/javascript"
- );
- } else {
- if (path == "/" || path == "") {
- path = "index";
- } else if (path.endsWith("/")) {
- path = path.substring(0, path.length - 1);
- }
-
- var slash = path.lastIndexOf("/");
- var lastSegment = slash >= 0 ? path.substring(slash + 1) : path;
-
- if (path.endsWith("-bundle.js")) {
- lastSegment = lastSegment.substring(0, lastSegment.length - "-bundle.js".length);
-
- response.setContentType("text/javascript");
- response.setCharacterEncoding(encoding);
-
- var output = response.getWriter();
- try {
- var paths = ClientSideResourceManager.getPaths(lastSegment + "/scripts");
- for each (var qualifiedPath in paths) {
- var input = null;
- try {
- var url = qualifiedPath.module.getResource(qualifiedPath.path);
- var urlConnection = url.openConnection();
-
- input = new Packages.java.io.BufferedReader(
- new Packages.java.io.InputStreamReader(urlConnection.getInputStream()));
-
- output.write("/* ===== ");
- output.write(qualifiedPath.fullPath);
- output.write(" ===== */\n\n");
-
- Packages.org.apache.commons.io.IOUtils.copy(input, output);
-
- output.write("\n\n");
- } catch (e) {
- // silent
- } finally {
- if (input != null) input.close();
- }
- }
- } catch (e) {
- // silent
- } finally {
- butterfly.responded();
- }
- return true;
- } else {
- if (lastSegment in templatedFiles) {
- var context = {};
-
- var params = new Packages.java.util.Properties();
- var e = request.getParameterNames();
- while (e.hasMoreElements()) {
- var name = e.nextElement();
- params.put(name, request.getParameterValues(name)[0]);
- }
- context.params = params;
-
- // We prepend '' to convert the Java string to a Javascript string.
- context.projectID = ('' + request.getParameter("project")).replace(/\D/g, '');
-
- var styles = ClientSideResourceManager.getPaths(lastSegment + "/styles");
- var styleInjection = [];
- for each (var qualifiedPath in styles) {
- styleInjection.push(
- '');
- }
- context.styleInjection = styleInjection.join("\n");
-
- if (bundle) {
- context.scriptInjection = '';
- } else {
- var scripts = ClientSideResourceManager.getPaths(lastSegment + "/scripts");
- var scriptInjection = [];
- for each (var qualifiedPath in scripts) {
- scriptInjection.push(
- '');
- }
- context.scriptInjection = scriptInjection.join("\n");
- }
-
- if (templatedFiles[lastSegment].outputEncodings) {
- var encodings = [];
-
- var sortedCharsetMap = Packages.java.nio.charset.Charset.availableCharsets();
- for each (var code in sortedCharsetMap.keySet().toArray()) {
- var charset = sortedCharsetMap.get(code);
- var aliases = [];
- for each (var alias in charset.aliases().toArray()) {
- aliases.push(alias);
- }
-
- encodings.push({
- code: code,
- name: charset.displayName(),
- aliases: aliases
- });
- }
-
- context.encodingJson = butterfly.toJSONString(encodings);
- context.defaultEncoding = butterfly.toJSONString(Packages.java.nio.charset.Charset.defaultCharset().name());
- }
-
- send(request, response, path + ".vt", context);
- }
- }
- }
-}
-
-function send(request, response, template, context) {
- butterfly.sendTextFromTemplate(request, response, context, template, encoding, html);
-}
+ "externals/imgareaselect/jquery.imgareaselect.js",
+ "externals/date.js",
+ "scripts/preferences.js"
+ ]
+ );
+ ClientSideResourceManager.addPaths(
+ "preferences/styles",
+ module,
+ [
+ "externals/suggest/css/suggest-4_1.min.css",
+ "externals/jquery-ui/css/ui-lightness/jquery-ui-1.8.20.custom.css",
+ "styles/jquery-ui-overrides.less",
+ "styles/common.less",
+ "styles/pure.css",
+ "styles/util/dialog.less"
+ ]
+ );
+}
+
+/*
+ * This is the function that is invoked by Butterfly
+ */
+function process(path, request, response) {
+ if (path == "wirings.js") {
+ var wirings = butterfly.getWirings(request);
+ butterfly.sendString(
+ request,
+ response,
+ "var ModuleWirings = " + butterfly.toJSONString(wirings) + ";",
+ encoding,
+ "text/javascript"
+ );
+ } else {
+ if (path == "/" || path == "") {
+ path = "index";
+ } else if (path.endsWith("/")) {
+ path = path.substring(0, path.length - 1);
+ }
+
+ var slash = path.lastIndexOf("/");
+ var lastSegment = slash >= 0 ? path.substring(slash + 1) : path;
+
+ if (path.endsWith("-bundle.js")) {
+ lastSegment = lastSegment.substring(0, lastSegment.length - "-bundle.js".length);
+
+ response.setContentType("text/javascript");
+ response.setCharacterEncoding(encoding);
+
+ var output = response.getWriter();
+ try {
+ var paths = ClientSideResourceManager.getPaths(lastSegment + "/scripts");
+ for each (var qualifiedPath in paths) {
+ var input = null;
+ try {
+ var url = qualifiedPath.module.getResource(qualifiedPath.path);
+ var urlConnection = url.openConnection();
+
+ input = new Packages.java.io.BufferedReader(
+ new Packages.java.io.InputStreamReader(urlConnection.getInputStream()));
+
+ output.write("/* ===== ");
+ output.write(qualifiedPath.fullPath);
+ output.write(" ===== */\n\n");
+
+ Packages.org.apache.commons.io.IOUtils.copy(input, output);
+
+ output.write("\n\n");
+ } catch (e) {
+ // silent
+ } finally {
+ if (input != null) input.close();
+ }
+ }
+ } catch (e) {
+ // silent
+ } finally {
+ butterfly.responded();
+ }
+ return true;
+ } else {
+ if (lastSegment in templatedFiles) {
+ var context = {};
+
+ var params = new Packages.java.util.Properties();
+ var e = request.getParameterNames();
+ while (e.hasMoreElements()) {
+ var name = e.nextElement();
+ params.put(name, request.getParameterValues(name)[0]);
+ }
+ context.params = params;
+
+ // We prepend '' to convert the Java string to a Javascript string.
+ context.projectID = ('' + request.getParameter("project")).replace(/\D/g, '');
+
+ var styles = ClientSideResourceManager.getPaths(lastSegment + "/styles");
+ var styleInjection = [];
+ for each (var qualifiedPath in styles) {
+ styleInjection.push(
+ '');
+ }
+ context.styleInjection = styleInjection.join("\n");
+
+ if (bundle) {
+ context.scriptInjection = '';
+ } else {
+ var scripts = ClientSideResourceManager.getPaths(lastSegment + "/scripts");
+ var scriptInjection = [];
+ for each (var qualifiedPath in scripts) {
+ scriptInjection.push(
+ '');
+ }
+ context.scriptInjection = scriptInjection.join("\n");
+ }
+
+ if (templatedFiles[lastSegment].outputEncodings) {
+ var encodings = [];
+
+ var sortedCharsetMap = Packages.java.nio.charset.Charset.availableCharsets();
+ for each (var code in sortedCharsetMap.keySet().toArray()) {
+ var charset = sortedCharsetMap.get(code);
+ var aliases = [];
+ for each (var alias in charset.aliases().toArray()) {
+ aliases.push(alias);
+ }
+
+ encodings.push({
+ code: code,
+ name: charset.displayName(),
+ aliases: aliases
+ });
+ }
+
+ context.encodingJson = butterfly.toJSONString(encodings);
+ context.defaultEncoding = butterfly.toJSONString(Packages.java.nio.charset.Charset.defaultCharset().name());
+ }
+
+ send(request, response, path + ".vt", context);
+ }
+ }
+ }
+}
+
+function send(request, response, template, context) {
+ butterfly.sendTextFromTemplate(request, response, context, template, encoding, html);
+}
diff --git a/main/webapp/modules/core/externals/suggest/css/suggest-4_1.css b/main/webapp/modules/core/externals/suggest/css/suggest-4_1.css
new file mode 100644
index 000000000..edd1814b5
--- /dev/null
+++ b/main/webapp/modules/core/externals/suggest/css/suggest-4_1.css
@@ -0,0 +1,565 @@
+/*
+=======================================================
+
+FREEBASE SUGGEST
+
+This file is part of the freebase-suggest jQuery plugin.
+
+It is maintained by Metaweb Technologies, Inc. and
+available for use under a Creative Commons License.
+
+Author: Kai Conragan (kai@metaweb.com)
+
+ GLOSSARY
+
+ .fbs-pane : Outermost container for result list
+ .fbs-subpane : Inner container for result list
+ .fbs-list : Contained by .fbs-subpane, this is the actual results list
+ .fbs-item : Individual item in results list -
+ .fbs-flyout-pane : Outermost container for flyout on specific object
+
+=======================================================
+*/
+
+/*
+-------------------------------------------------------
+Freebase Suggest Reset
+-------------------------------------------------------
+
+reset all Freebase Suggest elements to insure consisten cross-browser rendering
+
+*/
+
+.fbs-reset,
+.fbs-reset h1,
+.fbs-reset h2,
+.fbs-reset h3,
+.fbs-reset h4,
+.fbs-reset h5,
+.fbs-reset h6,
+.fbs-reset p,
+.fbs-reset img,
+.fbs-reset dl,
+.fbs-reset dt,
+.fbs-reset dd,
+.fbs-reset ol,
+.fbs-reset ul,
+.fbs-reset li {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest Chrome
+-------------------------------------------------------
+
+You can change the colors of Freebase Suggest by overriding
+the following rules. We recommended that you copy/paste the
+below rules into your own stylesheet to customize.
+
+*/
+
+.fbs-pane,
+.fbs-flyout-pane,
+li.fbs-nomatch,
+a.fbs-more-link,
+li.fbs-selected,
+.fbs-flyout-images,
+#fbs-topic-image {
+ background: #fff;
+}
+
+
+.fbs-suggestnew {
+ color: #444;
+}
+
+.fbs-pane,
+.fbs-flyout-pane,
+.fbs-flyout-subtitle,
+.fbs-topic-properties strong {
+ color: #666;
+}
+
+h3.fbs-topic-properties,
+.fbs-flyout-pane p {
+ color: #444;
+}
+
+.fbs-item-name,
+li.fbs-help-on-focus,
+li.fbs-nomatch,
+.fbs-nomatch-text,
+.fbs-flyout-pane h3,
+.fbs-properties-header {
+ color: #333;
+}
+
+.fbs-pane,
+.fbs-flyout-pane {
+ border: 1px solid #bbb;
+ padding: 2px;
+}
+
+.fbs-flyout-pane {
+ border-color: #ccc;
+}
+
+.fbs-list,
+.fbs-list-icons,
+.fbs-flyout-content,
+.fbs-attribution,
+.fbs-header {
+ background-color: #f5f5f5;
+}
+
+.fbs-header { background: #fefefe; }
+
+li.fbs-help-on-focus,
+li.fbs-nomatch {
+ border-bottom: 1px solid #dae3e9;
+}
+
+.fbs-item-name {
+ border: 1px solid #f5f5f5;
+}
+
+h1#fbs-flyout-title,
+li.fbs-selected .fbs-item-name {
+ color: #f60;
+}
+
+li.fbs-selected .fbs-item-name {
+ border-color: #f60;
+ background: #fff;
+}
+
+
+.fbs-nomatch-text {
+ border-bottom: 1px solid #dae3e9;
+ background: #f8f8f8;
+}
+
+.fbs-suggestnew {
+ background: #eeeeee;
+ border-top: 1px solid #dae3e9;
+}
+
+
+#fbs-flyout-title .fbs-flyout-label {
+ color: #aaa;
+}
+
+/* topic image */
+#fbs-topic-image,
+.fbs-flyout-images {
+ border: 1px solid #a9a9a9;
+}
+
+.fbs-suggestnew-button,
+.fbs-flyout-pane {
+ border: 1px solid #9a9a9a;
+ color: #999999;
+}
+
+.fbs-suggestnew-button {
+ color: #444444;
+}
+
+ul.fbs-list,
+.fbs-flyout-content,
+.fbs-attribution,
+.fbs-header {
+ border: 1px solid #dae3e9;
+}
+
+.fbs-header { border-bottom: 0; }
+
+li.fbs-item {
+ border-bottom: 1px solid #dae3e9;
+ list-style-type: none;
+}
+
+.fbs-attribution {
+ border-top: 0;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest Typography
+-------------------------------------------------------
+
+ establish base typography size by:
+ 1. Setting parent div to font-size 16px;
+ 2. Setting inner div to font-size 62.5%, giving us a 10px baseline
+ 3. Setting global style rules
+*/
+
+.fbs-pane,
+.fbs-flyout-pane {
+ font-size: 16px;
+ font-family: Helvetica Neue, Arial, Helvetica, sans-serif;
+}
+
+ul.fbs-list,
+.fbs-flyout-content,
+.fbs-attribution,
+div.fbs-header {
+ font-size: 62.5%;
+}
+
+
+/* insure
displays bold */
+.fbs-pane strong,
+.fbs-flyout-pane strong {
+ font-weight: bold;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest Structure
+-------------------------------------------------------
+*/
+
+.fbs-flyout-content,
+.fbs-attribution {
+ margin: 2px;
+}
+
+.fbs-flyout-content { margin-bottom: 0; }
+.fbs-attribution { margin-top: 0; }
+
+.fbs-pane { width: 325px; } /* results list container */
+.fbs-flyout-pane { width: 319px; margin-left: 3px; } /* flyout container, 3px narrower on each side to create drawer appearance */
+
+ul.fbs-list {
+ max-height: 320px;
+ overflow: auto;
+ overflow-x: hidden;
+ border-bottom: 0;
+ border-top: 0;
+}
+
+.fbs-flyout-content,
+.fbs-attribution {
+ padding: 5px;
+}
+
+.fbs-flyout-content:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+
+/*
+-------------------------------------------------------
+Freebase Suggest Results List
+-------------------------------------------------------
+*/
+
+/* each .fbs-item is a single returned result */
+li.fbs-help-on-focus,
+li.fbs-nomatch {
+ padding: 6px 8px 7px 6px;
+ font-size: 1.4em;
+ line-height: 1;
+}
+
+/* show more results */
+li.fbs-more { padding: 0; background: transparent;}
+
+a.fbs-more-link {
+ display: block;
+ padding: 4px;
+ font-weight: bold;
+ font-size: 12px;
+}
+
+.fbs-more .fbs-help {
+ display: none;
+}
+
+.fbs-header {
+ font-weight: bold;
+ padding: 4px 6px;
+ margin: 2px 2px -2px 2px;
+}
+
+.fbs-item-name label {
+ font-size: 0.9em;
+}
+
+
+.fbs-item-type,
+.fbs-item-name label {
+ display: block;
+ overflow: hidden;
+ white-space: nowrap;
+/* text-overflow:ellipsis;*/
+}
+
+.fbs-item-name {
+ padding: 2px 8px 1px 6px;
+ font-size: 1.4em;
+ line-height: 1.4em;
+ background: #f4f8fb;
+}
+
+/* result name */
+.fbs-item-name strong {
+ font-weight: bold;
+}
+
+.fbs-item-type {
+ color: #777;
+ float: right;
+ font-size: 0.7em;
+ max-width: 40%;
+ padding-left: 0.25em;
+}
+
+/* hover state of .fbs-item */
+li.fbs-selected {
+ cursor: pointer;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest Status
+-------------------------------------------------------
+*/
+
+.fbs-status {
+ border: 1px solid #dae3e9;
+ padding: 4px 5px;
+ color: #000;
+ font-size: 0.7em;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest No Results
+-------------------------------------------------------
+*/
+
+li.fbs-nomatch {
+ padding: 0;
+}
+
+.fbs-nomatch-text {
+ display: block;
+ font-weight: bold;
+ line-height: 1;
+ font-size: .9em;
+}
+
+.fbs-nomatch-text,
+.fbs-nomatch h3,
+ul.fbs-search-tips {
+ padding: 6px 8px 7px 6px;
+}
+
+.fbs-nomatch h3 {
+ font-weight: bold;
+ font-size: 0.9em;
+}
+
+ul.fbs-search-tips li {
+ list-style: disc;
+ margin-left: 1.6em;
+ margin-bottom: 0.3em;
+ font-size: 0.9em;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest Create New
+-------------------------------------------------------
+*/
+
+/* suggest new container */
+.fbs-suggestnew {
+ padding: 0.4em 0.3em 0.5em 8px;
+}
+
+.fbs-suggestnew-button {
+ cursor: pointer;
+ padding: 0.2em 0.3em;
+ margin-left: 0px !important;
+ max-width: 17em;
+ font-size: .8em;
+}
+
+.fbs-suggestnew-description {
+ margin-bottom: 0.6em;
+ font-size: 0.7em;
+ }
+
+/* (Shift + Enter) */
+.fbs-more-shortcut,
+.fbs-suggestnew-shortcut {
+ margin-left: 0.4em;
+ font-size: 70%;
+ color: #999999;
+}
+
+/** placeholder text **/
+.fbs-placeholder {
+ color: #99a;
+ font-style: italic;
+}
+
+/*
+-------------------------------------------------------
+Freebase Suggest Flyout Elements
+-------------------------------------------------------
+*/
+
+.fbs-flyout-id {
+ color: #999 !important;
+}
+
+/* the object title */
+h1#fbs-flyout-title {
+ font-size: 1.2em;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ margin-top: 0.3em;
+}
+
+h1#fbs-flyout-title .fbs-flyout-template-label {
+ color: #999999;
+ font-size: 0.8em;
+}
+
+
+/* denotes topic, type, view, base, etc. */
+#fbs-flyout-title .fbs-flyout-label {
+ font-weight: normal;
+}
+
+/* Image for single topic result */
+#fbs-topic-image {
+ float: left;
+ padding: 1px;
+ margin-right: 5px;
+ margin-bottom: 5px;
+}
+
+/* Image pair for views/base/etc. */
+.fbs-flyout-images {
+ float: left;
+ margin: 0 10px 0 0;
+ padding: 1px 0 1px 1px;
+}
+
+.fbs-flyout-images img {
+ float: left;
+ margin-right: 1px;
+}
+
+.fbs-flyout-subtitle {
+ font-size: 1.1em;
+ margin-bottom: 0.5em;
+}
+
+.fbs-flyout-pane h3 {
+ font-size: 1em;
+ line-height: 1.4;
+ margin-bottom: 0.25em;
+}
+
+.fbs-properties-header {
+ font-size: 1em;
+ font-weight: bold;
+ margin: 0.5em 0;
+}
+
+h3.fbs-topic-properties {
+ font-size: 1.2em;
+ font-weight: bold;
+}
+
+.fbs-topic-properties strong {
+ display: inline;
+ font-size: 0.8em;
+}
+
+.fbs-flyout-pane p {
+ font-size: 1.2em;
+ line-height: 1.4;
+}
+
+/* this class is applied with fbs-topic-flyout when a thumbnail is present
+ in order to provide a fixed margin on text to prevent poor text wrapping
+ around thumbnail
+*/
+p.fbs-flyout-image-true,
+h3.fbs-flyout-image-true,
+h1.fbs-flyout-image-true { margin-left: 85px; }
+
+.fbs-meta-info { margin-left: 110px; }
+#fbs-user-flyout li {
+ margin-left: 100px;
+ }
+#fbs-domain-flyout .fbs-meta-info { margin-left: 145px;}
+
+/* generic flyout list */
+.fbs-flyout-list li {
+ font-size: 1em;
+ margin-left: 15px;
+}
+
+#fbs-domain-flyout #fbs-flyout-title { margin-bottom: 0.5em; }
+
+/*
+-------------------------------------------------------
+Freebase Suggest Attribution
+-------------------------------------------------------
+*/
+
+.fbs-attribution {
+ padding-right: 72px; /* accommodate attribution background image */
+ background-image: url(template/img/fbs-attribution.png);
+ background-repeat: no-repeat;
+ background-position: center right;
+ min-height: 15px;
+}
+
+.fbs-flyout-types {
+ font-style: italic;
+ line-height: 1;
+ font-size: 1.2em;
+}
+
+/*
+-------------------------------------------------------
+Freebase SuggestIE Hacks
+-------------------------------------------------------
+We can't use conditional comments so we have to resort
+to inline Internet Explor fixes
+
+*/
+
+* html .fbs-list,
+* html .fbs-list-icons { height: expression( this.scrollHeight > 410 ? "410" : "auto" ); /* sets max-height for IE */ }
+
+* html .fbs-item-name {
+ width : 253px !important;
+}
+
+* html .fbs-item-name{ width: 100%; }
+
+* html .fbs-flyout-content:after { height: 1px; }
+
diff --git a/main/webapp/modules/core/externals/suggest/css/suggest-4_1.min.css b/main/webapp/modules/core/externals/suggest/css/suggest-4_1.min.css
new file mode 100644
index 000000000..b6989280e
--- /dev/null
+++ b/main/webapp/modules/core/externals/suggest/css/suggest-4_1.min.css
@@ -0,0 +1,36 @@
+
+/*
+ * Copyright 2012, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Additional Licenses for Third Party components can be found here:
+ * http://wiki.freebase.com/wiki/Freebase_Site_License
+ *
+ */
+.fbs-reset,.fbs-reset h1,.fbs-reset h2,.fbs-reset h3,.fbs-reset h4,.fbs-reset h5,.fbs-reset h6,.fbs-reset p,.fbs-reset img,.fbs-reset dl,.fbs-reset dt,.fbs-reset dd,.fbs-reset ol,.fbs-reset ul,.fbs-reset li{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}.fbs-pane,.fbs-flyout-pane,li.fbs-nomatch,a.fbs-more-link,li.fbs-selected,.fbs-flyout-images,#fbs-topic-image{background:#fff}.fbs-suggestnew{color:#444}.fbs-pane,.fbs-flyout-pane,.fbs-flyout-subtitle,.fbs-topic-properties strong{color:#666}h3.fbs-topic-properties,.fbs-flyout-pane p{color:#444}.fbs-item-name,li.fbs-help-on-focus,li.fbs-nomatch,.fbs-nomatch-text,.fbs-flyout-pane h3,.fbs-properties-header{color:#333}.fbs-pane,.fbs-flyout-pane{border:1px solid #bbb;padding:2px}.fbs-flyout-pane{border-color:#ccc}.fbs-list,.fbs-list-icons,.fbs-flyout-content,.fbs-attribution,.fbs-header{background-color:#f5f5f5}.fbs-header{background:#fefefe}li.fbs-help-on-focus,li.fbs-nomatch{border-bottom:1px solid #dae3e9}.fbs-item-name{border:1px solid #f5f5f5}h1#fbs-flyout-title,li.fbs-selected .fbs-item-name{color:#f60}li.fbs-selected .fbs-item-name{border-color:#f60;background:#fff}.fbs-nomatch-text{border-bottom:1px solid #dae3e9;background:#f8f8f8}.fbs-suggestnew{background:#eee;border-top:1px solid #dae3e9}#fbs-flyout-title .fbs-flyout-label{color:#aaa}#fbs-topic-image,.fbs-flyout-images{border:1px solid #a9a9a9}.fbs-suggestnew-button,.fbs-flyout-pane{border:1px solid #9a9a9a;color:#999}.fbs-suggestnew-button{color:#444}ul.fbs-list,.fbs-flyout-content,.fbs-attribution,.fbs-header{border:1px solid #dae3e9}.fbs-header{border-bottom:0}li.fbs-item{border-bottom:1px solid #dae3e9;list-style-type:none}.fbs-attribution{border-top:0}.fbs-pane,.fbs-flyout-pane{font-size:16px;font-family:Helvetica Neue,Arial,Helvetica,sans-serif}ul.fbs-list,.fbs-flyout-content,.fbs-attribution,div.fbs-header{font-size:62.5%}.fbs-pane strong,.fbs-flyout-pane strong{font-weight:bold}.fbs-flyout-content,.fbs-attribution{margin:2px}.fbs-flyout-content{margin-bottom:0}.fbs-attribution{margin-top:0}.fbs-pane{width:325px}.fbs-flyout-pane{width:319px;margin-left:3px}ul.fbs-list{max-height:320px;overflow:auto;overflow-x:hidden;border-bottom:0;border-top:0}.fbs-flyout-content,.fbs-attribution{padding:5px}.fbs-flyout-content:after{content:".";display:block;height:0;clear:both;visibility:hidden}li.fbs-help-on-focus,li.fbs-nomatch{padding:6px 8px 7px 6px;font-size:1.4em;line-height:1}li.fbs-more{padding:0;background:transparent}a.fbs-more-link{display:block;padding:4px;font-weight:bold;font-size:12px}.fbs-more .fbs-help{display:none}.fbs-header{font-weight:bold;padding:4px 6px;margin:2px 2px -2px 2px}.fbs-item-name label{font-size:.9em}.fbs-item-type,.fbs-item-name label{display:block;overflow:hidden;white-space:nowrap}.fbs-item-name{padding:2px 8px 1px 6px;font-size:1.4em;line-height:1.4em;background:#f4f8fb}.fbs-item-name strong{font-weight:bold}.fbs-item-type{color:#777;float:right;font-size:.7em;max-width:40%;padding-left:.25em}li.fbs-selected{cursor:pointer}.fbs-status{border:1px solid #dae3e9;padding:4px 5px;color:#000;font-size:.7em}li.fbs-nomatch{padding:0}.fbs-nomatch-text{display:block;font-weight:bold;line-height:1;font-size:.9em}.fbs-nomatch-text,.fbs-nomatch h3,ul.fbs-search-tips{padding:6px 8px 7px 6px}.fbs-nomatch h3{font-weight:bold;font-size:.9em}ul.fbs-search-tips li{list-style:disc;margin-left:1.6em;margin-bottom:.3em;font-size:.9em}.fbs-suggestnew{padding:.4em .3em .5em 8px}.fbs-suggestnew-button{cursor:pointer;padding:.2em .3em;margin-left:0!important;max-width:17em;font-size:.8em}.fbs-suggestnew-description{margin-bottom:.6em;font-size:.7em}.fbs-more-shortcut,.fbs-suggestnew-shortcut{margin-left:.4em;font-size:70%;color:#999}.fbs-placeholder{color:#99a;font-style:italic}.fbs-flyout-id{color:#999!important}h1#fbs-flyout-title{font-size:1.2em;font-weight:bold;margin-bottom:.5em;margin-top:.3em}h1#fbs-flyout-title .fbs-flyout-template-label{color:#999;font-size:.8em}#fbs-flyout-title .fbs-flyout-label{font-weight:normal}#fbs-topic-image{float:left;padding:1px;margin-right:5px;margin-bottom:5px}.fbs-flyout-images{float:left;margin:0 10px 0 0;padding:1px 0 1px 1px}.fbs-flyout-images img{float:left;margin-right:1px}.fbs-flyout-subtitle{font-size:1.1em;margin-bottom:.5em}.fbs-flyout-pane h3{font-size:1em;line-height:1.4;margin-bottom:.25em}.fbs-properties-header{font-size:1em;font-weight:bold;margin:.5em 0}h3.fbs-topic-properties{font-size:1.2em;font-weight:bold}.fbs-topic-properties strong{display:inline;font-size:.8em}.fbs-flyout-pane p{font-size:1.2em;line-height:1.4}p.fbs-flyout-image-true,h3.fbs-flyout-image-true,h1.fbs-flyout-image-true{margin-left:85px}.fbs-meta-info{margin-left:110px}#fbs-user-flyout li{margin-left:100px}#fbs-domain-flyout .fbs-meta-info{margin-left:145px}.fbs-flyout-list li{font-size:1em;margin-left:15px}#fbs-domain-flyout #fbs-flyout-title{margin-bottom:.5em}.fbs-attribution{padding-right:72px;background-image:url("/static/95a.lib.www.tags.svn.freebase-site.googlecode.dev/template/img/fbs-attribution.png");background-repeat:no-repeat;background-position:center right;min-height:15px}.fbs-flyout-types{font-style:italic;line-height:1;font-size:1.2em}
\ No newline at end of file
diff --git a/main/webapp/modules/core/externals/suggest/suggest-4_0.min.js b/main/webapp/modules/core/externals/suggest/suggest-4_0.min.js
deleted file mode 100644
index 6a01564d4..000000000
--- a/main/webapp/modules/core/externals/suggest/suggest-4_0.min.js
+++ /dev/null
@@ -1,81 +0,0 @@
-
-/*
- * Copyright 2012, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Additional Licenses for Third Party components can be found here:
- * http://wiki.freebase.com/wiki/Freebase_Site_License
- *
- */
-(function(c,t){if(!("console"in window)){var q=window.console={};q.log=q.warn=q.error=q.debug=function(){}}c(function(){var a=c("");c(document.body).append(a);var b=setTimeout(function(){if(c.cleanData){var d=c.cleanData;c.cleanData=function(e){for(var f=0,h;(h=e[f])!=null;f++)c(h).triggerHandler("remove");d(e)}}else{var g=c.fn.remove;c.fn.remove=function(e,f){return this.each(function(){if(!f)if(!e||c.filter(e,[this]).length)c("*",this).add([this]).each(function(){c(this).triggerHandler("remove")});
-return g.call(c(this),e,f)})}}},1);a.bind("remove",function(){clearTimeout(b)});a.remove()});var r={key:1,filter:1,spell:1,exact:1,lang:1,scoring:1,prefixed:1,stemmed:1,format:1,mql_output:1};c.suggest=function(a,b){c.fn[a]=function(d){this.length||console.warn("Suggest: invoked on empty element set");return this.each(function(){if(this.nodeName)if(this.nodeName.toUpperCase()==="INPUT")this.type&&this.type.toUpperCase()!=="TEXT"&&console.warn("Suggest: unsupported INPUT type: "+this.type);else console.warn("Suggest: unsupported DOM element: "+
-this.nodeName);var g=c.data(this,a);g&&g._destroy();c.data(this,a,new c.suggest[a](this,d))._init()})};c.suggest[a]=function(d,g){var e=this,f=this.options=c.extend(true,{},c.suggest.defaults,c.suggest[a].defaults,g),h=f.css_prefix=f.css_prefix||"",i=f.css;this.name=a;c.each(i,function(j){i[j]=h+i[j]});f.ac_param={};c.each(r,function(j){var m=f[j];m===null||m===""||(f.ac_param[j]=m)});f.flyout_lang=null;if(f.ac_param.lang){var k=f.ac_param.lang;if(c.type(k)==="string")k=k.split(",");if(c.isArray(k)&&
-k.length)if(k=c.trim(k[0]))f.flyout_lang=k}this._status={START:"",LOADING:"",SELECT:"",ERROR:""};if(f.status&&f.status instanceof Array&&f.status.length>=3){this._status.START=f.status[0]||"";this._status.LOADING=f.status[1]||"";this._status.SELECT=f.status[2]||"";if(f.status.length===4)this._status.ERROR=f.status[3]||""}k=this.status=c('
').addClass(i.status);var n=this.list=c("
").addClass(i.list),l=this.pane=c('').addClass(i.pane);
-l.append(k).append(n);if(f.parent)c(f.parent).append(l);else{l.css("position","absolute");f.zIndex&&l.css("z-index",f.zIndex);c(document.body).append(l)}l.bind("mousedown",function(j){e.input.data("dont_hide",true);j.stopPropagation()}).bind("mouseup",function(j){e.input.data("dont_hide")&&e.input.focus();e.input.removeData("dont_hide");j.stopPropagation()}).bind("click",function(j){j.stopPropagation();if(j=e.get_selected()){e.onselect(j,true);e.hide_all()}});n.hover(function(j){e.hoverover_list(j)},
-function(j){e.hoverout_list(j)});this.input=c(d).attr("autocomplete","off").unbind(".suggest").bind("remove.suggest",function(){e._destroy()}).bind("keydown.suggest",function(j){e.keydown(j)}).bind("keypress.suggest",function(j){e.keypress(j)}).bind("keyup.suggest",function(j){e.keyup(j)}).bind("blur.suggest",function(j){e.blur(j)}).bind("textchange.suggest",function(){e.textchange()}).bind("focus.suggest",function(j){e.focus(j)}).bind(c.browser.msie?"paste.suggest":"input.suggest",function(){clearTimeout(e.paste_timeout);
-e.paste_timeout=setTimeout(function(){e.textchange()},0)});this.onresize=function(){e.invalidate_position();if(l.is(":visible")){e.position();if(f.flyout&&e.flyoutpane&&e.flyoutpane.is(":visible")){var j=e.get_selected();j&&e.flyout_position(j)}}};c(window).bind("resize.suggest",this.onresize).bind("scroll.suggest",this.onresize)};c.suggest[a].prototype=c.extend({},c.suggest.prototype,b)};c.suggest.prototype={_init:function(){},_destroy:function(){this.pane.remove();this.list.remove();this.input.unbind(".suggest");
-c(window).unbind("resize.suggest",this.onresize).unbind("scroll.suggest",this.onresize);this.input.removeData("data.suggest")},invalidate_position:function(){self._position=null},status_start:function(){this.hide_all();this.status.siblings().hide();if(this._status.START){this.status.text(this._status.START).show();if(!this.pane.is(":visible")){this.position();this.pane_show()}}this._status.LOADING&&this.status.removeClass("loading")},status_loading:function(){this.status.siblings().show();if(this._status.LOADING){this.status.addClass("loading").text(this._status.LOADING).show();
-if(!this.pane.is(":visible")){this.position();this.pane_show()}}else this.status.hide()},status_select:function(){this.status.siblings().show();this._status.SELECT?this.status.text(this._status.SELECT).show():this.status.hide();this._status.LOADING&&this.status.removeClass("loading")},status_error:function(){this.status.siblings().show();this._status.ERROR?this.status.text(this._status.ERROR).show():this.status.hide();this._status.LOADING&&this.status.removeClass("loading")},focus:function(a){this.input.val()===
-""?this.status_start():this.focus_hook(a)},focus_hook:function(){if(!this.input.data("data.suggest")&&!this.pane.is(":visible")&&c("."+this.options.css.item,this.list).length){this.position();this.pane_show()}},keydown:function(a){var b=a.keyCode;if(b===9)this.tab(a);else if(b===38||b===40)a.shiftKey||a.preventDefault()},keypress:function(a){var b=a.keyCode;if(b===38||b===40)a.shiftKey||a.preventDefault();else b===13&&this.enter(a)},keyup:function(a){var b=a.keyCode;if(b===38){a.preventDefault();
-this.up(a)}else if(b===40){a.preventDefault();this.down(a)}else if(a.ctrlKey&&b===77)c(".fbs-more-link",this.pane).click();else if(c.suggest.is_char(a)){clearTimeout(this.keypress.timeout);var d=this;this.keypress.timeout=setTimeout(function(){d.textchange()},0)}else b===27&&this.escape(a);return true},blur:function(){if(!this.input.data("dont_hide")){this.input.data("data.suggest");this.hide_all()}},tab:function(a){if(!(a.shiftKey||a.metaKey||a.ctrlKey)){a=this.options;a=this.pane.is(":visible")&&
-c("."+a.css.item,this.list).length;var b=this.get_selected();if(a&&b){this.onselect(b);this.hide_all()}}},enter:function(a){var b=this.options;if(this.pane.is(":visible"))if(a.shiftKey){this.shift_enter(a);a.preventDefault()}else if(c("."+b.css.item,this.list).length)if(b=this.get_selected()){this.onselect(b);this.hide_all();a.preventDefault()}else{this.input.data("data.suggest");if(c("."+this.options.css.item+":visible",this.list).length){this.updown(false);a.preventDefault()}}},shift_enter:function(){},
-escape:function(){this.hide_all()},up:function(a){this.updown(true,a.ctrlKey||a.shiftKey)},down:function(a){this.updown(false,null,a.ctrlKey||a.shiftKey)},updown:function(a,b,d){var g=this.options.css,e=this.list;if(this.pane.is(":visible")){var f=c("."+g.item+":visible",e);if(f.length){e=c(f[0]);f=c(f[f.length-1]);var h=this.get_selected()||[];clearTimeout(this.ignore_mouseover.timeout);this._ignore_mouseover=false;if(a)if(b)this._goto(e);else if(h.length)if(h[0]==e[0]){e.removeClass(g.selected);
-this.input.val(this.input.data("original.suggest"));this.hoverout_list()}else this._goto(h.prevAll("."+g.item+":visible:first"));else this._goto(f);else if(d)this._goto(f);else if(h.length)if(h[0]==f[0]){f.removeClass(g.selected);this.input.val(this.input.data("original.suggest"));this.hoverout_list()}else this._goto(h.nextAll("."+g.item+":visible:first"));else this._goto(e)}}else a||this.textchange()},_goto:function(a){a.trigger("mouseover.suggest");var b=a.data("data.suggest");this.input.val(b?
-b.name:this.input.data("original.suggest"));this.scroll_to(a)},scroll_to:function(a){var b=this.list,d=b.scrollTop(),g=d+b.innerHeight(),e=a.outerHeight();a=a.prevAll().length*e;e=a+e;if(a
g){this.ignore_mouseover();b.scrollTop(d+e-g)}},textchange:function(){this.input.removeData("data.suggest");this.input.trigger("fb-textchange",this);var a=this.input.val();if(a==="")this.status_start();else{this.status_loading();this.request(a)}},request:function(){},
-response:function(a){if(a){"cost"in a&&this.trackEvent(this.name,"response","cost",a.cost);if(this.check_response(a)){var b=[];if(c.isArray(a))b=a;else if("result"in a)b=a.result;var d=c.map(arguments,function(i){return i});this.response_hook.apply(this,d);var g=null,e=this,f=this.options;c.each(b,function(i,k){if(!k.id&&k.mid)k.id=k.mid;var n=e.create_item(k,a).bind("mouseover.suggest",function(l){e.mouseover_item(l)});n.data("data.suggest",k);e.list.append(n);if(i===0)g=n});this.input.data("original.suggest",
-this.input.val());if(c("."+f.css.item,this.list).length===0&&f.nomatch){b=c('- ');if(typeof f.nomatch==="string")b.text(f.nomatch);else{f.nomatch.title&&b.append(c('').text(f.nomatch.title));f.nomatch.heading&&b.append(c("
").text(f.nomatch.heading));if((f=f.nomatch.tips)&&f.length){var h=c('');c.each(f,function(i,k){h.append(c("- ").text(k))});b.append(h)}}b.bind("click.suggest",function(i){i.stopPropagation()});
-this.list.append(b)}d.push(g);this.show_hook.apply(this,d);this.position();this.pane_show()}}},pane_show:function(){var a=false;if(c("> li",this.list).length)a=true;a||this.pane.children(":not(."+this.options.css.list+")").each(function(){if(c(this).css("display")!="none"){a=true;return false}});if(a)if(this.options.animate){var b=this;this.pane.slideDown("fast",function(){b.input.trigger("fb-pane-show",b)})}else{this.pane.show();this.input.trigger("fb-pane-show",this)}else{this.pane.hide();this.input.trigger("fb-pane-hide",
-this)}},create_item:function(a){var b=this.options.css,d=c("
- ").addClass(b.item);a=c("