diff --git a/.idea/artifacts/KotlinPlugin.xml b/.idea/artifacts/KotlinPlugin.xml index 7268fcf0338..bf13e346538 100644 --- a/.idea/artifacts/KotlinPlugin.xml +++ b/.idea/artifacts/KotlinPlugin.xml @@ -14,6 +14,15 @@ + + + + + + + + + diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 8d54c189540..3b66d4ce869 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -16,6 +16,7 @@ + diff --git a/.idea/libraries/js_libs.xml b/.idea/libraries/js_libs.xml new file mode 100644 index 00000000000..5dafbf5773d --- /dev/null +++ b/.idea/libraries/js_libs.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 20465f11d63..d4b860b6f00 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -17,6 +17,12 @@ + + + + + + diff --git a/compiler/frontend/src/jet/Library.jet b/compiler/frontend/src/jet/Library.jet index 318f5f1300a..c9fbdded821 100644 --- a/compiler/frontend/src/jet/Library.jet +++ b/compiler/frontend/src/jet/Library.jet @@ -52,7 +52,7 @@ class String() : Comparable, CharSequence { fun equals(other : Any?) : Boolean } -class Throwable(message : String? = null, cause: Throwable? = null) { +open class Throwable(message : String? = null, cause: Throwable? = null) { fun getMessage() : String? fun getCause() : Throwable? fun printStackTrace() : Unit diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java index c0c6351fc31..e083630520d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java @@ -173,8 +173,8 @@ public class AnnotationResolver { List result = Lists.newArrayList(); for (JetAnnotationEntry annotation : annotations) { AnnotationDescriptor annotationDescriptor = new AnnotationDescriptor(); - result.add(annotationDescriptor); - trace.record(BindingContext.ANNOTATION, annotation, annotationDescriptor); + // result.add(annotationDescriptor); + // trace.record(BindingContext.ANNOTATION, annotation, annotationDescriptor); } return result; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java index f3086e20f22..530295b493d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java @@ -462,6 +462,11 @@ public class JetStandardLibrary { return volatileType; } + @NotNull + public Collection getArrayClasses() { + return primitiveTypeToArrayClass.values(); + } + public final boolean isVolatile(PropertyDescriptor descriptor) { List annotations = descriptor.getOriginal().getAnnotations(); if(annotations != null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java b/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java index b7fb65cdd02..1545365c86e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java +++ b/compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java @@ -16,10 +16,9 @@ package org.jetbrains.jet.plugin; -import org.jetbrains.jet.lang.psi.JetDeclaration; -import org.jetbrains.jet.lang.psi.JetNamedFunction; -import org.jetbrains.jet.lang.psi.JetParameter; -import org.jetbrains.jet.lang.psi.JetTypeReference; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.psi.*; import java.util.List; @@ -51,4 +50,23 @@ public class JetMainDetector { } return false; } + + @Nullable + public static String getMainClassFQName(@NotNull List files) { + JetFile file = getFileWithMain(files); + if (file == null) { + return null; + } + return JetPsiUtil.getFQName(file); + } + + @Nullable + public static JetFile getFileWithMain(@NotNull List files) { + for (JetFile file : files) { + if (hasMain(file.getDeclarations())) { + return file; + } + } + return null; + } } diff --git a/idea/idea.iml b/idea/idea.iml index 354a43a561e..3c6f435387b 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -26,6 +26,7 @@ + diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 87a93df2976..fe46ef44266 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -1,7 +1,7 @@ Kotlin Kotlin language support - @snapshot@ + 1.0 JetBrains JUnit @@ -43,6 +43,14 @@ + + + + + + + diff --git a/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java b/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java index 9d26d940d7c..48e07564a4d 100644 --- a/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java @@ -56,13 +56,9 @@ public class JavaToKotlinActionUtil { } @NotNull - static List getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) { + /*package*/ static List getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) { + Set filesSet = allVirtualFiles(vFiles); final PsiManager manager = PsiManager.getInstance(project); - Set filesSet = new HashSet(); - for (VirtualFile f : vFiles) { - filesSet.add(f); - filesSet.addAll(getChildrenRecursive(f)); - } final List res = new ArrayList(); for (final VirtualFile file : filesSet) { final PsiFile psiFile = manager.findFile(file); @@ -73,6 +69,16 @@ public class JavaToKotlinActionUtil { return res; } + @NotNull + public static Set allVirtualFiles(@NotNull VirtualFile[] vFiles) { + Set filesSet = new HashSet(); + for (VirtualFile f : vFiles) { + filesSet.add(f); + filesSet.addAll(getChildrenRecursive(f)); + } + return filesSet; + } + static void reformatFiles(List allJetFiles, final Project project) { for (final VirtualFile vf : allJetFiles) ApplicationManager.getApplication().runWriteAction(new Runnable() { diff --git a/idea/src/org/jetbrains/jet/plugin/actions/TranslateToJsAction.java b/idea/src/org/jetbrains/jet/plugin/actions/TranslateToJsAction.java new file mode 100644 index 00000000000..9a3f514f770 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/actions/TranslateToJsAction.java @@ -0,0 +1,140 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed 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.jetbrains.jet.plugin.actions; + +import com.google.common.collect.Lists; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; +import com.intellij.notification.Notifications; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiManager; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.plugin.JetMainDetector; +import org.jetbrains.k2js.facade.K2JSTranslator; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import static org.jetbrains.jet.plugin.actions.JavaToKotlinActionUtil.allVirtualFiles; + +//TODO: clean up + +/** + * @author Pavel Talanov + */ +public final class TranslateToJsAction extends AnAction { + + private static void notifyFailure(@NotNull Throwable exception) { + Notifications.Bus.notify(new Notification("JsTranslator", "Translation failed.", + "Exception: " + exception.getMessage(), + NotificationType.ERROR)); + } + + private static void notifySuccess(@NotNull String outputPath) { + Notifications.Bus.notify(new Notification("JsTranslator", "Translation successful.", + "Generated file: " + outputPath, + NotificationType.INFORMATION)); + } + + public void actionPerformed(final AnActionEvent event) { + Runnable task = new Runnable() { + @Override + public void run() { + try { + performAction(event); + } catch (Throwable e) { + e.printStackTrace(); + notifyFailure(e); + } + } + }; + ApplicationManager.getApplication().runWriteAction(task); + } + + private static void performAction(@NotNull AnActionEvent event) throws Exception { + final Project project = PlatformDataKeys.PROJECT.getData(event.getDataContext()); + assert project != null; + Set allVirtualFiles = getAllProjectVirtualFiles(project); + List kotlinFiles = getJetFiles(allVirtualFiles, project); + String outputPath = getOutputPath(JetMainDetector.getFileWithMain(kotlinFiles)); + K2JSTranslator.translateWithCallToMainAndSaveToFile(kotlinFiles, + outputPath, + project); + notifySuccess(outputPath); + } + + @NotNull + private static Set getAllProjectVirtualFiles(@NotNull Project project) { + Module[] modules = ModuleManager.getInstance(project).getModules(); + Set allVirtualFiles = allVirtualFiles(new VirtualFile[]{project.getBaseDir()}); + for (Module module : modules) { + VirtualFile[] roots = ModuleRootManager.getInstance(module).getContentRoots(); + allVirtualFiles.addAll(allVirtualFiles(roots)); + } + return allVirtualFiles; + } + + @NotNull + private static List getJetFiles(@NotNull Collection virtualFiles, + @NotNull Project project) { + List kotlinFiles = Lists.newArrayList(); + + PsiManager psiManager = PsiManager.getInstance(project); + for (VirtualFile virtualFile : virtualFiles) { + PsiFile psiFile = psiManager.findFile(virtualFile); + if (psiFile instanceof JetFile) { + kotlinFiles.add((JetFile) psiFile); + } + } + return kotlinFiles; + } + + + @NotNull + private static String getOutputPath(@Nullable PsiFile psiFile) { + if (psiFile == null) { + throw new AssertionError("Main was not detected."); + } + VirtualFile virtualFile = psiFile.getVirtualFile(); + assert virtualFile != null : "Internal error: Psi file should correspond to actual virtual file"; + String originalFilePath = virtualFile.getPath(); + + //TODO: make platform independent + String pathToDir = originalFilePath.substring(0, originalFilePath.lastIndexOf("/") + 1); + String generatedFileName = ((JetFile) psiFile).getNamespaceHeader().getName() + ".js"; + return pathToDir + generatedFileName; + } + + @Override + public void update(AnActionEvent e) { + Editor editor = e.getData(PlatformDataKeys.EDITOR); + e.getPresentation().setEnabled(editor != null); + } +} diff --git a/js/.idea/.name b/js/.idea/.name deleted file mode 100644 index 09b0cd3eaf8..00000000000 --- a/js/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -k2js \ No newline at end of file diff --git a/js/.idea/ant.xml b/js/.idea/ant.xml deleted file mode 100644 index 2581ca3fe84..00000000000 --- a/js/.idea/ant.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/js/.idea/compiler.xml b/js/.idea/compiler.xml deleted file mode 100644 index 00e9e1b79cb..00000000000 --- a/js/.idea/compiler.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/js/.idea/copyright/apache.xml b/js/.idea/copyright/apache.xml deleted file mode 100644 index 647fcdb02ef..00000000000 --- a/js/.idea/copyright/apache.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/js/.idea/copyright/profiles_settings.xml b/js/.idea/copyright/profiles_settings.xml deleted file mode 100644 index ace2e994924..00000000000 --- a/js/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/js/.idea/dictionaries/Pavel_Talanov.xml b/js/.idea/dictionaries/Pavel_Talanov.xml deleted file mode 100644 index 556d1745d0f..00000000000 --- a/js/.idea/dictionaries/Pavel_Talanov.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/js/.idea/encodings.xml b/js/.idea/encodings.xml deleted file mode 100644 index e206d70d859..00000000000 --- a/js/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/js/.idea/inspectionProfiles/Project_Default.xml b/js/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index a76f2aecef0..00000000000 --- a/js/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/js/.idea/inspectionProfiles/profiles_settings.xml b/js/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 3b312839bf2..00000000000 --- a/js/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/js/.idea/libraries/guava_10_0_1.xml b/js/.idea/libraries/guava_10_0_1.xml deleted file mode 100644 index ef3fb899674..00000000000 --- a/js/.idea/libraries/guava_10_0_1.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/js/.idea/misc.xml b/js/.idea/misc.xml deleted file mode 100644 index d10b9ab7f7b..00000000000 --- a/js/.idea/misc.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - http://www.w3.org/1999/xhtml - - - - - - - - diff --git a/js/.idea/modules.xml b/js/.idea/modules.xml deleted file mode 100644 index 37bb0135fbe..00000000000 --- a/js/.idea/modules.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/js/.idea/scopes/scope_settings.xml b/js/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b8433..00000000000 --- a/js/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/js/.idea/uiDesigner.xml b/js/.idea/uiDesigner.xml deleted file mode 100644 index 3b000203088..00000000000 --- a/js/.idea/uiDesigner.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/js/.idea/vcs.xml b/js/.idea/vcs.xml deleted file mode 100644 index 275077f8255..00000000000 --- a/js/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/js/.idea/workspace.xml b/js/.idea/workspace.xml deleted file mode 100644 index bd428ae958b..00000000000 --- a/js/.idea/workspace.xml +++ /dev/null @@ -1,1097 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - localhost - 5050 - - - - - - - 1329842523563 - 1329842523563 - - - 1329844972815 - 1329844972815 - - - 1329929708567 - 1329929708567 - - - 1329932665155 - 1329932665155 - - - 1329933709697 - 1329933709697 - - - 1329985061185 - 1329985061185 - - - 1329990410839 - 1329990410839 - - - 1329990620588 - 1329990620588 - - - 1330004324089 - 1330004324089 - - - 1330080013521 - 1330080013521 - - - 1330081675078 - 1330081675078 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - k2js:jar - - - - - - - - No facets are configured - - - - - - - - idea-full - - - - - - - - 1.6 - - - - - - - - cli - - - - - - - - guava-10.0.1 - - - - - - - - - diff --git a/js/action.patch b/js/action.patch new file mode 100644 index 00000000000..287b4364c9c --- /dev/null +++ b/js/action.patch @@ -0,0 +1,315 @@ +Index: idea/src/META-INF/plugin.xml +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>\n Kotlin\n Kotlin language support\n @snapshot@\n JetBrains\n\n JUnit\n\n \n \n org.jetbrains.jet.plugin.JetStandardLibraryInitializer\n \n \n org.jetbrains.jet.plugin.compiler.JetCompilerManager\n \n \n org.jetbrains.jet.plugin.caches.JetCacheManager\n \n \n\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n\n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \n\n \n\n \n \n\n +=================================================================== +--- idea/src/META-INF/plugin.xml (date 1330080250000) ++++ idea/src/META-INF/plugin.xml (revision ) +@@ -45,8 +45,8 @@ + + + +- ++ text="Translate Kotlin to JavaScript."> ++ + + + +Index: compiler/frontend/src/jet/Library.jet +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package jet\n\nannotation class volatile\nannotation class atomic\n\nfun synchronized(lock: Any, block : () -> R) : R\n\nfun Any?.identityEquals(other : Any?) : Boolean // = this === other\n\n// Can't write a body due to a bootstrapping problem (see JET-74)\nfun Any?.equals(other : Any?) : Boolean// = this === other\n\n// Returns \"null\" for null\nfun Any?.toString() : String// = this === other\n\nfun T?.sure() : T\n\nfun String?.plus(other: Any?) : String\n\ntrait Comparable {\n fun compareTo(other : T) : Int\n}\n\ntrait Hashable {\n fun hashCode() : Int\n fun equals(other : Any?) : Boolean\n}\n\nclass Boolean : Comparable {\n fun not() : Boolean\n\n fun and(other : Boolean) : Boolean\n\n fun or(other : Boolean) : Boolean\n\n fun xor(other : Boolean) : Boolean\n\n fun equals(other : Any?) : Boolean\n}\n\ntrait CharSequence {\n fun get(index : Int) : Char\n\n val length : Int\n\n fun toString() : String\n}\n\nclass String() : Comparable, CharSequence {\n fun plus(other : Any?) : String\n\n fun equals(other : Any?) : Boolean\n}\n\nclass Throwable(message : String? = null, cause: Throwable? = null) {\n fun getMessage() : String?\n fun getCause() : Throwable?\n fun printStackTrace() : Unit\n} +=================================================================== +--- compiler/frontend/src/jet/Library.jet (date 1330080250000) ++++ compiler/frontend/src/jet/Library.jet (revision ) +@@ -52,7 +52,7 @@ + fun equals(other : Any?) : Boolean + } + +-class Throwable(message : String? = null, cause: Throwable? = null) { ++open class Throwable(message : String? = null, cause: Throwable? = null) { + fun getMessage() : String? + fun getCause() : Throwable? + fun printStackTrace() : Unit +\ No newline at end of file +Index: compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>/*\n * Copyright 2010-2012 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage org.jetbrains.jet.plugin;\n\nimport org.jetbrains.jet.lang.psi.JetDeclaration;\nimport org.jetbrains.jet.lang.psi.JetNamedFunction;\nimport org.jetbrains.jet.lang.psi.JetParameter;\nimport org.jetbrains.jet.lang.psi.JetTypeReference;\n\nimport java.util.List;\n\n/**\n * @author yole\n */\npublic class JetMainDetector {\n private JetMainDetector() {\n }\n\n public static boolean hasMain(List declarations) {\n for (JetDeclaration declaration : declarations) {\n if (declaration instanceof JetNamedFunction) {\n if (isMain((JetNamedFunction) declaration)) return true;\n }\n }\n return false;\n }\n\n public static boolean isMain(JetNamedFunction function) {\n if (\"main\".equals(function.getName())) {\n List parameters = function.getValueParameters();\n if (parameters.size() == 1) {\n JetTypeReference reference = parameters.get(0).getTypeReference();\n if (reference != null && reference.getText().equals(\"Array\")) { // TODO correct check\n return true;\n }\n }\n }\n return false;\n }\n}\n +=================================================================== +--- compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java (date 1330080250000) ++++ compiler/frontend/src/org/jetbrains/jet/plugin/JetMainDetector.java (revision ) +@@ -16,10 +16,9 @@ + + package org.jetbrains.jet.plugin; + +-import org.jetbrains.jet.lang.psi.JetDeclaration; +-import org.jetbrains.jet.lang.psi.JetNamedFunction; +-import org.jetbrains.jet.lang.psi.JetParameter; +-import org.jetbrains.jet.lang.psi.JetTypeReference; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++import org.jetbrains.jet.lang.psi.*; + + import java.util.List; + +@@ -50,5 +49,24 @@ + } + } + return false; ++ } ++ ++ @Nullable ++ public static String getMainClassFQName(@NotNull List files) { ++ JetFile file = getFileWithMain(files); ++ if (file == null) { ++ return null; ++ } ++ return JetPsiUtil.getFQName(file); ++ } ++ ++ @Nullable ++ public static JetFile getFileWithMain(@NotNull List files) { ++ for (JetFile file : files) { ++ if (hasMain(file.getDeclarations())) { ++ return file; ++ } ++ } ++ return null; + } + } +Index: idea/src/org/jetbrains/jet/plugin/actions/TranslateToJsAction.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>package org.jetbrains.jet.plugin.actions;\n\nimport com.intellij.notification.Notification;\nimport com.intellij.notification.NotificationType;\nimport com.intellij.notification.Notifications;\nimport com.intellij.openapi.actionSystem.AnAction;\nimport com.intellij.openapi.actionSystem.AnActionEvent;\nimport com.intellij.openapi.actionSystem.LangDataKeys;\nimport com.intellij.openapi.actionSystem.PlatformDataKeys;\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij.openapi.editor.Editor;\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.vfs.VirtualFile;\nimport com.intellij.psi.PsiFile;\nimport org.jetbrains.jet.lang.psi.JetFile;\nimport org.jetbrains.k2js.facade.K2JSTranslator;\n\n/**\n * @author Pavel Talanov\n */\npublic final class TranslateToJsAction extends AnAction {\n\n private static void notifyFailure(Throwable exception) {\n Notifications.Bus.notify(new Notification(\"JsTranslator\", \"Translation failed.\",\n \"Exception: \" + exception.getMessage(),\n NotificationType.ERROR));\n }\n\n private static void notifySuccess(String outputPath) {\n Notifications.Bus.notify(new Notification(\"JsTranslator\", \"Translation successful.\",\n \"Generated file: \" + outputPath,\n NotificationType.INFORMATION));\n }\n\n public void actionPerformed(AnActionEvent event) {\n\n final PsiFile psiFile = event.getData(LangDataKeys.PSI_FILE);\n if (!(psiFile instanceof JetFile)) {\n return;\n }\n\n Runnable task = new Runnable() {\n @Override\n public void run() {\n try {\n Project project = psiFile.getProject();\n String outputPath = getOutputPath(psiFile);\n K2JSTranslator.translateWithCallToMainAndSaveToFile((JetFile) psiFile,\n outputPath,\n project);\n notifySuccess(outputPath);\n } catch (Throwable e) {\n e.printStackTrace();\n notifyFailure(e);\n }\n }\n };\n ApplicationManager.getApplication().runWriteAction(task);\n }\n\n private static String getOutputPath(PsiFile psiFile) {\n VirtualFile virtualFile = psiFile.getVirtualFile();\n assert virtualFile != null : \"Internal error: Psi file should correspond to actual virtual file\";\n String originalFilePath = virtualFile.getPath();\n\n //TODO: make platform independent\n String pathToDir = originalFilePath.substring(0, originalFilePath.lastIndexOf(\"/\") + 1);\n String generatedFileName = ((JetFile) psiFile).getNamespaceHeader().getName() + \".js\";\n return pathToDir + generatedFileName;\n }\n\n\n @Override\n public void update(AnActionEvent e) {\n Editor editor = e.getData(PlatformDataKeys.EDITOR);\n PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE);\n e.getPresentation().setEnabled(editor != null && psiFile instanceof JetFile);\n }\n}\n +=================================================================== +--- idea/src/org/jetbrains/jet/plugin/actions/TranslateToJsAction.java (date 1330080250000) ++++ idea/src/org/jetbrains/jet/plugin/actions/TranslateToJsAction.java (revision ) +@@ -1,54 +1,74 @@ ++/* ++ * Copyright 2000-2012 JetBrains s.r.o. ++ * ++ * Licensed 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.jetbrains.jet.plugin.actions; + ++import com.google.common.collect.Lists; + import com.intellij.notification.Notification; + import com.intellij.notification.NotificationType; + import com.intellij.notification.Notifications; + import com.intellij.openapi.actionSystem.AnAction; + import com.intellij.openapi.actionSystem.AnActionEvent; +-import com.intellij.openapi.actionSystem.LangDataKeys; + import com.intellij.openapi.actionSystem.PlatformDataKeys; + import com.intellij.openapi.application.ApplicationManager; + import com.intellij.openapi.editor.Editor; ++import com.intellij.openapi.module.Module; ++import com.intellij.openapi.module.ModuleManager; + import com.intellij.openapi.project.Project; ++import com.intellij.openapi.roots.ModuleRootManager; + import com.intellij.openapi.vfs.VirtualFile; + import com.intellij.psi.PsiFile; ++import com.intellij.psi.PsiManager; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; + import org.jetbrains.jet.lang.psi.JetFile; ++import org.jetbrains.jet.plugin.JetMainDetector; + import org.jetbrains.k2js.facade.K2JSTranslator; + ++import java.util.Collection; ++import java.util.List; ++import java.util.Set; ++ ++import static org.jetbrains.jet.plugin.actions.JavaToKotlinActionUtil.allVirtualFiles; ++ ++//TODO: clean up ++ + /** + * @author Pavel Talanov + */ + public final class TranslateToJsAction extends AnAction { + +- private static void notifyFailure(Throwable exception) { ++ private static void notifyFailure(@NotNull Throwable exception) { + Notifications.Bus.notify(new Notification("JsTranslator", "Translation failed.", + "Exception: " + exception.getMessage(), + NotificationType.ERROR)); + } + +- private static void notifySuccess(String outputPath) { ++ private static void notifySuccess(@NotNull String outputPath) { + Notifications.Bus.notify(new Notification("JsTranslator", "Translation successful.", + "Generated file: " + outputPath, + NotificationType.INFORMATION)); + } + +- public void actionPerformed(AnActionEvent event) { +- +- final PsiFile psiFile = event.getData(LangDataKeys.PSI_FILE); +- if (!(psiFile instanceof JetFile)) { +- return; +- } +- ++ public void actionPerformed(final AnActionEvent event) { + Runnable task = new Runnable() { + @Override + public void run() { + try { +- Project project = psiFile.getProject(); +- String outputPath = getOutputPath(psiFile); +- K2JSTranslator.translateWithCallToMainAndSaveToFile((JetFile) psiFile, +- outputPath, +- project); +- notifySuccess(outputPath); ++ performAction(event); + } catch (Throwable e) { + e.printStackTrace(); + notifyFailure(e); +@@ -58,7 +78,50 @@ + ApplicationManager.getApplication().runWriteAction(task); + } + +- private static String getOutputPath(PsiFile psiFile) { ++ private static void performAction(@NotNull AnActionEvent event) throws Exception { ++ final Project project = PlatformDataKeys.PROJECT.getData(event.getDataContext()); ++ assert project != null; ++ Set allVirtualFiles = getAllProjectVirtualFiles(project); ++ List kotlinFiles = getJetFiles(allVirtualFiles, project); ++ String outputPath = getOutputPath(JetMainDetector.getFileWithMain(kotlinFiles)); ++ K2JSTranslator.translateWithCallToMainAndSaveToFile(kotlinFiles, ++ outputPath, ++ project); ++ notifySuccess(outputPath); ++ } ++ ++ @NotNull ++ private static Set getAllProjectVirtualFiles(@NotNull Project project) { ++ Module[] modules = ModuleManager.getInstance(project).getModules(); ++ Set allVirtualFiles = allVirtualFiles(new VirtualFile[]{project.getBaseDir()}); ++ for (Module module : modules) { ++ VirtualFile[] roots = ModuleRootManager.getInstance(module).getContentRoots(); ++ allVirtualFiles.addAll(allVirtualFiles(roots)); ++ } ++ return allVirtualFiles; ++ } ++ ++ @NotNull ++ private static List getJetFiles(@NotNull Collection virtualFiles, ++ @NotNull Project project) { ++ List kotlinFiles = Lists.newArrayList(); ++ ++ PsiManager psiManager = PsiManager.getInstance(project); ++ for (VirtualFile virtualFile : virtualFiles) { ++ PsiFile psiFile = psiManager.findFile(virtualFile); ++ if (psiFile instanceof JetFile) { ++ kotlinFiles.add((JetFile) psiFile); ++ } ++ } ++ return kotlinFiles; ++ } ++ ++ ++ @NotNull ++ private static String getOutputPath(@Nullable PsiFile psiFile) { ++ if (psiFile == null) { ++ throw new AssertionError("Main was not detected."); ++ } + VirtualFile virtualFile = psiFile.getVirtualFile(); + assert virtualFile != null : "Internal error: Psi file should correspond to actual virtual file"; + String originalFilePath = virtualFile.getPath(); +@@ -69,11 +132,9 @@ + return pathToDir + generatedFileName; + } + +- + @Override + public void update(AnActionEvent e) { + Editor editor = e.getData(PlatformDataKeys.EDITOR); +- PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE); +- e.getPresentation().setEnabled(editor != null && psiFile instanceof JetFile); ++ e.getPresentation().setEnabled(editor != null); + } + } +Index: idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>/*\n * Copyright 2010-2012 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage org.jetbrains.jet.plugin.actions;\n\nimport com.intellij.ide.highlighter.JavaFileType;\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.ui.ex.MessagesEx;\nimport com.intellij.openapi.vfs.CharsetToolkit;\nimport com.intellij.openapi.vfs.VirtualFile;\nimport com.intellij.psi.PsiFile;\nimport com.intellij.psi.PsiJavaFile;\nimport com.intellij.psi.PsiManager;\nimport com.intellij.psi.codeStyle.CodeStyleManager;\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;\nimport org.jetbrains.jet.j2k.Converter;\nimport org.jetbrains.jet.j2k.visitors.ClassVisitor;\n\nimport java.io.IOException;\nimport java.util.*;\n\n/**\n * @author ignatov\n */\npublic class JavaToKotlinActionUtil {\n\n static void setClassIdentifiers(@NotNull Converter converter, @NotNull PsiFile psiFile) {\n ClassVisitor c = new ClassVisitor();\n psiFile.accept(c);\n converter.setClassIdentifiers(c.getClassIdentifiers());\n }\n\n @NotNull\n private static List getChildrenRecursive(@Nullable VirtualFile baseDir) {\n List result = new LinkedList();\n VirtualFile[] children = baseDir != null ? baseDir.getChildren() : VirtualFile.EMPTY_ARRAY;\n result.addAll(Arrays.asList(children));\n for (VirtualFile f : children)\n result.addAll(getChildrenRecursive(f));\n return result;\n }\n\n @NotNull\n static List getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) {\n final PsiManager manager = PsiManager.getInstance(project);\n Set filesSet = new HashSet();\n for (VirtualFile f : vFiles) {\n filesSet.add(f);\n filesSet.addAll(getChildrenRecursive(f));\n }\n final List res = new ArrayList();\n for (final VirtualFile file : filesSet) {\n final PsiFile psiFile = manager.findFile(file);\n if (psiFile != null && psiFile.getFileType() instanceof JavaFileType) {\n res.add(psiFile);\n }\n }\n return res;\n }\n\n static void reformatFiles(List allJetFiles, final Project project) {\n for (final VirtualFile vf : allJetFiles)\n ApplicationManager.getApplication().runWriteAction(new Runnable() {\n @Override\n public void run() {\n if (vf != null) {\n PsiFile psiFile = PsiManager.getInstance(project).findFile(vf);\n if (psiFile != null) {\n CodeStyleManager.getInstance(project).reformat(psiFile);\n }\n }\n }\n });\n }\n\n @NotNull\n static List convertFiles(final Converter converter, List allJavaFilesNear) {\n final List result = new LinkedList();\n for (final PsiFile f : allJavaFilesNear) {\n ApplicationManager.getApplication().runWriteAction(new Runnable() {\n @Override\n public void run() {\n VirtualFile vf = convertOneFile(converter, f);\n if (vf != null) {\n result.add(vf);\n }\n }\n });\n }\n return result;\n }\n\n static void deleteFiles(List allJavaFilesNear) {\n for (final PsiFile f : allJavaFilesNear) {\n ApplicationManager.getApplication().runWriteAction(new Runnable() {\n @Override\n public void run() {\n try {\n PsiManager manager = f.getManager();\n VirtualFile vFile = f.getVirtualFile();\n if (vFile != null) {\n vFile.delete(manager);\n }\n } catch (IOException ignored) {\n }\n }\n });\n }\n }\n\n @Nullable\n private static VirtualFile convertOneFile(Converter converter, PsiFile psiFile) {\n try {\n VirtualFile virtualFile = psiFile.getVirtualFile();\n if (psiFile instanceof PsiJavaFile && virtualFile != null) {\n String result = \"\";\n try {\n result = converter.fileToFile((PsiJavaFile) psiFile).toKotlin();\n } catch (Exception e) {\n //noinspection CallToPrintStackTrace\n e.printStackTrace();\n }\n final PsiManager manager = psiFile.getManager();\n assert manager != null;\n VirtualFile copy = virtualFile.copy(manager, virtualFile.getParent(), virtualFile.getNameWithoutExtension() + \".kt\");\n copy.setBinaryContent(CharsetToolkit.getUtf8Bytes(result));\n return copy;\n }\n } catch (Exception ex) {\n MessagesEx.error(psiFile.getProject(), ex.getMessage()).showLater();\n }\n return null;\n }\n\n static void renameFiles(@NotNull List psiFiles) {\n for (final PsiFile f : psiFiles) {\n ApplicationManager.getApplication().runWriteAction(new Runnable() {\n @Override\n public void run() {\n try {\n PsiManager manager = f.getManager();\n VirtualFile vFile = f.getVirtualFile();\n if (vFile != null) {\n vFile.copy(manager, vFile.getParent(), vFile.getNameWithoutExtension() + \".java.old\");\n vFile.delete(manager);\n }\n } catch (IOException ignored) {\n }\n }\n });\n }\n }\n}\n +=================================================================== +--- idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java (date 1330080250000) ++++ idea/src/org/jetbrains/jet/plugin/actions/JavaToKotlinActionUtil.java (revision ) +@@ -56,13 +56,9 @@ + } + + @NotNull +- static List getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) { ++ /*package*/ static List getAllJavaFiles(@NotNull VirtualFile[] vFiles, Project project) { ++ Set filesSet = allVirtualFiles(vFiles); + final PsiManager manager = PsiManager.getInstance(project); +- Set filesSet = new HashSet(); +- for (VirtualFile f : vFiles) { +- filesSet.add(f); +- filesSet.addAll(getChildrenRecursive(f)); +- } + final List res = new ArrayList(); + for (final VirtualFile file : filesSet) { + final PsiFile psiFile = manager.findFile(file); +@@ -71,6 +67,16 @@ + } + } + return res; ++ } ++ ++ @NotNull ++ public static Set allVirtualFiles(@NotNull VirtualFile[] vFiles) { ++ Set filesSet = new HashSet(); ++ for (VirtualFile f : vFiles) { ++ filesSet.add(f); ++ filesSet.addAll(getChildrenRecursive(f)); ++ } ++ return filesSet; + } + + static void reformatFiles(List allJetFiles, final Project project) { +Index: compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>/*\n * Copyright 2010-2012 JetBrains s.r.o.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage org.jetbrains.jet.lang.types;\n\nimport com.intellij.openapi.progress.ProcessCanceledException;\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.util.io.FileUtil;\nimport com.intellij.psi.PsiFileFactory;\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;\nimport org.jetbrains.jet.lang.JetSemanticServices;\nimport org.jetbrains.jet.lang.descriptors.ClassDescriptor;\nimport org.jetbrains.jet.lang.descriptors.FunctionDescriptor;\nimport org.jetbrains.jet.lang.descriptors.PropertyDescriptor;\nimport org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;\nimport org.jetbrains.jet.lang.psi.JetFile;\nimport org.jetbrains.jet.lang.resolve.AnalyzingUtils;\nimport org.jetbrains.jet.lang.resolve.BindingTraceContext;\nimport org.jetbrains.jet.lang.resolve.TopDownAnalyzer;\nimport org.jetbrains.jet.lang.resolve.scopes.JetScope;\nimport org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;\nimport org.jetbrains.jet.lang.resolve.scopes.WritableScope;\nimport org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;\nimport org.jetbrains.jet.plugin.JetFileType;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.util.*;\n\n/**\n * @author abreslav\n */\npublic class JetStandardLibrary {\n\n private static JetStandardLibrary instance = null;\n\n // This method must be called at least once per application run, on any project\n // before any type checking is run\n public static synchronized void initialize(@NotNull Project project) {\n if (instance == null) {\n instance = new JetStandardLibrary(project);\n }\n }\n\n @NotNull // This asserts that initialize() is called before any resolution happens\n public static JetStandardLibrary getInstance() {\n return instance;\n }\n\n private JetScope libraryScope;\n\n private ClassDescriptor numberClass;\n\n private ClassDescriptor charSequenceClass;\n private ClassDescriptor stringClass;\n private ClassDescriptor arrayClass;\n private ClassDescriptor iterableClass;\n private ClassDescriptor comparableClass;\n private ClassDescriptor volatileClass;\n private ClassDescriptor throwableClass;\n\n private JetType stringType;\n private JetType volatileType;\n private JetType nullableStringType;\n private JetType charSequenceType;\n private JetType nullableCharSequenceType;\n private JetType nullableTuple0Type;\n private JetType throwableType;\n private JetType nullableThrowableType;\n\n private JetType tuple0Type;\n\n private Set typeInfoFunction;\n\n private EnumMap primitiveTypeToClass;\n private EnumMap primitiveTypeToArrayClass;\n private EnumMap primitiveTypeToJetType;\n private EnumMap primitiveTypeToNullableJetType;\n private EnumMap primitiveTypeToArrayJetType;\n private EnumMap primitiveTypeToNullableArrayJetType;\n private Map primitiveJetTypeToJetArrayType;\n private Map jetArrayTypeToPrimitiveJetType;\n\n private JetStandardLibrary(@NotNull Project project) {\n // TODO : review\n List libraryFiles = Arrays.asList(\n \"Library.jet\",\n \"Numbers.jet\",\n \"Ranges.jet\",\n \"Iterables.jet\",\n \"Iterators.jet\",\n \"Arrays.jet\"\n );\n try {\n List files = new LinkedList();\n for(String fileName : libraryFiles) {\n InputStream stream = JetStandardClasses.class.getClassLoader().getResourceAsStream(\"jet/\" + fileName);\n\n //noinspection IOResourceOpenedButNotSafelyClosed\n JetFile file = (JetFile) PsiFileFactory.getInstance(project).createFileFromText(fileName,\n JetFileType.INSTANCE, FileUtil.loadTextAndClose(new InputStreamReader(stream)));\n files.add(file);\n }\n\n JetSemanticServices bootstrappingSemanticServices = JetSemanticServices.createSemanticServices(this);\n BindingTraceContext bindingTraceContext = new BindingTraceContext();\n WritableScopeImpl writableScope = new WritableScopeImpl(JetStandardClasses.STANDARD_CLASSES, JetStandardClasses.STANDARD_CLASSES_NAMESPACE, RedeclarationHandler.THROW_EXCEPTION).setDebugName(\"Root bootstrap scope\");\n writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);\n TopDownAnalyzer.processStandardLibraryNamespace(bootstrappingSemanticServices, bindingTraceContext, writableScope, JetStandardClasses.STANDARD_CLASSES_NAMESPACE, files);\n\n AnalyzingUtils.throwExceptionOnErrors(bindingTraceContext.getBindingContext());\n initStdClasses();\n } catch (IOException e) {\n throw new IllegalStateException(e);\n } catch (ProcessCanceledException e) {\n throw e;\n }\n }\n\n public JetScope getLibraryScope() {\n initStdClasses();\n return libraryScope;\n }\n\n private void initStdClasses() {\n if(libraryScope == null) {\n this.libraryScope = JetStandardClasses.STANDARD_CLASSES_NAMESPACE.getMemberScope();\n this.numberClass = (ClassDescriptor) libraryScope.getClassifier(\"Number\");\n this.stringClass = (ClassDescriptor) libraryScope.getClassifier(\"String\");\n this.charSequenceClass = (ClassDescriptor) libraryScope.getClassifier(\"CharSequence\");\n this.arrayClass = (ClassDescriptor) libraryScope.getClassifier(\"Array\");\n this.volatileClass = (ClassDescriptor) libraryScope.getClassifier(\"volatile\");\n this.throwableClass = (ClassDescriptor) libraryScope.getClassifier(\"Throwable\"); \n\n this.iterableClass = (ClassDescriptor) libraryScope.getClassifier(\"Iterable\");\n this.comparableClass = (ClassDescriptor) libraryScope.getClassifier(\"Comparable\");\n this.typeInfoFunction = libraryScope.getFunctions(\"typeinfo\");\n\n this.stringType = new JetTypeImpl(getString());\n this.charSequenceType = new JetTypeImpl(getCharSequence());\n this.nullableCharSequenceType = TypeUtils.makeNullable(charSequenceType);\n this.nullableStringType = TypeUtils.makeNullable(stringType);\n this.volatileType = new JetTypeImpl(getVolatile());\n this.throwableType = new JetTypeImpl(getThrowable());\n this.nullableThrowableType = TypeUtils.makeNullable(throwableType);\n\n this.tuple0Type = new JetTypeImpl(JetStandardClasses.getTuple(0));\n this.nullableTuple0Type = TypeUtils.makeNullable(tuple0Type);\n \n primitiveTypeToClass = new EnumMap(PrimitiveType.class);\n primitiveTypeToJetType = new EnumMap(PrimitiveType.class);\n primitiveTypeToNullableJetType = new EnumMap(PrimitiveType.class);\n primitiveTypeToArrayClass = new EnumMap(PrimitiveType.class);\n primitiveTypeToArrayJetType = new EnumMap(PrimitiveType.class);\n primitiveTypeToNullableArrayJetType = new EnumMap(PrimitiveType.class);\n primitiveJetTypeToJetArrayType = new HashMap();\n jetArrayTypeToPrimitiveJetType = new HashMap();\n\n for (PrimitiveType primitive : PrimitiveType.values()) {\n makePrimitive(primitive);\n }\n }\n }\n\n private void makePrimitive(PrimitiveType primitiveType) {\n ClassDescriptor clazz = (ClassDescriptor) libraryScope.getClassifier(primitiveType.getTypeName());\n ClassDescriptor arrayClazz = (ClassDescriptor) libraryScope.getClassifier(primitiveType.getTypeName() + \"Array\");\n JetTypeImpl type = new JetTypeImpl(clazz);\n JetTypeImpl arrayType = new JetTypeImpl(arrayClazz);\n\n primitiveTypeToClass.put(primitiveType, clazz);\n primitiveTypeToJetType.put(primitiveType, type);\n primitiveTypeToNullableJetType.put(primitiveType, TypeUtils.makeNullable(type));\n primitiveTypeToArrayClass.put(primitiveType, arrayClazz);\n primitiveTypeToArrayJetType.put(primitiveType, arrayType);\n primitiveTypeToNullableArrayJetType.put(primitiveType, TypeUtils.makeNullable(arrayType));\n primitiveJetTypeToJetArrayType.put(type, arrayType);\n jetArrayTypeToPrimitiveJetType.put(arrayType, type);\n }\n\n @NotNull\n public ClassDescriptor getNumber() {\n initStdClasses();\n return numberClass;\n }\n\n @NotNull\n public ClassDescriptor getPrimitiveClassDescriptor(PrimitiveType primitiveType) {\n initStdClasses();\n return primitiveTypeToClass.get(primitiveType);\n }\n\n @NotNull\n public ClassDescriptor getByte() {\n return getPrimitiveClassDescriptor(PrimitiveType.BYTE);\n }\n\n @NotNull\n public ClassDescriptor getChar() {\n return getPrimitiveClassDescriptor(PrimitiveType.CHAR);\n }\n\n @NotNull\n public ClassDescriptor getShort() {\n return getPrimitiveClassDescriptor(PrimitiveType.SHORT);\n }\n\n @NotNull\n public ClassDescriptor getInt() {\n return getPrimitiveClassDescriptor(PrimitiveType.INT);\n }\n\n @NotNull\n public ClassDescriptor getLong() {\n return getPrimitiveClassDescriptor(PrimitiveType.LONG);\n }\n\n @NotNull\n public ClassDescriptor getFloat() {\n return getPrimitiveClassDescriptor(PrimitiveType.FLOAT);\n }\n\n @NotNull\n public ClassDescriptor getDouble() {\n return getPrimitiveClassDescriptor(PrimitiveType.DOUBLE);\n }\n\n @NotNull\n public ClassDescriptor getBoolean() {\n return getPrimitiveClassDescriptor(PrimitiveType.BOOLEAN);\n }\n\n @NotNull\n public ClassDescriptor getString() {\n initStdClasses();\n return stringClass;\n }\n\n @NotNull\n public ClassDescriptor getCharSequence() {\n initStdClasses();\n return charSequenceClass;\n }\n\n @NotNull\n public ClassDescriptor getArray() {\n initStdClasses();\n return arrayClass;\n }\n\n @NotNull\n public ClassDescriptor getIterable() {\n initStdClasses();\n return iterableClass;\n }\n\n @NotNull\n public ClassDescriptor getComparable() {\n initStdClasses();\n return comparableClass;\n }\n\n @NotNull\n public ClassDescriptor getThrowable() {\n initStdClasses();\n return throwableClass;\n }\n \n public Set getTypeInfoFunctions() {\n initStdClasses();\n return typeInfoFunction;\n }\n\n @NotNull\n public JetType getPrimitiveJetType(PrimitiveType primitiveType) {\n return primitiveTypeToJetType.get(primitiveType);\n }\n\n @NotNull\n public JetType getIntType() {\n return getPrimitiveJetType(PrimitiveType.INT);\n }\n\n @NotNull\n public JetType getLongType() {\n return getPrimitiveJetType(PrimitiveType.LONG);\n }\n\n @NotNull\n public JetType getDoubleType() {\n return getPrimitiveJetType(PrimitiveType.DOUBLE);\n }\n\n @NotNull\n public JetType getFloatType() {\n return getPrimitiveJetType(PrimitiveType.FLOAT);\n }\n\n @NotNull\n public JetType getCharType() {\n return getPrimitiveJetType(PrimitiveType.CHAR);\n }\n\n @NotNull\n public JetType getBooleanType() {\n return getPrimitiveJetType(PrimitiveType.BOOLEAN);\n }\n\n @NotNull\n public JetType getStringType() {\n initStdClasses();\n return stringType;\n }\n\n @NotNull\n public JetType getCharSequenceType() {\n initStdClasses();\n return charSequenceType;\n }\n\n @NotNull\n public JetType getByteType() {\n return getPrimitiveJetType(PrimitiveType.BYTE);\n }\n\n @NotNull\n public JetType getShortType() {\n return getPrimitiveJetType(PrimitiveType.SHORT);\n }\n\n @NotNull\n public JetType getArrayType(@NotNull JetType argument) {\n return getArrayType(Variance.INVARIANT, argument);\n }\n\n @NotNull\n public JetType getArrayType(@NotNull Variance projectionType, @NotNull JetType argument) {\n List types = Collections.singletonList(new TypeProjection(projectionType, argument));\n return new JetTypeImpl(\n Collections.emptyList(),\n getArray().getTypeConstructor(),\n false,\n types,\n getArray().getMemberScope(types)\n );\n }\n \n @NotNull\n public JetType getArrayElementType(@NotNull JetType arrayType) {\n // make non-null?\n if (arrayType.getConstructor().getDeclarationDescriptor() == getArray()) {\n if (arrayType.getArguments().size() != 1) {\n throw new IllegalStateException();\n }\n return arrayType.getArguments().get(0).getType();\n }\n JetType primitiveType = jetArrayTypeToPrimitiveJetType.get(arrayType);\n if (primitiveType == null) {\n throw new IllegalStateException(\"not array: \" + arrayType);\n }\n return primitiveType;\n }\n\n @NotNull\n public JetType getIterableType(@NotNull JetType argument) {\n return getIterableType(Variance.INVARIANT, argument);\n }\n\n @NotNull\n public JetType getIterableType(@NotNull Variance projectionType, @NotNull JetType argument) {\n List types = Collections.singletonList(new TypeProjection(projectionType, argument));\n return new JetTypeImpl(\n Collections.emptyList(),\n getIterable().getTypeConstructor(),\n false,\n types,\n getIterable().getMemberScope(types)\n );\n }\n\n @NotNull\n public JetType getNullableStringType() {\n initStdClasses();\n return nullableStringType;\n }\n\n @NotNull\n public JetType getNullableCharSequenceType() {\n initStdClasses();\n return nullableCharSequenceType;\n }\n \n @NotNull\n public JetType getThrowableType() {\n initStdClasses();\n return throwableType;\n }\n\n public JetType getNullableThrowableType() {\n initStdClasses();\n return nullableThrowableType;\n }\n\n @NotNull\n public JetType getNullablePrimitiveJetType(PrimitiveType primitiveType) {\n initStdClasses();\n return primitiveTypeToNullableJetType.get(primitiveType);\n }\n\n public JetType getNullableTuple0Type() {\n initStdClasses();\n return nullableTuple0Type;\n }\n \n @NotNull\n public JetType getPrimitiveArrayJetType(PrimitiveType primitiveType) {\n initStdClasses();\n return primitiveTypeToArrayJetType.get(primitiveType);\n }\n\n /**\n * @return null if not primitive\n */\n @Nullable\n public JetType getPrimitiveArrayJetTypeByPrimitiveJetType(JetType jetType) {\n return primitiveJetTypeToJetArrayType.get(jetType);\n }\n\n @NotNull\n public ClassDescriptor getPrimitiveArrayClassDescriptor(PrimitiveType primitiveType) {\n initStdClasses();\n return primitiveTypeToArrayClass.get(primitiveType);\n }\n\n\n @NotNull\n public JetType getNullablePrimitiveArrayJetType(PrimitiveType primitiveType) {\n initStdClasses();\n return primitiveTypeToNullableArrayJetType.get(primitiveType);\n }\n\n public ClassDescriptor getVolatile() {\n return volatileClass;\n }\n\n public JetType getVolatileType() {\n return volatileType;\n }\n\n public final boolean isVolatile(PropertyDescriptor descriptor) {\n List annotations = descriptor.getOriginal().getAnnotations();\n if(annotations != null) {\n for(AnnotationDescriptor d: annotations) {\n if(d.getType().equals(getVolatileType()))\n return true;\n }\n }\n return false;\n }\n\n public JetType getTuple0Type() {\n return tuple0Type;\n }\n}\n +=================================================================== +--- compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java (date 1330080250000) ++++ compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java (revision ) +@@ -462,6 +462,11 @@ + return volatileType; + } + ++ @NotNull ++ public Collection getArrayClasses() { ++ return primitiveTypeToArrayClass.values(); ++ } ++ + public final boolean isVolatile(PropertyDescriptor descriptor) { + List annotations = descriptor.getOriginal().getAnnotations(); + if(annotations != null) { diff --git a/js/js.ast/js.ast.iml b/js/js.ast/js.ast.iml index 73bb50aea75..ae7a0c83664 100644 --- a/js/js.ast/js.ast.iml +++ b/js/js.ast/js.ast.iml @@ -8,6 +8,7 @@ + diff --git a/js/js.backend/js.backend.iml b/js/js.backend/js.backend.iml deleted file mode 100644 index 6333c03551e..00000000000 --- a/js/js.backend/js.backend.iml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/js/js.backend/lib/asm-util-3.3.1.jar b/js/js.backend/lib/asm-util-3.3.1.jar deleted file mode 100644 index 0230bbcfb71..00000000000 Binary files a/js/js.backend/lib/asm-util-3.3.1.jar and /dev/null differ diff --git a/js/js.backend/src/org/jetbrains/k2js/translate/utils/PsiUtils.java b/js/js.backend/src/org/jetbrains/k2js/translate/utils/PsiUtils.java deleted file mode 100644 index 1625d013acb..00000000000 --- a/js/js.backend/src/org/jetbrains/k2js/translate/utils/PsiUtils.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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.jetbrains.k2js.translate.utils; - -import com.intellij.psi.PsiElement; -import com.intellij.psi.tree.IElementType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lexer.JetToken; -import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.k2js.translate.context.Namer; - -import java.util.Collections; -import java.util.List; - -/** - * @author Pavel Talanov - */ -public final class PsiUtils { - - private PsiUtils() { - } - - @Nullable - public static JetSimpleNameExpression getSelectorAsSimpleName(@NotNull JetQualifiedExpression expression) { - JetExpression selectorExpression = getSelector(expression); - if (!(selectorExpression instanceof JetSimpleNameExpression)) { - return null; - } - return (JetSimpleNameExpression) selectorExpression; - } - - @NotNull - public static JetExpression getSelector(@NotNull JetQualifiedExpression expression) { - JetExpression selectorExpression = expression.getSelectorExpression(); - assert selectorExpression != null : "Selector should not be null."; - return selectorExpression; - } - - @NotNull - public static JetSimpleNameExpression getNotNullSimpleNameSelector(@NotNull JetQualifiedExpression expression) { - JetSimpleNameExpression selectorAsSimpleName = getSelectorAsSimpleName(expression); - assert selectorAsSimpleName != null; - return selectorAsSimpleName; - } - - @NotNull - public static JetToken getOperationToken(@NotNull JetOperationExpression expression) { - JetSimpleNameExpression operationExpression = expression.getOperationReference(); - IElementType elementType = operationExpression.getReferencedNameElementType(); - assert elementType instanceof JetToken : "Unary expression should have operation token of type JetToken"; - return (JetToken) elementType; - } - - @NotNull - public static JetExpression getBaseExpression(@NotNull JetUnaryExpression expression) { - JetExpression baseExpression = expression.getBaseExpression(); - assert baseExpression != null; - return baseExpression; - } - - public static boolean isPrefix(@NotNull JetUnaryExpression expression) { - return (expression instanceof JetPrefixExpression); - } - - public static boolean isAssignment(JetToken token) { - return (token == JetTokens.EQ); - } - - public static boolean isBackingFieldReference(@NotNull JetSimpleNameExpression expression) { - return expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER; - } - - public static boolean isInOrNotInOperation(@NotNull JetBinaryExpression binaryExpression) { - return isInOperation(binaryExpression) || isNotInOperation(binaryExpression); - } - - public static boolean isNotInOperation(@NotNull JetBinaryExpression binaryExpression) { - return (binaryExpression.getOperationToken() == JetTokens.NOT_IN); - } - - private static boolean isInOperation(@NotNull JetBinaryExpression binaryExpression) { - return (binaryExpression.getOperationToken() == JetTokens.IN_KEYWORD); - } - - @NotNull - public static JetExpression getCallee(@NotNull JetCallExpression expression) { - JetExpression calleeExpression = expression.getCalleeExpression(); - assert calleeExpression != null; - return calleeExpression; - } - - @NotNull - public static JetExpression getLoopBody(@NotNull JetLoopExpression expression) { - JetExpression body = expression.getBody(); - assert body != null : "Loops cannot have null bodies."; - return body; - } - - @NotNull - public static JetParameter getLoopParameter(@NotNull JetForExpression expression) { - JetParameter loopParameter = expression.getLoopParameter(); - assert loopParameter != null; - return loopParameter; - } - - @NotNull - public static List getPrimaryConstructorParameters(@NotNull JetClassOrObject classDeclaration) { - if (classDeclaration instanceof JetClass) { - return ((JetClass) classDeclaration).getPrimaryConstructorParameters(); - } - return Collections.emptyList(); - } - - @NotNull - public static JetObjectDeclaration getObjectDeclarationForName(@NotNull JetObjectDeclarationName name) { - PsiElement parent = name.getParent(); - assert parent instanceof JetObjectDeclaration : - "ObjectDeclarationName should have a parent of type ObjectDeclaration."; - return (JetObjectDeclaration) parent; - } - - @NotNull - public static JetObjectDeclarationName getObjectDeclarationName(@NotNull JetObjectDeclaration objectDeclaration) { - //TODO: util - JetObjectDeclarationName nameAsDeclaration = objectDeclaration.getNameAsDeclaration(); - assert nameAsDeclaration != null; - return nameAsDeclaration; - } - - @NotNull - public static String getNamespaceName(@NotNull JetFile psiFile) { - JetNamespaceHeader namespaceHeader = psiFile.getNamespaceHeader(); - String name = namespaceHeader.getName(); - assert name != null : "NamespaceHeader must have a name"; - if (name.equals("")) { - return Namer.getAnonymousNamespaceName(); - } - return name; - } - - @NotNull - public static JetExpression getLoopRange(@NotNull JetForExpression expression) { - JetExpression rangeExpression = expression.getLoopRange(); - assert rangeExpression != null; - return rangeExpression; - } -} diff --git a/js/js.backend/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/js/js.backend/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java deleted file mode 100644 index d0832046e8e..00000000000 --- a/js/js.backend/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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.jetbrains.k2js.translate.utils; - -import com.google.dart.compiler.backend.js.ast.*; -import com.google.dart.compiler.util.AstUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.k2js.translate.context.NamingScope; -import org.jetbrains.k2js.translate.context.TemporaryVariable; -import org.jetbrains.k2js.translate.context.TranslationContext; -import org.jetbrains.k2js.translate.general.Translation; - -import java.util.ArrayList; -import java.util.List; - -import static org.jetbrains.k2js.translate.utils.BindingUtils.*; -import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getExpectedReceiverDescriptor; - -/** - * @author Pavel Talanov - */ -public final class TranslationUtils { - - @NotNull - public static JsBinaryOperation notNullCheck(@NotNull TranslationContext context, - @NotNull JsExpression expressionToCheck) { - JsNullLiteral nullLiteral = context.program().getNullLiteral(); - return AstUtil.notEqual(expressionToCheck, nullLiteral); - } - - @NotNull - public static JsBinaryOperation isNullCheck(@NotNull TranslationContext context, - @NotNull JsExpression expressionToCheck) { - JsNullLiteral nullLiteral = context.program().getNullLiteral(); - return AstUtil.equals(expressionToCheck, nullLiteral); - } - - @NotNull - public static List translateArgumentList(@NotNull TranslationContext context, - @NotNull List jetArguments) { - List jsArguments = new ArrayList(); - for (ValueArgument argument : jetArguments) { - jsArguments.add(translateArgument(context, argument)); - } - return jsArguments; - } - - @NotNull - private static JsExpression translateArgument(@NotNull TranslationContext context, @NotNull ValueArgument argument) { - JetExpression jetExpression = argument.getArgumentExpression(); - assert jetExpression != null : "Argument with no expression"; - return Translation.translateAsExpression(jetExpression, context); - } - - //TODO: refactor backing field reference generation to use the generic way - @NotNull - public static JsNameRef backingFieldReference(@NotNull TranslationContext context, - @NotNull JetProperty expression) { - PropertyDescriptor propertyDescriptor = getPropertyDescriptor(context.bindingContext(), expression); - return backingFieldReference(context, propertyDescriptor); - } - - @NotNull - public static JsNameRef backingFieldReference(@NotNull TranslationContext context, - @NotNull PropertyDescriptor descriptor) { - JsName backingFieldName = context.getNameForDescriptor(descriptor); - if (isOwnedByClass(descriptor)) { - return AstUtil.qualified(backingFieldName, new JsThisRef()); - } - assert isOwnedByNamespace(descriptor) - : "Only classes and namespaces may own backing fields."; - JsNameRef qualifier = context.getQualifierForDescriptor(descriptor); - return AstUtil.qualified(backingFieldName, qualifier); - } - - @NotNull - public static JsStatement assignmentToBackingField(@NotNull TranslationContext context, - @NotNull PropertyDescriptor descriptor, - @NotNull JsExpression assignTo) { - JsNameRef backingFieldReference = backingFieldReference(context, descriptor); - return AstUtil.newAssignmentStatement(backingFieldReference, assignTo); - } - - @Nullable - public static JsExpression translateInitializerForProperty(@NotNull JetProperty declaration, - @NotNull TranslationContext context) { - JsExpression jsInitExpression = null; - JetExpression initializer = declaration.getInitializer(); - if (initializer != null) { - jsInitExpression = Translation.translateAsExpression(initializer, context); - } - return jsInitExpression; - } - - @NotNull - public static JsNameRef getQualifiedReference(@NotNull TranslationContext context, - @NotNull DeclarationDescriptor descriptor) { - JsName name = context.getNameForDescriptor(descriptor); - JsNameRef reference = name.makeRef(); - JsNameRef qualifier = context.getQualifierForDescriptor(descriptor); - if (qualifier != null) { - AstUtil.setQualifier(reference, qualifier); - } - return reference; - } - - //TODO: refactor - @NotNull - public static JsExpression getThisObject(@NotNull TranslationContext context, - @NotNull DeclarationDescriptor correspondingDeclaration) { - JsExpression thisRef = null; - if (correspondingDeclaration instanceof ClassDescriptor) { - if (context.aliaser().hasAliasForThis(correspondingDeclaration)) { - thisRef = context.aliaser().getAliasForThis(correspondingDeclaration); - } - } - if (correspondingDeclaration instanceof CallableDescriptor) { - DeclarationDescriptor receiverDescriptor = - getExpectedReceiverDescriptor((CallableDescriptor) correspondingDeclaration); - assert receiverDescriptor != null; - if (context.aliaser().hasAliasForThis(receiverDescriptor)) { - thisRef = context.aliaser().getAliasForThis(receiverDescriptor); - } - } - if (thisRef != null) { - return thisRef; - } - return new JsThisRef(); - } - - @NotNull - public static List translateExpressionList(@NotNull TranslationContext context, - @NotNull List expressions) { - List result = new ArrayList(); - for (JetExpression expression : expressions) { - result.add(Translation.translateAsExpression(expression, context)); - } - return result; - } - - @NotNull - public static JsExpression translateBaseExpression(@NotNull TranslationContext context, - @NotNull JetUnaryExpression expression) { - JetExpression baseExpression = PsiUtils.getBaseExpression(expression); - return Translation.translateAsExpression(baseExpression, context); - } - - //TODO: - @NotNull - public static JsExpression translateReceiver(@NotNull TranslationContext context, - @NotNull JetDotQualifiedExpression expression) { - return Translation.translateAsExpression(expression.getReceiverExpression(), context); - } - - - @NotNull - public static JsExpression translateLeftExpression(@NotNull TranslationContext context, - @NotNull JetBinaryExpression expression) { - return Translation.translateAsExpression(expression.getLeft(), context); - } - - @NotNull - public static JsExpression translateRightExpression(@NotNull TranslationContext context, - @NotNull JetBinaryExpression expression) { - JetExpression rightExpression = expression.getRight(); - assert rightExpression != null : "Binary expression should have a right expression"; - return Translation.translateAsExpression(rightExpression, context); - } - - public static boolean isIntrinsicOperation(@NotNull TranslationContext context, - @NotNull JetOperationExpression expression) { - FunctionDescriptor operationDescriptor = - BindingUtils.getFunctionDescriptorForOperationExpression(context.bindingContext(), expression); - - if (operationDescriptor == null) return true; - if (context.intrinsics().isIntrinsic(operationDescriptor)) return true; - - return false; - } - - @NotNull - public static JsNameRef getMethodReferenceForOverloadedOperation(@NotNull TranslationContext context, - @NotNull JetOperationExpression expression) { - FunctionDescriptor overloadedOperationDescriptor = getFunctionDescriptorForOperationExpression - (context.bindingContext(), expression); - assert overloadedOperationDescriptor != null; - JsNameRef overloadedOperationReference = context.getNameForDescriptor(overloadedOperationDescriptor).makeRef(); - assert overloadedOperationReference != null; - return overloadedOperationReference; - } - - @NotNull - public static JsFunction functionWithScope(@NotNull NamingScope scope) { - return JsFunction.getAnonymousFunctionWithScope(scope.jsScope()); - } - - @NotNull - public static JsNumberLiteral zeroLiteral(@NotNull TranslationContext context) { - return context.program().getNumberLiteral(0); - } - - @NotNull - public static TemporaryVariable newAliasForThis(@NotNull TranslationContext context, - @NotNull DeclarationDescriptor descriptor) { - JsExpression thisQualifier = getThisObject(context, descriptor); - TemporaryVariable aliasForThis = context.declareTemporary(thisQualifier); - context.aliaser().setAliasForThis(descriptor, aliasForThis.name()); - return aliasForThis; - } - - public static void removeAliasForThis(@NotNull TranslationContext context, - @NotNull DeclarationDescriptor descriptor) { - context.aliaser().removeAliasForThis(descriptor); - } - -} diff --git a/js/js.backend/src/org/jetbrains/k2js/utils/GenerationUtils.java b/js/js.backend/src/org/jetbrains/k2js/utils/GenerationUtils.java deleted file mode 100644 index ae96b635c59..00000000000 --- a/js/js.backend/src/org/jetbrains/k2js/utils/GenerationUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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.jetbrains.k2js.utils; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -//TODO: very thin class - -/** - * @author Pavel Talanov - */ -public final class GenerationUtils { - - @NotNull - public static String generateCallToMain(@NotNull String namespaceName, @NotNull List arguments) { - String constructArguments = "var args = [];\n"; - int index = 0; - for (String argument : arguments) { - constructArguments = constructArguments + "args[" + index + "]= \"" + argument + "\";\n"; - index++; - } - String callMain = namespaceName + ".main(args);\n"; - return constructArguments + callMain; - } - - -} diff --git a/js/js.backend/src/org/jetbrains/k2js/utils/JetFileUtils.java b/js/js.backend/src/org/jetbrains/k2js/utils/JetFileUtils.java deleted file mode 100644 index 76d2f7ebba9..00000000000 --- a/js/js.backend/src/org/jetbrains/k2js/utils/JetFileUtils.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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.jetbrains.k2js.utils; - -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.CharsetToolkit; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiFileFactory; -import com.intellij.psi.impl.PsiFileFactoryImpl; -import com.intellij.testFramework.LightVirtualFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.plugin.JetLanguage; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author Pavel Talanov - */ -public final class JetFileUtils { - - @NotNull - public static String loadFile(@NotNull String path) throws IOException { - return doLoadFile(path); - } - - @NotNull - private static String doLoadFile(@NotNull String path) throws IOException { - String text = FileUtil.loadFile(new File(path), CharsetToolkit.UTF8).trim(); - text = StringUtil.convertLineSeparators(text); - return text; - } - - @NotNull - public static JetFile createPsiFile(@NotNull String name, - @NotNull String text, - @NotNull Project project) { - return (JetFile) createFile(name + ".jet", text, project); - } - - @NotNull - public static JetFile loadPsiFile(@NotNull String name, @NotNull Project project) { - try { - return createPsiFile(name, loadFile(name), project); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - @NotNull - private static PsiFile createFile(@NotNull String name, @NotNull String text, @NotNull Project project) { - LightVirtualFile virtualFile = new LightVirtualFile(name, JetLanguage.INSTANCE, text); - virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET); - PsiFile result = ((PsiFileFactoryImpl) PsiFileFactory.getInstance(project)) - .trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false); - assert result != null; - return result; - } - - - @NotNull - public static List createPsiFileList(@NotNull List inputFiles, - @NotNull Project project) { - List psiFiles = new ArrayList(); - for (String inputFile : inputFiles) { - psiFiles.add(JetFileUtils.loadPsiFile(inputFile, project)); - } - return psiFiles; - } -} diff --git a/js/js.backend/src/org/jetbrains/k2js/utils/JetTestUtils.java b/js/js.backend/src/org/jetbrains/k2js/utils/JetTestUtils.java deleted file mode 100644 index b9f3b05be11..00000000000 --- a/js/js.backend/src/org/jetbrains/k2js/utils/JetTestUtils.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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.jetbrains.k2js.utils; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; -import org.jetbrains.jet.lang.diagnostics.Diagnostic; -import org.jetbrains.jet.lang.diagnostics.Severity; -import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnostic; -import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade; -import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; -import org.jetbrains.jet.util.slicedmap.SlicedMap; -import org.jetbrains.jet.util.slicedmap.WritableSlice; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; - -/** - * @author abreslav - */ -public class JetTestUtils { - public static final BindingTrace DUMMY_TRACE = new BindingTrace() { - - - @Override - public BindingContext getBindingContext() { - return new BindingContext() { - - @Override - public Collection getDiagnostics() { - throw new UnsupportedOperationException(); // TODO - } - - @Override - public V get(ReadOnlySlice slice, K key) { - return DUMMY_TRACE.get(slice, key); - } - - @NotNull - @Override - public Collection getKeys(WritableSlice slice) { - return DUMMY_TRACE.getKeys(slice); - } - }; - } - - @Override - public void record(WritableSlice slice, K key, V value) { - } - - @Override - public void record(WritableSlice slice, K key) { - } - - @Override - public V get(ReadOnlySlice slice, K key) { - if (slice == BindingContext.PROCESSED) return (V) Boolean.FALSE; - return SlicedMap.DO_NOTHING.get(slice, key); - } - - @NotNull - @Override - public Collection getKeys(WritableSlice slice) { - assert slice.isCollective(); - return Collections.emptySet(); - } - - @Override - public void report(@NotNull Diagnostic diagnostic) { - if (diagnostic instanceof UnresolvedReferenceDiagnostic) { - UnresolvedReferenceDiagnostic unresolvedReferenceDiagnostic = (UnresolvedReferenceDiagnostic) diagnostic; - throw new IllegalStateException("Unresolved: " + unresolvedReferenceDiagnostic.getPsiElement().getText()); - } - } - }; - - public static BindingTrace DUMMY_EXCEPTION_ON_ERROR_TRACE = new BindingTrace() { - @Override - public BindingContext getBindingContext() { - return new BindingContext() { - @Override - public Collection getDiagnostics() { - throw new UnsupportedOperationException(); - } - - @Override - public V get(ReadOnlySlice slice, K key) { - return DUMMY_EXCEPTION_ON_ERROR_TRACE.get(slice, key); - } - - @NotNull - @Override - public Collection getKeys(WritableSlice slice) { - return DUMMY_EXCEPTION_ON_ERROR_TRACE.getKeys(slice); - } - }; - } - - @Override - public void record(WritableSlice slice, K key, V value) { - } - - @Override - public void record(WritableSlice slice, K key) { - } - - @Override - public V get(ReadOnlySlice slice, K key) { - return null; - } - - @NotNull - @Override - public Collection getKeys(WritableSlice slice) { - assert slice.isCollective(); - return Collections.emptySet(); - } - - @Override - public void report(@NotNull Diagnostic diagnostic) { - if (diagnostic.getSeverity() == Severity.ERROR) { - throw new IllegalStateException(diagnostic.getMessage()); - } - } - }; - - public static BindingContext analyzeNamespace(@NotNull JetFile file, @NotNull JetControlFlowDataTraceFactory flowDataTraceFactory) { - return AnalyzerFacade.analyzeOneFileWithJavaIntegration(file, flowDataTraceFactory); - } - - - public static void mkdirs(File file) throws IOException { - if (file.isDirectory()) { - return; - } - if (!file.mkdirs()) { - throw new IOException(); - } - } - - public static void rmrf(File file) { - if (file != null) { - File[] children = file.listFiles(); - if (children != null) { - for (File child : children) { - rmrf(child); - } - } - file.delete(); - } - } - - public static void recreateDirectory(File file) throws IOException { - rmrf(file); - mkdirs(file); - } - - -} diff --git a/js/js.backend/testFiles/canvas_helper.js b/js/js.backend/testFiles/canvas_helper.js deleted file mode 100644 index 90d9287df1f..00000000000 --- a/js/js.backend/testFiles/canvas_helper.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -function getContext() { - return getCanvas().getContext('2d'); -} - -function getCanvas() { - return document.getElementsByTagName('canvas')[0]; -} - -function getKotlinLogo() { - return document.getElementsByTagName('img')[0]; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/class/cases/classWithoutNamespace.kt b/js/js.backend/testFiles/class/cases/classWithoutNamespace.kt deleted file mode 100644 index 4aceb233099..00000000000 --- a/js/js.backend/testFiles/class/cases/classWithoutNamespace.kt +++ /dev/null @@ -1,7 +0,0 @@ -class A(var a : Int) { - { - $a=3 - } -} - -fun box() = (A(1).a == 3) \ No newline at end of file diff --git a/js/js.backend/testFiles/class/out/.gitignore b/js/js.backend/testFiles/class/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/class/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/cases/closureWithParameter.jet b/js/js.backend/testFiles/examples/cases/closureWithParameter.jet deleted file mode 100644 index e0b5d616951..00000000000 --- a/js/js.backend/testFiles/examples/cases/closureWithParameter.jet +++ /dev/null @@ -1,7 +0,0 @@ -fun box() : String { - return apply( "OK", {(arg: String) -> arg } ) -} - -fun apply(arg : String, f : (p:String) -> String) : String { - return f(arg) -} diff --git a/js/js.backend/testFiles/examples/cases/closureWithParameterAndBoxing.jet b/js/js.backend/testFiles/examples/cases/closureWithParameterAndBoxing.jet deleted file mode 100644 index 2b64a547d29..00000000000 --- a/js/js.backend/testFiles/examples/cases/closureWithParameterAndBoxing.jet +++ /dev/null @@ -1,7 +0,0 @@ -fun box() : String { - return if (apply( 5, {(arg: Int) -> arg + 13 } ) == 18) "OK" else "fail" -} - -fun apply(arg : Int, f : (p:Int) -> Int) : Int { - return f(arg) -} diff --git a/js/js.backend/testFiles/examples/cases/diamondInheritance.jet b/js/js.backend/testFiles/examples/cases/diamondInheritance.jet deleted file mode 100644 index 210aecafedc..00000000000 --- a/js/js.backend/testFiles/examples/cases/diamondInheritance.jet +++ /dev/null @@ -1,24 +0,0 @@ -// Changed when traits were introduced. May not make sense any more - -open class Base() { - public var v : Int = 0 -} - -open class Left() : Base() {} -trait Right : Base {} - -class D() : Left(), Right - -fun vl(l : Left) : Int = l.v -fun vr(r : Right) : Int = r.v - -fun box() : String { - val d = D() - d.v = 42 - - if (d.v != 42) return "Fail #1" - if (vl(d) != 42) return "Fail #2" - if (vr(d) != 42) return "Fail #3" - - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/cases/doubleEnclosedLocalVariable.jet b/js/js.backend/testFiles/examples/cases/doubleEnclosedLocalVariable.jet deleted file mode 100644 index 96ac7f2ef19..00000000000 --- a/js/js.backend/testFiles/examples/cases/doubleEnclosedLocalVariable.jet +++ /dev/null @@ -1,8 +0,0 @@ -fun box() : String { - val cl = 39 - return if (sum(200, { val ff = {cl}; ff() }) == 239) "OK" else "FAIL" -} - -fun sum(arg:Int, f : () -> Int) : Int { - return arg + f() -} diff --git a/js/js.backend/testFiles/examples/cases/enclosingLocalVariable.jet b/js/js.backend/testFiles/examples/cases/enclosingLocalVariable.jet deleted file mode 100644 index 01e1a103ff2..00000000000 --- a/js/js.backend/testFiles/examples/cases/enclosingLocalVariable.jet +++ /dev/null @@ -1,8 +0,0 @@ -fun box() : String { - val cl = 39 - return if (sum(200, { val m = { val r = { cl }; r() }; m() }) == 239) "OK" else "FAIL" -} - -fun sum(arg:Int, f : () -> Int) : Int { - return arg + f() -} diff --git a/js/js.backend/testFiles/examples/cases/extensionClosure.jet b/js/js.backend/testFiles/examples/cases/extensionClosure.jet deleted file mode 100644 index 21307ea42ab..00000000000 --- a/js/js.backend/testFiles/examples/cases/extensionClosure.jet +++ /dev/null @@ -1,13 +0,0 @@ -class Point(val x : Int, val y : Int) - -fun box() : String { - val answer = apply(Point(3, 5), { Point.(scalar : Int) : Point -> - Point(x * scalar, y * scalar) - }) - - return if (answer.x == 6 && answer.y == 10) "OK" else "FAIL" -} - -fun apply(arg:Point, f : Point.(scalar : Int) -> Point) : Point { - return arg.f(2) -} diff --git a/js/js.backend/testFiles/examples/cases/funDelegation.jet b/js/js.backend/testFiles/examples/cases/funDelegation.jet deleted file mode 100644 index 10a1f408b09..00000000000 --- a/js/js.backend/testFiles/examples/cases/funDelegation.jet +++ /dev/null @@ -1,17 +0,0 @@ -open class Base() { - fun n(n : Int) : Int = n + 1 -} - -trait Abstract {} - -class Derived1() : Base(), Abstract {} -class Derived2() : Abstract, Base() {} - -fun test(s : Base) : Boolean = s.n(238) == 239 - -fun box() : String { - if (!test(Base())) return "Fail #1" - if (!test(Derived1())) return "Fail #2" - if (!test(Derived2())) return "Fail #3" - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/cases/incrementProperty.kt b/js/js.backend/testFiles/examples/cases/incrementProperty.kt deleted file mode 100644 index 29123dbcaf3..00000000000 --- a/js/js.backend/testFiles/examples/cases/incrementProperty.kt +++ /dev/null @@ -1,14 +0,0 @@ -class Slot() { - var vitality: Int = 10000 - - fun increaseVitality(delta: Int) { - vitality = vitality + delta - if (vitality > 65535) vitality = 65535; - } -} - -fun box(): String { - val s = Slot() - s.increaseVitality(1000) - if (s.vitality == 11000) return "OK" else return "fail" -} diff --git a/js/js.backend/testFiles/examples/cases/inheritedMethod.jet b/js/js.backend/testFiles/examples/cases/inheritedMethod.jet deleted file mode 100644 index 97d432077a8..00000000000 --- a/js/js.backend/testFiles/examples/cases/inheritedMethod.jet +++ /dev/null @@ -1,13 +0,0 @@ -open class Foo() { - fun xyzzy(): String = "xyzzy" -} - -class Bar(): Foo() { - fun test(): String = xyzzy() -} - -fun box() : String { - val bar = Bar() - val f = bar.test() - return if (f == "xyzzy") "OK" else "fail" -} diff --git a/js/js.backend/testFiles/examples/cases/initializerBlock.jet b/js/js.backend/testFiles/examples/cases/initializerBlock.jet deleted file mode 100644 index c89deeda87d..00000000000 --- a/js/js.backend/testFiles/examples/cases/initializerBlock.jet +++ /dev/null @@ -1,13 +0,0 @@ -class C() { - public var f: Int - - { - $f = 610 - } -} - -fun box(): String { - val c = C() - if (c.f != 610) return "fail" - return "OK" -} diff --git a/js/js.backend/testFiles/examples/cases/kt242.jet b/js/js.backend/testFiles/examples/cases/kt242.jet deleted file mode 100644 index 4e2de93cff3..00000000000 --- a/js/js.backend/testFiles/examples/cases/kt242.jet +++ /dev/null @@ -1,19 +0,0 @@ -fun box() : String { - val i: Int? = 7 - val j: Int? = null - val k = 7 - - //verify errors - if (i == 7) {} - if (7 == i) {} - - if (j == 7) {} - if (7 == j) {} - - if (i == k) {} - if (k == i) {} - - if (j == k) {} - if (k == j) {} - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/cases/newInstanceDefaultConstructor.jet b/js/js.backend/testFiles/examples/cases/newInstanceDefaultConstructor.jet deleted file mode 100644 index 6cd0ebd954b..00000000000 --- a/js/js.backend/testFiles/examples/cases/newInstanceDefaultConstructor.jet +++ /dev/null @@ -1,11 +0,0 @@ -class SimpleClass() { - fun foo() = 610 -} - -fun box() : String { - val c = SimpleClass() - if (c.foo() == 610) { - return "OK" - } - return "FAIL" -} diff --git a/js/js.backend/testFiles/examples/cases/overloadBinaryOperator.jet b/js/js.backend/testFiles/examples/cases/overloadBinaryOperator.jet deleted file mode 100644 index bee66062979..00000000000 --- a/js/js.backend/testFiles/examples/cases/overloadBinaryOperator.jet +++ /dev/null @@ -1,25 +0,0 @@ -import java.util.* - -class ArrayWrapper() { - val contents = ArrayList() - - fun add(item: T) { - contents.add(item) - } - - fun plus(b: ArrayWrapper): ArrayWrapper { - val result = ArrayWrapper() - result.contents.addAll(contents) - result.contents.addAll(b.contents) - return result - } -} - -fun box(): String { - val v1 = ArrayWrapper() - val v2 = ArrayWrapper() - v1.add("foo") - v2.add("bar") - val v3 = v1 + v2 - return if (v3.contents.size() == 2) "OK" else "fail" -} diff --git a/js/js.backend/testFiles/examples/cases/overloadPlusAssignReturn.jet b/js/js.backend/testFiles/examples/cases/overloadPlusAssignReturn.jet deleted file mode 100644 index b6d0c3c0282..00000000000 --- a/js/js.backend/testFiles/examples/cases/overloadPlusAssignReturn.jet +++ /dev/null @@ -1,27 +0,0 @@ -import java.util.* - -class ArrayWrapper() { - val contents = ArrayList() - - fun add(item: T) { - contents.add(item) - } - - fun plusAssign(rhs: ArrayWrapper) { - contents.addAll(rhs.contents) - } - - fun get(index: Int): T { - return contents.get(index) - } -} - -fun box(): String { - var v1 = ArrayWrapper() - val v2 = ArrayWrapper() - v1.add("foo") - val v3 = v1 - v2.add("bar") - v1 += v2 - return if (v1.contents.size() == 2 && v3.contents.size() == 2) "OK" else "fail" -} diff --git a/js/js.backend/testFiles/examples/cases/overloadPlusToPlusAssign.jet b/js/js.backend/testFiles/examples/cases/overloadPlusToPlusAssign.jet deleted file mode 100644 index c5236b0ace4..00000000000 --- a/js/js.backend/testFiles/examples/cases/overloadPlusToPlusAssign.jet +++ /dev/null @@ -1,30 +0,0 @@ -import java.util.* - -class ArrayWrapper() { - val contents = ArrayList() - - fun add(item: T) { - contents.add(item) - } - - fun plus(rhs: ArrayWrapper): ArrayWrapper { - val result = ArrayWrapper() - result.contents.addAll(contents) - result.contents.addAll(rhs.contents) - return result - } - - fun get(index: Int): T { - return contents.get(index) - } -} - -fun box(): String { - var v1 = ArrayWrapper() - val v2 = ArrayWrapper() - v1.add("foo") - val v3 = v1 - v2.add("bar") - v1 += v2 - return if (v1.contents.size() == 2 && v3.contents.size() == 1) "OK" else "fail" -} diff --git a/js/js.backend/testFiles/examples/cases/overloadUnaryOperator.jet b/js/js.backend/testFiles/examples/cases/overloadUnaryOperator.jet deleted file mode 100644 index 2cbe1a27f3a..00000000000 --- a/js/js.backend/testFiles/examples/cases/overloadUnaryOperator.jet +++ /dev/null @@ -1,31 +0,0 @@ -import java.util.* - -class ArrayWrapper() { - val contents = ArrayList() - - fun add(item: T) { - contents.add(item) - } - - fun minus(): ArrayWrapper { - val result = ArrayWrapper() - result.contents.addAll(contents) - var i = contents.size(); - for (a in contents) { - result.contents[--i] = a; - } - return result - } - - fun get(index: Int): T { - return contents.get(index) - } -} - -fun box(): String { - val v1 = ArrayWrapper() - v1.add("foo") - v1.add("bar") - val v2 = -v1 - return if (v2[0] == "bar" && v2[1] == "foo") "OK" else "fail" -} diff --git a/js/js.backend/testFiles/examples/cases/propertyDelegation.jet b/js/js.backend/testFiles/examples/cases/propertyDelegation.jet deleted file mode 100644 index 614c624f124..00000000000 --- a/js/js.backend/testFiles/examples/cases/propertyDelegation.jet +++ /dev/null @@ -1,33 +0,0 @@ -open class Base() { - val plain = 239 - public val read : Int - get() = 239 - - public var readwrite : Int = 0 - get() = $readwrite + 1 - set(n : Int) { - $readwrite = n - } -} - -trait Abstract {} - -class Derived1() : Base(), Abstract {} -class Derived2() : Abstract, Base() {} - -fun code(s : Base) : Int { - if (s.plain != 239) return 1 - if (s.read != 239) return 2 - s.readwrite = 238 - if (s.readwrite != 239) return 3 - return 0 -} - -fun test(s : Base) : Boolean = code(s) == 0 - -fun box() : String { - if (!test(Base())) return "Fail #1" - if (!test(Derived1())) return "Fail #2" - if (!test(Derived2())) return "Fail #3" - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/cases/rightHandOverride.jet b/js/js.backend/testFiles/examples/cases/rightHandOverride.jet deleted file mode 100644 index e99e60bd863..00000000000 --- a/js/js.backend/testFiles/examples/cases/rightHandOverride.jet +++ /dev/null @@ -1,20 +0,0 @@ -// Changed when traits were introduced. May not make sense any more - -trait Left {} -open class Right() { - open fun f() = 42 -} - -class D() : Left, Right() { - override fun f() = 239 -} - -fun box() : String { - val r : Right = Right() - val d : D = D() - - if (r.f() != 42) return "Fail #1" - if (d.f() != 239) return "Fail #2" - - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/cases/simplestClosure.jet b/js/js.backend/testFiles/examples/cases/simplestClosure.jet deleted file mode 100644 index 7a9f3b439cf..00000000000 --- a/js/js.backend/testFiles/examples/cases/simplestClosure.jet +++ /dev/null @@ -1,7 +0,0 @@ -fun box() : String { - return invoker( {"OK"} ) -} - -fun invoker(gen : () -> String) : String { - return gen() -} diff --git a/js/js.backend/testFiles/examples/cases/simplestClosureAndBoxing.jet b/js/js.backend/testFiles/examples/cases/simplestClosureAndBoxing.jet deleted file mode 100644 index 50f22fbeb8d..00000000000 --- a/js/js.backend/testFiles/examples/cases/simplestClosureAndBoxing.jet +++ /dev/null @@ -1,7 +0,0 @@ -fun box() : String { - return if (int_invoker( { 7 } ) == 7) "OK" else "fail" -} - -fun int_invoker(gen : () -> Int) : Int { - return gen() -} diff --git a/js/js.backend/testFiles/examples/out/.gitignore b/js/js.backend/testFiles/examples/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/examples/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/basicmethod.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/basicmethod.jet deleted file mode 100644 index 9920bc3b69d..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/basicmethod.jet +++ /dev/null @@ -1,21 +0,0 @@ -import java.util.ArrayList - -trait Tr { - fun extra() : String = "_" -} - -class N() : ArrayList(), Tr { - override fun add(el: Any) : Boolean { - super.add(el) - return super.add(el.toString() + super.extra() + el + extra()) - } - - override fun extra() : String = super.extra() + super.extra() -} - -fun box(): String { - val n = N() - n.add("239") - if (n.get(0) == "239" && n.get(1) == "239_239__") return "OK"; - return "fail"; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/basicproperty.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/basicproperty.jet deleted file mode 100644 index ae1cfa5618b..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/basicproperty.jet +++ /dev/null @@ -1,22 +0,0 @@ -open class M() { - open var b: Int = 0 -} - -class N() : M() { - val a : Int - get() { - super.b = super.b + 1 - return super.b + 1 - } - override var b: Int = a + 1 - - val superb : Int - get() = super.b -} - -fun box(): String { - val n = N() - println("a: " + n.a + " b: " + n.b + " superb: " + n.superb) - if (n.b == 3 && n.a == 4 && n.superb == 3) return "OK"; - return "fail"; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/classObject.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/classObject.jet deleted file mode 100644 index 76eff77c438..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/classObject.jet +++ /dev/null @@ -1,11 +0,0 @@ -class C() { - class object { - fun create() = C() - } -} - -fun box(): String { - val c = C.create() - return if (c is C) "OK" else "fail" -} - diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/classObjectInterface.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/classObjectInterface.jet deleted file mode 100644 index 432bb37bee0..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/classObjectInterface.jet +++ /dev/null @@ -1,9 +0,0 @@ -class C() { - fun getInstance(): Runnable = C - - class object: Runnable { - override fun run(): Unit { } - } -} - -fun foo() = C().getInstance() diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/classObjectMethod.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/classObjectMethod.jet deleted file mode 100644 index d7d70a86d96..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/classObjectMethod.jet +++ /dev/null @@ -1,13 +0,0 @@ -abstract open class Default { - abstract fun defaultValue(): Int -} - -class MyInt() { - class object : Default { - override fun defaultValue(): Int = 610 - } -} - -fun toDefault(t: T) where class object T: Default = T.defaultValue() - -fun box(): String = if (toDefault(MyInt()) == 610) "OK" else "fail" diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/enclosed.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/enclosed.jet deleted file mode 100644 index 705e0b602c2..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/enclosed.jet +++ /dev/null @@ -1,42 +0,0 @@ -trait BK { - fun x() : Int = 50 -} - -trait K : BK { - override fun x() : Int = super.x() * 2 -} - -open class M() { - open fun x() : Int = 10 - - open var y = 500 -} - -open class N() : M(), K { - - override fun x() : Int = 20 - - override var y = 200 - - open class C() : K { - fun test1() = x() - fun test2() = super@N.x() - fun test3() = super@N.x() - fun test4() = super.x() - fun test5() = y - fun test6() : Int { - super@N.y += 200 - return super@N.y - } - } -} - -fun box(): String { - if (N().C().test1() != 100) return "test1 fail"; - if (N().C().test2() != 10) return "test2 fail"; - if (N().C().test3() != 100) return "test3 fail"; - if (N().C().test4() != 100) return "test4 fail"; - if (N().C().test5() != 200) return "test5 fail"; - if (N().C().test6() != 700) return "test6 fail"; - return "OK"; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/forwardTypeParameter.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/forwardTypeParameter.jet deleted file mode 100644 index 2e78cd3ae9c..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/forwardTypeParameter.jet +++ /dev/null @@ -1,12 +0,0 @@ -class Foo() { } -class Bar() { } - -fun isInstance(obj: Any?) = obj is T - -fun isInstance2(obj: Any?) = isInstance(obj) - -fun box(): String { - if (! isInstance2(Foo())) return "fail 1" - if (isInstance2(Foo())) return "fail 2" - return "OK" -} diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/inheritance.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/inheritance.jet deleted file mode 100644 index 0bfdb4e497f..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/inheritance.jet +++ /dev/null @@ -1,41 +0,0 @@ -// Changed when traits were introduced. May not make sense any more - -open class X(val x : Int) {} -trait Y { - abstract val y : Int -} - -class YImpl(override val y : Int) : Y {} - -class Point(x : Int, yy : Int) : X(x) , Y { - override val y : Int = yy -} - -trait Abstract {} - -class P1(x : Int, yy : Y) : Abstract, X(x), Y by yy {} -class P2(x : Int, yy : Y) : X(x), Abstract, Y by yy {} -class P3(x : Int, yy : Y) : X(x), Y by yy, Abstract {} -class P4(x : Int, yy : Y) : Y by yy, Abstract, X(x) {} - -fun box() : String { - if (X(239).x != 239) return "FAIL #1" - if (YImpl(239).y != 239) return "FAIL #2" - - val p = Point(240, -1) - if (p.x + p.y != 239) return "FAIL #3" - - val y = YImpl(-1) - val p1 = P1(240, y) - if (p1.x + p1.y != 239) return "FAIL #4" - val p2 = P2(240, y) - if (p2.x + p2.y != 239) return "FAIL #5" - - val p3 = P3(240, y) - if (p3.x + p3.y != 239) return "FAIL #6" - - val p4 = P4(240, y) - if (p4.x + p4.y != 239) return "FAIL #7" - - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/inheritedInnerClass.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/inheritedInnerClass.jet deleted file mode 100644 index 4717bea55a8..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/inheritedInnerClass.jet +++ /dev/null @@ -1,14 +0,0 @@ -class Outer() { - open class InnerBase() { - } - - class InnerDerived(): InnerBase() { - } - - public val foo: InnerBase? = InnerDerived() -} - -fun box() : String { - val o = Outer() - return if (o.foo === null) "fail" else "OK" -} diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/initializerBlockDImpl.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/initializerBlockDImpl.jet deleted file mode 100644 index aa3d227c80f..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/initializerBlockDImpl.jet +++ /dev/null @@ -1,20 +0,0 @@ -import java.util.* -import java.io.* - -class World() { - public val items: ArrayList = ArrayList - - class Item() { - { - items.add(this) - } - } - - val foo = Item() -} - -fun box() : String { - val w = World() - if (w.items.size() != 1) return "fail" - return "OK" -} diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/innerClass.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/innerClass.jet deleted file mode 100644 index df43f61e8bc..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/innerClass.jet +++ /dev/null @@ -1,19 +0,0 @@ -class Outer(val foo: StringBuilder) { - class Inner() { - fun len() : Int { - return foo.length() - } - } - - fun test() : Inner { - return Inner() - } -} - -fun box() : String { - val sb = StringBuilder("xyzzy") - val o = Outer(sb) - val i = o.test() - val l = i.len() - return if (l != 5) "fail" else "OK" -} diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/propertyInInitializer.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/propertyInInitializer.jet deleted file mode 100644 index f6e84b15afd..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/propertyInInitializer.jet +++ /dev/null @@ -1,16 +0,0 @@ -class Outer() { - val s = "xyzzy" - - open class InnerBase(public val name: String) { - } - - class InnerDerived(): InnerBase(s) { - } - - val x = InnerDerived() -} - -fun box() : String { - val o = Outer() - return if (o.x.name != "xyzzy") "fail" else "OK" -} diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/simpleBox.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/simpleBox.jet deleted file mode 100644 index be95d012d51..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/simpleBox.jet +++ /dev/null @@ -1,8 +0,0 @@ -class Box(t: T) { - var value = t -} - -fun box(): String { - val box: Box = Box(1) - return if (box.value == 1) "OK" else "fail" -} diff --git a/js/js.backend/testFiles/examples/sortedTests/unsupported/traitproperty.jet b/js/js.backend/testFiles/examples/sortedTests/unsupported/traitproperty.jet deleted file mode 100644 index 715d8d73d8b..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/unsupported/traitproperty.jet +++ /dev/null @@ -1,29 +0,0 @@ -trait M { - var backingB : Int - var b : Int - get() = backingB - set(value: Int) { - backingB = value - } -} - -class N() : M { - override var backingB : Int = 0 - - val a : Int - get() { - super.b = super.b + 1 - return super.b + 1 - } - override var b: Int = a + 1 - - val superb : Int - get() = super.b -} - -fun box(): String { - val n = N() - println("a: " + n.a + " b: " + n.b + " superb: " + n.superb) - if (n.b == 3 && n.a == 4 && n.superb == 3) return "OK"; - return "fail"; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/examples/sortedTests/usesJava/exceptionConstructor.jet b/js/js.backend/testFiles/examples/sortedTests/usesJava/exceptionConstructor.jet deleted file mode 100644 index ab6117e266e..00000000000 --- a/js/js.backend/testFiles/examples/sortedTests/usesJava/exceptionConstructor.jet +++ /dev/null @@ -1,7 +0,0 @@ -class GameError(msg: String): Exception(msg) { -} - -fun box(): String { - val e = GameError("foo") - return if (e.getMessage() == "foo") "OK" else "fail" -} diff --git a/js/js.backend/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.kt b/js/js.backend/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.kt deleted file mode 100644 index f73f96b80dd..00000000000 --- a/js/js.backend/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.kt +++ /dev/null @@ -1,3 +0,0 @@ -package foo - -fun box() = if (true) throw Exception() else false \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/conditional/out/.gitignore b/js/js.backend/testFiles/expression/conditional/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/expression/conditional/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/for/cases/forIteratesOverArray.kt b/js/js.backend/testFiles/expression/for/cases/forIteratesOverArray.kt deleted file mode 100644 index 0b0cad9557b..00000000000 --- a/js/js.backend/testFiles/expression/for/cases/forIteratesOverArray.kt +++ /dev/null @@ -1,19 +0,0 @@ -package foo - -val a1 = Array(10) - -fun box() : Boolean { - var c = 0 - var d = 0 - a1[3] = 3 - a1[5] = 5 - - for (var a : Int? in a1) { - if (a != null) { - c += 1; - } else { - d += 1 - } - } - return (c == 2) && (d == 8) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/for/cases/forOnEmptyArray.kt b/js/js.backend/testFiles/expression/for/cases/forOnEmptyArray.kt deleted file mode 100644 index 951265396c3..00000000000 --- a/js/js.backend/testFiles/expression/for/cases/forOnEmptyArray.kt +++ /dev/null @@ -1,10 +0,0 @@ -package foo - -val a1 = Array(0) - -fun box() : Boolean { - for (a in a1) { - return false; - } - return true; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/for/out/.gitignore b/js/js.backend/testFiles/expression/for/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/expression/for/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/KT-921.kt b/js/js.backend/testFiles/expression/function/cases/KT-921.kt deleted file mode 100644 index 7c41a0fc0c0..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/KT-921.kt +++ /dev/null @@ -1,67 +0,0 @@ -import java.util.* - -class Lifetime() { - val attached = ArrayList< Function0 >() - - public fun attach(action : ()->Unit) - { - attached.add(action) - } - - fun close() - { - for(x in attached) x() - attached.clear() - } -} - -public class Viewable() -{ - val items = ArrayList() - - fun add(item:T) - { - items.add(item) - } - - fun remove(item:T) - { - items.remove(item) - } - - fun view(lifetime: Lifetime, viewer: (itemLifetime:Lifetime, item:T) -> Unit) - { - for(item in items) - viewer(lifetime, item) - } -} - -fun lifetime(body: (Lifetime)->Unit) -{ - val l = Lifetime() - body(l) - l.close() -} - -fun Dump(items:ArrayList) -{ - for(item in items) - print(item.toString() + ", ") - println() -} - -fun main(args:Array) -{ - val v = Viewable() - val x = ArrayList() - v.add(1) - v.add(2) - lifetime( - { - v.view(it, {(itemLifetime, item)-> - x.add(item) - Dump(x) - itemLifetime.attach { x.remove(item as Any); Dump(x) } - }) - }) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/adderClosure.kt b/js/js.backend/testFiles/expression/function/cases/adderClosure.kt deleted file mode 100644 index d7c053cbb87..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/adderClosure.kt +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -fun box() : Boolean { - var sum = 0 - val adder = {(a: Int) -> sum += a } - adder(3) - adder(2) - return sum == 5 -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/closureWithParameter.kt b/js/js.backend/testFiles/expression/function/cases/closureWithParameter.kt deleted file mode 100644 index 31c8e3f07c0..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/closureWithParameter.kt +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -fun box() : String { - return apply( "OK", {(arg: String) -> arg } ) -} - -fun apply(arg : String, f : (p:String) -> String) : String { - return f(arg) -} diff --git a/js/js.backend/testFiles/expression/function/cases/closureWithParameterAndBoxing.jet b/js/js.backend/testFiles/expression/function/cases/closureWithParameterAndBoxing.jet deleted file mode 100644 index e5602935931..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/closureWithParameterAndBoxing.jet +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -fun box() : String { - return if (apply( 5, {(arg: Int) -> arg + 13 } ) == 18) "OK" else "fail" -} - -fun apply(arg : Int, f : (p:Int) -> Int) : Int { - return f(arg) -} diff --git a/js/js.backend/testFiles/expression/function/cases/defaultParameters.kt b/js/js.backend/testFiles/expression/function/cases/defaultParameters.kt deleted file mode 100644 index 73945d0780a..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/defaultParameters.kt +++ /dev/null @@ -1,15 +0,0 @@ -package foo - - -fun f(a : Int = 2, b : Int = 3) = a + b - -fun box() : Boolean -{ - if (f(1,2) != 3) return false; - if (f(1,3) != 4) return false; - if (f(3) != 6) return false; - if (f() != 5) return false; - - return true; -} - diff --git a/js/js.backend/testFiles/expression/function/cases/enclosingThis.kt b/js/js.backend/testFiles/expression/function/cases/enclosingThis.kt deleted file mode 100644 index d227b3a2cc9..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/enclosingThis.kt +++ /dev/null @@ -1,12 +0,0 @@ -class Point(val x:Int, val y:Int) { - fun mul() : (scalar:Int)->Point { - return { (scalar:Int):Point -> Point(x * scalar, y * scalar) } - } -} - -val m = Point(2, 3).mul() : (scalar:Int)->Point - -fun box() : String { - val answer = m(5) - return if (answer.x == 10 && answer.y == 15) "OK" else "FAIL" -} diff --git a/js/js.backend/testFiles/expression/function/cases/expressionAsFunction.kt b/js/js.backend/testFiles/expression/function/cases/expressionAsFunction.kt deleted file mode 100644 index a2f0685ae29..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/expressionAsFunction.kt +++ /dev/null @@ -1,42 +0,0 @@ -package foo - -import java.util.*; - -val d = {(a : Int) -> a + 1} -val p = {(a : Int) -> a * 3} - -val list = ArrayList>(); - -fun chain(start : Int) : Int { - var res = start; - for (func in list) { - res = (func)(res); - } - return res; -} - -fun box() : Boolean { - if (chain(0) != 0) { - return false; - } - list.add(d); - if (list.get(0)(0) != 1) { - return false; - } - list.add(p); - if (list.get(1)(10) != 30) { - return false; - } - if (chain(0) != 3) { - return false; - } - list.add({it * it}); - list.add({it - 100}); - if (chain(2) != -19) { - return false; - } - if (({(a : Int) -> a * a}(3)) != 9) { - return false; - } - return true; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/functionInsideFunction.kt b/js/js.backend/testFiles/expression/function/cases/functionInsideFunction.kt deleted file mode 100644 index fcb2a69895f..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/functionInsideFunction.kt +++ /dev/null @@ -1,19 +0,0 @@ -package foo - - -fun box() : Boolean{ - fun f() = 3 - - return (((f() + f()) == 6) && (b() == 24)) -} - - -fun b() : Int { - - fun a() : Int { - fun c() = 4 - return c() * 3 - } - val a = 2 - return a() * a -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/functionLiteral.kt b/js/js.backend/testFiles/expression/function/cases/functionLiteral.kt deleted file mode 100644 index e27b2e273f9..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/functionLiteral.kt +++ /dev/null @@ -1,8 +0,0 @@ -package foo - -fun box() : Boolean { - var sum = 0 - val addFive = {(a: Int) -> a + 5 } - sum = addFive(sum) - return sum == 5 -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/functionLiteralAsLastParameter.kt b/js/js.backend/testFiles/expression/function/cases/functionLiteralAsLastParameter.kt deleted file mode 100644 index 6be5be64eb6..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/functionLiteralAsLastParameter.kt +++ /dev/null @@ -1,14 +0,0 @@ -package foo - -fun f(a: (Int) -> Int) = a(1) - -fun box() : Boolean { - - if (f() { - it + 2 - } != 3) return false - - if (f() {(a : Int) -> a * 300} != 300) return false; - - return true -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/functionLiteralAsParameter.kt b/js/js.backend/testFiles/expression/function/cases/functionLiteralAsParameter.kt deleted file mode 100644 index 3fb7b7ae0e4..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/functionLiteralAsParameter.kt +++ /dev/null @@ -1,10 +0,0 @@ -package foo - -fun apply(f : (Int) -> Int, t : Int) : Int { - return f(t) -} - - -fun box() : Boolean { - return apply({(a: Int) -> a + 5 }, 3) == 8 -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/functionUsedBeforeDeclaration.kt b/js/js.backend/testFiles/expression/function/cases/functionUsedBeforeDeclaration.kt deleted file mode 100644 index a093c854230..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/functionUsedBeforeDeclaration.kt +++ /dev/null @@ -1,13 +0,0 @@ -package foo - - -fun box() : Boolean -{ - return f() -} - -fun f() : Boolean { - return true -} - - diff --git a/js/js.backend/testFiles/expression/function/cases/functionWithTwoParametersCall.kt b/js/js.backend/testFiles/expression/function/cases/functionWithTwoParametersCall.kt deleted file mode 100644 index 4c82f64892f..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/functionWithTwoParametersCall.kt +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -fun sum(param1 : Int, param2 : Int) : Int { - return param1 + param2; -} - -fun box() : Boolean { - return (sum(1, 5) == 6) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/implicitItParameter.kt b/js/js.backend/testFiles/expression/function/cases/implicitItParameter.kt deleted file mode 100644 index ecfbeb19844..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/implicitItParameter.kt +++ /dev/null @@ -1,12 +0,0 @@ -package foo - -fun test(f : (Int) -> Boolean, p : Int) = f(p) - -fun box() : Boolean { - if (!test({it + 1 == 2}, 1)) return false; - - if (!test({it > 1}, 3)) return false; - - return (test({((it < 1) == false)}, 1)) - -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/loopClosure.kt b/js/js.backend/testFiles/expression/function/cases/loopClosure.kt deleted file mode 100644 index 1cf3f038528..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/loopClosure.kt +++ /dev/null @@ -1,17 +0,0 @@ -package foo - -var b = 0 - -fun loop(var times : Int) { - while(times > 0) { - val u = {(value : Int) -> - b = b + 1 - } - u(times--) - } -} - -fun box() : Boolean { - loop(5) - return b == 5 -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/namedArguments.kt b/js/js.backend/testFiles/expression/function/cases/namedArguments.kt deleted file mode 100644 index 5511e10825f..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/namedArguments.kt +++ /dev/null @@ -1,16 +0,0 @@ -package foo - -fun test(x: Int, y: Int) = y - x - -fun box() : Boolean { - if (test(1,2) != 1) { - return false; - } - if (test(x=1, y=2) != 1) { - return false; - } - if (test(y=2, x=1) != 1) { - return false; - } - return true -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/cases/vararg.kt b/js/js.backend/testFiles/expression/function/cases/vararg.kt deleted file mode 100644 index d3ab09ec173..00000000000 --- a/js/js.backend/testFiles/expression/function/cases/vararg.kt +++ /dev/null @@ -1,17 +0,0 @@ -package foo - -fun testSize(expectedSize : Int, vararg i : Int) : Boolean { - return (i.size == expectedSize) -} - -fun testSum(expectedSum : Int, vararg i : Int) : Boolean { - var sum = 0 - for (j in i) { - sum += j - } - - return (expectedSum == sum) -} - -fun box() = testSize(0) && testSum(0) && testSize(3, 1, 1, 1) && testSum(3, 1, 1, 1) && testSize(6, 1, 1, 1, 2, 3, 4) && - testSum(30, 10, 20, 0) \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/function/out/.gitignore b/js/js.backend/testFiles/expression/function/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/expression/function/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/misc/cases/intRange.kt b/js/js.backend/testFiles/expression/misc/cases/intRange.kt deleted file mode 100644 index 73d578db692..00000000000 --- a/js/js.backend/testFiles/expression/misc/cases/intRange.kt +++ /dev/null @@ -1,112 +0,0 @@ -package foo - -import js.* - -class RangeIterator(val start : Int, var count : Int, val reversed : Boolean) { - - var i = start - - fun next() : Int { - --count - if (reversed) { - i-- - return i + 1 - } else { - i++ - return i - 1 - } - } - - - fun hasNext() = (count > 0); -} - -class NumberRange(val start : Int, val size : Int, val reversed : Boolean) { - - val end : Int - get() = if (reversed) start - size + 1 else start + size - 1 - - fun contains(number : Int) : Boolean { - if (reversed) { - return (number <= start) && (number > start - size); - } else { - return (number >= start) && (number < start + size); - } - } - - fun iterator() = RangeIterator(start, size, reversed); -} - - - -fun box() = testRange() && testReversedRange(); - -fun testRange() : Boolean { - - val oneToFive = NumberRange(1, 4, false); - if (oneToFive.contains(5)) return false; - if (oneToFive.contains(0)) return false; - if (oneToFive.contains(-100)) return false; - if (oneToFive.contains(10)) return false; - if (!oneToFive.contains(1)) return false; - if (!oneToFive.contains(2)) return false; - if (!oneToFive.contains(3)) return false; - if (!oneToFive.contains(4)) return false; - if (!(oneToFive.start == 1)) return false; - if (!(oneToFive.size == 4)) return false; - if (!(oneToFive.end == 4)) return false; - - var sum = 0; - for (i in oneToFive) { - sum += i; - } - for (i in oneToFive) { - print(i) - } - - if (sum != 10) return false; - - return true; - -} - -fun testReversedRange() : Boolean { - - println("Testing reversed range."); - - val tenToFive = NumberRange(10, 5, true); - - if (tenToFive.contains(5)) return false; - if (tenToFive.contains(11)) return false; - if (tenToFive.contains(-100)) return false; - if (tenToFive.contains(1000)) return false; - if (!tenToFive.contains(6)) return false; - if (!tenToFive.contains(7)) return false; - if (!tenToFive.contains(8)) return false; - if (!tenToFive.contains(9)) return false; - if (!tenToFive.contains(10)) return false; - - if (!(tenToFive.start == 10)) return false; - if (!(tenToFive.size == 5)) return false; - if (!(tenToFive.end == 6)) return false; - - for (i in tenToFive) { - println(i) - } - - - var sum = 0; - for (i in tenToFive) { - sum += i; - } - - if (sum != 40) { - return false; - } - - return true; -} - -fun main(args : Array) { - println(box()) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/misc/cases/jquery.kt b/js/js.backend/testFiles/expression/misc/cases/jquery.kt deleted file mode 100644 index 4b4c94c8273..00000000000 --- a/js/js.backend/testFiles/expression/misc/cases/jquery.kt +++ /dev/null @@ -1,8 +0,0 @@ -package foo - -import jquery.*; - -fun box() : String { - val aa = jq("a").attr("a"); - return "OK" -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/misc/cases/localProperty.jet b/js/js.backend/testFiles/expression/misc/cases/localProperty.jet deleted file mode 100644 index 2f69f45afba..00000000000 --- a/js/js.backend/testFiles/expression/misc/cases/localProperty.jet +++ /dev/null @@ -1,15 +0,0 @@ -package foo - -val y = 3 - -fun f(a:Int) : Int { - val x = 42 - val y = 50 - - return y -} - -fun box() : Int -{ - return f(y) -} diff --git a/js/js.backend/testFiles/expression/misc/cases/safecallComputesExpressionOnlyOnce.kt b/js/js.backend/testFiles/expression/misc/cases/safecallComputesExpressionOnlyOnce.kt deleted file mode 100644 index e48f4d2da46..00000000000 --- a/js/js.backend/testFiles/expression/misc/cases/safecallComputesExpressionOnlyOnce.kt +++ /dev/null @@ -1,14 +0,0 @@ -package foo - -var i = 0 - -fun test() : Int? = i++ - -fun box() : Boolean { - if (i != 0) return false - test()?.plus(1) - if (i != 1) return false - test()?.minus(2) - if (i != 2) return false - return true -} \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/misc/out/.gitignore b/js/js.backend/testFiles/expression/misc/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/expression/misc/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/expression/string/cases/intInTemplate.kt b/js/js.backend/testFiles/expression/string/cases/intInTemplate.kt deleted file mode 100644 index 2fa031bd831..00000000000 --- a/js/js.backend/testFiles/expression/string/cases/intInTemplate.kt +++ /dev/null @@ -1,7 +0,0 @@ -package foo - -fun box() : String { - var number = 3 - return ("my age is $number"); -} - diff --git a/js/js.backend/testFiles/expression/string/cases/multipleExpressionsInTemplate.kt b/js/js.backend/testFiles/expression/string/cases/multipleExpressionsInTemplate.kt deleted file mode 100644 index cede8ae7ef9..00000000000 --- a/js/js.backend/testFiles/expression/string/cases/multipleExpressionsInTemplate.kt +++ /dev/null @@ -1,8 +0,0 @@ -package foo - -fun box() : String { - var right = 2 - var left = 3 - return ("left = $left\nright = $right\nsum = ${left + right}\n"); -} - diff --git a/js/js.backend/testFiles/expression/string/cases/objectToStringCallInTemplate.kt b/js/js.backend/testFiles/expression/string/cases/objectToStringCallInTemplate.kt deleted file mode 100644 index 7eab5902391..00000000000 --- a/js/js.backend/testFiles/expression/string/cases/objectToStringCallInTemplate.kt +++ /dev/null @@ -1,18 +0,0 @@ -package foo - -class A(var i : Int) { - fun toString() = "a$i" -} - -fun box() : Boolean { - var p = A(2); - var n = A(1); - if ("$p$n" != "a2a1") { - return false; - } - if ("${A(10)}" != "a10") { - return false; - } - return true; -} - diff --git a/js/js.backend/testFiles/expression/string/cases/stringAssignment.kt b/js/js.backend/testFiles/expression/string/cases/stringAssignment.kt deleted file mode 100644 index 9f3c327965f..00000000000 --- a/js/js.backend/testFiles/expression/string/cases/stringAssignment.kt +++ /dev/null @@ -1,10 +0,0 @@ -package foo - -fun box() : Boolean { - - val a = "bar"; - var b = "foo"; - b = a; - return (b == "bar"); -} - diff --git a/js/js.backend/testFiles/expression/string/cases/stringConstant.kt b/js/js.backend/testFiles/expression/string/cases/stringConstant.kt deleted file mode 100644 index 9961104c902..00000000000 --- a/js/js.backend/testFiles/expression/string/cases/stringConstant.kt +++ /dev/null @@ -1,8 +0,0 @@ -package foo - -fun box() : Boolean { - - val a = "String"; - return true; -} - diff --git a/js/js.backend/testFiles/expression/string/cases/stringInTemplate.kt b/js/js.backend/testFiles/expression/string/cases/stringInTemplate.kt deleted file mode 100644 index 5a021f9aec2..00000000000 --- a/js/js.backend/testFiles/expression/string/cases/stringInTemplate.kt +++ /dev/null @@ -1,7 +0,0 @@ -package foo - -fun box() : String { - var name = "Hello" - return ("o${name}o"); -} - diff --git a/js/js.backend/testFiles/expression/string/out/.gitignore b/js/js.backend/testFiles/expression/string/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/expression/string/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionFunction/cases/extensionFunctionOnExpression.kt b/js/js.backend/testFiles/extensionFunction/cases/extensionFunctionOnExpression.kt deleted file mode 100644 index 7b3c4b004da..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/extensionFunctionOnExpression.kt +++ /dev/null @@ -1,13 +0,0 @@ -package foo - -fun Int.same() : Int { - return this -} - -fun Int.quadruple() : Int { - return same() * 4; -} - -fun box(): Boolean { - return ((3 + 4).quadruple() == 28) -} diff --git a/js/js.backend/testFiles/extensionFunction/cases/extensionInsideFunctionLiteral.kt b/js/js.backend/testFiles/extensionFunction/cases/extensionInsideFunctionLiteral.kt deleted file mode 100644 index 9d69e2fd859..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/extensionInsideFunctionLiteral.kt +++ /dev/null @@ -1,22 +0,0 @@ -package foo - -class M() { - var m = 0 - - fun eval() { - var d = { - var c = {Int.() -> this + 3} - m += 3.c() - } - d(); - } -} - -fun box() : Boolean { - var a = M() - if (a.m != 0) return false; - a.eval() - if (a.m != 6) return false; - - return true; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionFunction/cases/extensionLiteralPassedToFunction.kt b/js/js.backend/testFiles/extensionFunction/cases/extensionLiteralPassedToFunction.kt deleted file mode 100644 index 62bd16300a2..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/extensionLiteralPassedToFunction.kt +++ /dev/null @@ -1,7 +0,0 @@ -package foo - -fun apply(i : Int, f : Int.(Int) -> Int) = i.f(1); - -fun box() : Boolean { - return (apply(1, {i -> i + this})) == 2 -} \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionFunction/cases/extensionUsedInsideClass.kt b/js/js.backend/testFiles/extensionFunction/cases/extensionUsedInsideClass.kt deleted file mode 100644 index 7e345e3ad93..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/extensionUsedInsideClass.kt +++ /dev/null @@ -1,15 +0,0 @@ -package foo - -class A(var a : Int) { - fun eval() = f(); -} - -fun A.f() : Int { - a = 3 - return 10 -} - -fun box(): Boolean { - val a = A(4) - return (a.eval() == 10) && (a.a == 3) -} diff --git a/js/js.backend/testFiles/extensionFunction/cases/extensionWithImplicitReceiver.kt b/js/js.backend/testFiles/extensionFunction/cases/extensionWithImplicitReceiver.kt deleted file mode 100644 index ccab0e9f2f5..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/extensionWithImplicitReceiver.kt +++ /dev/null @@ -1,13 +0,0 @@ -package foo - -fun Int.same() : Int { - return this -} - -fun Int.quadruple() : Int { - return same() * 4; -} - -fun box(): Boolean { - return (3.quadruple() == 12) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionFunction/cases/generic.kt b/js/js.backend/testFiles/extensionFunction/cases/generic.kt deleted file mode 100644 index d13147d5d22..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/generic.kt +++ /dev/null @@ -1,24 +0,0 @@ -package foo - -import java.util.* - -fun ArrayList.findAll(predicate: (T) -> Boolean): ArrayList { - val result = ArrayList() - for(val t in this) { - if (predicate(t)) result.add(t) - } - return result -} - - -fun box(): String { - val list: ArrayList = ArrayList() - - list.add(2) - list.add(3) - list.add(5) - - - val m: ArrayList = list.findAll({(name: Int) -> name < 4}) - return if (m.size() == 2) "OK" else "fail" -} diff --git a/js/js.backend/testFiles/extensionFunction/cases/intExtension.kt b/js/js.backend/testFiles/extensionFunction/cases/intExtension.kt deleted file mode 100644 index 884014c87aa..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/intExtension.kt +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -fun Int.quadruple() : Int { - return this * 4; -} - -fun box(): Boolean { - return (3.quadruple() == 12) -} diff --git a/js/js.backend/testFiles/extensionFunction/cases/virtualExtension.kt b/js/js.backend/testFiles/extensionFunction/cases/virtualExtension.kt deleted file mode 100644 index 383c0191f5f..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/virtualExtension.kt +++ /dev/null @@ -1,15 +0,0 @@ -package foo - -class A(var a : Int) { - - fun Int.modify() : Int { - return this * 3; - } - - fun eval() = a.modify(); -} - -fun box(): Boolean { - val a = A(4) - return (a.eval() == 12) -} diff --git a/js/js.backend/testFiles/extensionFunction/cases/virtualExtensionOverride.kt b/js/js.backend/testFiles/extensionFunction/cases/virtualExtensionOverride.kt deleted file mode 100644 index 78646fb4b38..00000000000 --- a/js/js.backend/testFiles/extensionFunction/cases/virtualExtensionOverride.kt +++ /dev/null @@ -1,20 +0,0 @@ -package foo - -open class A(var a : Int) { - - open fun Int.modify() : Int { - return this * 3; - } - - fun eval() = a.modify(); -} - -class B(a : Int) : A(a) { - override fun Int.modify() : Int { - return this - 2; - } -} - -fun box(): Boolean { - return (A(4).eval() == 12) && (A(2).eval() == 6) && (B(3).eval() == 1) -} diff --git a/js/js.backend/testFiles/extensionFunction/out/.gitignore b/js/js.backend/testFiles/extensionFunction/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/extensionFunction/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionProperty/cases/absExtension.kt b/js/js.backend/testFiles/extensionProperty/cases/absExtension.kt deleted file mode 100644 index d0399758498..00000000000 --- a/js/js.backend/testFiles/extensionProperty/cases/absExtension.kt +++ /dev/null @@ -1,11 +0,0 @@ -package foo; - -val Double.abs : Double - get() = if (this > 0) this else -this - -fun box() : Boolean { - if (4.0.abs != 4.0) return false; - if ((-5.2).abs != 5.2) return false; - - return true; -} diff --git a/js/js.backend/testFiles/extensionProperty/cases/propertyWithGetterAndSetter.kt b/js/js.backend/testFiles/extensionProperty/cases/propertyWithGetterAndSetter.kt deleted file mode 100644 index aba51251279..00000000000 --- a/js/js.backend/testFiles/extensionProperty/cases/propertyWithGetterAndSetter.kt +++ /dev/null @@ -1,23 +0,0 @@ -package foo - -class Test() { - var a = 0 -} - -var Test.b : Int - get() = a * 3 - set(c : Int) { - a = c - 1 - } - -fun box() : Boolean { - val c = Test() - if (c.a != 0) return false; - if (c.b != 0) return false; - c.a = 3; - if (c.b != 9) return false; - c.b = 10; - if (c.a != 9) return false; - if (c.b != 27) return false; - return true; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionProperty/cases/simplePropertyWithGetter.kt b/js/js.backend/testFiles/extensionProperty/cases/simplePropertyWithGetter.kt deleted file mode 100644 index f073c5ce546..00000000000 --- a/js/js.backend/testFiles/extensionProperty/cases/simplePropertyWithGetter.kt +++ /dev/null @@ -1,17 +0,0 @@ -package foo - -val String.size : Int - get() = length - -val Int.quadruple : Int - get() = this * 4 - -fun box() : Boolean -{ - if ("1".size != 1) return false; - if ("11".size != 2) return false; - if (("121" + "123").size != 6) return false; - if (1.quadruple != 4) return false; - if (0.quadruple != 0) return false; - return true; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/extensionProperty/out/.gitignore b/js/js.backend/testFiles/extensionProperty/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/extensionProperty/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/cases/baseClassDefinedAfterDerived.kt b/js/js.backend/testFiles/inheritance/cases/baseClassDefinedAfterDerived.kt deleted file mode 100644 index 53a23fdc56e..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/baseClassDefinedAfterDerived.kt +++ /dev/null @@ -1,13 +0,0 @@ -package foo - - -class A() : B() { - -} - -open class B() { - - val a = 3 -} - -fun box() = (A().a == 3) \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/cases/complexInitializationOrder.kt b/js/js.backend/testFiles/inheritance/cases/complexInitializationOrder.kt deleted file mode 100644 index 9004131ad03..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/complexInitializationOrder.kt +++ /dev/null @@ -1,37 +0,0 @@ -package foo - -open class A() { - - var order = "" - { - order = order + "A" - } -} - -open class B() : A() { - { - order = order + "B" - } -} - -class C() : B() { - { - order = order + "C" - } -} - -class D() : B() { - { - order = order + "D" - } -} - -class E() : A() { - { - order = order + "E" - } -} - -fun box() : Boolean { - return (C().order == "ABC") && (D().order == "ABD") && (E().order == "AE") -} \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/cases/definitionOrder.kt b/js/js.backend/testFiles/inheritance/cases/definitionOrder.kt deleted file mode 100644 index 12e3f7b045c..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/definitionOrder.kt +++ /dev/null @@ -1,37 +0,0 @@ -package foo - -class C() : B() { - { - order = order + "C" - } -} - -class D() : B() { - { - order = order + "D" - } -} - -class E() : A() { - { - order = order + "E" - } -} - -open class B() : A() { - { - order = order + "B" - } -} - -open class A() { - - var order = "" - { - order = order + "A" - } -} - -fun box() : Boolean { - return (C().order == "ABC") && (D().order == "ABD") && (E().order == "AE") -} \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/cases/initializationOrder.kt b/js/js.backend/testFiles/inheritance/cases/initializationOrder.kt deleted file mode 100644 index faf44b8ab6e..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/initializationOrder.kt +++ /dev/null @@ -1,26 +0,0 @@ -package foo - -open class A() { - - var order = "" - { - order = order + "A" - } -} - -open class B() : A() { - { - order = order + "B" - } - -} - -class C() : B() { - { - order = order + "C" - } -} - -fun box() : Boolean { - return (C().order == "ABC") && (B().order == "AB") && (A().order == "A") -} \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/cases/initializersOfBasicClassExecute.kt b/js/js.backend/testFiles/inheritance/cases/initializersOfBasicClassExecute.kt deleted file mode 100644 index 52176e10fbe..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/initializersOfBasicClassExecute.kt +++ /dev/null @@ -1,13 +0,0 @@ -package foo - -open class A() { - var a = 3; -} - -class B() : A() { - -} - -fun box() : Int { - return (B().a) -} diff --git a/js/js.backend/testFiles/inheritance/cases/methodOverride.kt b/js/js.backend/testFiles/inheritance/cases/methodOverride.kt deleted file mode 100644 index 62feff89b9b..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/methodOverride.kt +++ /dev/null @@ -1,15 +0,0 @@ -package foo - -open class C() { - open fun f(): Any = "C f" -} - -class D() : C() { - override fun f(): String = "D f" -} - -fun box(): Boolean { - val d : C = D() - if(d.f() != "D f") return false - return true -} \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/cases/valuePassedToAncestorConstructor.kt b/js/js.backend/testFiles/inheritance/cases/valuePassedToAncestorConstructor.kt deleted file mode 100644 index 97795d7210f..00000000000 --- a/js/js.backend/testFiles/inheritance/cases/valuePassedToAncestorConstructor.kt +++ /dev/null @@ -1,12 +0,0 @@ -package foo - -open class C(a : Int) { - val b = a -} - -class D(c : Int) : C(c + 2) { -} - -fun box(): Boolean { - return (D(0).b == 2) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/inheritance/out/.gitignore b/js/js.backend/testFiles/inheritance/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/inheritance/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/access.kt b/js/js.backend/testFiles/java/arrayList/cases/access.kt deleted file mode 100644 index 58c151430c2..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/access.kt +++ /dev/null @@ -1,10 +0,0 @@ -package foo - - import java.util.ArrayList; - - fun box() : Boolean { - val a = ArrayList(); - a.add(1) - a.add(2) - return (a.size() == 2) && (a.get(1) == 2) && (a.get(0) == 1); - } \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/arrayAccess.kt b/js/js.backend/testFiles/java/arrayList/cases/arrayAccess.kt deleted file mode 100644 index b47cfa6e040..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/arrayAccess.kt +++ /dev/null @@ -1,11 +0,0 @@ -package foo - -import java.util.ArrayList; - -fun box() : Boolean { - val a = ArrayList(); - a.add(1) - a.add(2) - a[1] = 100 - return (a.size() == 2) && (a[1] == 100) && (a[0] == 1); -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/emptyList.kt b/js/js.backend/testFiles/java/arrayList/cases/emptyList.kt deleted file mode 100644 index ec624c39ad9..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/emptyList.kt +++ /dev/null @@ -1,8 +0,0 @@ -package foo - -import java.util.ArrayList; - -fun box() : Boolean { - val a = ArrayList(); - return a.size() == 0; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/indexOOB.kt b/js/js.backend/testFiles/java/arrayList/cases/indexOOB.kt deleted file mode 100644 index 52d1f6936a7..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/indexOOB.kt +++ /dev/null @@ -1,12 +0,0 @@ -package foo - -import java.util.ArrayList; - -fun box() : Boolean { - val arr = ArrayList(); - var i = 0; - while (i++ < 10) { - arr.add(i); - } - return (arr[10] == 11) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/isEmpty.kt b/js/js.backend/testFiles/java/arrayList/cases/isEmpty.kt deleted file mode 100644 index 7f9c7283f87..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/isEmpty.kt +++ /dev/null @@ -1,9 +0,0 @@ -package foo - -import java.util.ArrayList; - -fun box() : Boolean { - val a = ArrayList(); - a.add(3) - return !(a.isEmpty()) && (ArrayList().isEmpty()); -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/iterate.kt b/js/js.backend/testFiles/java/arrayList/cases/iterate.kt deleted file mode 100644 index 74da14b2f0a..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/iterate.kt +++ /dev/null @@ -1,16 +0,0 @@ -package foo - -import java.util.ArrayList; - -fun box() : Boolean { - var i = 0 - val arr = ArrayList(); - while (i++ < 10) { - arr.add(i); - } - var sum = 0 - for (a in arr) { - sum += a; - } - return (sum == 55) && (arr.size() == 10) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/max.kt b/js/js.backend/testFiles/java/arrayList/cases/max.kt deleted file mode 100644 index 50098e82059..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/max.kt +++ /dev/null @@ -1,8 +0,0 @@ -package foo - -import java.util.Collection; -import java.util.Comparator. - -fun max(col :Collection, ) { - -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/cases/remove.kt b/js/js.backend/testFiles/java/arrayList/cases/remove.kt deleted file mode 100644 index 20095823895..00000000000 --- a/js/js.backend/testFiles/java/arrayList/cases/remove.kt +++ /dev/null @@ -1,17 +0,0 @@ -package foo - -import java.util.ArrayList; - -fun box() : Boolean { - var i = 0 - val arr = ArrayList(); - while (i++ < 10) { - arr.add(i); - } - arr.remove(2) - var sum = 0 - for (a in arr) { - sum += a; - } - return ((sum == 52) && (arr[1] == 2) && (arr[2] == 4) && (arr[3] == 5) && (arr[4] == 6) && (arr[8] == 10)) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/java/arrayList/out/.gitignore b/js/js.backend/testFiles/java/arrayList/out/.gitignore deleted file mode 100644 index 86d0cb2726c..00000000000 --- a/js/js.backend/testFiles/java/arrayList/out/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Ignore everything in this directory -* -# Except this file -!.gitignore \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/array.js b/js/js.backend/testFiles/kotlinLib/cases/array.js deleted file mode 100644 index 0d2083c480c..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/array.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -function test() { - var a = Kotlin.arrayFromFun(3, function () { - return 3 - }); - return (a[0] == 3) && (a[2] == 3) && (a[1] == 3); -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/commaExpression.js b/js/js.backend/testFiles/kotlinLib/cases/commaExpression.js deleted file mode 100644 index f3990bf315d..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/commaExpression.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -a = 0 -f = (t = a, t1 = t, a = ++t1, t) - -test = function () { - return (f == 0) && (a == 1) -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/hashMap.js b/js/js.backend/testFiles/kotlinLib/cases/hashMap.js deleted file mode 100644 index 5b195c7600d..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/hashMap.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -var map = new Kotlin.HashMap() - -map.put(3, 4) -map.put(6, 3) - -function test() { - if (map.containsKey(4) || map.containsKey(5)) return false; - if (map.containsKey({}) || map.containsKey(11)) return false; - if (!map.containsKey(3) || !map.containsKey(6)) return false; - var obj = map.get(3); - if (obj !== 4) return false; - obj = map.get(6); - if (obj !== 3) return false; - if (map.size() !== 2) return false; - map.put(2, 3); - if (map.size() !== 3) return false; - if (!map.containsKey(2) || !map.containsKey(3) || !map.containsKey(6)) return false; - if (!map.containsValue(4) || !map.containsValue(3)) return false; - map.put(2, 1000); - if (map.size() !== 3) return false; - if (map.get(2)!== 1000) return false; - - - return true; -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/isAncestorType.js b/js/js.backend/testFiles/kotlinLib/cases/isAncestorType.js deleted file mode 100644 index 255b5891326..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/isAncestorType.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -var A = Kotlin.Class.create(); -var B = Kotlin.Class.create(A); -var b = new B; - -test = function() { - return (Kotlin.isType(b, A) && Kotlin.isType(b, B)); -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/isComplexTest.js b/js/js.backend/testFiles/kotlinLib/cases/isComplexTest.js deleted file mode 100644 index 92a4a2f29ff..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/isComplexTest.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -var A = Kotlin.Class.create(); -var B = Kotlin.Class.create(A); -var b = new B; -var C = Kotlin.Class.create(B); -var c = new C; -var E = Kotlin.Class.create(A) -var e = new E; - -test1 = function() { - b2 = b - return (Kotlin.isType(b, A) && Kotlin.isType(b, B)); -} - -test2 = function() { - return (Kotlin.isType(c, C) && Kotlin.isType(c, B) && Kotlin.isType(c, A) && (!Kotlin.isType(c, E))); -} - -test3 = function() { - return Kotlin.isType(e, E) && !Kotlin.isType(e, B) && !Kotlin.isType(e, C) && Kotlin.isType(e, A) -} - -test = function() { - return test1() && test2() && test3() -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/isNotOtherType.js b/js/js.backend/testFiles/kotlinLib/cases/isNotOtherType.js deleted file mode 100644 index b33ad3afab2..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/isNotOtherType.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -var A = Kotlin.Class.create(); -var B = Kotlin.Class.create(A); -var C = Kotlin.Class.create(); -var c = new C; - -test = function() { - return ((!isType(c, A)) && !isType(c, B)); -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/isSameType.js b/js/js.backend/testFiles/kotlinLib/cases/isSameType.js deleted file mode 100644 index cb333db25c5..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/isSameType.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -var A = Kotlin.Class.create(); -var a = new A; - -test = function() { - return Kotlin.isType(a, A); -} \ No newline at end of file diff --git a/js/js.backend/testFiles/kotlinLib/cases/namespace.js b/js/js.backend/testFiles/kotlinLib/cases/namespace.js deleted file mode 100644 index eeb677033eb..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/namespace.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -foo = Kotlin.Namespace.create({initialize:function(){ -} -, box:function(){ - return !false; -} -}); - -function test() { - return foo.box() -} diff --git a/js/js.backend/testFiles/kotlinLib/cases/namespaceWithClasses.js b/js/js.backend/testFiles/kotlinLib/cases/namespaceWithClasses.js deleted file mode 100644 index 0571b39e660..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/namespaceWithClasses.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -{ - classes = function(){ - var A = Kotlin.Class.create({initialize:function(){ - this.$order = ''; - { - this.set_order(this.get_order() + 'A'); - } - } - , set_order:function(tmp$0){ - this.$order = tmp$0; - } - , get_order:function(){ - return this.$order; - } - }); - var B = Kotlin.Class.create(A, {initialize:function(){ - this.super_init(); - { - this.set_order(this.get_order() + 'B'); - } - } - }); - var C = Kotlin.Class.create(B, {initialize:function(){ - this.super_init(); - { - this.set_order(this.get_order() + 'C'); - } - } - }); - return {A:A, B:B, C:C}; - } - (); - foo = Kotlin.Namespace.create(classes, {initialize:function(){ - } - , box:function(){ - return (new foo.C).get_order() === 'ABC' && (new foo.B).get_order() === 'AB' && (new foo.A).get_order() === 'A'; - } - }); -} - -function test() { - return foo.box() -} diff --git a/js/js.backend/testFiles/kotlinLib/cases/trait.js b/js/js.backend/testFiles/kotlinLib/cases/trait.js deleted file mode 100644 index 628dbbd52f2..00000000000 --- a/js/js.backend/testFiles/kotlinLib/cases/trait.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed 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. - */ - -foo = {}; -(function(foo){ - foo.Test = Kotlin.Trait.create({addFoo:function(s){ - return s + 'FOO'; - } - }); - foo.ExtendedTest = Kotlin.Trait.create(foo.Test, {hooray:function(){ - return 'hooray'; - } - }); -} -(foo)); diff --git a/js/js.backend/testFiles/kotlin_lib.js b/js/js.backend/testFiles/kotlin_lib.js deleted file mode 100644 index 2d155d5a78c..00000000000 --- a/js/js.backend/testFiles/kotlin_lib.js +++ /dev/null @@ -1,1079 +0,0 @@ -/** - * Copyright 2010 Tim Down. - * - * Licensed 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. - */ - -/* Prototype JavaScript framework, version 1.6.1 - * (c) 2005-2009 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://www.prototypejs.org/ - * - *--------------------------------------------------------------------------*/ -(function () { - - function $A(iterable) { - if (!iterable) return []; - if ('toArray' in Object(iterable)) return iterable.toArray(); - var length = iterable.length || 0, results = new Array(length); - while (length--) results[length] = iterable[length]; - return results; - } - - (function () { - - - function extend(destination, source) { - for (var property in source) - destination[property] = source[property]; - return destination; - } - - - function keys(object) { - if (Type(object) !== OBJECT_TYPE) { - throw new TypeError(); - } - var results = []; - for (var property in object) { - if (object.hasOwnProperty(property)) { - results.push(property); - } - } - return results; - } - - function values(object) { - var results = []; - for (var property in object) - results.push(object[property]); - return results; - } - - extend(Object, { - extend:extend, - keys:Object.keys || keys, - values:values - }); - })(); - - - Object.extend(Function.prototype, (function () { - var slice = Array.prototype.slice; - - function update(array, args) { - var arrayLength = array.length, length = args.length; - while (length--) array[arrayLength + length] = args[length]; - return array; - } - - function merge(array, args) { - array = slice.call(array, 0); - return update(array, args); - } - - function argumentNames() { - var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] - .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') - .replace(/\s+/g, '').split(','); - return names.length == 1 && !names[0] ? [] : names; - } - - function bind(context) { - if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; - var __method = this, args = slice.call(arguments, 1); - return function () { - var a = merge(args, arguments); - return __method.apply(context, a); - } - } - - function bindAsEventListener(context) { - var __method = this, args = slice.call(arguments, 1); - return function (event) { - var a = update([event || window.event], args); - return __method.apply(context, a); - } - } - - function wrap(wrapper) { - var __method = this; - return function () { - var a = update([__method.bind(this)], arguments); - return wrapper.apply(this, a); - } - } - - return { - argumentNames:argumentNames, - bind:bind, - bindAsEventListener:bindAsEventListener, - wrap:wrap - } - })()); - - var isType = function (object, klass) { - current = object.get_class(); - while (current !== klass) { - if (current === null) { - return false; - } - current = current.superclass; - } - return true; - }; - - var emptyFunction = function () { - }; - - var Class = (function () { - - function subclass() { - } - ; - function create() { - var parent = null, properties = $A(arguments); - if (typeof (properties[0]) == "function") { - parent = properties.shift(); - } - - function klass() { - this.initializing = klass; - this.initialize.apply(this, arguments); - } - - Object.extend(klass, Class.Methods); - klass.superclass = parent; - klass.subclasses = []; - - if (parent) { - subclass.prototype = parent.prototype; - klass.prototype = new subclass; - parent.subclasses.push(klass); - } - - klass.addMethods( - { - get_class:function () { - return klass; - } - }); - - if (parent != null) { - klass.addMethods( - { - super_init:function () { - this.initializing = this.initializing.superclass; - this.initializing.prototype.initialize.apply(this, arguments) - } - }); - } - - for (var i = 0, length = properties.length; i < length; i++) - klass.addMethods(properties[i]); - - if (!klass.prototype.initialize) { - klass.prototype.initialize = emptyFunction; - } - - klass.prototype.constructor = klass; - return klass; - } - - function addMethods(source) { - var ancestor = this.superclass && this.superclass.prototype, - properties = Object.keys(source); - - - for (var i = 0, length = properties.length; i < length; i++) { - var property = properties[i], value = source[property]; - if (ancestor && (typeof (value) == "function") && - value.argumentNames()[0] == "$super") { - var method = value; - value = (function (m) { - return function () { - return ancestor[m].apply(this, arguments); - }; - })(property).wrap(method); - - } - this.prototype[property] = value; - } - - return this; - } - - return { - create:create, - Methods:{ - addMethods:addMethods - } - }; - })(); - - var Trait = (function () { - - function add(object, source) { - var properties = Object.keys(source); - for (var i = 0, length = properties.length; i < length; i++) { - var property = properties[i]; - var value = source[property]; - object[property] = value; - } - return this; - } - - function create() { - - result = {} - for (var i = 0, length = arguments.length; i < length; i++) { - add(result, arguments[i]); - } - return result; - } - - return { - create:create - }; - })(); - - - var Namespace = (function () { - - function create() { - return Trait.create.apply(Trait, arguments); - } - - return { - create:create - }; - })(); - - var object = (function () { - function create() { - var singletonClass = Class.create.apply(Class, arguments); - return new singletonClass; - } - return { - create:create - }; - })(); - - Kotlin = {}; - Kotlin.Class = Class; - Kotlin.Namespace = Namespace; - Kotlin.Trait = Trait; - Kotlin.isType = isType; - Kotlin.object = object; - - Kotlin.equals = function (obj1, obj2) { - if (typeof obj1 == "object") { - if (obj1.equals != undefined) { - return obj1.equals(obj2); - } - } - return (obj1 === obj2); - }; - - Kotlin.Exceptions = {} - Kotlin.Exception = Kotlin.Class.create(); - Kotlin.Exceptions.IndexOutOfBounds = {} - - - Kotlin.ArrayList = Class.create({ - initialize:function () { - this.array = []; - this.$size = 0; - }, - get:function (index) { - if ((index < 0) || (index >= this.$size)) { - throw Kotlin.Exceptions.IndexOutOfBounds; - } - return (this.array)[index]; - }, - set:function (index, value) { - if ((index < 0) || (index >= this.$size)) { - throw Kotlin.Exceptions.IndexOutOfBounds; - } - (this.array)[index] = value; - }, - size:function () { - return this.$size; - }, - iterator:function () { - return new Kotlin.ArrayIterator(this); - }, - isEmpty:function () { - return (this.$size == 0); - }, - add:function (element) { - this.array[this.$size++] = element; - }, - addAll:function (collection) { - var it = collection.iterator(); - while (it.hasNext()) { - this.add(it.next()); - } - }, - remove:function (index) { - for (var i = index; i < this.$size - 1; ++i) { - this.array[i] = this.array[i + 1]; - } - this.$size--; - }, - clear:function () { - this.array = []; - this.$size = 0; - }, - contains:function (obj) { - for (var i = 0; i < this.$size; ++i) { - if (Kotlin.equals(this.array[i], obj)) { - return true; - } - } - return false; - } - }); - - - Kotlin.parseInt = - function (str) { - return parseInt(str); - } - ; - - Kotlin.System = function () { - var output = ""; - - var print = function (obj) { - if (obj !== undefined) { - if (obj == null || typeof obj != "object") { - output += obj; - } - else { - output += obj.toString(); - } - } - }; - var println = function (obj) { - this.print(obj); - output += "\n"; - }; - - return { - out:function () { - return { - print:print, - println:println - }; - }, - output:function () { - return output; - }, - flush:function () { - output = ""; - } - }; - }(); - - Kotlin.println = function (s) { - Kotlin.System.out().println(s); - } - - Kotlin.print = function (s) { - Kotlin.System.out().print(s); - } - - Kotlin.AbstractFunctionInvokationError = Class.create(); - - Kotlin.Iterator = Class.create({ - initialize:function () { - }, - next:function () { - throw new Kotlin.AbstractFunctionInvokationError(); - }, - hasNext:function () { - throw new Kotlin.AbstractFunctionInvokationError(); - } - }); - - Kotlin.ArrayIterator = Class.create(Kotlin.Iterator, { - initialize:function (array) { - this.array = array; - this.index = 0; - }, - next:function () { - return this.array.get(this.index++); - }, - hasNext:function () { - return (this.array.size() > this.index); - }, - get_hasNext:function () { - return this.hasNext(); - } - }); - - Kotlin.RangeIterator = Kotlin.Class.create(Kotlin.Iterator, { - initialize:function (start, count, reversed) { - this.$start = start; - this.$count = count; - this.$reversed = reversed; - this.$i = this.get_start(); - }, get_start:function () { - return this.$start; - }, get_count:function () { - return this.$count; - }, set_count:function (tmp$0) { - this.$count = tmp$0; - }, get_reversed:function () { - return this.$reversed; - }, get_i:function () { - return this.$i; - }, set_i:function (tmp$0) { - this.$i = tmp$0; - }, next:function () { - this.set_count(this.get_count() - 1); - if (this.get_reversed()) { - this.set_i(this.get_i() - 1); - return this.get_i() + 1; - } - else { - this.set_i(this.get_i() + 1); - return this.get_i() - 1; - } - }, hasNext:function () { - return this.get_count() > 0; - }, get_hasNext:function () { - return this.hasNext(); - } - }); - - Kotlin.NumberRange = Kotlin.Class.create({initialize:function (start, size, reversed) { - this.$start = start; - this.$size = size; - this.$reversed = reversed; - }, get_start:function () { - return this.$start; - }, get_size:function () { - return this.$size; - }, get_reversed:function () { - return this.$reversed; - }, get_end:function () { - return this.get_reversed() ? this.get_start() - this.get_size() + 1 : this.get_start() + this.get_size() - 1; - }, contains:function (number) { - if (this.get_reversed()) { - return number <= this.get_start() && number > this.get_start() - this.get_size(); - } - else { - return number >= this.get_start() && number < this.get_start() + this.get_size(); - } - }, iterator:function () { - return new Kotlin.RangeIterator(this.get_start(), this.get_size(), this.get_reversed()); - } - }); - - Kotlin.Comparator = Kotlin.Class.create( - { - initialize:function () { - }, - compare:function (el1, el2) { - throw new Kotlin.AbstractFunctionInvokationError(); - } - } - ); - - Kotlin.comparator = function(f) { - var result = new Kotlin.Comparator; - result.compare = function(el1, el2) { - return f(el1, el2); - }; - return result; - }; - - Kotlin.collectionsMax = function (col, comp) { - var it = col.iterator(); - if (col.isEmpty()) { - //TODO: which exception? - throw Kotlin.Exception(); - } - var max = it.next(); - while (it.hasNext()) { - var el = it.next(); - if (comp.compare(max, el) < 0) { - max = el; - } - } - return max; - }; - - Kotlin.StringBuilder = Kotlin.Class.create( - { - initialize:function () { - this.string = ""; - }, - append:function (obj) { - this.string = this.string + obj.toString(); - }, - toString:function () { - return this.string; - } - } - ); - - Kotlin.splitString = function(str, regex) { - return str.split(regex); - }; - - Kotlin.nullArray = function (size) { - var res = []; - var i = size; - while (i > 0) { - res[--i] = null; - } - return res; - }; - - Kotlin.arrayFromFun = function (size, initFun) { - var res = []; - var i = size; - while (i > 0) { - res[--i] = initFun(i); - } - return res; - }; - - Kotlin.arrayIndices = function (arr) { - return new Kotlin.NumberRange(0, arr.length); - }; - - var intrinsicArrayIterator = Kotlin.Class.create( - Kotlin.Iterator, - { - initialize:function (arr) { - this.arr = arr; - this.len = arr.length; - this.i = 0; - }, - hasNext:function () { - return (this.i < this.len); - }, - next:function () { - return this.arr[this.i++]; - }, - get_hasNext:function () { - return this.hasNext() - } - } - ); - - Kotlin.arrayIterator = function (arr) { - return new intrinsicArrayIterator(arr); - }; - - Kotlin.toString = function (obj) { - return obj.toString(); - }; - - Kotlin.jsonFromTuples = function (pairArr) { - var i = pairArr.length; - var res = {}; - while (i > 0) { - --i; - res[pairArr[i][0]] = pairArr[i][1]; - } - return res; - }; - - Kotlin.jsonSet = function (obj, attrName, value) { - obj[attrName] = value; - }; - - Kotlin.jsonGet = function (obj, attrName) { - return obj[attrName]; - }; - - - Kotlin.sure = function(obj) { - return obj; - }; - - (function () { - var FUNCTION = "function"; - - var arrayRemoveAt = (typeof Array.prototype.splice == FUNCTION) ? - function (arr, idx) { - arr.splice(idx, 1); - } : - - function (arr, idx) { - var itemsAfterDeleted, i, len; - if (idx === arr.length - 1) { - arr.length = idx; - } - else { - itemsAfterDeleted = arr.slice(idx + 1); - arr.length = idx; - for (i = 0, len = itemsAfterDeleted.length; i < len; ++i) { - arr[idx + i] = itemsAfterDeleted[i]; - } - } - }; - - function hashObject(obj) { - var hashCode; - if (typeof obj == "string") { - return obj; - } else if (typeof obj.hashCode == FUNCTION) { - // Check the hashCode method really has returned a string - hashCode = obj.hashCode(); - return (typeof hashCode == "string") ? hashCode : hashObject(hashCode); - } else if (typeof obj.toString == FUNCTION) { - return obj.toString(); - } - else { - try { - return String(obj); - } catch (ex) { - // For host objects (such as ActiveObjects in IE) that have no toString() method and throw an error when - // passed to String() - return Object.prototype.toString.call(obj); - } - } - } - - function equals_fixedValueHasEquals(fixedValue, variableValue) { - return fixedValue.equals(variableValue); - } - - function equals_fixedValueNoEquals(fixedValue, variableValue) { - return (typeof variableValue.equals == FUNCTION) ? - variableValue.equals(fixedValue) : (fixedValue === variableValue); - } - - function createKeyValCheck(kvStr) { - return function (kv) { - if (kv === null) { - throw new Error("null is not a valid " + kvStr); - } else if (typeof kv == "undefined") { - throw new Error(kvStr + " must not be undefined"); - } - }; - } - - var checkKey = createKeyValCheck("key"), checkValue = createKeyValCheck("value"); - - /*----------------------------------------------------------------------------------------------------------------*/ - - function Bucket(hash, firstKey, firstValue, equalityFunction) { - this[0] = hash; - this.entries = []; - this.addEntry(firstKey, firstValue); - - if (equalityFunction !== null) { - this.getEqualityFunction = function () { - return equalityFunction; - }; - } - } - - var EXISTENCE = 0, ENTRY = 1, ENTRY_INDEX_AND_VALUE = 2; - - function createBucketSearcher(mode) { - return function (key) { - var i = this.entries.length, entry, equals = this.getEqualityFunction(key); - while (i--) { - entry = this.entries[i]; - if (equals(key, entry[0])) { - switch (mode) { - case EXISTENCE: - return true; - case ENTRY: - return entry; - case ENTRY_INDEX_AND_VALUE: - return [ i, entry[1] ]; - } - } - } - return false; - }; - } - - function createBucketLister(entryProperty) { - return function (aggregatedArr) { - var startIndex = aggregatedArr.length; - for (var i = 0, len = this.entries.length; i < len; ++i) { - aggregatedArr[startIndex + i] = this.entries[i][entryProperty]; - } - }; - } - - Bucket.prototype = { - getEqualityFunction:function (searchValue) { - return (typeof searchValue.equals == FUNCTION) ? equals_fixedValueHasEquals : equals_fixedValueNoEquals; - }, - - getEntryForKey:createBucketSearcher(ENTRY), - - getEntryAndIndexForKey:createBucketSearcher(ENTRY_INDEX_AND_VALUE), - - removeEntryForKey:function (key) { - var result = this.getEntryAndIndexForKey(key); - if (result) { - arrayRemoveAt(this.entries, result[0]); - return result[1]; - } - return null; - }, - - addEntry:function (key, value) { - this.entries[this.entries.length] = [key, value]; - }, - - keys:createBucketLister(0), - - values:createBucketLister(1), - - getEntries:function (entries) { - var startIndex = entries.length; - for (var i = 0, len = this.entries.length; i < len; ++i) { - // Clone the entry stored in the bucket before adding to array - entries[startIndex + i] = this.entries[i].slice(0); - } - }, - - containsKey:createBucketSearcher(EXISTENCE), - - containsValue:function (value) { - var i = this.entries.length; - while (i--) { - if (value === this.entries[i][1]) { - return true; - } - } - return false; - } - }; - - /*----------------------------------------------------------------------------------------------------------------*/ - - // Supporting functions for searching hashtable buckets - - function searchBuckets(buckets, hash) { - var i = buckets.length, bucket; - while (i--) { - bucket = buckets[i]; - if (hash === bucket[0]) { - return i; - } - } - return null; - } - - function getBucketForHash(bucketsByHash, hash) { - var bucket = bucketsByHash[hash]; - - // Check that this is a genuine bucket and not something inherited from the bucketsByHash's prototype - return ( bucket && (bucket instanceof Bucket) ) ? bucket : null; - } - - /*----------------------------------------------------------------------------------------------------------------*/ - - var Hashtable = function (hashingFunctionParam, equalityFunctionParam) { - var that = this; - var buckets = []; - var bucketsByHash = {}; - - var hashingFunction = (typeof hashingFunctionParam == FUNCTION) ? hashingFunctionParam : hashObject; - var equalityFunction = (typeof equalityFunctionParam == FUNCTION) ? equalityFunctionParam : null; - - this.put = function (key, value) { - checkKey(key); - checkValue(value); - var hash = hashingFunction(key), bucket, bucketEntry, oldValue = null; - - // Check if a bucket exists for the bucket key - bucket = getBucketForHash(bucketsByHash, hash); - if (bucket) { - // Check this bucket to see if it already contains this key - bucketEntry = bucket.getEntryForKey(key); - if (bucketEntry) { - // This bucket entry is the current mapping of key to value, so replace old value and we're done. - oldValue = bucketEntry[1]; - bucketEntry[1] = value; - } - else { - // The bucket does not contain an entry for this key, so add one - bucket.addEntry(key, value); - } - } - else { - // No bucket exists for the key, so create one and put our key/value mapping in - bucket = new Bucket(hash, key, value, equalityFunction); - buckets[buckets.length] = bucket; - bucketsByHash[hash] = bucket; - } - return oldValue; - }; - - this.get = function (key) { - checkKey(key); - - var hash = hashingFunction(key); - - // Check if a bucket exists for the bucket key - var bucket = getBucketForHash(bucketsByHash, hash); - if (bucket) { - // Check this bucket to see if it contains this key - var bucketEntry = bucket.getEntryForKey(key); - if (bucketEntry) { - // This bucket entry is the current mapping of key to value, so return the value. - return bucketEntry[1]; - } - } - return null; - }; - - this.containsKey = function (key) { - checkKey(key); - var bucketKey = hashingFunction(key); - - // Check if a bucket exists for the bucket key - var bucket = getBucketForHash(bucketsByHash, bucketKey); - - return bucket ? bucket.containsKey(key) : false; - }; - - this.containsValue = function (value) { - checkValue(value); - var i = buckets.length; - while (i--) { - if (buckets[i].containsValue(value)) { - return true; - } - } - return false; - }; - - this.clear = function () { - buckets.length = 0; - bucketsByHash = {}; - }; - - this.isEmpty = function () { - return !buckets.length; - }; - - var createBucketAggregator = function (bucketFuncName) { - return function () { - var aggregated = [], i = buckets.length; - while (i--) { - buckets[i][bucketFuncName](aggregated); - } - return aggregated; - }; - }; - - this.keys = createBucketAggregator("keys"); - this.values = createBucketAggregator("values"); - this.entries = createBucketAggregator("getEntries"); - - this.remove = function (key) { - checkKey(key); - - var hash = hashingFunction(key), bucketIndex, oldValue = null; - - // Check if a bucket exists for the bucket key - var bucket = getBucketForHash(bucketsByHash, hash); - - if (bucket) { - // Remove entry from this bucket for this key - oldValue = bucket.removeEntryForKey(key); - if (oldValue !== null) { - // Entry was removed, so check if bucket is empty - if (!bucket.entries.length) { - // Bucket is empty, so remove it from the bucket collections - bucketIndex = searchBuckets(buckets, hash); - arrayRemoveAt(buckets, bucketIndex); - delete bucketsByHash[hash]; - } - } - } - return oldValue; - }; - - this.size = function () { - var total = 0, i = buckets.length; - while (i--) { - total += buckets[i].entries.length; - } - return total; - }; - - this.each = function (callback) { - var entries = that.entries(), i = entries.length, entry; - while (i--) { - entry = entries[i]; - callback(entry[0], entry[1]); - } - }; - - - this.putAll = function (hashtable, conflictCallback) { - var entries = hashtable.entries(); - var entry, key, value, thisValue, i = entries.length; - var hasConflictCallback = (typeof conflictCallback == FUNCTION); - while (i--) { - entry = entries[i]; - key = entry[0]; - value = entry[1]; - - // Check for a conflict. The default behaviour is to overwrite the value for an existing key - if (hasConflictCallback && (thisValue = that.get(key))) { - value = conflictCallback(key, thisValue, value); - } - that.put(key, value); - } - }; - - this.clone = function () { - var clone = new Hashtable(hashingFunctionParam, equalityFunctionParam); - clone.putAll(that); - return clone; - }; - - this.keySet = function () { - var res = new Kotlin.HashSet(); - var keys = this.keys(); - var i = keys.length; - while (i--) { - res.add(keys[i]); - } - return res; - } - }; - - Kotlin.HashTable = Hashtable; - })(); - - Kotlin.HashMap = Kotlin.Class.create( - { - initialize:function () { - Kotlin.HashTable.call(this); - } - } - ); - - - - - (function () { - function HashSet(hashingFunction, equalityFunction) { - var hashTable = new Kotlin.HashTable(hashingFunction, equalityFunction); - - this.add = function (o) { - hashTable.put(o, true); - }; - - this.addAll = function (arr) { - var i = arr.length; - while (i--) { - hashTable.put(arr[i], true); - } - }; - - this.values = function () { - return hashTable.keys(); - }; - - this.iterator = function () { - var list = new Kotlin.ArrayList(); - var values = this.values(); - var i = values.length; - while (i--) { - list.add(values[i]); - } - return list.iterator(); - }; - - this.remove = function (o) { - return hashTable.remove(o) ? o : null; - }; - - this.contains = function (o) { - return hashTable.containsKey(o); - }; - - this.clear = function () { - hashTable.clear(); - }; - - this.size = function () { - return hashTable.size(); - }; - - this.isEmpty = function () { - return hashTable.isEmpty(); - }; - - this.clone = function () { - var h = new HashSet(hashingFunction, equalityFunction); - h.addAll(hashTable.keys()); - return h; - }; - - this.intersection = function (hashSet) { - var intersection = new HashSet(hashingFunction, equalityFunction); - var values = hashSet.values(), i = values.length, val; - while (i--) { - val = values[i]; - if (hashTable.containsKey(val)) { - intersection.add(val); - } - } - return intersection; - }; - - this.union = function (hashSet) { - var union = this.clone(); - var values = hashSet.values(), i = values.length, val; - while (i--) { - val = values[i]; - if (!hashTable.containsKey(val)) { - union.add(val); - } - } - return union; - }; - - this.isSubsetOf = function (hashSet) { - var values = hashTable.keys(), i = values.length; - while (i--) { - if (!hashSet.contains(values[i])) { - return false; - } - } - return true; - }; - } - - Kotlin.HashSet = Kotlin.Class.create( - { - initialize:function () { - HashSet.call(this); - } - } - ) - }()); - -})(); diff --git a/js/js.backend/testFiles/libImplementations/jQuery.js b/js/js.backend/testFiles/libImplementations/jQuery.js deleted file mode 100644 index 3c9ea9e5649..00000000000 --- a/js/js.backend/testFiles/libImplementations/jQuery.js +++ /dev/null @@ -1,9300 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Nov 3 16:18:21 2011 -0400 - */ -(function( window, undefined ) { - -// Use the correct document accordingly with window argument (sandbox) -var document = window.document, - navigator = window.navigator, - location = window.location; -var jQuery = (function() { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, - - // Check for digits - rdigit = /\d/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, - - // Matches dashed string for camelizing - rdashAlpha = /-([a-z]|[0-9])/ig, - rmsPrefix = /^-ms-/, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return ( letter + "" ).toUpperCase(); - }, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // The deferred used on DOM ready - readyList, - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, - - // [[Class]] -> type pairs - class2type = {}; - -jQuery.fn = jQuery.prototype = { - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = quickExpr.exec( selector ); - } - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - doc = ( context ? context.ownerDocument || context : document ); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; - } - - return jQuery.merge( this, selector ); - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.7", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = this.constructor(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // Add the callback - readyList.add( fn ); - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - // Either a released hold or an DOMready/load event and not yet ready - if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.fireWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger( "ready" ).unbind( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyList ) { - return; - } - - readyList = jQuery.Callbacks( "once memory" ); - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", DOMContentLoaded ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - // A crude way of determining if an object is a window - isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; - }, - - isNumeric: function( obj ) { - return obj != null && rdigit.test( obj ) && !isNaN( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - - } - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && rnotwhite.test( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction( object ); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { - break; - } - } - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type( array ); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array, i ) { - var len; - - if ( array ) { - if ( indexOf ) { - return indexOf.call( array, elem, i ); - } - - len = array.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in array && array[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, - j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, key, ret = [], - i = 0, - length = elems.length, - // jquery objects are treated as arrays - isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( key in elems ) { - value = callback( elems[ key ], key, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - if ( typeof context === "string" ) { - var tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - var args = slice.call( arguments, 2 ), - proxy = function() { - return fn.apply( context, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can optionally be executed if it's a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; - }, - - now: function() { - return ( new Date() ).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - sub: function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } - - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - return jQuerySub; - }, - - browser: {} -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -// IE doesn't match non-breaking spaces with \s -if ( rnotwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -// Expose jQuery as an AMD module, but only for AMD loaders that -// understand the issues with loading multiple versions of jQuery -// in a page that all might call define(). The loader will indicate -// they have special allowances for multiple jQuery versions by -// specifying define.amd.jQuery = true. Register as a named module, -// since jQuery can be concatenated with other files that may use define, -// but not use a proper concatenation script that understands anonymous -// AMD modules. A named AMD is safest and most robust way to register. -// Lowercase jquery is used because AMD module names are derived from -// file names, and jQuery is normally delivered in a lowercase file name. -if ( typeof define === "function" && define.amd && define.amd.jQuery ) { - define( "jquery", [], function () { return jQuery; } ); -} - -return jQuery; - -})(); - - -// String to Object flags format cache -var flagsCache = {}; - -// Convert String-formatted flags into Object-formatted ones and store in cache -function createFlags( flags ) { - var object = flagsCache[ flags ] = {}, - i, length; - flags = flags.split( /\s+/ ); - for ( i = 0, length = flags.length; i < length; i++ ) { - object[ flags[i] ] = true; - } - return object; -} - -/* - * Create a callback list using the following parameters: - * - * flags: an optional list of space-separated flags that will change how - * the callback list behaves - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible flags: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( flags ) { - - // Convert flags from String-formatted to Object-formatted - // (we check in cache first) - flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; - - var // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = [], - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Add one or several callbacks to the list - add = function( args ) { - var i, - length, - elem, - type, - actual; - for ( i = 0, length = args.length; i < length; i++ ) { - elem = args[ i ]; - type = jQuery.type( elem ); - if ( type === "array" ) { - // Inspect recursively - add( elem ); - } else if ( type === "function" ) { - // Add if not in unique mode and callback is not in - if ( !flags.unique || !self.has( elem ) ) { - list.push( elem ); - } - } - } - }, - // Fire callbacks - fire = function( context, args ) { - args = args || []; - memory = !flags.memory || [ context, args ]; - firing = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { - memory = true; // Mark as halted - break; - } - } - firing = false; - if ( list ) { - if ( !flags.once ) { - if ( stack && stack.length ) { - memory = stack.shift(); - self.fireWith( memory[ 0 ], memory[ 1 ] ); - } - } else if ( memory === true ) { - self.disable(); - } else { - list = []; - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - var length = list.length; - add( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away, unless previous - // firing was halted (stopOnFalse) - } else if ( memory && memory !== true ) { - firingStart = length; - fire( memory[ 0 ], memory[ 1 ] ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - var args = arguments, - argIndex = 0, - argLength = args.length; - for ( ; argIndex < argLength ; argIndex++ ) { - for ( var i = 0; i < list.length; i++ ) { - if ( args[ argIndex ] === list[ i ] ) { - // Handle firingIndex and firingLength - if ( firing ) { - if ( i <= firingLength ) { - firingLength--; - if ( i <= firingIndex ) { - firingIndex--; - } - } - } - // Remove the element - list.splice( i--, 1 ); - // If we have some unicity property then - // we only need to do this once - if ( flags.unique ) { - break; - } - } - } - } - } - return this; - }, - // Control if a given callback is in the list - has: function( fn ) { - if ( list ) { - var i = 0, - length = list.length; - for ( ; i < length; i++ ) { - if ( fn === list[ i ] ) { - return true; - } - } - } - return false; - }, - // Remove all callbacks from the list - empty: function() { - list = []; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory || memory === true ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( stack ) { - if ( firing ) { - if ( !flags.once ) { - stack.push( [ context, args ] ); - } - } else if ( !( flags.once && memory ) ) { - fire( context, args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!memory; - } - }; - - return self; -}; - - - - -var // Static reference to slice - sliceDeferred = [].slice; - -jQuery.extend({ - - Deferred: function( func ) { - var doneList = jQuery.Callbacks( "once memory" ), - failList = jQuery.Callbacks( "once memory" ), - progressList = jQuery.Callbacks( "memory" ), - state = "pending", - lists = { - resolve: doneList, - reject: failList, - notify: progressList - }, - promise = { - done: doneList.add, - fail: failList.add, - progress: progressList.add, - - state: function() { - return state; - }, - - // Deprecated - isResolved: doneList.fired, - isRejected: failList.fired, - - then: function( doneCallbacks, failCallbacks, progressCallbacks ) { - deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); - return this; - }, - always: function() { - return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); - }, - pipe: function( fnDone, fnFail, fnProgress ) { - return jQuery.Deferred(function( newDefer ) { - jQuery.each( { - done: [ fnDone, "resolve" ], - fail: [ fnFail, "reject" ], - progress: [ fnProgress, "notify" ] - }, function( handler, data ) { - var fn = data[ 0 ], - action = data[ 1 ], - returned; - if ( jQuery.isFunction( fn ) ) { - deferred[ handler ](function() { - returned = fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); - } - }); - } else { - deferred[ handler ]( newDefer[ action ] ); - } - }); - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - if ( obj == null ) { - obj = promise; - } else { - for ( var key in promise ) { - obj[ key ] = promise[ key ]; - } - } - return obj; - } - }, - deferred = promise.promise({}), - key; - - for ( key in lists ) { - deferred[ key ] = lists[ key ].fire; - deferred[ key + "With" ] = lists[ key ].fireWith; - } - - // Handle state - deferred.done( function() { - state = "resolved"; - }, failList.disable, progressList.lock ).fail( function() { - state = "rejected"; - }, doneList.disable, progressList.lock ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( firstParam ) { - var args = sliceDeferred.call( arguments, 0 ), - i = 0, - length = args.length, - pValues = new Array( length ), - count = length, - pCount = length, - deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? - firstParam : - jQuery.Deferred(), - promise = deferred.promise(); - function resolveFunc( i ) { - return function( value ) { - args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - if ( !( --count ) ) { - deferred.resolveWith( deferred, args ); - } - }; - } - function progressFunc( i ) { - return function( value ) { - pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - deferred.notifyWith( promise, pValues ); - }; - } - if ( length > 1 ) { - for ( ; i < length; i++ ) { - if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { - args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); - } else { - --count; - } - } - if ( !count ) { - deferred.resolveWith( deferred, args ); - } - } else if ( deferred !== firstParam ) { - deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); - } - return promise; - } -}); - - - - -jQuery.support = (function() { - - var div = document.createElement( "div" ), - documentElement = document.documentElement, - all, - a, - select, - opt, - input, - marginDiv, - support, - fragment, - body, - testElementParent, - testElement, - testElementStyle, - tds, - events, - eventName, - i, - isSupported; - - // Preliminary tests - div.setAttribute("className", "t"); - div.innerHTML = "
a"; - - - all = div.getElementsByTagName( "*" ); - a = div.getElementsByTagName( "a" )[ 0 ]; - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return {}; - } - - // First batch of supports tests - select = document.createElement( "select" ); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName( "input" )[ 0 ]; - - support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: ( div.firstChild.nodeType === 3 ), - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName( "tbody" ).length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName( "link" ).length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure unknown elements (like HTML5 elems) are handled appropriately - unknownElems: !!div.getElementsByTagName( "nav" ).length, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: ( input.value === "on" ), - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // Tests for enctype support on a form(#6743) - enctype: !!document.createElement("form").enctype, - - // Will be defined later - submitBubbles: true, - changeBubbles: true, - focusinBubbles: false, - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true - }; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent( "onclick", function() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - support.noCloneEvent = false; - }); - div.cloneNode( true ).fireEvent( "onclick" ); - } - - // Check if a radio maintains its value - // after being appended to the DOM - input = document.createElement("input"); - input.value = "t"; - input.setAttribute("type", "radio"); - support.radioValue = input.value === "t"; - - input.setAttribute("checked", "checked"); - div.appendChild( input ); - fragment = document.createDocumentFragment(); - fragment.appendChild( div.lastChild ); - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - div.innerHTML = ""; - - // Figure out if the W3C box model works as expected - div.style.width = div.style.paddingLeft = "1px"; - - // We don't want to do body-related feature tests on frameset - // documents, which lack a body. So we use - // document.getElementsByTagName("body")[0], which is undefined in - // frameset documents, while document.body isn’t. (7398) - body = document.getElementsByTagName("body")[ 0 ]; - // We use our own, invisible, body unless the body is already present - // in which case we use a div (#9239) - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0, - background: "none" - }; - if ( body ) { - jQuery.extend( testElementStyle, { - position: "absolute", - left: "-999px", - top: "-999px" - }); - } - for ( i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; - } - testElement.appendChild( div ); - testElementParent = body || documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - support.boxModel = div.offsetWidth === 2; - - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "
"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); - } - - div.innerHTML = "
t
"; - tds = div.getElementsByTagName( "td" ); - - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - div.innerHTML = ""; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( document.defaultView && document.defaultView.getComputedStyle ) { - marginDiv = document.createElement( "div" ); - marginDiv.style.width = "0"; - marginDiv.style.marginRight = "0"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; - } - - // Technique from Juriy Zaytsev - // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( div.attachEvent ) { - for( i in { - submit: 1, - change: 1, - focusin: 1 - } ) { - eventName = "on" + i; - isSupported = ( eventName in div ); - if ( !isSupported ) { - div.setAttribute( eventName, "return;" ); - isSupported = ( typeof div[ eventName ] === "function" ); - } - support[ i + "Bubbles" ] = isSupported; - } - } - - // Run fixed position tests at doc ready to avoid a crash - // related to the invisible body in IE8 - jQuery(function() { - var container, outer, inner, table, td, offsetSupport, - conMarginTop = 1, - ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;", - vb = "visibility:hidden;border:0;", - style = "style='" + ptlm + "border:5px solid #000;padding:0;'", - html = "
" + - "" + - "
"; - - // Reconstruct a container - body = document.getElementsByTagName("body")[0]; - if ( !body ) { - // Return for frameset docs that don't have a body - // These tests cannot be done - return; - } - - container = document.createElement("div"); - container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; - body.insertBefore( container, body.firstChild ); - - // Construct a test element - testElement = document.createElement("div"); - testElement.style.cssText = ptlm + vb; - - testElement.innerHTML = html; - container.appendChild( testElement ); - outer = testElement.firstChild; - inner = outer.firstChild; - td = outer.nextSibling.firstChild.firstChild; - - offsetSupport = { - doesNotAddBorder: ( inner.offsetTop !== 5 ), - doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) - }; - - inner.style.position = "fixed"; - inner.style.top = "20px"; - - // safari subtracts parent border width here which is 5px - offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); - inner.style.position = inner.style.top = ""; - - outer.style.overflow = "hidden"; - outer.style.position = "relative"; - - offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); - offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); - - body.removeChild( container ); - testElement = container = null; - - jQuery.extend( support, offsetSupport ); - }); - - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); - - // Null connected elements to avoid leaks in IE - testElement = fragment = select = opt = body = marginDiv = div = input = null; - - return support; -})(); - -// Keep track of boxModel -jQuery.boxModel = jQuery.support.boxModel; - - - - -var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([A-Z])/g; - -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var privateCache, thisCache, ret, - internalKey = jQuery.expando, - getByName = typeof name === "string", - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando, - isEvents = name === "events"; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ jQuery.expando ] = id = ++jQuery.uuid; - } else { - id = jQuery.expando; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // Avoids exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } - - privateCache = thisCache = cache[ id ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Users should not attempt to inspect the internal events object using jQuery.data, - // it is undocumented and subject to change. But does anyone listen? No. - if ( isEvents && !thisCache[ name ] ) { - return privateCache.events; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( getByName ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; - }, - - removeData: function( elem, name, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, i, l, - - // Reference to internal data cache key - internalKey = jQuery.expando, - - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - - // See jQuery.data for more information - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support space separated names - if ( jQuery.isArray( name ) ) { - name = name; - } else if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split( " " ); - } - } - - for ( i = 0, l = name.length; i < l; i++ ) { - delete thisCache[ name[i] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject(cache[ id ]) ) { - return; - } - } - - // Browsers that fail expando deletion also refuse to delete expandos on - // the window, but it will allow it on all other JS objects; other browsers - // don't care - // Ensure that `cache` is not a window object #10080 - if ( jQuery.support.deleteExpando || !cache.setInterval ) { - delete cache[ id ]; - } else { - cache[ id ] = null; - } - - // We destroyed the cache and need to eliminate the expando on the node to avoid - // false lookups in the cache for entries that no longer exist - if ( isNode ) { - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - } else { - elem[ jQuery.expando ] = null; - } - } - }, - - // For internal use only. - _data: function( elem, name, data ) { - return jQuery.data( elem, name, data, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var parts, attr, name, - data = null; - - if ( typeof key === "undefined" ) { - if ( this.length ) { - data = jQuery.data( this[0] ); - - if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) { - attr = this[0].attributes; - for ( var i = 0, l = attr.length; i < l; i++ ) { - name = attr[i].name; - - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.substring(5) ); - - dataAttr( this[0], name, data[ name ] ); - } - } - jQuery._data( this[0], "parsedAttrs", true ); - } - } - - return data; - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - data = dataAttr( this[0], key, data ); - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - - } else { - return this.each(function() { - var $this = jQuery( this ), - args = [ parts[0], value ]; - - $this.triggerHandler( "setData" + parts[1] + "!", args ); - jQuery.data( this, key, value ); - $this.triggerHandler( "changeData" + parts[1] + "!", args ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - jQuery.isNumeric( data ) ? parseFloat( data ) : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - for ( var name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} - - - - -function handleQueueMarkDefer( elem, type, src ) { - var deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - defer = jQuery._data( elem, deferDataKey ); - if ( defer && - ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && - ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { - // Give room for hard-coded callbacks to fire first - // and eventually mark/queue something else on the element - setTimeout( function() { - if ( !jQuery._data( elem, queueDataKey ) && - !jQuery._data( elem, markDataKey ) ) { - jQuery.removeData( elem, deferDataKey, true ); - defer.fire(); - } - }, 0 ); - } -} - -jQuery.extend({ - - _mark: function( elem, type ) { - if ( elem ) { - type = ( type || "fx" ) + "mark"; - jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); - } - }, - - _unmark: function( force, elem, type ) { - if ( force !== true ) { - type = elem; - elem = force; - force = false; - } - if ( elem ) { - type = type || "fx"; - var key = type + "mark", - count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); - if ( count ) { - jQuery._data( elem, key, count ); - } else { - jQuery.removeData( elem, key, true ); - handleQueueMarkDefer( elem, type, "mark" ); - } - } - }, - - queue: function( elem, type, data ) { - var q; - if ( elem ) { - type = ( type || "fx" ) + "queue"; - q = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !q || jQuery.isArray(data) ) { - q = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - q.push( data ); - } - } - return q || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - fn = queue.shift(), - hooks = {}; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - jQuery._data( elem, type + ".run", hooks ); - fn.call( elem, function() { - jQuery.dequeue( elem, type ); - }, hooks ); - } - - if ( !queue.length ) { - jQuery.removeData( elem, type + "queue " + type + ".run", true ); - handleQueueMarkDefer( elem, type, "queue" ); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function() { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, object ) { - if ( typeof type !== "string" ) { - object = type; - type = undefined; - } - type = type || "fx"; - var defer = jQuery.Deferred(), - elements = this, - i = elements.length, - count = 1, - deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - tmp; - function resolve() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - } - while( i-- ) { - if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || - ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || - jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && - jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { - count++; - tmp.add( resolve ); - } - } - resolve(); - return defer.promise(); - } -}); - - - - -var rclass = /[\n\t\r]/g, - rspace = /\s+/, - rreturn = /\r/g, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - nodeHook, boolHook, fixSpecified; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.prop ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classNames, i, l, elem, - setClass, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call(this, j, this.className) ); - }); - } - - if ( value && typeof value === "string" ) { - classNames = value.split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className && classNames.length === 1 ) { - elem.className = value; - - } else { - setClass = " " + elem.className + " "; - - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { - setClass += classNames[ c ] + " "; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classNames, i, l, elem, className, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call(this, j, this.className) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - classNames = ( value || "" ).split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - className = (" " + elem.className + " ").replace( rclass, " " ); - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[ c ] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var hooks, ret, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return undefined; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var self = jQuery(this), val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, i, max, option, - index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - i = one ? index : 0; - max = one ? index + 1 : options.length; - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery( elem )[ name ]( value ); - } - - // Fallback to prop when attributes are not supported - if ( !("getAttribute" in elem) ) { - return jQuery.prop( elem, name, value ); - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( notxml ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return undefined; - - } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, "" + value ); - return value; - } - - } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - ret = elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return ret === null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var propName, attrNames, name, l, - i = 0; - - if ( elem.nodeType === 1 ) { - attrNames = ( value || "" ).split( rspace ); - l = attrNames.length; - - for ( ; i < l; i++ ) { - name = attrNames[ i ].toLowerCase(); - propName = jQuery.propFix[ name ] || name; - - // See #9699 for explanation of this approach (setting first, then removal) - jQuery.attr( elem, name, "" ); - elem.removeAttribute( getSetAttribute ? name : propName ); - - // Set corresponding property to false for boolean attributes - if ( rboolean.test( name ) && propName in elem ) { - elem[ propName ] = false; - } - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to it's default in case type is set after value - // This is for element creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - }, - // Use the value property for back compat - // Use the nodeHook for button elements in IE6/7 (#1954) - value: { - get: function( elem, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.get( elem, name ); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value, name ) { - if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { - return nodeHook.set( elem, value, name ); - } - // Does not return so that setAttribute is also used - elem.value = value; - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return ( elem[ name ] = value ); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - return elem[ name ]; - } - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabindex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - } - } -}); - -// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) -jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; - -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - // Fall back to attribute presence where some booleans are not supported - var attrNode, - property = jQuery.prop( elem, name ); - return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } - - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } -}; - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { - - fixSpecified = { - name: true, - id: true - }; - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret; - ret = elem.getAttributeNode( name ); - return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? - ret.nodeValue : - undefined; - }, - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - ret = document.createAttribute( name ); - elem.setAttributeNode( ret ); - } - return ( ret.nodeValue = value + "" ); - } - }; - - // Apply the nodeHook to tabindex - jQuery.attrHooks.tabindex.set = nodeHook.set; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - get: nodeHook.get, - set: function( elem, value, name ) { - if ( value === "" ) { - value = "false"; - } - nodeHook.set( elem, value, name ); - } - }; -} - - -// Some attributes require a special call on IE -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret === null ? undefined : ret; - } - }); - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Normalize to lowercase since IE uppercases css property names - return elem.style.cssText.toLowerCase() || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = "" + value ); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }); -} - -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} - -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }); -}); - - - - -var rnamespaces = /\.(.*)$/, - rformElems = /^(?:textarea|input|select)$/i, - rperiod = /\./g, - rspaces = / /g, - rescape = /[^\w\s.|`]/g, - rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, - rhoverHack = /\bhover(\.\S+)?/, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, - quickParse = function( selector ) { - var quick = rquickIs.exec( selector ); - if ( quick ) { - // 0 1 2 3 - // [ _, tag, id, class ] - quick[1] = ( quick[1] || "" ).toLowerCase(); - quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); - } - return quick; - }, - quickIs = function( elem, m ) { - return ( - (!m[1] || elem.nodeName.toLowerCase() === m[1]) && - (!m[2] || elem.id === m[2]) && - (!m[3] || m[3].test( elem.className )) - ); - }, - hoverHack = function( events ) { - return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); - }; - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - add: function( elem, types, handler, data, selector ) { - - var elemData, eventHandle, events, - t, tns, type, namespaces, handleObj, - handleObjIn, quick, handlers, special; - - // Don't attach events to noData or text/comment nodes (allow plain objects tho) - if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - events = elemData.events; - if ( !events ) { - elemData.events = events = {}; - } - eventHandle = elemData.handle; - if ( !eventHandle ) { - elemData.handle = eventHandle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = hoverHack(types).split( " " ); - for ( t = 0; t < types.length; t++ ) { - - tns = rtypenamespace.exec( types[t] ) || []; - type = tns[1]; - namespaces = ( tns[2] || "" ).split( "." ).sort(); - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: tns[1], - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - namespace: namespaces.join(".") - }, handleObjIn ); - - // Delegated event; pre-analyze selector so it's processed quickly on event dispatch - if ( selector ) { - handleObj.quick = quickParse( selector ); - if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) { - handleObj.isPositional = true; - } - } - - // Init the event handler queue if we're the first - handlers = events[ type ]; - if ( !handlers ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector ) { - - var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), - t, tns, type, namespaces, origCount, - j, events, special, handle, eventType, handleObj; - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = hoverHack( types || "" ).split(" "); - for ( t = 0; t < types.length; t++ ) { - tns = rtypenamespace.exec( types[t] ) || []; - type = tns[1]; - namespaces = tns[2]; - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - namespaces = namespaces? "." + namespaces : ""; - for ( j in events ) { - jQuery.event.remove( elem, j + namespaces, handler, selector ); - } - return; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector? special.delegateType : special.bindType ) || type; - eventType = events[ type ] || []; - origCount = eventType.length; - namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; - - // Only need to loop for special events or selective removal - if ( handler || namespaces || selector || special.remove ) { - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( !handler || handler.guid === handleObj.guid ) { - if ( !namespaces || namespaces.test( handleObj.namespace ) ) { - if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) { - eventType.splice( j--, 1 ); - - if ( handleObj.selector ) { - eventType.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - } - } - } else { - // Removing all events - eventType.length = 0; - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( eventType.length === 0 && origCount !== eventType.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery.removeData( elem, [ "events", "handle" ], true ); - } - }, - - // Events that are safe to short-circuit if no handlers are attached. - // Native DOM events should not be added, they may have inline handlers. - customEvent: { - "getData": true, - "setData": true, - "changeData": true - }, - - trigger: function( event, data, elem, onlyHandlers ) { - // Don't do events on text and comment nodes - if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { - return; - } - - // Event object or event type - var type = event.type || event, - namespaces = [], - cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; - - if ( type.indexOf( "!" ) >= 0 ) { - // Exclusive events trigger only for the exact event (no namespaces) - type = type.slice(0, -1); - exclusive = true; - } - - if ( type.indexOf( "." ) >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - - if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { - // No jQuery handlers for this event type, and it can't have inline handlers - return; - } - - // Caller can pass in an Event, Object, or just an event type string - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - new jQuery.Event( type, event ) : - // Just the event type (string) - new jQuery.Event( type ); - - event.type = type; - event.isTrigger = true; - event.exclusive = exclusive; - event.namespace = namespaces.join( "." ); - event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; - ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; - - // triggerHandler() and global events don't bubble or run the default action - if ( onlyHandlers || !elem ) { - event.preventDefault(); - } - - // Handle a global trigger - if ( !elem ) { - - // TODO: Stop taunting the data cache; remove global events and always attach to document - cache = jQuery.cache; - for ( i in cache ) { - if ( cache[ i ].events && cache[ i ].events[ type ] ) { - jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); - } - } - return; - } - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data != null ? jQuery.makeArray( data ) : []; - data.unshift( event ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - eventPath = [[ elem, special.bindType || type ]]; - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - old = null; - for ( cur = elem.parentNode; cur; cur = cur.parentNode ) { - eventPath.push([ cur, bubbleType ]); - old = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( old && old === elem.ownerDocument ) { - eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); - } - } - - // Fire handlers on the event path - for ( i = 0; i < eventPath.length; i++ ) { - - cur = eventPath[i][0]; - event.type = eventPath[i][1]; - - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) ) { - handle.apply( cur, data ); - } - - if ( event.isPropagationStopped() ) { - break; - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - // IE<9 dies on focus/blur to hidden element (#1486) - if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( old ) { - elem[ ontype ] = old; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event || window.event ); - - var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), - delegateCount = handlers.delegateCount, - args = [].slice.call( arguments, 0 ), - run_all = !event.exclusive && !event.namespace, - specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle, - handlerQueue = [], - i, j, cur, ret, selMatch, matched, matches, handleObj, sel, hit, related; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Determine handlers that should run if there are delegated events - // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861) - if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) { - - for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { - selMatch = {}; - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - sel = handleObj.selector; - hit = selMatch[ sel ]; - - if ( handleObj.isPositional ) { - // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/ - hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0; - } else if ( hit === undefined ) { - hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) ); - } - if ( hit ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, matches: matches }); - } - } - } - - // Add the remaining (directly-bound) handlers - if ( handlers.length > delegateCount ) { - handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); - } - - // Run delegates first; they may want to stop propagation beneath us - for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { - matched = handlerQueue[ i ]; - event.currentTarget = matched.elem; - - for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { - handleObj = matched.matches[ j ]; - - // Triggered event must either 1) be non-exclusive and have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { - - event.data = handleObj.data; - event.handleObj = handleObj; - - ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - return event.result; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** - props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, - originalEvent = event, - fixHook = jQuery.event.fixHooks[ event.type ] || {}, - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = jQuery.Event( originalEvent ); - - for ( i = copy.length; i; ) { - prop = copy[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Target should not be a text node (#504, Safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) - if ( event.metaKey === undefined ) { - event.metaKey = event.ctrlKey; - } - - return fixHook.filter? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady - }, - - focus: { - delegateType: "focusin", - noBubble: true - }, - blur: { - delegateType: "focusout", - noBubble: true - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -// Some plugins are using, but it's undocumented/deprecated and will be removed. -// The 1.7 special event interface should provide all the hooks needed now. -jQuery.event.handle = jQuery.event.dispatch; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var target = this, - related = event.relatedTarget, - handleObj = event.handleObj, - selector = handleObj.selector, - oldType, ret; - - // For a real mouseover/out, always call the handler; for - // mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) { - oldType = event.type; - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = oldType; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !form._submit_attached ) { - jQuery.event.add( form, "submit._submit", function( event ) { - // Form was submitted, bubble the event up the tree - if ( this.parentNode ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - }); - form._submit_attached = true; - } - }); - // return undefined since we don't need an event listener - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed ) { - this._just_changed = false; - jQuery.event.simulate( "change", this, event, true ); - } - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - elem._change_attached = true; - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on.call( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - var handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( var type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - live: function( types, data, fn ) { - jQuery( this.context ).on( types, this.selector, data, fn ); - return this; - }, - die: function( types, fn ) { - jQuery( this.context ).off( types, this.selector || "**", fn ); - return this; - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - if ( this[0] ) { - return jQuery.event.trigger( type, data, this[0], true ); - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.bind( name, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } - - if ( rkeyEvent.test( name ) ) { - jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; - } - - if ( rmouseEvent.test( name ) ) { - jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; - } -}); - - - -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - expando = "sizcache" + (Math.random() + '').replace('.', ''), - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true, - rBackslash = /\\/g, - rReturn = /\r\n/g, - rNonWord = /\W/; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function() { - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function( selector, context, results, seed ) { - results = results || []; - context = context || document; - - var origContext = context; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var m, set, checkSet, extra, ret, cur, pop, i, - prune = true, - contextXML = Sizzle.isXML( context ), - parts = [], - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec( "" ); - m = chunker.exec( soFar ); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context, seed ); - - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set, seed ); - } - } - - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? - Sizzle.filter( ret.expr, ret.set )[0] : - ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - - set = ret.expr ? - Sizzle.filter( ret.expr, ret.set ) : - ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray( set ); - - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function( results ) { - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } - } - - return results; -}; - -Sizzle.matches = function( expr, set ) { - return Sizzle( expr, null, null, set ); -}; - -Sizzle.matchesSelector = function( node, expr ) { - return Sizzle( expr, null, null, [node] ).length > 0; -}; - -Sizzle.find = function( expr, context, isXML ) { - var set, i, len, match, type, left; - - if ( !expr ) { - return []; - } - - for ( i = 0, len = Expr.order.length; i < len; i++ ) { - type = Expr.order[i]; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - left = match[1]; - match.splice( 1, 1 ); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace( rBackslash, "" ); - set = Expr.find[ type ]( match, context, isXML ); - - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( "*" ) : - []; - } - - return { set: set, expr: expr }; -}; - -Sizzle.filter = function( expr, set, inplace, not ) { - var match, anyFound, - type, found, item, filter, left, - i, pass, - old = expr, - result = [], - curLoop = set, - isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); - - while ( expr && set.length ) { - for ( type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - filter = Expr.filter[ type ]; - left = match[1]; - - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - pass = not ^ found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - - } else { - curLoop[i] = false; - } - - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -/** - * Utility function for retreiving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -var getText = Sizzle.getText = function( elem ) { - var i, node, - nodeType = elem.nodeType, - ret = ""; - - if ( nodeType ) { - if ( nodeType === 1 ) { - // Use textContent || innerText for elements - if ( typeof elem.textContent === 'string' ) { - return elem.textContent; - } else if ( typeof elem.innerText === 'string' ) { - // Replace IE's carriage returns - return elem.innerText.replace( rReturn, '' ); - } else { - // Traverse it's children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - } else { - - // If no nodeType, this is expected to be an array - for ( i = 0; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - if ( node.nodeType !== 8 ) { - ret += getText( node ); - } - } - } - return ret; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - - leftMatch: {}, - - attrMap: { - "class": "className", - "for": "htmlFor" - }, - - attrHandle: { - href: function( elem ) { - return elem.getAttribute( "href" ); - }, - type: function( elem ) { - return elem.getAttribute( "type" ); - } - }, - - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !rNonWord.test( part ), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - - ">": function( checkSet, part ) { - var elem, - isPartStr = typeof part === "string", - i = 0, - l = checkSet.length; - - if ( isPartStr && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - - "": function(checkSet, part, isXML){ - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); - }, - - "~": function( checkSet, part, isXML ) { - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); - } - }, - - find: { - ID: function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - - NAME: function( match, context ) { - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], - results = context.getElementsByName( match[1] ); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - - TAG: function( match, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( match[1] ); - } - } - }, - preFilter: { - CLASS: function( match, curLoop, inplace, result, not, isXML ) { - match = " " + match[1].replace( rBackslash, "" ) + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - - ID: function( match ) { - return match[1].replace( rBackslash, "" ); - }, - - TAG: function( match, curLoop ) { - return match[1].replace( rBackslash, "" ).toLowerCase(); - }, - - CHILD: function( match ) { - if ( match[1] === "nth" ) { - if ( !match[2] ) { - Sizzle.error( match[0] ); - } - - match[2] = match[2].replace(/^\+|\s*/g, ''); - - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - else if ( match[2] ) { - Sizzle.error( match[0] ); - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - - ATTR: function( match, curLoop, inplace, result, not, isXML ) { - var name = match[1] = match[1].replace( rBackslash, "" ); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - // Handle if an un-quoted value was used - match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - - PSEUDO: function( match, curLoop, inplace, result, not ) { - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - - if ( !inplace ) { - result.push.apply( result, ret ); - } - - return false; - } - - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - - POS: function( match ) { - match.unshift( true ); - - return match; - } - }, - - filters: { - enabled: function( elem ) { - return elem.disabled === false && elem.type !== "hidden"; - }, - - disabled: function( elem ) { - return elem.disabled === true; - }, - - checked: function( elem ) { - return elem.checked === true; - }, - - selected: function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - parent: function( elem ) { - return !!elem.firstChild; - }, - - empty: function( elem ) { - return !elem.firstChild; - }, - - has: function( elem, i, match ) { - return !!Sizzle( match[3], elem ).length; - }, - - header: function( elem ) { - return (/h\d/i).test( elem.nodeName ); - }, - - text: function( elem ) { - var attr = elem.getAttribute( "type" ), type = elem.type; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); - }, - - radio: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; - }, - - checkbox: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; - }, - - file: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; - }, - - password: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; - }, - - submit: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "submit" === elem.type; - }, - - image: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; - }, - - reset: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "reset" === elem.type; - }, - - button: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && "button" === elem.type || name === "button"; - }, - - input: function( elem ) { - return (/input|select|textarea|button/i).test( elem.nodeName ); - }, - - focus: function( elem ) { - return elem === elem.ownerDocument.activeElement; - } - }, - setFilters: { - first: function( elem, i ) { - return i === 0; - }, - - last: function( elem, i, match, array ) { - return i === array.length - 1; - }, - - even: function( elem, i ) { - return i % 2 === 0; - }, - - odd: function( elem, i ) { - return i % 2 === 1; - }, - - lt: function( elem, i, match ) { - return i < match[3] - 0; - }, - - gt: function( elem, i, match ) { - return i > match[3] - 0; - }, - - nth: function( elem, i, match ) { - return match[3] - 0 === i; - }, - - eq: function( elem, i, match ) { - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function( elem, match, i, array ) { - var name = match[1], - filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; - - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - - } else { - Sizzle.error( name ); - } - }, - - CHILD: function( elem, match ) { - var first, last, - doneName, parent, cache, - count, diff, - type = match[1], - node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - - case "nth": - first = match[2]; - last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - doneName = match[0]; - parent = elem.parentNode; - - if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { - count = 0; - - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - - parent[ expando ] = doneName; - } - - diff = elem.nodeIndex - last; - - if ( first === 0 ) { - return diff === 0; - - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - - ID: function( elem, match ) { - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - - TAG: function( elem, match ) { - return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; - }, - - CLASS: function( elem, match ) { - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - - ATTR: function( elem, match ) { - var name = match[1], - result = Sizzle.attr ? - Sizzle.attr( elem, name ) : - Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - !type && Sizzle.attr ? - result != null : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - - POS: function( elem, match, i, array ) { - var name = match[2], - filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} - -var makeArray = function( array, results ) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; - -// Provide a fallback method if it does not work -} catch( e ) { - makeArray = function( array, results ) { - var i = 0, - ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder, siblingCheck; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } - - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; - -} else { - sortOrder = function( a, b ) { - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Fallback to using sourceIndex (in IE) if it's available on both nodes - } else if ( a.sourceIndex && b.sourceIndex ) { - return a.sourceIndex - b.sourceIndex; - } - - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; - - // If the nodes are siblings (or identical) we can do a quick check - if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(), - root = document.documentElement; - - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - - return m ? - m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? - [m] : - undefined : - []; - } - }; - - Expr.filter.ID = function( elem, match ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - - // release memory in IE - root = form = null; -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function( match, context ) { - var results = context.getElementsByTagName( match[1] ); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; - - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - - Expr.attrHandle.href = function( elem ) { - return elem.getAttribute( "href", 2 ); - }; - } - - // release memory in IE - div = null; -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, - div = document.createElement("div"), - id = "__sizzle__"; - - div.innerHTML = "

"; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function( query, context, extra, seed ) { - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - // See if we find a selector to speed up - var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - - if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { - // Speed-up: Sizzle("TAG") - if ( match[1] ) { - return makeArray( context.getElementsByTagName( query ), extra ); - - // Speed-up: Sizzle(".CLASS") - } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { - return makeArray( context.getElementsByClassName( match[2] ), extra ); - } - } - - if ( context.nodeType === 9 ) { - // Speed-up: Sizzle("body") - // The body element only exists once, optimize finding it - if ( query === "body" && context.body ) { - return makeArray( [ context.body ], extra ); - - // Speed-up: Sizzle("#ID") - } else if ( match && match[3] ) { - var elem = context.getElementById( match[3] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id === match[3] ) { - return makeArray( [ elem ], extra ); - } - - } else { - return makeArray( [], extra ); - } - } - - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var oldContext = context, - old = context.getAttribute( "id" ), - nid = old || id, - hasParent = context.parentNode, - relativeHierarchySelector = /^\s*[+~]/.test( query ); - - if ( !old ) { - context.setAttribute( "id", nid ); - } else { - nid = nid.replace( /'/g, "\\$&" ); - } - if ( relativeHierarchySelector && hasParent ) { - context = context.parentNode; - } - - try { - if ( !relativeHierarchySelector || hasParent ) { - return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); - } - - } catch(pseudoError) { - } finally { - if ( !old ) { - oldContext.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - // release memory in IE - div = null; - })(); -} - -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; - - if ( matches ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9 fails this) - var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, "[test!='']:sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - Sizzle.matchesSelector = function( node, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - if ( !Sizzle.isXML( node ) ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { - var ret = matches.call( node, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || !disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9, so check for that - node.document && node.document.nodeType !== 11 ) { - return ret; - } - } - } catch(e) {} - } - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
"; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function( match, context, isXML ) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - // release memory in IE - div = null; -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem[ expando ] === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem[ expando ] = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem[ expando ] === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem[ expando ] = doneName; - elem.sizset = i; - } - - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -if ( document.documentElement.contains ) { - Sizzle.contains = function( a, b ) { - return a !== b && (a.contains ? a.contains(b) : true); - }; - -} else if ( document.documentElement.compareDocumentPosition ) { - Sizzle.contains = function( a, b ) { - return !!(a.compareDocumentPosition(b) & 16); - }; - -} else { - Sizzle.contains = function() { - return false; - }; -} - -Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function( selector, context, seed ) { - var match, - tmpSet = [], - later = "", - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet, seed ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -// Override sizzle attribute retrieval -Sizzle.attr = jQuery.attr; -Sizzle.selectors.attrMap = {}; -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})(); - - -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.POS, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var self = this, - i, l; - - if ( typeof selector !== "string" ) { - return jQuery( selector ).filter(function() { - for ( i = 0, l = self.length; i < l; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }); - } - - var ret = this.pushStack( "", "find", selector ), - length, n, r; - - for ( i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( n = length; n < ret.length; n++ ) { - for ( r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && ( - typeof selector === "string" ? - // If this is a positional selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - POS.test( selector ) ? - jQuery( selector, this.context ).index( this[0] ) >= 0 : - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - // Array (deprecated as of jQuery 1.7) - if ( jQuery.isArray( selectors ) ) { - var level = 1; - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( i = 0; i < selectors.length; i++ ) { - - if ( jQuery( cur ).is( selectors[ i ] ) ) { - ret.push({ selector: selectors[ i ], elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - - return ret; - } - - // String - var pos = POS.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique( ret ) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ), - // The variable 'args' was introduced in - // https://github.com/jquery/jquery/commit/52a0238 - // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. - // http://code.google.com/p/v8/issues/detail?id=1050 - args = slice.call(arguments); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, args.join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return ( elem === qualifier ) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; - }); -} - - - - -function createSafeFragment( document ) { - var list = nodeNames.split( " " ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr article aside audio canvas datalist details figcaption figure footer " + - "header hgroup mark meter nav output progress section summary time video", - rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /", "" ], - legend: [ 1, "
", "
" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - col: [ 2, "", "
" ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }, - safeFragment = createSafeFragment( document ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and