diff --git a/QUESTIONS.json b/QUESTIONS.json new file mode 100644 index 0000000..762b26b --- /dev/null +++ b/QUESTIONS.json @@ -0,0 +1,1133 @@ +{ + "TechQuestions": { + "category": [ + { + "idC": "C1", + "catname": "General", + "question": [ + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q1", + "idQ": "Q1", + "ID": "Q1", + "name": "Find the most frequent integer in an array" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q2", + "idQ": "Q2", + "ID": "Q2", + "name": "Find pairs in an integer array whose sum is equal to 10 (bonus; do it in linear time)" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q3", + "idQ": "Q3", + "ID": "Q3", + "name": "Given 2 integer arrays, determine if the 2nd array is a rotated version of the 1st array.", + "notes": "Ex. Original Array A={1,2,3,5,6,7,8} Rotated Array B={5,6,7,8,1,2,3}" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q4", + "idQ": "Q4", + "ID": "Q4", + "name": "Write fibbonaci iteratively and recursively (bonus; use dynamic programming)" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q5", + "idQ": "Q5", + "ID": "Q5", + "name": "Find the only element in an array that only occurs once." + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q6", + "idQ": "Q6", + "ID": "Q6", + "name": "Find the common elements of 2 int arrays" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q7", + "idQ": "Q7", + "ID": "Q7", + "name": "Implement binary search of a sorted array of integers" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q8", + "idQ": "Q8", + "ID": "Q8", + "name": "Implement binary search in a rotated array (ex. {5,6,7,8,1,2,3})" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q9", + "idQ": "Q9", + "ID": "Q9", + "name": "Use dynamic programming to find the first X prime numbers" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q10", + "idQ": "Q10", + "ID": "Q10", + "name": "Write a function that prints out the binary form of an int" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q11", + "idQ": "Q11", + "ID": "Q11", + "name": "Implement parseInt" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q12", + "idQ": "Q12", + "ID": "Q12", + "name": "Implement squareroot function" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q13", + "idQ": "Q13", + "ID": "Q13", + "name": "Implement an exponent function (bonus; now try in log(n) time)" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q14", + "idQ": "Q14", + "ID": "Q14", + "name": "Write a multiply function that multiples 2 integers without using *" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q15", + "idQ": "Q15", + "ID": "Q15", + "name": "Given n points, return the top k points that are closest to the origin" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q16", + "idQ": "Q16", + "ID": "Q16", + "name": "We’re going to find “Word Twins”, which are pairs of English words, at least 4 letters long, where the first three letters of one are the last three letters of another. For example, “strategy” and “Egypt”." + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q17", + "idQ": "Q17", + "ID": "Q17", + "name": "Given a 3*3 matrix, and 1-8 numbers in random order, 1 place as space.", + "notes": "Write code to find the min exchange of numbers to make the matrix in order.5 4 1 1 2 33 2 ---> 8 47 8 6 7 6 5" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q18", + "idQ": "Q18", + "ID": "Q18", + "name": "There is k parenthesis, write code to calculate how many permutations could have.", + "notes": "For 2 parenthesis, there is 2 permutations: ()() and (())." + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q19", + "idQ": "Q19", + "ID": "Q19", + "name": "**HARD**; Given a function rand5() that returns a random int between 0 and 5, implement rand7()" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q20", + "idQ": "Q20", + "ID": "Q20", + "name": "**HARD**; Given a 2D array of 1s and 0s, count the number of ``islands of 1s`` (e.g. groups of connecting 1s)" + } + ] + }, + { + "idC": "C2", + "catname": "Strings", + "question": [ + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q1", + "idQ": "Q1", + "ID": "Q21", + "name": "Find the first non-repeated character in a String" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q2", + "idQ": "Q2", + "ID": "Q22", + "name": "Reverse a String iteratively and recursively" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q3", + "idQ": "Q3", + "ID": "Q23", + "name": "Determine if 2 Strings are anagrams" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q4", + "idQ": "Q4", + "ID": "Q24", + "name": "Check if String is a palindrome" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q5", + "idQ": "Q5", + "ID": "Q25", + "name": "Check if a String is composed of all unique characters" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q6", + "idQ": "Q6", + "ID": "Q26", + "name": "Determine if a String is an int or a double" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q7", + "idQ": "Q7", + "ID": "Q27", + "name": "**HARD**; Find the longest palindrome in a String" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q8", + "idQ": "Q8", + "ID": "Q28", + "name": "**HARD**; Print all permutations of a String" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q9", + "idQ": "Q9", + "ID": "Q29", + "name": "**HARD**; Given a single-line text String and a maximum width value, write the function 'String justify(String text, int maxWidth)' that formats the input text using full-justification, i.e., extra spaces on each line are equally distributed between the words; the first word on each line is flushed left and the last word on each line is flushed right" + } + ] + }, + { + "idC": "C3", + "catname": "Trees", + "question": [ + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q1", + "idQ": "Q1", + "ID": "Q30", + "name": "Implement a BST with insert and delete functions" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q2", + "idQ": "Q2", + "ID": "Q31", + "name": "Print a tree using BFS and DFS" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q3", + "idQ": "Q3", + "ID": "Q32", + "name": "Write a function that determines if a tree is a BST" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q4", + "idQ": "Q4", + "ID": "Q33", + "name": "Find the smallest element in a BST" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q5", + "idQ": "Q5", + "ID": "Q34", + "name": "Find the 2nd largest number in a BST" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q6", + "idQ": "Q6", + "ID": "Q35", + "name": "Given a binary tree which is a sum tree (child nodes add to parent), write an algorithm to determine whether the tree is a valid sum tree" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q7", + "idQ": "Q7", + "ID": "Q36", + "name": "Find the distance between 2 nodes in a BST and a normal binary tree" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q8", + "idQ": "Q8", + "ID": "Q37", + "name": "Print the coordinates of every node in a binary tree, where root is 0,0" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q9", + "idQ": "Q9", + "ID": "Q38", + "name": "Print a tree by levels" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q10", + "idQ": "Q10", + "ID": "Q39", + "name": "Given a binary tree which is a sum tree, write an algorithm to determine whether the tree is a valid sum tree" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q11", + "idQ": "Q11", + "ID": "Q40", + "name": "Given a tree, verify that it contains a subtree." + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q12", + "idQ": "Q12", + "ID": "Q41", + "name": "Convert binary tree to doubly linked list" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q13", + "idQ": "Q13", + "ID": "Q42", + "name": "**HARD**; Find the max distance between 2 nodes in a BST." + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q14", + "idQ": "Q14", + "ID": "Q43", + "name": "**HARD**; Construct a BST given the pre-order and in-order traversal Strings" + } + ] + }, + { + "idC": "C4", + "catname": "Stacks, Queues, and Heaps", + "question": [ + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q1", + "idQ": "Q1", + "ID": "Q44", + "name": "Implement a stack with push and pop functions" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q2", + "idQ": "Q2", + "ID": "Q45", + "name": "Implement a queue with queue and dequeue functions" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q3", + "idQ": "Q3", + "ID": "Q46", + "name": "Find the minimum element in a stack in O(1) time" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q4", + "idQ": "Q4", + "ID": "Q47", + "name": "Write a function that sorts a stack (bonus; sort the stack in place without extra memory)" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q5", + "idQ": "Q5", + "ID": "Q48", + "name": "Implement a binary min heap. Turn it into a binary max heap" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q6", + "idQ": "Q6", + "ID": "Q49", + "name": "**HARD**; Implement a queue using two stacks" + } + ] + }, + { + "idC": "C5", + "catname": "Linked Lists", + "question": [ + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q1", + "idQ": "Q1", + "ID": "Q50", + "name": "Implement a linked list (with insert and delete functions)" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q2", + "idQ": "Q2", + "ID": "Q51", + "name": "Find the Nth element in a linked list" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q3", + "idQ": "Q3", + "ID": "Q52", + "name": "Remove the Nth element of a linked list" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q4", + "idQ": "Q4", + "ID": "Q53", + "name": "Check if a linked list has cycles" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q5", + "idQ": "Q5", + "ID": "Q54", + "name": "Given a circular linked list, find the node at the beginning of the loop.", + "notes": "Ex. A-->B-->C --> D-->E -->C, C is the node that begins the loop" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q6", + "idQ": "Q6", + "ID": "Q55", + "name": "Check whether a link list is a palindrome" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q7", + "idQ": "Q7", + "ID": "Q56", + "name": "Reverse a linked list iteratively and recursively" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q8", + "idQ": "Q8", + "ID": "Q57", + "name": "Given a linked list, where each node has a link to a random node in the list, make a copy of the entire list" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q9", + "idQ": "Q9", + "ID": "Q58", + "name": "Given a singly LL A->B->C->D->E->F... convert to B->A->D->C->F->E..." + } + ] + }, + { + "idC": "C6", + "catname": "Sorting", + "question": [ + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q1", + "idQ": "Q1", + "ID": "Q59", + "name": "Implement bubble sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q2", + "idQ": "Q2", + "ID": "Q60", + "name": "Implement selection sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q3", + "idQ": "Q3", + "ID": "Q61", + "name": "Implement insertion sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q4", + "idQ": "Q4", + "ID": "Q62", + "name": "Implement merge sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q5", + "idQ": "Q5", + "ID": "Q63", + "name": "Implement quick sort" + } + ] + }, + { + "idC": "C7", + "catname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "question": [ + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q1", + "idQ": "Q1", + "ID": "Q64", + "name": "Basic bitwise operations" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q2", + "idQ": "Q2", + "ID": "Q65", + "name": "How do you program a min heap using Nodes" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q3", + "idQ": "Q3", + "ID": "Q66", + "name": "Find the max value in an array. The array is ``semi-sorted``.", + "notes": "Ex. { 1 3 4 7 9 10 12 13 12 6 3 }" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q4", + "idQ": "Q4", + "ID": "Q67", + "name": "Write a code that accepts integers as arrays and outputs the multiplication result as an array." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q5", + "idQ": "Q5", + "ID": "Q68", + "name": "Write a code that takes the coordinates of multiple rectangles as input and returns as output the coordinates of the rectangle that is the intersection of all the rectangles." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q6", + "idQ": "Q6", + "ID": "Q69", + "name": "Typical low level CS questions about sorting algorithms and operational cost." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q7", + "idQ": "Q7", + "ID": "Q70", + "name": "Median finding algorithm - find the median of 'n' numbers and a little bit of binary search tree implementation" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q8", + "idQ": "Q8", + "ID": "Q71", + "name": "Find the largest rectangle with all 0s in an matrix with only 0 and 1." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q9", + "idQ": "Q9", + "ID": "Q72", + "name": "Convert char string to integer." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q10", + "idQ": "Q10", + "ID": "Q73", + "name": "Find occurrences of a number in sorted array (allow duplicates)." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q11", + "idQ": "Q11", + "ID": "Q74", + "name": "If integer array used to store big integers (one integer store one digit), implement arithmetic operations." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q12", + "idQ": "Q12", + "ID": "Q75", + "name": "How to build a heap?" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q13", + "idQ": "Q13", + "ID": "Q76", + "name": "What is the optimized version of the knn algorithm?" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q14", + "idQ": "Q14", + "ID": "Q77", + "name": "Write a recursive function to calculate pascal's pyramid numbers." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q15", + "idQ": "Q15", + "ID": "Q78", + "name": "A question related to binary search, which is a kind of weak spot and I always avoid using it." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q16", + "idQ": "Q16", + "ID": "Q79", + "name": "Explain Singleton structure, how to create" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q17", + "idQ": "Q17", + "ID": "Q80", + "name": "Given k sorted pivots, write procedure partition in quicksort" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q18", + "idQ": "Q18", + "ID": "Q81", + "name": "Find the median of three numbers." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q19", + "idQ": "Q19", + "ID": "Q82", + "name": "Generate all balanced parentheses combinations of given length." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q20", + "idQ": "Q20", + "ID": "Q83", + "name": "The second question asked, how to find two missing integers in an unsorted array" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q21", + "idQ": "Q21", + "ID": "Q84", + "name": "Given an array of characters in it, how would you reverse it?" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q22", + "idQ": "Q22", + "ID": "Q85", + "name": "Write a program to comparing two array, one being very large" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q23", + "idQ": "Q23", + "ID": "Q86", + "name": "To generate a fibonacci number sequence, and discuss its time and space complexity" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q24", + "idQ": "Q24", + "ID": "Q87", + "name": "To merge two sorted integer arrays." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q25", + "idQ": "Q25", + "ID": "Q88", + "name": "Returning the n-th element of a linked list." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q26", + "idQ": "Q26", + "ID": "Q89", + "name": "How to randomly select a number with equal probability from an array with unknown size?", + "notes": "Write an algorithm to find the 3rd highest number from an array of random integers" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q27", + "idQ": "Q27", + "ID": "Q90", + "name": "Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. Sorted in increasing order", + "notes": "Input: find 5 in (15, 16, 19, 20, 25, 1, 3, 4, 5, 6, 10, 14) Output 8" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q28", + "idQ": "Q28", + "ID": "Q91", + "name": "Implement a simple regular expression matching function" + } + ] + }, + { + "idC": "C8", + "catname": "Uncategorized", + "question": [ + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q1", + "idQ": "Q1", + "ID": "Q92", + "name": "Given a max-heap, how do I find the top k items?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q2", + "idQ": "Q2", + "ID": "Q93", + "name": "Find the border length created from a conglomeration of various 2D rectangles." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q3", + "idQ": "Q3", + "ID": "Q94", + "name": "Write a minPeak function for a stack (function that returns the minimum element in the stack)." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q4", + "idQ": "Q4", + "ID": "Q95", + "name": "Find the nth fib number" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q5", + "idQ": "Q5", + "ID": "Q96", + "name": "Design a function in your favorite programming language to convert a camelCase string to all lowercase." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q6", + "idQ": "Q6", + "ID": "Q97", + "name": "Implement a hashset" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q7", + "idQ": "Q7", + "ID": "Q98", + "name": "Given a corpus of valid words, design a function that takes a word as input and outputs all valid anagrams of that word." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q8", + "idQ": "Q8", + "ID": "Q99", + "name": "Given an input of a 3D matrix of ones and zeros, count the number of contiguous 1-filled regions (as separated by 0-filled regions), as well as the size of the largest one (I think; doesn't really change the problem much)." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q9", + "idQ": "Q9", + "ID": "Q100", + "name": "You have two sets. How would you know that they converge." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q10", + "idQ": "Q10", + "ID": "Q101", + "name": "Given a bag of nuts and a bag of bolts, each having a different size within a bag but exactly one match in the other bag, give a fast algorithm to find all matches" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q11", + "idQ": "Q11", + "ID": "Q102", + "name": "Preorder traversal without recursion" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q12", + "idQ": "Q12", + "ID": "Q103", + "name": "Find the largest possible difference in an array of integers, such that the smaller integer occurs earlier in the array." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q13", + "idQ": "Q13", + "ID": "Q104", + "name": "How to find if n numbers in a list sum up to an integer k?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q14", + "idQ": "Q14", + "ID": "Q105", + "name": "Find largest palindrome in string" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q15", + "idQ": "Q15", + "ID": "Q106", + "name": "Make an anagram solver that returns all valid dictionary words given a set of characters." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q16", + "idQ": "Q16", + "ID": "Q107", + "name": "Sort a string by the order it's characters appear in another string" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q17", + "idQ": "Q17", + "ID": "Q108", + "name": "Given a value k and an array , design an efficient algorithm that should output the number of pairs that sum up to k." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q18", + "idQ": "Q18", + "ID": "Q109", + "name": "How do you find three numbers that sum to 0? (in a list). Now can you do it under O(n^3)?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q19", + "idQ": "Q19", + "ID": "Q110", + "name": "Given a Fibonacci number, tell us which index it occurs at." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q20", + "idQ": "Q20", + "ID": "Q111", + "name": "Describe an algorithm that would find n numbers in a list that sum to 0." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q21", + "idQ": "Q21", + "ID": "Q112", + "name": "Given an array of n unsorted ints, with the condition that each number is at most k positions away from its final sorted position, give an efficient sorting algorithm" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q22", + "idQ": "Q22", + "ID": "Q113", + "name": "Give an efficient solution for subset sum." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q23", + "idQ": "Q23", + "ID": "Q114", + "name": "Given two (i,j) coordinates of a cell in two dimensional matrix. These coordinates are the lower left and upper right corner of a rectangle contained within the matrix. Sum all the elements in the matrix. Time and space?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q24", + "idQ": "Q24", + "ID": "Q115", + "name": "String has all unique characters" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q25", + "idQ": "Q25", + "ID": "Q116", + "name": "Two strings to see if one is a permutation" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q26", + "idQ": "Q26", + "ID": "Q117", + "name": "Remove dups from an unsorted linked list" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q27", + "idQ": "Q27", + "ID": "Q118", + "name": "Find kth algorithm of singly linked list" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q28", + "idQ": "Q28", + "ID": "Q119", + "name": "Delete a node in the middle of a singly linked list given access to that node" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q29", + "idQ": "Q29", + "ID": "Q120", + "name": "Write code to partition a linked list around a value x such that all nodes less than x come before all nodes greater than or equal to x" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q30", + "idQ": "Q30", + "ID": "Q121", + "name": "Single array to implement three stacks" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q31", + "idQ": "Q31", + "ID": "Q122", + "name": "Stack with min element" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q32", + "idQ": "Q32", + "ID": "Q123", + "name": "Towers of Hanoi" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q33", + "idQ": "Q33", + "ID": "Q124", + "name": "Sort a stack in ascending order using at most one additional stack to hold items but you may not copy the elements into any other data structure" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q34", + "idQ": "Q34", + "ID": "Q125", + "name": "Function to see if a tree is balanced" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q35", + "idQ": "Q35", + "ID": "Q126", + "name": "Graph algorithm, route between two nodes" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q36", + "idQ": "Q36", + "ID": "Q127", + "name": "Create bst from sorted array with minimal height" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q37", + "idQ": "Q37", + "ID": "Q128", + "name": "Binary tree is a bst" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q38", + "idQ": "Q38", + "ID": "Q129", + "name": "A child is running up a staircase with n steps, and cah hop either 1 step, 2 steps, or 3 steps at a time. Implement a method to count how many possible ways the child can run up the stairs" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q39", + "idQ": "Q39", + "ID": "Q130", + "name": "Two sorted arrays, A has a large enough buffer at the end to hold B, merge B into A in sorted order" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q40", + "idQ": "Q40", + "ID": "Q131", + "name": "Write a method to sort an array of strings so that all the anagrams are next to each other" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q41", + "idQ": "Q41", + "ID": "Q132", + "name": "Find an element in a sorted array that has been rotated an unknown number of times" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q42", + "idQ": "Q42", + "ID": "Q133", + "name": "Implement a method that returns true if the edit distance between two strings is less than 2 (1 or 0) or false otherwise" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q43", + "idQ": "Q43", + "ID": "Q134", + "name": "Given two lists of chars, return the first with removed characters that appear in the second list." + } + ] + } + ] + } +} diff --git a/QUESTIONS.md b/QUESTIONS.md index fd292db..dded252 100644 --- a/QUESTIONS.md +++ b/QUESTIONS.md @@ -1,168 +1,1358 @@ -Technical Interview Questions -============================= - -**General** -- Find the most frequent integer in an array -- Find pairs in an integer array whose sum is equal to 10 (bonus: do it in linear time) -- Given 2 integer arrays, determine if the 2nd array is a rotated version of the 1st array. - - ```Ex. Original Array A={1,2,3,5,6,7,8} Rotated Array B={5,6,7,8,1,2,3}``` -- Write fibbonaci iteratively and recursively (bonus: use dynamic programming) -- Find the only element in an array that only occurs once. -- Find the common elements of 2 int arrays -- Implement binary search of a sorted array of integers -- Implement binary search in a rotated array (ex. {5,6,7,8,1,2,3}) -- Use dynamic programming to find the first X prime numbers -- Write a function that prints out the binary form of an int -- Implement parseInt -- Implement squareroot function -- Implement an exponent function (bonus: now try in log(n) time) -- Write a multiply function that multiples 2 integers without using * -- Given n points, return the top k points that are closest to the origin -- We’re going to find “Word Twins”, which are pairs of English words, at least 4 letters long, where the first three letters of one are the last three letters of another. For example, “strategy” and “Egypt”. -- Given a 3*3 matrix, and 1-8 numbers in random order, 1 place as space. - Write code to find the min exchange of numbers to make the matrix in order. - - 5 4 1 1 2 3 - 3 2 ---> 8 4 - 7 8 6 7 6 5 -- There is k parenthesis, write code to calculate how many permutations could have. - For 2 parenthesis, there is 2 permutations: ()() and (()). -- **HARD**: Given a function rand5() that returns a random int between 0 and 5, implement rand7() -- **HARD**: Given a 2D array of 1s and 0s, count the number of "islands of 1s" (e.g. groups of connecting 1s) - -**Strings** -- Find the first non-repeated character in a String -- Reverse a String iteratively and recursively -- Determine if 2 Strings are anagrams -- Check if String is a palindrome -- Check if a String is composed of all unique characters -- Determine if a String is an int or a double -- **HARD**: Find the longest palindrome in a String -- **HARD**: Print all permutations of a String -- **HARD**: Given a single-line text String and a maximum width value, write the function 'String justify(String text, int maxWidth)' that formats the input text using full-justification, i.e., extra spaces on each line are equally distributed between the words; the first word on each line is flushed left and the last word on each line is flushed right - -**Trees** -- Implement a BST with insert and delete functions -- Print a tree using BFS and DFS -- Write a function that determines if a tree is a BST -- Find the smallest element in a BST -- Find the 2nd largest number in a BST -- Given a binary tree which is a sum tree (child nodes add to parent), write an algorithm to determine whether the tree is a valid sum tree -- Find the distance between 2 nodes in a BST and a normal binary tree -- Print the coordinates of every node in a binary tree, where root is 0,0 -- Print a tree by levels -- Given a binary tree which is a sum tree, write an algorithm to determine whether the tree is a valid sum tree -- Given a tree, verify that it contains a subtree. -- Convert binary tree to doubly linked list -- **HARD**: Find the max distance between 2 nodes in a BST. -- **HARD**: Construct a BST given the pre-order and in-order traversal Strings - -**Stacks, Queues, and Heaps** -- Implement a stack with push and pop functions -- Implement a queue with queue and dequeue functions -- Find the minimum element in a stack in O(1) time -- Write a function that sorts a stack (bonus: sort the stack in place without extra memory) -- Implement a binary min heap. Turn it into a binary max heap -- **HARD**: Implement a queue using two stacks - -**Linked Lists** -- Implement a linked list (with insert and delete functions) -- Find the Nth element in a linked list -- Remove the Nth element of a linked list -- Check if a linked list has cycles -- Given a circular linked list, find the node at the beginning of the loop. - - ```Ex. A-->B-->C --> D-->E -->C, C is the node that begins the loop``` -- Check whether a link list is a palindrome -- Reverse a linked list iteratively and recursively -- Given a linked list, where each node has a link to a random node in the list, make a copy of the entire list -- Given a singly LL A->B->C->D->E->F... convert to B->A->D->C->F->E... - -**Sorting** -- Implement bubble sort -- Implement selection sort -- Implement insertion sort -- Implement merge sort -- Implement quick sort - -**BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** - -- Basic bitwise operations -- How do you program a min heap using Nodes -- Find the max value in an array. The array is "semi-sorted". - - ```Ex. { 1 3 4 7 9 10 12 13 12 6 3 }``` -- Write a code that accepts integers as arrays and outputs the multiplication result as an array. -- Write a code that takes the coordinates of multiple rectangles as input and returns as output the coordinates of the rectangle that is the intersection of all the rectangles. -- Typical low level CS questions about sorting algorithms and operational cost. -- Median finding algorithm - find the median of 'n' numbers and a little bit of binary search tree implementation -- Find the largest rectangle with all 0s in an matrix with only 0 and 1. -- Convert char string to integer. -- Find occurrences of a number in sorted array (allow duplicates). -- If integer array used to store big integers (one integer store one digit), implement arithmetic operations. -- How to build a heap? -- What is the optimized version of the knn algorithm? -- Write a recursive function to calculate pascal's pyramid numbers. -- A question related to binary search, which is a kind of weak spot and I always avoid using it. -- Explain Singleton structure, how to create -- Given k sorted pivots, write procedure partition in quicksort -- Find the median of three numbers. -- Generate all balanced parentheses combinations of given length. -- The second question asked, how to find two missing integers in an unsorted array -- Given an array of characters in it, how would you reverse it? -- Write a program to comparing two array, one being very large -- To generate a fibonacci number sequence, and discuss its time and space complexity -- To merge two sorted integer arrays. -- Returning the n-th element of a linked list. -- How to randomly select a number with equal probability from an array with unknown size? - Write an algorithm to find the 3rd highest number from an array of random integers -- Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. Sorted in increasing order - - ```Input: find 5 in (15, 16, 19, 20, 25, 1, 3, 4, 5, 6, 10, 14) Output 8``` -- Implement a simple regular expression matching function - -**Uncategorized** -- Given a max-heap, how do I find the top k items? -- Find the border length created from a conglomeration of various 2D rectangles. -- Write a minPeak function for a stack (function that returns the minimum element in the stack). -- Find the nth fib number -- Design a function in your favorite programming language to convert a camelCase string to all lowercase. -- Implement a hashset -- Given a corpus of valid words, design a function that takes a word as input and outputs all valid anagrams of that word. -- Given an input of a 3D matrix of ones and zeros, count the number of contiguous 1-filled regions (as separated by 0-filled regions), as well as the size of the largest one (I think; doesn't really change the problem much). -- You have two sets. How would you know that they converge. -- Given a bag of nuts and a bag of bolts, each having a different size within a bag but exactly one match in the other bag, give a fast algorithm to find all matches -- Preorder traversal without recursion -- Find the largest possible difference in an array of integers, such that the smaller integer occurs earlier in the array. -- How to find if n numbers in a list sum up to an integer k? -- Find largest palindrome in string -- Make an anagram solver that returns all valid dictionary words given a set of characters. -- Sort a string by the order it's characters appear in another string -- Given a value k and an array , design an efficient algorithm that should output the number of pairs that sum up to k. -- How do you find three numbers that sum to 0? (in a list). Now can you do it under O(n^3)? -- Given a Fibonacci number, tell us which index it occurs at. -- Describe an algorithm that would find n numbers in a list that sum to 0. -- Given an array of n unsorted ints, with the condition that each number is at most k positions away from its final sorted position, give an efficient sorting algorithm -- Give an efficient solution for subset sum. -- Given two (i,j) coordinates of a cell in two dimensional matrix. These coordinates are the lower left and upper right corner of a rectangle contained within the matrix. Sum all the elements in the matrix. Time and space? -- String has all unique characters -- Two strings to see if one is a permutation -- Remove dups from an unsorted linked list -- Find kth algorithm of singly linked list -- Delete a node in the middle of a singly linked list given access to that node -- Write code to partition a linked list around a value x such that all nodes less than x come before all nodes greater than or equal to x -- Single array to implement three stacks -- Stack with min element -- Towers of Hanoi -- Sort a stack in ascending order using at most one additional stack to hold items but you may not copy the elements into any other data structure -- Function to see if a tree is balanced -- Graph algorithm, route between two nodes -- Create bst from sorted array with minimal height -- Binary tree is a bst -- A child is running up a staircase with n steps, and cah hop either 1 step, 2 steps, or 3 steps at a time. Implement a method to count how many possible ways the child can run up the stairs -- Two sorted arrays, A has a large enough buffer at the end to hold B, merge B into A in sorted order -- Write a method to sort an array of strings so that all the anagrams are next to each other -- Find an element in a sorted array that has been rotated an unknown number of times -- Implement a method that returns true if the edit distance between two strings is less than 2 (1 or 0) or false otherwise -- Given two lists of chars, return the first with removed characters that appear in the second list. +# Technical Questions and Algorithms + +# General + +## Find the most frequent integer in an array" + -- IDs -- + ID Questions: Q1 + ID Category: C1 + ID CatQuestions: C1Q1 + + +Inline notes: + + +## Find pairs in an integer array whose sum is equal to 10 (bonus; do it in linear time)" + -- IDs -- + ID Questions: Q2 + ID Category: C1 + ID CatQuestions: C1Q2 + + +Inline notes: + + +## Given 2 integer arrays, determine if the 2nd array is a rotated version of the 1st array. + -- IDs -- + ID Questions: Q3 + ID Category: C1 + ID CatQuestions: C1Q3 + + +Inline notes: + + +## Write fibbonaci iteratively and recursively (bonus; use dynamic programming)" + -- IDs -- + ID Questions: Q4 + ID Category: C1 + ID CatQuestions: C1Q4 + + +Inline notes: ```Ex. Original Array A={1,2,3,5,6,7,8} Rotated Array B={5,6,7,8,1,2,3}```" + + +## Find the only element in an array that only occurs once." + -- IDs -- + ID Questions: Q5 + ID Category: C1 + ID CatQuestions: C1Q5 + + +Inline notes: + + +## Find the common elements of 2 int arrays" + -- IDs -- + ID Questions: Q6 + ID Category: C1 + ID CatQuestions: C1Q6 + + +Inline notes: + + +## Implement binary search of a sorted array of integers" + -- IDs -- + ID Questions: Q7 + ID Category: C1 + ID CatQuestions: C1Q7 + + +Inline notes: + + +## Implement binary search in a rotated array (ex. {5,6,7,8,1,2,3})" + -- IDs -- + ID Questions: Q8 + ID Category: C1 + ID CatQuestions: C1Q8 + + +Inline notes: + + +## Use dynamic programming to find the first X prime numbers" + -- IDs -- + ID Questions: Q9 + ID Category: C1 + ID CatQuestions: C1Q9 + + +Inline notes: + + +## Write a function that prints out the binary form of an int" + -- IDs -- + ID Questions: Q10 + ID Category: C1 + ID CatQuestions: C1Q10 + + +Inline notes: + + +## Implement parseInt" + -- IDs -- + ID Questions: Q11 + ID Category: C1 + ID CatQuestions: C1Q11 + + +Inline notes: + + +## Implement squareroot function" + -- IDs -- + ID Questions: Q12 + ID Category: C1 + ID CatQuestions: C1Q12 + + +Inline notes: + + +## Implement an exponent function (bonus; now try in log(n) time)" + -- IDs -- + ID Questions: Q13 + ID Category: C1 + ID CatQuestions: C1Q13 + + +Inline notes: + + +## Write a multiply function that multiples 2 integers without using *" + -- IDs -- + ID Questions: Q14 + ID Category: C1 + ID CatQuestions: C1Q14 + + +Inline notes: + + +## Given n points, return the top k points that are closest to the origin" + -- IDs -- + ID Questions: Q15 + ID Category: C1 + ID CatQuestions: C1Q15 + + +Inline notes: + + +## We’re going to find “Word Twins”, which are pairs of English words, at least 4 letters long, where the first three letters of one are the last three letters of another. For example, “strategy” and “Egypt”." + -- IDs -- + ID Questions: Q16 + ID Category: C1 + ID CatQuestions: C1Q16 + + +Inline notes: + + +## Given a 3*3 matrix, and 1-8 numbers in random order, 1 place as space. + -- IDs -- + ID Questions: Q17 + ID Category: C1 + ID CatQuestions: C1Q17 + + +Inline notes: + + +## There is k parenthesis, write code to calculate how many permutations could have. + -- IDs -- + ID Questions: Q18 + ID Category: C1 + ID CatQuestions: C1Q18 + + +Inline notes: Write code to find the min exchange of numbers to make the matrix in order.5 4 1 1 2 33 2 ---> 8 47 8 6 7 6 5" + + +## **HARD**; Given a function rand5() that returns a random int between 0 and 5, implement rand7()" + -- IDs -- + ID Questions: Q19 + ID Category: C1 + ID CatQuestions: C1Q19 + + +Inline notes: For 2 parenthesis, there is 2 permutations + + +## **HARD**; Given a 2D array of 1s and 0s, count the number of ``islands of 1s`` (e.g. groups of connecting 1s)" + -- IDs -- + ID Questions: Q20 + ID Category: C1 + ID CatQuestions: C1Q20 + + +Inline notes: + + +# Strings + +## Find the first non-repeated character in a String" + -- IDs -- + ID Questions: Q21 + ID Category: C2 + ID CatQuestions: C2Q1 + + +Inline notes: + + +## Reverse a String iteratively and recursively" + -- IDs -- + ID Questions: Q22 + ID Category: C2 + ID CatQuestions: C2Q2 + + +Inline notes: + + +## Determine if 2 Strings are anagrams" + -- IDs -- + ID Questions: Q23 + ID Category: C2 + ID CatQuestions: C2Q3 + + +Inline notes: + + +## Check if String is a palindrome" + -- IDs -- + ID Questions: Q24 + ID Category: C2 + ID CatQuestions: C2Q4 + + +Inline notes: + + +## Check if a String is composed of all unique characters" + -- IDs -- + ID Questions: Q25 + ID Category: C2 + ID CatQuestions: C2Q5 + + +Inline notes: + + +## Determine if a String is an int or a double" + -- IDs -- + ID Questions: Q26 + ID Category: C2 + ID CatQuestions: C2Q6 + + +Inline notes: + + +## **HARD**; Find the longest palindrome in a String" + -- IDs -- + ID Questions: Q27 + ID Category: C2 + ID CatQuestions: C2Q7 + + +Inline notes: + + +## **HARD**; Print all permutations of a String" + -- IDs -- + ID Questions: Q28 + ID Category: C2 + ID CatQuestions: C2Q8 + + +Inline notes: + + +## **HARD**; Given a single-line text String and a maximum width value, write the function 'String justify(String text, int maxWidth)' that formats the input text using full-justification, i.e., extra spaces on each line are equally distributed between the words; the first word on each line is flushed left and the last word on each line is flushed right" + -- IDs -- + ID Questions: Q29 + ID Category: C2 + ID CatQuestions: C2Q9 + + +Inline notes: + + +# Trees + +## Implement a BST with insert and delete functions" + -- IDs -- + ID Questions: Q30 + ID Category: C3 + ID CatQuestions: C3Q1 + + +Inline notes: + + +## Print a tree using BFS and DFS" + -- IDs -- + ID Questions: Q31 + ID Category: C3 + ID CatQuestions: C3Q2 + + +Inline notes: + + +## Write a function that determines if a tree is a BST" + -- IDs -- + ID Questions: Q32 + ID Category: C3 + ID CatQuestions: C3Q3 + + +Inline notes: + + +## Find the smallest element in a BST" + -- IDs -- + ID Questions: Q33 + ID Category: C3 + ID CatQuestions: C3Q4 + + +Inline notes: + + +## Find the 2nd largest number in a BST" + -- IDs -- + ID Questions: Q34 + ID Category: C3 + ID CatQuestions: C3Q5 + + +Inline notes: + + +## Given a binary tree which is a sum tree (child nodes add to parent), write an algorithm to determine whether the tree is a valid sum tree" + -- IDs -- + ID Questions: Q35 + ID Category: C3 + ID CatQuestions: C3Q6 + + +Inline notes: + + +## Find the distance between 2 nodes in a BST and a normal binary tree" + -- IDs -- + ID Questions: Q36 + ID Category: C3 + ID CatQuestions: C3Q7 + + +Inline notes: + + +## Print the coordinates of every node in a binary tree, where root is 0,0" + -- IDs -- + ID Questions: Q37 + ID Category: C3 + ID CatQuestions: C3Q8 + + +Inline notes: + + +## Print a tree by levels" + -- IDs -- + ID Questions: Q38 + ID Category: C3 + ID CatQuestions: C3Q9 + + +Inline notes: + + +## Given a binary tree which is a sum tree, write an algorithm to determine whether the tree is a valid sum tree" + -- IDs -- + ID Questions: Q39 + ID Category: C3 + ID CatQuestions: C3Q10 + + +Inline notes: + + +## Given a tree, verify that it contains a subtree." + -- IDs -- + ID Questions: Q40 + ID Category: C3 + ID CatQuestions: C3Q11 + + +Inline notes: + + +## Convert binary tree to doubly linked list" + -- IDs -- + ID Questions: Q41 + ID Category: C3 + ID CatQuestions: C3Q12 + + +Inline notes: + + +## **HARD**; Find the max distance between 2 nodes in a BST." + -- IDs -- + ID Questions: Q42 + ID Category: C3 + ID CatQuestions: C3Q13 + + +Inline notes: + + +## **HARD**; Construct a BST given the pre-order and in-order traversal Strings" + -- IDs -- + ID Questions: Q43 + ID Category: C3 + ID CatQuestions: C3Q14 + + +Inline notes: + + +# Stacks, Queues, and Heaps + +## Implement a stack with push and pop functions" + -- IDs -- + ID Questions: Q44 + ID Category: C4 + ID CatQuestions: C4Q1 + + +Inline notes: + + +## Implement a queue with queue and dequeue functions" + -- IDs -- + ID Questions: Q45 + ID Category: C4 + ID CatQuestions: C4Q2 + + +Inline notes: + + +## Find the minimum element in a stack in O(1) time" + -- IDs -- + ID Questions: Q46 + ID Category: C4 + ID CatQuestions: C4Q3 + + +Inline notes: + + +## Write a function that sorts a stack (bonus; sort the stack in place without extra memory)" + -- IDs -- + ID Questions: Q47 + ID Category: C4 + ID CatQuestions: C4Q4 + + +Inline notes: + + +## Implement a binary min heap. Turn it into a binary max heap" + -- IDs -- + ID Questions: Q48 + ID Category: C4 + ID CatQuestions: C4Q5 + + +Inline notes: + + +## **HARD**; Implement a queue using two stacks" + -- IDs -- + ID Questions: Q49 + ID Category: C4 + ID CatQuestions: C4Q6 + + +Inline notes: + + +# Linked Lists + +## Implement a linked list (with insert and delete functions)" + -- IDs -- + ID Questions: Q50 + ID Category: C5 + ID CatQuestions: C5Q1 + + +Inline notes: + + +## Find the Nth element in a linked list" + -- IDs -- + ID Questions: Q51 + ID Category: C5 + ID CatQuestions: C5Q2 + + +Inline notes: + + +## Remove the Nth element of a linked list" + -- IDs -- + ID Questions: Q52 + ID Category: C5 + ID CatQuestions: C5Q3 + + +Inline notes: + + +## Check if a linked list has cycles" + -- IDs -- + ID Questions: Q53 + ID Category: C5 + ID CatQuestions: C5Q4 + + +Inline notes: + + +## Given a circular linked list, find the node at the beginning of the loop. + -- IDs -- + ID Questions: Q54 + ID Category: C5 + ID CatQuestions: C5Q5 + + +Inline notes: + + +## Check whether a link list is a palindrome" + -- IDs -- + ID Questions: Q55 + ID Category: C5 + ID CatQuestions: C5Q6 + + +Inline notes: ```Ex. A-->B-->C --> D-->E -->C, C is the node that begins the loop```" + + +## Reverse a linked list iteratively and recursively" + -- IDs -- + ID Questions: Q56 + ID Category: C5 + ID CatQuestions: C5Q7 + + +Inline notes: + + +## Given a linked list, where each node has a link to a random node in the list, make a copy of the entire list" + -- IDs -- + ID Questions: Q57 + ID Category: C5 + ID CatQuestions: C5Q8 + + +Inline notes: + + +## Given a singly LL A->B->C->D->E->F... convert to B->A->D->C->F->E..." + -- IDs -- + ID Questions: Q58 + ID Category: C5 + ID CatQuestions: C5Q9 + + +Inline notes: + + +# Sorting + +## Implement bubble sort" + -- IDs -- + ID Questions: Q59 + ID Category: C6 + ID CatQuestions: C6Q1 + + +Inline notes: + + +## Implement selection sort" + -- IDs -- + ID Questions: Q60 + ID Category: C6 + ID CatQuestions: C6Q2 + + +Inline notes: + + +## Implement insertion sort" + -- IDs -- + ID Questions: Q61 + ID Category: C6 + ID CatQuestions: C6Q3 + + +Inline notes: + + +## Implement merge sort" + -- IDs -- + ID Questions: Q62 + ID Category: C6 + ID CatQuestions: C6Q4 + + +Inline notes: + + +## Implement quick sort" + -- IDs -- + ID Questions: Q63 + ID Category: C6 + ID CatQuestions: C6Q5 + + +Inline notes: + + +# BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** + +## Basic bitwise operations" + -- IDs -- + ID Questions: Q64 + ID Category: C7 + ID CatQuestions: C7Q1 + + +Inline notes: + + +## How do you program a min heap using Nodes" + -- IDs -- + ID Questions: Q65 + ID Category: C7 + ID CatQuestions: C7Q2 + + +Inline notes: + + +## Find the max value in an array. The array is ``semi-sorted``. + -- IDs -- + ID Questions: Q66 + ID Category: C7 + ID CatQuestions: C7Q3 + + +Inline notes: + + +## Write a code that accepts integers as arrays and outputs the multiplication result as an array." + -- IDs -- + ID Questions: Q67 + ID Category: C7 + ID CatQuestions: C7Q4 + + +Inline notes: ```Ex. { 1 3 4 7 9 10 12 13 12 6 3 }```" + + +## Write a code that takes the coordinates of multiple rectangles as input and returns as output the coordinates of the rectangle that is the intersection of all the rectangles." + -- IDs -- + ID Questions: Q68 + ID Category: C7 + ID CatQuestions: C7Q5 + + +Inline notes: + + +## Typical low level CS questions about sorting algorithms and operational cost." + -- IDs -- + ID Questions: Q69 + ID Category: C7 + ID CatQuestions: C7Q6 + + +Inline notes: + + +## Median finding algorithm - find the median of 'n' numbers and a little bit of binary search tree implementation" + -- IDs -- + ID Questions: Q70 + ID Category: C7 + ID CatQuestions: C7Q7 + + +Inline notes: + + +## Find the largest rectangle with all 0s in an matrix with only 0 and 1." + -- IDs -- + ID Questions: Q71 + ID Category: C7 + ID CatQuestions: C7Q8 + + +Inline notes: + + +## Convert char string to integer." + -- IDs -- + ID Questions: Q72 + ID Category: C7 + ID CatQuestions: C7Q9 + + +Inline notes: + + +## Find occurrences of a number in sorted array (allow duplicates)." + -- IDs -- + ID Questions: Q73 + ID Category: C7 + ID CatQuestions: C7Q10 + + +Inline notes: + + +## If integer array used to store big integers (one integer store one digit), implement arithmetic operations." + -- IDs -- + ID Questions: Q74 + ID Category: C7 + ID CatQuestions: C7Q11 + + +Inline notes: + + +## How to build a heap?" + -- IDs -- + ID Questions: Q75 + ID Category: C7 + ID CatQuestions: C7Q12 + + +Inline notes: + + +## What is the optimized version of the knn algorithm?" + -- IDs -- + ID Questions: Q76 + ID Category: C7 + ID CatQuestions: C7Q13 + + +Inline notes: + + +## Write a recursive function to calculate pascal's pyramid numbers." + -- IDs -- + ID Questions: Q77 + ID Category: C7 + ID CatQuestions: C7Q14 + + +Inline notes: + + +## A question related to binary search, which is a kind of weak spot and I always avoid using it." + -- IDs -- + ID Questions: Q78 + ID Category: C7 + ID CatQuestions: C7Q15 + + +Inline notes: + + +## Explain Singleton structure, how to create" + -- IDs -- + ID Questions: Q79 + ID Category: C7 + ID CatQuestions: C7Q16 + + +Inline notes: + + +## Given k sorted pivots, write procedure partition in quicksort" + -- IDs -- + ID Questions: Q80 + ID Category: C7 + ID CatQuestions: C7Q17 + + +Inline notes: + + +## Find the median of three numbers." + -- IDs -- + ID Questions: Q81 + ID Category: C7 + ID CatQuestions: C7Q18 + + +Inline notes: + + +## Generate all balanced parentheses combinations of given length." + -- IDs -- + ID Questions: Q82 + ID Category: C7 + ID CatQuestions: C7Q19 + + +Inline notes: + + +## The second question asked, how to find two missing integers in an unsorted array" + -- IDs -- + ID Questions: Q83 + ID Category: C7 + ID CatQuestions: C7Q20 + + +Inline notes: + + +## Given an array of characters in it, how would you reverse it?" + -- IDs -- + ID Questions: Q84 + ID Category: C7 + ID CatQuestions: C7Q21 + + +Inline notes: + + +## Write a program to comparing two array, one being very large" + -- IDs -- + ID Questions: Q85 + ID Category: C7 + ID CatQuestions: C7Q22 + + +Inline notes: + + +## To generate a fibonacci number sequence, and discuss its time and space complexity" + -- IDs -- + ID Questions: Q86 + ID Category: C7 + ID CatQuestions: C7Q23 + + +Inline notes: + + +## To merge two sorted integer arrays." + -- IDs -- + ID Questions: Q87 + ID Category: C7 + ID CatQuestions: C7Q24 + + +Inline notes: + + +## Returning the n-th element of a linked list." + -- IDs -- + ID Questions: Q88 + ID Category: C7 + ID CatQuestions: C7Q25 + + +Inline notes: + + +## How to randomly select a number with equal probability from an array with unknown size? + -- IDs -- + ID Questions: Q89 + ID Category: C7 + ID CatQuestions: C7Q26 + + +Inline notes: + + +## Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. Sorted in increasing order + -- IDs -- + ID Questions: Q90 + ID Category: C7 + ID CatQuestions: C7Q27 + + +Inline notes: Write an algorithm to find the 3rd highest number from an array of random integers" + + +## Implement a simple regular expression matching function" + -- IDs -- + ID Questions: Q91 + ID Category: C7 + ID CatQuestions: C7Q28 + + +Inline notes: ```Input + + +# Uncategorized + +## Given a max-heap, how do I find the top k items?" + -- IDs -- + ID Questions: Q92 + ID Category: C8 + ID CatQuestions: C8Q1 + + +Inline notes: + + +## Find the border length created from a conglomeration of various 2D rectangles." + -- IDs -- + ID Questions: Q93 + ID Category: C8 + ID CatQuestions: C8Q2 + + +Inline notes: + + +## Write a minPeak function for a stack (function that returns the minimum element in the stack)." + -- IDs -- + ID Questions: Q94 + ID Category: C8 + ID CatQuestions: C8Q3 + + +Inline notes: + + +## Find the nth fib number" + -- IDs -- + ID Questions: Q95 + ID Category: C8 + ID CatQuestions: C8Q4 + + +Inline notes: + + +## Design a function in your favorite programming language to convert a camelCase string to all lowercase." + -- IDs -- + ID Questions: Q96 + ID Category: C8 + ID CatQuestions: C8Q5 + + +Inline notes: + + +## Implement a hashset" + -- IDs -- + ID Questions: Q97 + ID Category: C8 + ID CatQuestions: C8Q6 + + +Inline notes: + + +## Given a corpus of valid words, design a function that takes a word as input and outputs all valid anagrams of that word." + -- IDs -- + ID Questions: Q98 + ID Category: C8 + ID CatQuestions: C8Q7 + + +Inline notes: + + +## Given an input of a 3D matrix of ones and zeros, count the number of contiguous 1-filled regions (as separated by 0-filled regions), as well as the size of the largest one (I think; doesn't really change the problem much)." + -- IDs -- + ID Questions: Q99 + ID Category: C8 + ID CatQuestions: C8Q8 + + +Inline notes: + + +## You have two sets. How would you know that they converge." + -- IDs -- + ID Questions: Q100 + ID Category: C8 + ID CatQuestions: C8Q9 + + +Inline notes: + + +## Given a bag of nuts and a bag of bolts, each having a different size within a bag but exactly one match in the other bag, give a fast algorithm to find all matches" + -- IDs -- + ID Questions: Q101 + ID Category: C8 + ID CatQuestions: C8Q10 + + +Inline notes: + + +## Preorder traversal without recursion" + -- IDs -- + ID Questions: Q102 + ID Category: C8 + ID CatQuestions: C8Q11 + + +Inline notes: + + +## Find the largest possible difference in an array of integers, such that the smaller integer occurs earlier in the array." + -- IDs -- + ID Questions: Q103 + ID Category: C8 + ID CatQuestions: C8Q12 + + +Inline notes: + + +## How to find if n numbers in a list sum up to an integer k?" + -- IDs -- + ID Questions: Q104 + ID Category: C8 + ID CatQuestions: C8Q13 + + +Inline notes: + + +## Find largest palindrome in string" + -- IDs -- + ID Questions: Q105 + ID Category: C8 + ID CatQuestions: C8Q14 + + +Inline notes: + + +## Make an anagram solver that returns all valid dictionary words given a set of characters." + -- IDs -- + ID Questions: Q106 + ID Category: C8 + ID CatQuestions: C8Q15 + + +Inline notes: + + +## Sort a string by the order it's characters appear in another string" + -- IDs -- + ID Questions: Q107 + ID Category: C8 + ID CatQuestions: C8Q16 + + +Inline notes: + + +## Given a value k and an array , design an efficient algorithm that should output the number of pairs that sum up to k." + -- IDs -- + ID Questions: Q108 + ID Category: C8 + ID CatQuestions: C8Q17 + + +Inline notes: + + +## How do you find three numbers that sum to 0? (in a list). Now can you do it under O(n^3)?" + -- IDs -- + ID Questions: Q109 + ID Category: C8 + ID CatQuestions: C8Q18 + + +Inline notes: + + +## Given a Fibonacci number, tell us which index it occurs at." + -- IDs -- + ID Questions: Q110 + ID Category: C8 + ID CatQuestions: C8Q19 + + +Inline notes: + + +## Describe an algorithm that would find n numbers in a list that sum to 0." + -- IDs -- + ID Questions: Q111 + ID Category: C8 + ID CatQuestions: C8Q20 + + +Inline notes: + + +## Given an array of n unsorted ints, with the condition that each number is at most k positions away from its final sorted position, give an efficient sorting algorithm" + -- IDs -- + ID Questions: Q112 + ID Category: C8 + ID CatQuestions: C8Q21 + + +Inline notes: + + +## Give an efficient solution for subset sum." + -- IDs -- + ID Questions: Q113 + ID Category: C8 + ID CatQuestions: C8Q22 + + +Inline notes: + + +## Given two (i,j) coordinates of a cell in two dimensional matrix. These coordinates are the lower left and upper right corner of a rectangle contained within the matrix. Sum all the elements in the matrix. Time and space?" + -- IDs -- + ID Questions: Q114 + ID Category: C8 + ID CatQuestions: C8Q23 + + +Inline notes: + + +## String has all unique characters" + -- IDs -- + ID Questions: Q115 + ID Category: C8 + ID CatQuestions: C8Q24 + + +Inline notes: + + +## Two strings to see if one is a permutation" + -- IDs -- + ID Questions: Q116 + ID Category: C8 + ID CatQuestions: C8Q25 + + +Inline notes: + + +## Remove dups from an unsorted linked list" + -- IDs -- + ID Questions: Q117 + ID Category: C8 + ID CatQuestions: C8Q26 + + +Inline notes: + + +## Find kth algorithm of singly linked list" + -- IDs -- + ID Questions: Q118 + ID Category: C8 + ID CatQuestions: C8Q27 + + +Inline notes: + + +## Delete a node in the middle of a singly linked list given access to that node" + -- IDs -- + ID Questions: Q119 + ID Category: C8 + ID CatQuestions: C8Q28 + + +Inline notes: + + +## Write code to partition a linked list around a value x such that all nodes less than x come before all nodes greater than or equal to x" + -- IDs -- + ID Questions: Q120 + ID Category: C8 + ID CatQuestions: C8Q29 + + +Inline notes: + + +## Single array to implement three stacks" + -- IDs -- + ID Questions: Q121 + ID Category: C8 + ID CatQuestions: C8Q30 + + +Inline notes: + + +## Stack with min element" + -- IDs -- + ID Questions: Q122 + ID Category: C8 + ID CatQuestions: C8Q31 + + +Inline notes: + + +## Towers of Hanoi" + -- IDs -- + ID Questions: Q123 + ID Category: C8 + ID CatQuestions: C8Q32 + + +Inline notes: + + +## Sort a stack in ascending order using at most one additional stack to hold items but you may not copy the elements into any other data structure" + -- IDs -- + ID Questions: Q124 + ID Category: C8 + ID CatQuestions: C8Q33 + + +Inline notes: + + +## Function to see if a tree is balanced" + -- IDs -- + ID Questions: Q125 + ID Category: C8 + ID CatQuestions: C8Q34 + + +Inline notes: + + +## Graph algorithm, route between two nodes" + -- IDs -- + ID Questions: Q126 + ID Category: C8 + ID CatQuestions: C8Q35 + + +Inline notes: + + +## Create bst from sorted array with minimal height" + -- IDs -- + ID Questions: Q127 + ID Category: C8 + ID CatQuestions: C8Q36 + + +Inline notes: + + +## Binary tree is a bst" + -- IDs -- + ID Questions: Q128 + ID Category: C8 + ID CatQuestions: C8Q37 + + +Inline notes: + + +## A child is running up a staircase with n steps, and cah hop either 1 step, 2 steps, or 3 steps at a time. Implement a method to count how many possible ways the child can run up the stairs" + -- IDs -- + ID Questions: Q129 + ID Category: C8 + ID CatQuestions: C8Q38 + + +Inline notes: + + +## Two sorted arrays, A has a large enough buffer at the end to hold B, merge B into A in sorted order" + -- IDs -- + ID Questions: Q130 + ID Category: C8 + ID CatQuestions: C8Q39 + + +Inline notes: + + +## Write a method to sort an array of strings so that all the anagrams are next to each other" + -- IDs -- + ID Questions: Q131 + ID Category: C8 + ID CatQuestions: C8Q40 + + +Inline notes: + + +## Find an element in a sorted array that has been rotated an unknown number of times" + -- IDs -- + ID Questions: Q132 + ID Category: C8 + ID CatQuestions: C8Q41 + + +Inline notes: + + +## Implement a method that returns true if the edit distance between two strings is less than 2 (1 or 0) or false otherwise" + -- IDs -- + ID Questions: Q133 + ID Category: C8 + ID CatQuestions: C8Q42 + + +Inline notes: + + +## Given two lists of chars, return the first with removed characters that appear in the second list." + -- IDs -- + ID Questions: Q134 + ID Category: C8 + ID CatQuestions: C8Q43 + + +Inline notes: + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e87e3a6 --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +[![Stories in Ready](https://badge.waffle.io/mariotti/technical_interview_questions.png?label=ready&title=Ready)](https://waffle.io/mariotti/technical_interview_questions) +# Technical Interview Questions: interesting problems + +This is a repository of interesting (and less interesting) questions with solutions +given in many programming languages and by multiple authors. + +As the repository is only at the beginning, we need contributions. + +The basic idea is that no algorithm, no code is better then an other. +They are just different: one works better in one case the other better +in an other case. + +Consider for example the different sorting algorithms: swap, heap, quick etc. +Each one is the best within its own context. + +We can extend it to the programming languages: the same algorithm might +behave differently in one language then on an other, moreover we can have +different implementations for the same solution within the same programming +language. + +The target is not to list the best: The target is to give ideas with +examples. + +## Current Problems + +There are many problems on this repository which I am trying to solve. +If you feel like contributing please let me know + +# Current activity + +Building a JSON "database" with references to solutions and discussions. + +This is already a nice problem ;) + +# How to contribute + +There are at present many many ways you can contribute. If you feel like just start an issue. + +## Language, understanding and related problems + + - Even within the short text presented in these pages, there are defintely typos and bad grammar. To contribute you might need to be a bit techky, and not to write a romance or too long correct sentences but any contribution is definitely appreciated. Teaching to tech guys a bit of writing style cannot be too bad. + + - I started with a given list of question. Some are not definitely clear. The idea is to create a document for each question in order to describe it better. But some questions are really bad. Please point them out. + +## Question, Algo, text and solution + +As the starting point is really not tested... the best is: + - Get a question, write a solution if possible or report as not a question. + - Once you are on it write a little document about the question and your solution + +## Design this repo + +A big contribution and appreciated would be to help in designing better this github repository. +You can start with an issue so that we can start talking. + +# Algos ownership + +If you wrote a really good algorithm you might want to ask how ownership and copyrights might work. + +These are my guidelines: + + - The code will be under the repo license which means the latest GPL license. + ** We have no meaning to fight for a license so we go for a classical one. + ** We also cannot really set up a per algo licensing system right now + + - The documentation is indeed under GPL right now, but will require an update to fit better + with a document based license. Of course CC (CreativeCommons) is under consideration. In principle this would + effect the directory: "discussions". + + - Ownership: Within git and github there will exist a trace of the author. + But in order to make this explicit I invite you to write for each code you submit + a line like: "#Author: name surname + and eventually your github member page. + We will try to make this more explicit but for the time being we might need to survive with + git commits authors. \ No newline at end of file diff --git a/bin/generateQmd.sh b/bin/generateQmd.sh new file mode 100755 index 0000000..cd15879 --- /dev/null +++ b/bin/generateQmd.sh @@ -0,0 +1,26 @@ +#! /bin/sh +# +# This script has a problem on "notes"!! NOT WORKING as expected +# Wrong approach! Need to use jq extensively to generate the md file +echo "# Technical Questions and Algorithms\n" +echo "## List of Categories\n" +./bin/getCategories.sh | sed 's/^"/ - /' | sed 's/"$//' +echo "" +# +cat QUESTIONS.json | jq '.' | awk ' \ +/^ *"catname" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);print "#",$2,"\n";} \ +/^ *"idC" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);idC=$2;} \ +/^ *"idQ" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);idQ=$2;} \ +/^ *"idCQ" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);idCQ=$2;} \ +/^ *"ID" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);ID=$2;} \ +/^ *"notes" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);qnotes=$2;} \ +/^ *"name" *:/ {FS = ":";gsub(/^ *" */,"",$2);gsub(/",$/,"",$2);print "##",$2; \ + print " -- IDs --"; + print " ID Questions:",ID; + print " ID Category:",idC; + print " ID CatQuestions:",idCQ, "\n\n"; + print "Inline notes:",qnotes,"\n\n";qnotes=""; \ + scmd=sprintf("cat discussions/%s_DISCUSSION.md", ID);\ + system(scmd)\ +} \ +' diff --git a/bin/getCategories.sh b/bin/getCategories.sh new file mode 100755 index 0000000..23ce8bf --- /dev/null +++ b/bin/getCategories.sh @@ -0,0 +1,3 @@ +#! /bin/sh +cat QUESTIONS.json | jq '.' | jq '.TechQuestions.category[].catname' +# diff --git a/bin/getQuestions.sh b/bin/getQuestions.sh new file mode 100755 index 0000000..492a11e --- /dev/null +++ b/bin/getQuestions.sh @@ -0,0 +1,3 @@ +#! /bin/sh +cat QUESTIONS.json | jq '.' | jq '.TechQuestions.category[].question[].name' +# diff --git a/bin/getQuestionsByCategory.sh b/bin/getQuestionsByCategory.sh new file mode 100755 index 0000000..8857a89 --- /dev/null +++ b/bin/getQuestionsByCategory.sh @@ -0,0 +1,14 @@ +#! /bin/sh +if [ "${1}a" == "a" ]; +then + echo "please give a category name"; + echo "Valid categories are:"; + ./bin/getCategories.sh + exit 0 +fi; +qst=${1} +cat QUESTIONS.json | jq '.' | \ + jq --arg catname ${qst} '.TechQuestions.category[] | select(.catname==$catname) | .question[].name' +#cat QUESTIONS.json | jq '.' | jq '.TechQuestions.category[] | select(.catname=="Strings") | .question[].name' +# JSON of the CAT: cat QUESTIONS.json | jq '.' | jq '.TechQuestions.category[] | select(.catname=="Strings")' +# diff --git a/bin/makeJSONQuestions.sh b/bin/makeJSONQuestions.sh new file mode 100755 index 0000000..3416032 --- /dev/null +++ b/bin/makeJSONQuestions.sh @@ -0,0 +1,8 @@ +#! /bin/sh +# +exho "please use now as master file only the QUESTIONS.json" +exit 0 +# +./bin/makeJSONfromQ.sh | json_reformat > QUESTIONS.json +./bin/generateQmd.sh > QUESTIONS_N.md +# diff --git a/bin/makeJSONfromQ.QUESTIONS.test.md b/bin/makeJSONfromQ.QUESTIONS.test.md new file mode 100644 index 0000000..a3cbe5a --- /dev/null +++ b/bin/makeJSONfromQ.QUESTIONS.test.md @@ -0,0 +1,24 @@ +Technical Interview Questions +============================= + +**General** +- Find the most frequent integer in an array +- Given 2 integer arrays, determine if the 2nd array is a rotated version of the 1st array. + ```Ex. Original Array A={1,2,3,5,6,7,8} Rotated Array B={5,6,7,8,1,2,3}``` +- We’re going to find “Word Twins”, which are pairs of English words, at least 4 letters long, where the first three letters of one are the last three letters of another. For example, “strategy” and “Egypt”. +- Given a 3*3 matrix, and 1-8 numbers in random order, 1 place as space. + Write code to find the min exchange of numbers to make the matrix in order. + + 5 4 1 1 2 3 + 3 2 ---> 8 4 + 7 8 6 7 6 5 + +- There is k parenthesis, write code to calculate how many permutations could have. + For 2 parenthesis, there is 2 permutations: ()() and (()). +- **HARD**: Given a 2D array of 1s and 0s, count the number of "islands of 1s" (e.g. groups of connecting 1s) + +**Strings** +- **HARD**: Given a single-line text String and a maximum width value, write the function 'String justify(String text, int maxWidth)' that formats the input text using full-justification, i.e., extra spaces on each line are equally distributed between the words; the first word on each line is flushed left and the last word on each line is flushed right + +**Trees** +- Write a function that determines if a tree is a BST diff --git a/bin/makeJSONfromQ.sh b/bin/makeJSONfromQ.sh new file mode 100755 index 0000000..baaee04 --- /dev/null +++ b/bin/makeJSONfromQ.sh @@ -0,0 +1,36 @@ +#! /bin/sh +# +exho "please use now as master file only the QUESTIONS.json" +exit 0 +# +QQ="QUESTIONS_OLD.md" +#QQ="bin/makeJSONfromQ.QUESTIONS.test.md" +cat ${QQ} | tail +4 | sed 's/"/``/g' | \ + awk 'BEGIN { Ccount=0; Qcount=0; QCcount=0; Ncount=0; firtsC=0; firstQ=0 } \ + /^\*\*/ {Ccount++; QCcount=0; gsub(/^\*\*/,"",$0);gsub(/\*\*$/,"",$0);\ + if (Ccount >1) \ + {print "\t\t\t}\n\t\t]\n\t\t},"} + else {print "{ \"TechQuestions\" :\n\t{ \"category\" :\n\t["}; \ + catName=$0; + tagsCnum = split(catName,tagsCname,","); + printf("\t\t{ \"idC\" : \"C%d\", \"catname\" : \"%s\",",Ccount,$0)} \ + /^- / {Qcount++; QCcount++; gsub(/^- */,"",$0);gsub(/^ /,"",$0);gsub(/[ ]+$/,"",$0);gsub(/:/,";",$0); if (QCcount >1) {\ + if (Ncount > 0) {Ncount = 0;print "\"";}; \ + print "\t\t\t},"; \ + } \ + else { \ + print "\n\t\t\"question\" : [ "}; \ + printf("\t\t\t"); \ + printf("{"); \ + printf("\"categoryname\" : \"%s\",",catName); \ + printf("\"idC\" : \"C%d\",",Ccount); \ + printf("\"idCQ\" : \"C%dQ%d\",",Ccount, QCcount); \ + printf("\"idQ\" : \"Q%d\",",QCcount); \ + printf("\"ID\" : \"Q%d\",",Qcount); \ + printf("\"name\" : \"%s\"",$0); \ + } \ + /^ / {Ncount++; if (Ncount > 1) \ + {gsub(/^[ \t]+/,"",$0);gsub(/[ \t]+$/,"",$0);printf("%s",$0);} \ + else {gsub(/^[ \t]+/,"",$0);gsub(/[ \t]+$/,"",$0);printf("\t\t\t,\n\t\t\t\"notes\" : \"%s",$0)}} + END { print "\t\t\t}\n\t\t]\n\t\t}\n\t]\n}\n}"}' +# diff --git a/bin/makeRootPDF.sh b/bin/makeRootPDF.sh new file mode 100755 index 0000000..b9cf7d7 --- /dev/null +++ b/bin/makeRootPDF.sh @@ -0,0 +1,5 @@ +#! /bin/sh +# +pandoc -t latex -o README.pdf README.md +pandoc -t latex -o QUESTIONS.pdf QUESTIONS.md +# diff --git a/discussions/.placeholder b/discussions/.placeholder new file mode 100644 index 0000000..e69de29 diff --git a/discussions/Q1_DISCUSSION.md b/discussions/Q1_DISCUSSION.md new file mode 100644 index 0000000..2317994 --- /dev/null +++ b/discussions/Q1_DISCUSSION.md @@ -0,0 +1,49 @@ +### Bare Question + +Find the most frequent integer in an array + +### Discussion + +#### Questions + + - What if there is more then one answer? If few integers have the same highest frequency. + - How to report the results? + +### Algorithms + +#### Accumulate frequency count + + The first algorithm simply sets up independent "counters" for each number, then it search + for the max value within the counters. + + Pros: The data can be reused and inspected. For example checking same ranking or lower + ranking. + + Cons: It has to be stored in memory to be useful. + +##### Python Solution + +It can be implemented as a dictionary, which is the straight forward solution in python. +Namely Key/Values pairs for the sake of the algorithm. + +#### Sort and count + +This algorithm is fully based on sorting. It is useful if the data are already "almost" + sorted. Once the data are sorted it simply counts the data repetition and gives the highest + number found. + + Pros: Fast on sorted or almost sorted data. Can be modified to get the second or third result. + It uses no memory except for the sorting. + + Cons: it has no history of the data and results. + +##### Python Solution + +##### Shell Solution + +### Real Case examples + +#### Find the most viewed movie + [mariotti] I had a similar case in the analysis of movielens data. The solution was similar + to the sorting and counting algorithm. This was for data analysis and not for production. + \ No newline at end of file diff --git a/discussions/Q2_DISCUSSION.md b/discussions/Q2_DISCUSSION.md new file mode 100644 index 0000000..6ccc063 --- /dev/null +++ b/discussions/Q2_DISCUSSION.md @@ -0,0 +1,22 @@ +### Bare Question + +Find pairs in an integer array whose sum is equal to 10 (bonus: do it in linear time) + +### Discussion + +#### Questions + + - Is the array exclusive? i.e. do I have to find the unique pairs? + - How do I have to handle this case: [3, 7, 7]? One pair or 2? + +### Algorithms + +#### ALgo one + + + +### Real Case examples + +#### Find pair matches + + \ No newline at end of file diff --git a/docs/algorithm - Check if a string is rotation of another WITHOUT concatenating - Stack Overflow.pdf b/docs/algorithm - Check if a string is rotation of another WITHOUT concatenating - Stack Overflow.pdf new file mode 100644 index 0000000..a21b747 Binary files /dev/null and b/docs/algorithm - Check if a string is rotation of another WITHOUT concatenating - Stack Overflow.pdf differ diff --git a/docs/code golf - Detect rotated strings - Programming Puzzles & Code Golf Stack Exchange.pdf b/docs/code golf - Detect rotated strings - Programming Puzzles & Code Golf Stack Exchange.pdf new file mode 100644 index 0000000..e456a76 Binary files /dev/null and b/docs/code golf - Detect rotated strings - Programming Puzzles & Code Golf Stack Exchange.pdf differ diff --git a/java_solutions/Q3_isRotated.java b/java_solutions/Q3_isRotated.java new file mode 100644 index 0000000..832b160 --- /dev/null +++ b/java_solutions/Q3_isRotated.java @@ -0,0 +1,18 @@ +#From: http://stackoverflow.com/questions/2553522/interview-question-check-if-one-string-is-a-rotation-of-other-string +# Answer from: comunity wiki +# a litteral copy +# Just a java started +# +#algorithm checkRotation(string s1, string s2) +# if( len(s1) != len(s2)) +# return false +# if( substring(s2,concat(s1,s1)) +# return true +# return false +#end +# + +boolean isRotation(String s1,String s2) { + return (s1.length() == s2.length()) && ((s1+s1).indexOf(s2) != -1); +} + diff --git a/libs/json-editor/CONTRIBUTING.md b/libs/json-editor/CONTRIBUTING.md new file mode 100644 index 0000000..5685897 --- /dev/null +++ b/libs/json-editor/CONTRIBUTING.md @@ -0,0 +1,48 @@ +Contributing +=============== +This document briefly lists the guidelines for contributing to JSON Editor. + +Reporting Bugs +---------------- +When creating an issue in GitHub, try to include when feasible: +* A brief description of the issue +* An example JSON schema that causes the issue +* Steps to reproduce + +If you can reproduce the issue on the demo page (http://jeremydorn.com/json-editor/), it's helpful to attach the "Direct Link" url (top right of page). Note: the direct link might not work for very large schemas or JSON values. + + +Contributing Code +-------------------------- +One of the major goals of JSON Editor is to be easy to modify and hack. + +If you fix a bug or add a cool feature, please submit a pull request! + + +### Code Style + +* Use 2 spaces for indentation +* Use comments whenever the code's meaning is not obvious +* When in doubt, try to match the style in existing source files + +###Grunt + +The easiest way to hack on JSON Editor is to run `grunt watch`, which +re-builds `dist/jsoneditor.js` every time a source file changes. + +To do a full grunt build which includes jshint and minification, run `grunt`. + +### Submitting Pull Requests +Try to limit pull requests to a single narrow feature or bug fix. + +__Do not submit `dist/` files!__ + +The following is done when a pull request is accepted. There is no need to do any of these steps yourself. + +1. Merge pull request into master +2. Increment version number in `src/intro.js` and `bower.json`. Set date in `src/intro.js`. +3. Build `dist/` files with grunt +4. Commit and push to github +5. Add a git tag and release for this version with a short changelog + +Sometimes, multiple pull requests will be merged before doing steps 2-5. diff --git a/libs/json-editor/Gruntfile.js b/libs/json-editor/Gruntfile.js new file mode 100644 index 0000000..af75c1b --- /dev/null +++ b/libs/json-editor/Gruntfile.js @@ -0,0 +1,144 @@ +'use strict'; + +module.exports = function(grunt) { + grunt.initConfig({ + concat: { + options: { + sourceMap: true + }, + dist: { + dest: 'dist/jsoneditor.js', + src: [ + // License & version info, start the containing closure + 'src/intro.js', + + // Simple inheritance + 'src/class.js', + // IE9 polyfills + 'src/ie9.js', + // Utils like extend, each, and trigger + 'src/utilities.js', + + // The main JSONEditor class + 'src/core.js', + + // JSON Schema validator + 'src/validator.js', + + // All the editors + 'src/editor.js', + 'src/editors/null.js', + 'src/editors/string.js', + 'src/editors/number.js', + 'src/editors/integer.js', + 'src/editors/object.js', + 'src/editors/array.js', + 'src/editors/table.js', + 'src/editors/multiple.js', + 'src/editors/enum.js', + 'src/editors/select.js', + 'src/editors/selectize.js', + 'src/editors/multiselect.js', + 'src/editors/base64.js', + 'src/editors/upload.js', + 'src/editors/checkbox.js', + 'src/editors/array/selectize.js', + + // All the themes and iconlibs + 'src/theme.js', + 'src/themes/*.js', + 'src/iconlib.js', + 'src/iconlibs/*.js', + + // The JS templating engines + 'src/templates/*.js', + + // Set the defaults + 'src/defaults.js', + + // Wrapper for $.fn style initialization + 'src/jquery.js', + + // End the closure + 'src/outro.js' + ], + } + }, + uglify: { + dist: { + src: 'dist/jsoneditor.js', + dest: 'dist/jsoneditor.min.js' + }, + options: { + preserveComments: 'some', + sourceMap: true + } + }, + watch: { + scripts: { + files: ["src/**/*.js"], + tasks: ["concat"] + } + }, + jshint: { + options: { + browser: true, + indent: 2, + nonbsp: true, + nonew: true, + immed: true, + latedef: true + }, + beforeconcat: [ + 'src/class.js', + 'src/ie9.js', + + // Utils like extend, each, and trigger + 'src/utilities.js', + + // The main JSONEditor class + 'src/core.js', + + // JSON Schema validator + 'src/validator.js', + + // All the editors + 'src/editor.js', + 'src/editors/*.js', + + // All the themes and iconlibs + 'src/theme.js', + 'src/themes/*.js', + 'src/iconlib.js', + 'src/iconlibs/*.js', + + // The JS templating engines + 'src/templates/*.js', + + // Set the defaults + 'src/defaults.js', + + // Wrapper for $.fn style initialization + 'src/jquery.js' + ], + afterconcat: { + options: { + undef: true + }, + files: { + src: ['dist/jsoneditor.js'] + } + } + } + }); + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-concat'); + + // Default task. + grunt.registerTask('default', ['jshint:beforeconcat','concat','jshint:afterconcat','uglify']); + +}; diff --git a/libs/json-editor/LICENSE b/libs/json-editor/LICENSE new file mode 100644 index 0000000..7134058 --- /dev/null +++ b/libs/json-editor/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Jeremy Dorn + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/libs/json-editor/README.md b/libs/json-editor/README.md new file mode 100644 index 0000000..f1cfaba --- /dev/null +++ b/libs/json-editor/README.md @@ -0,0 +1,1236 @@ +JSON Editor +=========== + +![JSON Schema -> HTML Editor -> JSON](https://raw.github.com/jdorn/json-editor/master/jsoneditor.png) + +JSON Editor takes a JSON Schema and uses it to generate an HTML form. +It has full support for JSON Schema version 3 and 4 and can integrate with several popular CSS frameworks (bootstrap, foundation, and jQueryUI). + +Check out an interactive demo (demo.html): http://jeremydorn.com/json-editor/ + +Download the [production version][min] (22K when gzipped) or the [development version][max]. + +[min]: https://raw.github.com/jdorn/json-editor/master/dist/jsoneditor.min.js +[max]: https://raw.github.com/jdorn/json-editor/master/dist/jsoneditor.js + +Requirements +----------------- + +JSON Editor has no dependencies. It only needs a modern browser (tested in Chrome and Firefox). + +### Optional Requirements + +The following are not required, but can improve the style and usability of JSON Editor when present. + +* A compatible JS template engine (Mustache, Underscore, Hogan, Handlebars, Swig, Markup, or EJS) +* A compatible CSS framework for styling (bootstrap 2/3, foundation 3/4/5, or jqueryui) +* A compatible icon library (bootstrap 2/3 glyphicons, foundation icons 2/3, jqueryui, or font awesome 3/4) +* [SCEditor](http://www.sceditor.com/) for WYSIWYG editing of HTML or BBCode content +* [EpicEditor](http://epiceditor.com/) for editing of Markdown content +* [Ace Editor](http://ace.c9.io/) for editing code +* [Select2](http://ivaynberg.github.io/select2/) for nicer Select boxes +* [Selectize](http://brianreavis.github.io/selectize.js/) for nicer Select & Array boxes +* [math.js](http://mathjs.org/) for more accurate floating point math (multipleOf, divisibleBy, etc.) + +Usage +-------------- + +If you learn best by example, check these out: + +* Basic Usage Example - http://rawgithub.com/jdorn/json-editor/master/examples/basic.html +* Advanced Usage Example - http://rawgithub.com/jdorn/json-editor/master/examples/advanced.html +* CSS Integration Example - http://rawgithub.com/jdorn/json-editor/master/examples/css_integration.html + +The rest of this README contains detailed documentation about every aspect of JSON Editor. For more under-the-hood documentation, check the wiki. + +### Initialize + +```js +var element = document.getElementById('editor_holder'); + +var editor = new JSONEditor(element, options); +``` + +#### Options + +Options can be set globally or on a per-instance basis during instantiation. + +```js +// Set an option globally +JSONEditor.defaults.options.theme = 'bootstrap2'; + +// Set an option during instantiation +var editor = new JSONEditor(element, { + //... + theme: 'bootstrap2' +}); +``` + +Here are all the available options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescriptionDefault Value
ajaxIf true, JSON Editor will load external URLs in $ref via ajax.false
disable_array_addIf true, remove all "add row" buttons from arrays.false
disable_array_deleteIf true, remove all "delete row" buttons from arrays.false
disable_array_reorderIf true, remove all "move up" and "move down" buttons from arrays.false
disable_collapseIf true, remove all collapse buttons from objects and arrays.false
disable_edit_jsonIf true, remove all Edit JSON buttons from objects.false
disable_propertiesIf true, remove all Edit Properties buttons from objects.false
form_name_rootThe first part of the `name` attribute of form inputs in the editor. An full example name is `root[person][name]` where "root" is the form_name_root.root
iconlibThe icon library to use for the editor. See the CSS Integration section below for more info.null
no_additional_propertiesIf true, objects can only contain properties defined with the properties keyword.false
refsAn object containing schema definitions for URLs. Allows you to pre-define external schemas.{}
required_by_defaultIf true, all schemas that don't explicitly set the required property will be required.false
keep_oneof_valuesIf true, makes oneOf copy properties over when switching.true
schemaA valid JSON Schema to use for the editor. Version 3 and Version 4 of the draft specification are supported.{}
show_errorsWhen to show validation errors in the UI. Valid values are interaction, change, always, and never."interaction"
startvalSeed the editor with an initial value. This should be valid against the editor's schema.null
templateThe JS template engine to use. See the Templates and Variables section below for more info.default
themeThe CSS theme to use. See the CSS Integration section below for more info.html
display_required_onlyIf true, only required properties will be included by default.false
+ +__*Note__ If the `ajax` property is `true` and JSON Editor needs to fetch an external url, the api methods won't be available immediately. +Listen for the `ready` event before calling them. + +```js +editor.on('ready',function() { + // Now the api methods will be available + editor.validate(); +}); +``` + +### Get/Set Value + +```js +editor.setValue({name: "John Smith"}); + +var value = editor.getValue(); +console.log(value.name) // Will log "John Smith" +``` + +Instead of getting/setting the value of the entire editor, you can also work on individual parts of the schema: + +```js +// Get a reference to a node within the editor +var name = editor.getEditor('root.name'); + +// `getEditor` will return null if the path is invalid +if(name) { + name.setValue("John Smith"); + + console.log(name.getValue()); +} +``` + + +### Validate + +When feasible, JSON Editor won't let users enter invalid data. This is done by +using input masks and intelligently enabling/disabling controls. + +However, in some cases it is still possible to enter data that doesn't validate against the schema. + +You can use the `validate` method to check if the data is valid or not. + +```javascript +// Validate the editor's current value against the schema +var errors = editor.validate(); + +if(errors.length) { + // errors is an array of objects, each with a `path`, `property`, and `message` parameter + // `property` is the schema keyword that triggered the validation error (e.g. "minLength") + // `path` is a dot separated path into the JSON object (e.g. "root.path.to.field") + console.log(errors); +} +else { + // It's valid! +} +``` + +By default, this will do the validation with the editor's current value. +If you want to use a different value, you can pass it in as a parameter. + + +```javascript +// Validate an arbitrary value against the editor's schema +var errors = editor.validate({ + value: { + to: "test" + } +}); +``` + +### Listen for Changes + +The `change` event is fired whenever the editor's value changes. + +```javascript +editor.on('change',function() { + // Do something +}); + +editor.off('change',function_reference); +``` + +You can also watch a specific field for changes: + +```javascript +editor.watch('path.to.field',function() { + // Do something +}); + +editor.unwatch('path.to.field',function_reference); +``` + +### Enable and Disable the Editor + +This lets you disable editing for the entire form or part of the form. + +```js +// Disable entire form +editor.disable(); + +// Disable part of the form +editor.getEditor('root.location').disable(); + +// Enable entire form +editor.enable(); + +// Enable part of the form +editor.getEditor('root.location').enable(); + +// Check if form is currently enabled +if(editor.isEnabled()) alert("It's editable!"); +``` + +### Destroy + +This removes the editor HTML from the DOM and frees up resources. + +```javascript +editor.destroy(); +``` + +CSS Integration +---------------- +JSON Editor can integrate with several popular CSS frameworks out of the box. + +The currently supported themes are: + +* barebones +* html (the default) +* bootstrap2 +* bootstrap3 +* foundation3 +* foundation4 +* foundation5 +* foundation6 +* jqueryui + +The default theme is `html`, which does not rely on an external framework. +This default can be changed by setting the `JSONEditor.defaults.options.theme` variable. + +If you want to specify your own styles with CSS, you can use `barebones`, which includes almost no classes or inline styles. + +```javascript +JSONEditor.defaults.options.theme = 'foundation5'; +``` + +You can override this default on a per-instance basis by passing a `theme` parameter in when initializing: + +```js +var editor = new JSONEditor(element,{ + schema: schema, + theme: 'jqueryui' +}); +``` + +### Icon Libraries + +JSON Editor also supports several popular icon libraries. The icon library must be set independently of the theme, even though there is some overlap. + +The supported icon libs are: + +* bootstrap2 (glyphicons) +* bootstrap3 (glyphicons) +* foundation2 +* foundation3 +* jqueryui +* fontawesome3 +* fontawesome4 + +By default, no icons are used. Just like the CSS theme, you can set the icon lib globally or when initializing: + +```js +// Set the global default +JSONEditor.defaults.options.iconlib = "bootstrap2"; + +// Set the icon lib during initialization +var editor = new JSONEditor(element,{ + schema: schema, + iconlib: "fontawesome4" +}); +``` + +It's possible to create your own custom themes and/or icon libs as well. Look at any of the existing classes for examples. + + +JSON Schema Support +----------------- + +JSON Editor fully supports version 3 and 4 of the JSON Schema [core][core] and [validation][validation] specifications. +Some of The [hyper-schema][hyper] specification is supported as well. + +[core]: http://json-schema.org/latest/json-schema-core.html +[validation]: http://json-schema.org/latest/json-schema-validation.html +[hyper]: http://json-schema.org/latest/json-schema-hypermedia.html + +### $ref and definitions + +JSON Editor supports schema references to external URLs and local definitions. Here's an example showing both: + +```json +{ + "type": "object", + "properties": { + "name": { + "title": "Full Name", + "$ref": "#/definitions/name" + }, + "location": { + "$ref": "http://mydomain.com/geo.json" + } + }, + "definitions": { + "name": { + "type": "string", + "minLength": 5 + } + } +} +``` + +Local references must point to the `definitions` object of the root node of the schema. +So, `#/customkey/name` will throw an exception. + +If loading an external url via Ajax, the url must either be on the same domain or return the correct HTTP cross domain headers. +If your URLs don't meet this requirement, you can pass in the references to JSON Editor during initialization (see Usage section above). + +Self-referential $refs are supported. Check out `examples/recursive.html` for usage examples. + +### hyper-schema links + +The `links` keyword from the hyper-schema specification can be used to add links to related documents. + +JSON Editor will use the `mediaType` property of the links to determine how best to display them. +Image, audio, and video links will display the media inline as well as providing a text link. + +Here are a couple examples: + +Simple text link +```js+jinja +{ + "title": "Blog Post Id", + "type": "integer", + "links": [ + { + "rel": "comments", + "href": "/posts/{{self}}/comments/", + // Optional - set CSS classes for the link + "class": "comment-link open-in-modal primary-text" + } + ] +} +``` + +Make link download when clicked +```js+jinja +{ + "title": "Document filename", + "type": "string", + "links": [ + { + "rel": "Download File", + "href": "/documents/{{self}}", + // Can also set `download` to a string as per the HTML5 spec + "download": true + } + ] +} +``` + +Show a video preview (using HTML5 video) +```js+jinja +{ + "title": "Video filename", + "type": "string", + "links": [ + { + "href": "/videos/{{self}}.mp4", + "mediaType": "video/mp4" + } + ] +} +``` + +The `href` property is a template that gets re-evaluated every time the value changes. +The variable `self` is always available. Look at the __Dependencies__ section below for how to include other fields or use a custom template engine. + +### Property Ordering + +There is no way to specify property ordering in JSON Schema (although this may change in v5 of the spec). + +JSON Editor introduces a new keyword `propertyOrder` for this purpose. The default property order if unspecified is 1000. Properties with the same order will use normal JSON key ordering. + +```json +{ + "type": "object", + "properties": { + "prop1": { + "type": "string" + }, + "prop2": { + "type": "string", + "propertyOrder": 10 + }, + "prop3": { + "type": "string", + "propertyOrder": 1001 + }, + "prop4": { + "type": "string", + "propertyOrder": 1 + } + } +} +``` + +In the above example schema, `prop1` does not have an order specified, so it will default to 1000. +So, the final order of properties in the form (and in returned JSON data) will be: + +1. prop4 (order 1) +2. prop2 (order 10) +3. prop1 (order 1000) +4. prop3 (order 1001) + +### Default Properties + +The default behavior of JSON Editor is to include all object properties defined with the `properties` keyword. + +To override this behaviour, you can use the keyword `defaultProperties` to set which ones are included: + +```json +{ + "type": "object", + "properties": { + "name": {"type": "string"}, + "age": {"type": "integer"} + }, + "defaultProperties": ["name"] +} +``` + +Now, only the `name` property above will be included by default. You can use the "Object Properties" button +to add the "age" property back in. + +### format + +JSON Editor supports many different formats for schemas of type `string`. They will work with schemas of type `integer` and `number` as well, but some formats may produce weird results. +If the `enum` property is specified, `format` will be ignored. + +JSON Editor uses HTML5 input types, so some of these may render as basic text input in older browsers: + +* color +* date +* datetime +* datetime-local +* email +* month +* number +* range +* tel +* text +* textarea +* time +* url +* week + +Here is an example that will show a color picker in browsers that support it: + +```json +{ + "type": "object", + "properties": { + "color": { + "type": "string", + "format": "color" + } + } +} +``` + +#### Specialized String Editors + +In addition to the standard HTML input formats, JSON Editor can also integrate with several 3rd party specialized editors. These libraries are not included in JSON Editor and you must load them on the page yourself. + +__SCEditor__ provides WYSIWYG editing of HTML and BBCode. To use it, set the format to `html` or `bbcode` and set the `wysiwyg` option to `true`: + +```json +{ + "type": "string", + "format": "html", + "options": { + "wysiwyg": true + } +} +``` + +You can configure SCEditor by setting configuration options in `JSONEditor.plugins.sceditor`. Here's an example: + +```js +JSONEditor.plugins.sceditor.emoticonsEnabled = false; +``` + +__EpicEditor__ is a simple Markdown editor with live preview. To use it, set the format to `markdown`: + +```json +{ + "type": "string", + "format": "markdown" +} +``` + +You can configure EpicEditor by setting configuration options in `JSONEditor.plugins.epiceditor`. Here's an example: + +```js +JSONEditor.plugins.epiceditor.basePath = 'epiceditor'; +``` + +__Ace Editor__ is a syntax highlighting source code editor. You can use it by setting the format to any of the following: + +* actionscript +* batchfile +* c +* c++ +* cpp (alias for c++) +* coffee +* csharp +* css +* dart +* django +* ejs +* erlang +* golang +* groovy +* handlebars +* haskell +* haxe +* html +* ini +* jade +* java +* javascript +* json +* less +* lisp +* lua +* makefile +* markdown +* matlab +* mysql +* objectivec +* pascal +* perl +* pgsql +* php +* python +* r +* ruby +* sass +* scala +* scss +* smarty +* sql +* stylus +* svg +* twig +* vbscript +* xml +* yaml + +```json +{ + "type": "string", + "format": "yaml" +} +``` + +You can use the hyper-schema keyword `media` instead of `format` too if you prefer for formats with a mime type: + +```json +{ + "type": "string", + "media": { + "type": "text/html" + } +} +``` + +You can override the default Ace theme by setting the `JSONEditor.plugins.ace.theme` variable. + +```js +JSONEditor.plugins.ace.theme = 'twilight'; +``` + +#### Booleans + +The default boolean editor is a select box with options "true" and "false". To use a checkbox instead, set the format to `checkbox`. + +```json +{ + "type": "boolean", + "format": "checkbox" +} +``` + +#### Arrays + +The default array editor takes up a lot of screen real estate. The `table` and `tabs` formats provide more compact UIs for editing arrays. + +The `table` format works great when every array element has the same schema and is not too complex. + +The `tabs` format can handle any array, but only shows one array element at a time. It has tabs on the left for switching between items. + + +Here's an example of the `table` format: + +```json +{ + "type": "array", + "format": "table", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } +} +``` + +For arrays of enumerated strings, you can also use the `select` or `checkbox` format. These formats require a very specific schema to work: + +```json +{ + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": ["value1","value2"] + } +} +``` + +By default, the `checkbox` editor (multiple checkboxes) will be used if there are fewer than 8 enum options. Otherwise, the `select` editor (a multiselect box) will be used. + +You can override this default by passing in a format: + +```json +{ + "type": "array", + "format": "select", + "uniqueItems": true, + "items": { + "type": "string", + "enum": ["value1","value2"] + } +} +``` + +#### Objects + +The default object layout is one child editor per row. The `grid` format will instead put multiple child editors per row. +This can make the editor much more compact, but at a cost of not guaranteeing child editor order. + +```json +{ + "type": "object", + "properties": { + "name": { "type": "string" } + }, + "format": "grid" +} +``` + + +Editor Options +---------------- + +Editors can accept options which alter the behavior in some way. + +* `collapsed` - If set to true, the editor will start collapsed (works for objects and arrays) +* `disable_array_add` - If set to true, the "add row" button will be hidden (works for arrays) +* `disable_array_delete` - If set to true, all of the "delete" buttons will be hidden (works for arrays) +* `disable_array_delete_all_rows` - If set to true, just the "delete all rows" button will be hidden (works for arrays) +* `disable_array_delete_last_row` - If set to true, just the "delete last row" buttons will be hidden (works for arrays) +* `disable_array_reorder` - If set to true, the "move up/down" buttons will be hidden (works for arrays) +* `disable_collapse` - If set to true, the collapse button will be hidden (works for objects and arrays) +* `disable_edit_json` - If set to true, the Edit JSON button will be hidden (works for objects) +* `disable_properties` - If set to true, the Edit Properties button will be hidden (works for objects) +* `enum_titles` - An array of display values to use for select box options in the same order as defined with the `enum` keyword. Works with schema using enum values. +* `expand_height` - If set to true, the input will auto expand/contract to fit the content. Works best with textareas. +* `grid_columns` - Explicitly set the number of grid columns (1-12) for the editor if it's within an object using a grid layout. +* `hidden` - If set to true, the editor will not appear in the UI (works for all types) +* `input_height` - Explicitly set the height of the input element. Should be a valid CSS width string (e.g. "100px"). Works best with textareas. +* `input_width` - Explicitly set the width of the input element. Should be a valid CSS width string (e.g. "100px"). Works for string, number, and integer data types. +* `remove_empty_properties` - If set to true for an object, empty object properties (i.e. those with falsy values) will not be returned by getValue(). + +```json +{ + "type": "object", + "options": { + "collapsed": true + }, + "properties": { + "name": { + "type": "string" + } + } +} +``` + +You can globally set the default options too if you want: + +```js +JSONEditor.defaults.editors.object.options.collapsed = true; +``` + + +Dependencies +------------------ +Sometimes, it's necessary to have one field's value depend on another's. + +The `dependencies` keyword from the JSON Schema specification is not nearly flexible enough to handle most use cases, +so JSON Editor introduces a couple custom keywords that help in this regard. + +The first step is to have a field "watch" other fields for changes. + +```json +{ + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "full_name": { + "type": "string", + "watch": { + "fname": "first_name", + "lname": "last_name" + } + } + } +} +``` + +The keyword `watch` tells JSON Editor which fields to watch for changes. + +The keys (`fname` and `lname` in this example) are alphanumeric aliases for the fields. + +The values (`first_name` and `last_name`) are paths to the fields. To access nested properties of objects, use a dot for separation (e.g. "path.to.field"). + +By default paths are from the root of the schema, but you can make the paths relative to any ancestor node with a schema `id` defined as well. This is especially useful within arrays. Here's an example: + +```json +{ + "type": "array", + "items": { + "type": "object", + "id": "arr_item", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "full_name": { + "type": "string", + "watch": { + "fname": "arr_item.first_name", + "lname": "arr_item.last_name" + } + } + } + } +} +``` + +Now, the `full_name` field in each array element will watch the `first_name` and `last_name` fields within the same array element. + +### Templates + +Watching fields by itself doesn't do anything. For the example above, you need to tell JSON Editor that `full_name` should be `fname [space] lname`. +JSON Editor uses a javascript template engine to accomplish this. A barebones template engine is included by default (simple `{{variable}}` replacement only), but many of the most popular template engines are also supported: + +* ejs +* handlebars +* hogan +* markup +* mustache +* swig +* underscore + +You can change the default by setting `JSONEditor.defaults.options.template` to one of the supported template engines: + +```javascript +JSONEditor.defaults.options.template = 'handlebars'; +``` + +You can set the template engine on a per-instance basis as well: + +```js +var editor = new JSONEditor(element,{ + schema: schema, + template: 'hogan' +}); +``` + +Here is the completed `full_name` example using the default barebones template engine: + +```js+jinja +{ + "type": "object", + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "full_name": { + "type": "string", + "template": "{{fname}} {{lname}}", + "watch": { + "fname": "first_name", + "lname": "last_name" + } + } + } +} +``` + +### Enum Values + +Another common dependency is a drop down menu whose possible values depend on other fields. Here's an example: + +```json +{ + "type": "object", + "properties": { + "possible_colors": { + "type": "array", + "items": { + "type": "string" + } + }, + "primary_color": { + "type": "string" + } + } +} +``` + +Let's say you want to force `primary_color` to be one of colors in the `possible_colors` array. First, we must tell the `primary_color` field to watch the `possible_colors` array. + +```json +{ + "primary_color": { + "type": "string", + "watch": { + "colors": "possible_colors" + } + } +} +``` + +Then, we use the special keyword `enumSource` to tell JSON Editor that we want to use this field to populate a drop down. + +```json +{ + "primary_color": { + "type": "string", + "watch": { + "colors": "possible_colors" + }, + "enumSource": "colors" + } +} +``` + +Now, anytime the `possible_colors` array changes, the dropdown's values will be changed as well. + +This is the most basic usage of `enumSource`. The more verbose form of this property supports +filtering, pulling from multiple sources, constant values, etc.. +Here's a more complex example (this uses the Swig template engine syntax to show some advanced features) + +```js+jinja +{ + // An array of sources + "enumSource": [ + // Constant values + ["none"], + { + // A watched field source + "source": "colors", + // Use a subset of the array + "slice": [2,5], + // Filter items with a template (if this renders to an empty string, it won't be included) + "filter": "{% if item !== 'black' %}1{% endif %}", + // Specify the display text for the enum option + "title": "{{item|upper}}", + // Specify the value property for the enum option + "value": "{{item|trim}}" + }, + // Another constant value at the end of the list + ["transparent"] + ] +} +``` + +You can also specify a list of static items with a slightly different syntax: + +```js+jinja +{ + "enumSource": [{ + // A watched field source + "source": [ + { + "value": 1, + "title": "One" + }, + { + "value": 2, + "title": "Two" + } + ], + "title": "{{item.title}}", + "value": "{{item.value}}" + }] + ] +} +``` + +The colors examples used an array of strings directly. Using the verbose form, you can +also make it work with an array of objects. Here's an example: + +```js+jinja +{ + "type": "object", + "properties": { + "possible_colors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": { + "type": "string" + } + } + } + }, + "primary_color": { + "type": "string", + "watch": { + "colors": "possible_colors" + }, + "enumSource": [{ + "source": "colors", + "value": "{{item.text}}" + }] + } + } +} +``` + +All of the optional templates in the verbose form have the properties `item` and `i` passed into them. `item` refers to the array element. `i` is the zero-based index. + +### Dynamic Headers + +The `title` keyword of a schema is used to add user friendly headers to the editing UI. Sometimes though, dynamic headers, which change based on other fields, are helpful. + +Consider the example of an array of children. Without dynamic headers, the UI for the array elements would show `Child 1`, `Child 2`, etc.. +It would be much nicer if the headers could be dynamic and incorporate information about the children, such as `1 - John (age 9)`, `2 - Sarah (age 11)`. + +To accomplish this, use the `headerTemplate` property. All of the watched variables are passed into this template, along with the static title `title` (e.g. "Child"), the 0-based index `i0` (e.g. "0" and "1"), the 1-based index `i1`, and the field's value `self` (e.g. `{"name": "John", "age": 9}`). + +```js+jinja +{ + "type": "array", + "title": "Children", + "items": { + "type": "object", + "title": "Child", + "headerTemplate": "{{ i1 }} - {{ self.name }} (age {{ self.age }})", + "properties": { + "name": { "type": "string" }, + "age": { "type": "integer" } + } + } +} +``` + +### Custom Template Engines + +If one of the included template engines isn't sufficient, +you can use any custom template engine with a `compile` method. For example: + +```js +var myengine = { + compile: function(template) { + // Compile should return a render function + return function(vars) { + // A real template engine would render the template here + var result = template; + return result; + } + } +}; + +// Set globally +JSONEditor.defaults.options.template = myengine; + +// Set on a per-instance basis +var editor = new JSONEditor(element,{ + schema: schema, + template: myengine +}); +``` + +Language and String Customization +----------------- + +JSON Editor uses a translate function to generate strings in the UI. A default `en` language mapping is provided. + +You can easily override individual translations in the default language or create your own language mapping entirely. + +```js+jinja +// Override a specific translation +JSONEditor.defaults.languages.en.error_minLength = + "This better be at least {{0}} characters long or else!"; + + +// Create your own language mapping +// Any keys not defined here will fall back to the "en" language +JSONEditor.defaults.languages.es = { + error_notset: "propiedad debe existir" +}; +``` + +By default, all instances of JSON Editor will use the `en` language. To override this default, set the `JSONEditor.defaults.language` property. + +```js +JSONEditor.defaults.language = "es"; +``` + +Custom Editor Interfaces +----------------- + +JSON Editor contains editor interfaces for each of the primitive JSON types as well as a few other specialized ones. + +You can add custom editors interfaces fairly easily. Look at any of the existing ones for an example. + +JSON Editor uses resolver functions to determine which editor interface to use for a particular schema or subschema. + +Let's say you make a custom `location` editor for editing geo data. You can add a resolver function to use this custom editor when appropriate. For example: + +```js +// Add a resolver function to the beginning of the resolver list +// This will make it run before any other ones +JSONEditor.defaults.resolvers.unshift(function(schema) { + if(schema.type === "object" && schema.format === "location") { + return "location"; + } + + // If no valid editor is returned, the next resolver function will be used +}); +``` + +The following schema will now use this custom editor for each of the array elements instead of the default `object` editor. + +```json +{ + "type": "array", + "items": { + "type": "object", + "format": "location", + "properties": { + "longitude": { + "type": "number" + }, + "latitude": { + "type": "number" + } + } + } +} +``` + +If you create a custom editor interface that you think could be helpful to others, submit a pull request! + +The possibilities are endless. Some ideas: + +* A compact way to edit objects +* Radio button version of the `select` editor +* Autosuggest for strings (like enum, but not restricted to those values) +* Better editor for arrays of strings (tag editor) +* Canvas based image editor that produces Base64 data URLs + +Select2 & Selectize Support +---------------- +Select2 support is enabled by default and will become active if the Select2 library is detected. + +Selectize support is enabled via the following snippet: +```js +JSONEditor.plugins.selectize.enable = true; +``` +See the demo for an example of the `array` and `select` editor with Selectize support enabled. + +Custom Validation +---------------- + +JSON Editor provides a hook into the validation engine for adding your own custom validation. + +Let's say you want to force all schemas with `format` set to `date` to match the pattern `YYYY-MM-DD`. + +```js +// Custom validators must return an array of errors or an empty array if valid +JSONEditor.defaults.custom_validators.push(function(schema, value, path) { + var errors = []; + if(schema.format==="date") { + if(!/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value)) { + // Errors must be an object with `path`, `property`, and `message` + errors.push({ + path: path, + property: 'format', + message: 'Dates must be in the format "YYYY-MM-DD"' + }); + } + } + return errors; +}); +``` + +jQuery Integration +------------------- + +__*WARNING__: This style of usage is deprecated and may not be supported in future versions. + +When jQuery (or Zepto) is loaded on the page, you can use JSON Editor like a normal jQuery plugin if you prefer. + +```js +$("#editor_holder") + .jsoneditor({ + schema: {}, + theme: 'bootstrap3' + }) + .on('ready', function() { + // Get the value + var value = $(this).jsoneditor('value'); + + value.name = "John Smith"; + + // Set the value + $(this).jsoneditor('value',value); + }); +``` diff --git a/libs/json-editor/bower.json b/libs/json-editor/bower.json new file mode 100644 index 0000000..8c67e94 --- /dev/null +++ b/libs/json-editor/bower.json @@ -0,0 +1,26 @@ +{ + "name": "json-editor", + "authors": [ + "Jeremy Dorn " + ], + "description": "JSON Schema based editor", + "main": "dist/jsoneditor.js", + "keywords": [ + "json", + "schema", + "jsonschema", + "editor" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "*.md", + "tests", + "examples", + "demo.html", + "*.png", + "package.json", + "Gruntfile.js", + "src" + ] +} diff --git a/libs/json-editor/demo.html b/libs/json-editor/demo.html new file mode 100644 index 0000000..55c172b --- /dev/null +++ b/libs/json-editor/demo.html @@ -0,0 +1,437 @@ + + + + + JSON Editor Example + + + + + + + + + + + +
+
+
+

Editor

+

Below is the editor generated from the JSON Schema.

+ +
+
+
+
+ Direct Link (preserves schema, value, and options) +
+ +

JSON Output

+

You can also make changes to the JSON here and set the value in the editor by clicking

+ + +

Options

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +

Validation

+

This will update whenever the form changes to show validation errors if there are any.

+ +
+
+
+

Schema

+

You can change the schema and see how the generated form looks. After you make changes, click

+ + +
+
+
+
+

Code

+
// Set default options
+JSONEditor.defaults.options.theme = 'bootstrap2';
+
+// Initialize the editor
+var editor = new JSONEditor(document.getElementById("editor_holder"),{
+  schema: {
+      type: "object",
+      properties: {
+          name: { "type": "string" }
+      }
+  }
+});
+
+// Set the value
+editor.setValue({
+    name: "John Smith"
+});
+
+// Get the value
+var data = editor.getValue();
+console.log(data.name); // "John Smith"
+
+// Validate
+var errors = editor.validate();
+if(errors.length) {
+  // Not valid
+}
+
+// Listen for changes
+editor.on("change",  function() {
+  // Do something...
+});
+
+
+
+
+ + + diff --git a/libs/json-editor/dist/jsoneditor.js b/libs/json-editor/dist/jsoneditor.js new file mode 100644 index 0000000..d65540c --- /dev/null +++ b/libs/json-editor/dist/jsoneditor.js @@ -0,0 +1,8048 @@ +/*! JSON Editor v0.7.28 - JSON Schema -> HTML Editor + * By Jeremy Dorn - https://github.com/jdorn/json-editor/ + * Released under the MIT license + * + * Date: 2016-08-07 + */ + +/** + * See README.md for requirements and usage info + */ + +(function() { + +/*jshint loopfunc: true */ +/* Simple JavaScript Inheritance + * By John Resig http://ejohn.org/ + * MIT Licensed. + */ +// Inspired by base2 and Prototype +var Class; +(function(){ + var initializing = false, fnTest = /xyz/.test(function(){window.postMessage("xyz");}) ? /\b_super\b/ : /.*/; + + // The base Class implementation (does nothing) + Class = function(){}; + + // Create a new Class that inherits from this class + Class.extend = function extend(prop) { + var _super = this.prototype; + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + var prototype = new this(); + initializing = false; + + // Copy the properties over onto the new prototype + for (var name in prop) { + // Check if we're overwriting an existing function + prototype[name] = typeof prop[name] == "function" && + typeof _super[name] == "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { + var tmp = this._super; + + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; + + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; + + return ret; + }; + })(name, prop[name]) : + prop[name]; + } + + // The dummy class constructor + function Class() { + // All construction is actually done in the init method + if ( !initializing && this.init ) + this.init.apply(this, arguments); + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.prototype.constructor = Class; + + // And make this class extendable + Class.extend = extend; + + return Class; + }; + + return Class; +})(); + +// CustomEvent constructor polyfill +// From MDN +(function () { + function CustomEvent ( event, params ) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent( 'CustomEvent' ); + evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); + return evt; + } + + CustomEvent.prototype = window.Event.prototype; + + window.CustomEvent = CustomEvent; +})(); + +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel +// MIT license +(function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || + window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; +}()); + +// Array.isArray polyfill +// From MDN +(function() { + if(!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + } +}()); +/** + * Taken from jQuery 2.1.3 + * + * @param obj + * @returns {boolean} + */ +var $isplainobject = function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if (typeof obj !== "object" || obj.nodeType || (obj !== null && obj === obj.window)) { + return false; + } + + if (obj.constructor && !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; +}; + +var $extend = function(destination) { + var source, i,property; + for(i=1; i 0 && (obj.length - 1) in obj)) { + for(i=0; i= waiting && !callback_fired) { + callback_fired = true; + callback(); + } + }); + } + // Request failed + else { + window.console.log(r); + throw "Failed to fetch ref via ajax- "+url; + } + }; + r.send(); + }); + + if(!waiting) { + callback(); + } + }, + expandRefs: function(schema) { + schema = $extend({},schema); + + while (schema.$ref) { + var ref = schema.$ref; + delete schema.$ref; + + if(!this.refs[ref]) ref = decodeURIComponent(ref); + + schema = this.extendSchemas(schema,this.refs[ref]); + } + return schema; + }, + expandSchema: function(schema) { + var self = this; + var extended = $extend({},schema); + var i; + + // Version 3 `type` + if(typeof schema.type === 'object') { + // Array of types + if(Array.isArray(schema.type)) { + $each(schema.type, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.type[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.type = self.expandSchema(schema.type); + } + } + // Version 3 `disallow` + if(typeof schema.disallow === 'object') { + // Array of types + if(Array.isArray(schema.disallow)) { + $each(schema.disallow, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.disallow[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.disallow = self.expandSchema(schema.disallow); + } + } + // Version 4 `anyOf` + if(schema.anyOf) { + $each(schema.anyOf, function(key,value) { + schema.anyOf[key] = self.expandSchema(value); + }); + } + // Version 4 `dependencies` (schema dependencies) + if(schema.dependencies) { + $each(schema.dependencies,function(key,value) { + if(typeof value === "object" && !(Array.isArray(value))) { + schema.dependencies[key] = self.expandSchema(value); + } + }); + } + // Version 4 `not` + if(schema.not) { + schema.not = this.expandSchema(schema.not); + } + + // allOf schemas should be merged into the parent + if(schema.allOf) { + for(i=0; i schema.minimum) : (value >= schema.minimum); + + // Use math.js is available + if(window.math) { + valid = window.math[schema.exclusiveMinimum?'larger':'largerEq']( + window.math.bignumber(value), + window.math.bignumber(schema.minimum) + ); + } + // Use Decimal.js if available + else if(window.Decimal) { + valid = (new window.Decimal(value))[schema.exclusiveMinimum?'gt':'gte'](new window.Decimal(schema.minimum)); + } + + if(!valid) { + errors.push({ + path: path, + property: 'minimum', + message: this.translate( + (schema.exclusiveMinimum?'error_minimum_excl':'error_minimum_incl'), + [schema.minimum] + ) + }); + } + } + } + // String specific validation + else if(typeof value === "string") { + // `maxLength` + if(schema.maxLength) { + if((value+"").length > schema.maxLength) { + errors.push({ + path: path, + property: 'maxLength', + message: this.translate('error_maxLength', [schema.maxLength]) + }); + } + } + + // `minLength` + if(schema.minLength) { + if((value+"").length < schema.minLength) { + errors.push({ + path: path, + property: 'minLength', + message: this.translate((schema.minLength===1?'error_notempty':'error_minLength'), [schema.minLength]) + }); + } + } + + // `pattern` + if(schema.pattern) { + if(!(new RegExp(schema.pattern)).test(value)) { + errors.push({ + path: path, + property: 'pattern', + message: this.translate('error_pattern', [schema.pattern]) + }); + } + } + } + // Array specific validation + else if(typeof value === "object" && value !== null && Array.isArray(value)) { + // `items` and `additionalItems` + if(schema.items) { + // `items` is an array + if(Array.isArray(schema.items)) { + for(i=0; i schema.maxItems) { + errors.push({ + path: path, + property: 'maxItems', + message: this.translate('error_maxItems', [schema.maxItems]) + }); + } + } + + // `minItems` + if(schema.minItems) { + if(value.length < schema.minItems) { + errors.push({ + path: path, + property: 'minItems', + message: this.translate('error_minItems', [schema.minItems]) + }); + } + } + + // `uniqueItems` + if(schema.uniqueItems) { + var seen = {}; + for(i=0; i schema.maxProperties) { + errors.push({ + path: path, + property: 'maxProperties', + message: this.translate('error_maxProperties', [schema.maxProperties]) + }); + } + } + + // `minProperties` + if(schema.minProperties) { + valid = 0; + for(i in value) { + if(!value.hasOwnProperty(i)) continue; + valid++; + } + if(valid < schema.minProperties) { + errors.push({ + path: path, + property: 'minProperties', + message: this.translate('error_minProperties', [schema.minProperties]) + }); + } + } + + // Version 4 `required` + if(schema.required && Array.isArray(schema.required)) { + for(i=0; i=0) { + holder = this.theme.getBlockLinkHolder(); + + link = this.theme.getBlockLink(); + link.setAttribute('target','_blank'); + + var media = document.createElement(type); + media.setAttribute('controls','controls'); + + this.theme.createMediaLink(holder,link,media); + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + link.setAttribute('href',url); + link.textContent = data.rel || url; + media.setAttribute('src',url); + }); + } + // Text links + else { + link = holder = this.theme.getBlockLink(); + holder.setAttribute('target','_blank'); + holder.textContent = data.rel; + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + holder.setAttribute('href',url); + holder.textContent = data.rel || url; + }); + } + + if(download && link) { + if(download === true) { + link.setAttribute('download',''); + } + else { + this.link_watchers.push(function(vars) { + link.setAttribute('download',download(vars)); + }); + } + } + + if(data.class) link.className = link.className + ' ' + data.class; + + return holder; + }, + refreshWatchedFieldValues: function() { + if(!this.watched_values) return; + var watched = {}; + var changed = false; + var self = this; + + if(this.watched) { + var val,editor; + for(var name in this.watched) { + if(!this.watched.hasOwnProperty(name)) continue; + editor = self.jsoneditor.getEditor(this.watched[name]); + val = editor? editor.getValue() : null; + if(self.watched_values[name] !== val) changed = true; + watched[name] = val; + } + } + + watched.self = this.getValue(); + if(this.watched_values.self !== watched.self) changed = true; + + this.watched_values = watched; + + return changed; + }, + getWatchedFieldValues: function() { + return this.watched_values; + }, + updateHeaderText: function() { + if(this.header) { + // If the header has children, only update the text node's value + if(this.header.children.length) { + for(var i=0; i -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + getDisplayText: function(arr) { + var disp = []; + var used = {}; + + // Determine how many times each attribute name is used. + // This helps us pick the most distinct display text for the schemas. + $each(arr,function(i,el) { + if(el.title) { + used[el.title] = used[el.title] || 0; + used[el.title]++; + } + if(el.description) { + used[el.description] = used[el.description] || 0; + used[el.description]++; + } + if(el.format) { + used[el.format] = used[el.format] || 0; + used[el.format]++; + } + if(el.type) { + used[el.type] = used[el.type] || 0; + used[el.type]++; + } + }); + + // Determine display text for each element of the array + $each(arr,function(i,el) { + var name; + + // If it's a simple string + if(typeof el === "string") name = el; + // Object + else if(el.title && used[el.title]<=1) name = el.title; + else if(el.format && used[el.format]<=1) name = el.format; + else if(el.type && used[el.type]<=1) name = el.type; + else if(el.description && used[el.description]<=1) name = el.descripton; + else if(el.title) name = el.title; + else if(el.format) name = el.format; + else if(el.type) name = el.type; + else if(el.description) name = el.description; + else if(JSON.stringify(el).length < 50) name = JSON.stringify(el); + else name = "type"; + + disp.push(name); + }); + + // Replace identical display text with "text 1", "text 2", etc. + var inc = {}; + $each(disp,function(i,name) { + inc[name] = inc[name] || 0; + inc[name]++; + + if(used[name] > 1) disp[i] = name + " " + inc[name]; + }); + + return disp; + }, + getOption: function(key) { + try { + throw "getOption is deprecated"; + } + catch(e) { + window.console.error(e); + } + + return this.options[key]; + }, + showValidationErrors: function(errors) { + + } +}); + +JSONEditor.defaults.editors["null"] = JSONEditor.AbstractEditor.extend({ + getValue: function() { + return null; + }, + setValue: function() { + this.onChange(); + }, + getNumColumns: function() { + return 2; + } +}); + +JSONEditor.defaults.editors.string = JSONEditor.AbstractEditor.extend({ + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + setValue: function(value,initial,from_template) { + var self = this; + + if(this.template && !from_template) { + return; + } + + if(value === null || typeof value === 'undefined') value = ""; + else if(typeof value === "object") value = JSON.stringify(value); + else if(typeof value !== "string") value = ""+value; + + if(value === this.serialized) return; + + // Sanitize value before setting it + var sanitized = this.sanitize(value); + + if(this.input.value === sanitized) { + return; + } + + this.input.value = sanitized; + + // If using SCEditor, update the WYSIWYG + if(this.sceditor_instance) { + this.sceditor_instance.val(sanitized); + } + else if(this.epiceditor) { + this.epiceditor.importFile(null,sanitized); + } + else if(this.ace_editor) { + this.ace_editor.setValue(sanitized); + } + + var changed = from_template || this.getValue() !== value; + + this.refreshValue(); + + if(initial) this.is_dirty = false; + else if(this.jsoneditor.options.show_errors === "change") this.is_dirty = true; + + if(this.adjust_height) this.adjust_height(this.input); + + // Bubble this setValue to parents if the value changed + this.onChange(changed); + }, + getNumColumns: function() { + var min = Math.ceil(Math.max(this.getTitle().length,this.schema.maxLength||0,this.schema.minLength||0)/5); + var num; + + if(this.input_type === 'textarea') num = 6; + else if(['text','email'].indexOf(this.input_type) >= 0) num = 4; + else num = 2; + + return Math.min(12,Math.max(min,num)); + }, + build: function() { + var self = this, i; + if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + + this.format = this.schema.format; + if(!this.format && this.schema.media && this.schema.media.type) { + this.format = this.schema.media.type.replace(/(^(application|text)\/(x-)?(script\.)?)|(-source$)/g,''); + } + if(!this.format && this.options.default_format) { + this.format = this.options.default_format; + } + if(this.options.format) { + this.format = this.options.format; + } + + // Specific format + if(this.format) { + // Text Area + if(this.format === 'textarea') { + this.input_type = 'textarea'; + this.input = this.theme.getTextareaInput(); + } + // Range Input + else if(this.format === 'range') { + this.input_type = 'range'; + var min = this.schema.minimum || 0; + var max = this.schema.maximum || Math.max(100,min+1); + var step = 1; + if(this.schema.multipleOf) { + if(min%this.schema.multipleOf) min = Math.ceil(min/this.schema.multipleOf)*this.schema.multipleOf; + if(max%this.schema.multipleOf) max = Math.floor(max/this.schema.multipleOf)*this.schema.multipleOf; + step = this.schema.multipleOf; + } + + this.input = this.theme.getRangeInput(min,max,step); + } + // Source Code + else if([ + 'actionscript', + 'batchfile', + 'bbcode', + 'c', + 'c++', + 'cpp', + 'coffee', + 'csharp', + 'css', + 'dart', + 'django', + 'ejs', + 'erlang', + 'golang', + 'groovy', + 'handlebars', + 'haskell', + 'haxe', + 'html', + 'ini', + 'jade', + 'java', + 'javascript', + 'json', + 'less', + 'lisp', + 'lua', + 'makefile', + 'markdown', + 'matlab', + 'mysql', + 'objectivec', + 'pascal', + 'perl', + 'pgsql', + 'php', + 'python', + 'r', + 'ruby', + 'sass', + 'scala', + 'scss', + 'smarty', + 'sql', + 'stylus', + 'svg', + 'twig', + 'vbscript', + 'xml', + 'yaml' + ].indexOf(this.format) >= 0 + ) { + this.input_type = this.format; + this.source_code = true; + + this.input = this.theme.getTextareaInput(); + } + // HTML5 Input type + else { + this.input_type = this.format; + this.input = this.theme.getFormInputField(this.input_type); + } + } + // Normal text input + else { + this.input_type = 'text'; + this.input = this.theme.getFormInputField(this.input_type); + } + + // minLength, maxLength, and pattern + if(typeof this.schema.maxLength !== "undefined") this.input.setAttribute('maxlength',this.schema.maxLength); + if(typeof this.schema.pattern !== "undefined") this.input.setAttribute('pattern',this.schema.pattern); + else if(typeof this.schema.minLength !== "undefined") this.input.setAttribute('pattern','.{'+this.schema.minLength+',}'); + + if(this.options.compact) { + this.container.className += ' compact'; + } + else { + if(this.options.input_width) this.input.style.width = this.options.input_width; + } + + if(this.schema.readOnly || this.schema.readonly || this.schema.template) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input + .addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + // Don't allow changing if this field is a template + if(self.schema.template) { + this.value = self.value; + return; + } + + var val = this.value; + + // sanitize value + var sanitized = self.sanitize(val); + if(val !== sanitized) { + this.value = sanitized; + } + + self.is_dirty = true; + + self.refreshValue(); + self.onChange(true); + }); + + if(this.options.input_height) this.input.style.height = this.options.input_height; + if(this.options.expand_height) { + this.adjust_height = function(el) { + if(!el) return; + var i, ch=el.offsetHeight; + // Input too short + if(el.offsetHeight < el.scrollHeight) { + i=0; + while(el.offsetHeight < el.scrollHeight+3) { + if(i>100) break; + i++; + ch++; + el.style.height = ch+'px'; + } + } + else { + i=0; + while(el.offsetHeight >= el.scrollHeight+3) { + if(i>100) break; + i++; + ch--; + el.style.height = ch+'px'; + } + el.style.height = (ch+1)+'px'; + } + }; + + this.input.addEventListener('keyup',function(e) { + self.adjust_height(this); + }); + this.input.addEventListener('change',function(e) { + self.adjust_height(this); + }); + this.adjust_height(); + } + + if(this.format) this.input.setAttribute('data-schemaformat',this.format); + + this.control = this.theme.getFormControl(this.label, this.input, this.description); + this.container.appendChild(this.control); + + // Any special formatting that needs to happen after the input is added to the dom + window.requestAnimationFrame(function() { + // Skip in case the input is only a temporary editor, + // otherwise, in the case of an ace_editor creation, + // it will generate an error trying to append it to the missing parentNode + if(self.input.parentNode) self.afterInputReady(); + if(self.adjust_height) self.adjust_height(self.input); + }); + + // Compile and store the template + if(this.schema.template) { + this.template = this.jsoneditor.compileTemplate(this.schema.template, this.template_engine); + this.refreshValue(); + } + else { + this.refreshValue(); + } + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + // TODO: WYSIWYG and Markdown editors + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + // TODO: WYSIWYG and Markdown editors + this._super(); + }, + afterInputReady: function() { + var self = this, options; + + // Code editor + if(this.source_code) { + // WYSIWYG html and bbcode editor + if(this.options.wysiwyg && + ['html','bbcode'].indexOf(this.input_type) >= 0 && + window.jQuery && window.jQuery.fn && window.jQuery.fn.sceditor + ) { + options = $extend({},{ + plugins: self.input_type==='html'? 'xhtml' : 'bbcode', + emoticonsEnabled: false, + width: '100%', + height: 300 + },JSONEditor.plugins.sceditor,self.options.sceditor_options||{}); + + window.jQuery(self.input).sceditor(options); + + self.sceditor_instance = window.jQuery(self.input).sceditor('instance'); + + self.sceditor_instance.blur(function() { + // Get editor's value + var val = window.jQuery("
"+self.sceditor_instance.val()+"
"); + // Remove sceditor spans/divs + window.jQuery('#sceditor-start-marker,#sceditor-end-marker,.sceditor-nlf',val).remove(); + // Set the value and update + self.input.value = val.html(); + self.value = self.input.value; + self.is_dirty = true; + self.onChange(true); + }); + } + // EpicEditor for markdown (if it's loaded) + else if (this.input_type === 'markdown' && window.EpicEditor) { + this.epiceditor_container = document.createElement('div'); + this.input.parentNode.insertBefore(this.epiceditor_container,this.input); + this.input.style.display = 'none'; + + options = $extend({},JSONEditor.plugins.epiceditor,{ + container: this.epiceditor_container, + clientSideStorage: false + }); + + this.epiceditor = new window.EpicEditor(options).load(); + + this.epiceditor.importFile(null,this.getValue()); + + this.epiceditor.on('update',function() { + var val = self.epiceditor.exportFile(); + self.input.value = val; + self.value = val; + self.is_dirty = true; + self.onChange(true); + }); + } + // ACE editor for everything else + else if(window.ace) { + var mode = this.input_type; + // aliases for c/cpp + if(mode === 'cpp' || mode === 'c++' || mode === 'c') { + mode = 'c_cpp'; + } + + this.ace_container = document.createElement('div'); + this.ace_container.style.width = '100%'; + this.ace_container.style.position = 'relative'; + this.ace_container.style.height = '400px'; + this.input.parentNode.insertBefore(this.ace_container,this.input); + this.input.style.display = 'none'; + this.ace_editor = window.ace.edit(this.ace_container); + + this.ace_editor.setValue(this.getValue()); + + // The theme + if(JSONEditor.plugins.ace.theme) this.ace_editor.setTheme('ace/theme/'+JSONEditor.plugins.ace.theme); + // The mode + mode = window.ace.require("ace/mode/"+mode); + if(mode) this.ace_editor.getSession().setMode(new mode.Mode()); + + // Listen for changes + this.ace_editor.on('change',function() { + var val = self.ace_editor.getValue(); + self.input.value = val; + self.refreshValue(); + self.is_dirty = true; + self.onChange(true); + }); + } + } + + self.theme.afterInputReady(self.input); + }, + refreshValue: function() { + this.value = this.input.value; + if(typeof this.value !== "string") this.value = ''; + this.serialized = this.value; + }, + destroy: function() { + // If using SCEditor, destroy the editor instance + if(this.sceditor_instance) { + this.sceditor_instance.destroy(); + } + else if(this.epiceditor) { + this.epiceditor.unload(); + } + else if(this.ace_editor) { + this.ace_editor.destroy(); + } + + + this.template = null; + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + + this._super(); + }, + /** + * This is overridden in derivative editors + */ + sanitize: function(value) { + return value; + }, + /** + * Re-calculates the value if needed + */ + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor needs to be rendered by a macro template + if(this.template) { + vars = this.getWatchedFieldValues(); + this.setValue(this.template(vars),false,true); + } + + this._super(); + }, + showValidationErrors: function(errors) { + var self = this; + + if(this.jsoneditor.options.show_errors === "always") {} + else if(!this.is_dirty && this.previous_error_setting===this.jsoneditor.options.show_errors) return; + + this.previous_error_setting = this.jsoneditor.options.show_errors; + + var messages = []; + $each(errors,function(i,error) { + if(error.path === self.path) { + messages.push(error.message); + } + }); + + if(messages.length) { + this.theme.addInputError(this.input, messages.join('. ')+'.'); + } + else { + this.theme.removeInputError(this.input); + } + } +}); + +JSONEditor.defaults.editors.number = JSONEditor.defaults.editors.string.extend({ + sanitize: function(value) { + return (value+"").replace(/[^0-9\.\-eE]/g,''); + }, + getNumColumns: function() { + return 2; + }, + getValue: function() { + return this.value*1; + } +}); + +JSONEditor.defaults.editors.integer = JSONEditor.defaults.editors.number.extend({ + sanitize: function(value) { + value = value + ""; + return value.replace(/[^0-9\-]/g,''); + }, + getNumColumns: function() { + return 2; + } +}); + +JSONEditor.defaults.editors.object = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return $extend({},this.schema["default"] || {}); + }, + getChildEditors: function() { + return this.editors; + }, + register: function() { + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].register(); + } + } + }, + unregister: function() { + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].unregister(); + } + } + }, + getNumColumns: function() { + return Math.max(Math.min(12,this.maxwidth),3); + }, + enable: function() { + if(this.editjson_button) this.editjson_button.disabled = false; + if(this.addproperty_button) this.addproperty_button.disabled = false; + + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].enable(); + } + } + }, + disable: function() { + if(this.editjson_button) this.editjson_button.disabled = true; + if(this.addproperty_button) this.addproperty_button.disabled = true; + this.hideEditJSON(); + + this._super(); + if(this.editors) { + for(var i in this.editors) { + if(!this.editors.hasOwnProperty(i)) continue; + this.editors[i].disable(); + } + } + }, + layoutEditors: function() { + var self = this, i, j; + + if(!this.row_container) return; + + // Sort editors by propertyOrder + this.property_order = Object.keys(this.editors); + this.property_order = this.property_order.sort(function(a,b) { + var ordera = self.editors[a].schema.propertyOrder; + var orderb = self.editors[b].schema.propertyOrder; + if(typeof ordera !== "number") ordera = 1000; + if(typeof orderb !== "number") orderb = 1000; + + return ordera - orderb; + }); + + var container; + + if(this.format === 'grid') { + var rows = []; + $each(this.property_order, function(j,key) { + var editor = self.editors[key]; + if(editor.property_removed) return; + var found = false; + var width = editor.options.hidden? 0 : (editor.options.grid_columns || editor.getNumColumns()); + var height = editor.options.hidden? 0 : editor.container.offsetHeight; + // See if the editor will fit in any of the existing rows first + for(var i=0; i height)) { + found = i; + } + } + } + + // If there isn't a spot in any of the existing rows, start a new row + if(found === false) { + rows.push({ + width: 0, + minh: 999999, + maxh: 0, + editors: [] + }); + found = rows.length-1; + } + + rows[found].editors.push({ + key: key, + //editor: editor, + width: width, + height: height + }); + rows[found].width += width; + rows[found].minh = Math.min(rows[found].minh,height); + rows[found].maxh = Math.max(rows[found].maxh,height); + }); + + // Make almost full rows width 12 + // Do this by increasing all editors' sizes proprotionately + // Any left over space goes to the biggest editor + // Don't touch rows with a width of 6 or less + for(i=0; i rows[i].editors[biggest].width) biggest = j; + rows[i].editors[j].width *= 12/rows[i].width; + rows[i].editors[j].width = Math.floor(rows[i].editors[j].width); + new_width += rows[i].editors[j].width; + } + if(new_width < 12) rows[i].editors[biggest].width += 12-new_width; + rows[i].width = 12; + } + } + + // layout hasn't changed + if(this.layout === JSON.stringify(rows)) return false; + this.layout = JSON.stringify(rows); + + // Layout the form + container = document.createElement('div'); + for(i=0; i= this.schema.maxProperties); + + if(this.addproperty_checkboxes) { + this.addproperty_list.innerHTML = ''; + } + this.addproperty_checkboxes = {}; + + // Check for which editors can't be removed or added back + for(i in this.cached_editors) { + if(!this.cached_editors.hasOwnProperty(i)) continue; + + this.addPropertyCheckbox(i); + + if(this.isRequired(this.cached_editors[i]) && i in this.editors) { + this.addproperty_checkboxes[i].disabled = true; + } + + if(typeof this.schema.minProperties !== "undefined" && num_props <= this.schema.minProperties) { + this.addproperty_checkboxes[i].disabled = this.addproperty_checkboxes[i].checked; + if(!this.addproperty_checkboxes[i].checked) show_modal = true; + } + else if(!(i in this.editors)) { + if(!can_add && !this.schema.properties.hasOwnProperty(i)) { + this.addproperty_checkboxes[i].disabled = true; + } + else { + this.addproperty_checkboxes[i].disabled = false; + show_modal = true; + } + } + else { + show_modal = true; + can_remove = true; + } + } + + if(this.canHaveAdditionalProperties()) { + show_modal = true; + } + + // Additional addproperty checkboxes not tied to a current editor + for(i in this.schema.properties) { + if(!this.schema.properties.hasOwnProperty(i)) continue; + if(this.cached_editors[i]) continue; + show_modal = true; + this.addPropertyCheckbox(i); + } + + // If no editors can be added or removed, hide the modal button + if(!show_modal) { + this.hideAddProperty(); + this.addproperty_controls.style.display = 'none'; + } + // If additional properties are disabled + else if(!this.canHaveAdditionalProperties()) { + this.addproperty_add.style.display = 'none'; + this.addproperty_input.style.display = 'none'; + } + // If no new properties can be added + else if(!can_add) { + this.addproperty_add.disabled = true; + } + // If new properties can be added + else { + this.addproperty_add.disabled = false; + } + }, + isRequired: function(editor) { + if(typeof editor.schema.required === "boolean") return editor.schema.required; + else if(Array.isArray(this.schema.required)) return this.schema.required.indexOf(editor.key) > -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + setValue: function(value, initial) { + var self = this; + value = value || {}; + + if(typeof value !== "object" || Array.isArray(value)) value = {}; + + // First, set the values for all of the defined properties + $each(this.cached_editors, function(i,editor) { + // Value explicitly set + if(typeof value[i] !== "undefined") { + self.addObjectProperty(i); + editor.setValue(value[i],initial); + } + // Otherwise, remove value unless this is the initial set or it's required + else if(!initial && !self.isRequired(editor)) { + self.removeObjectProperty(i); + } + // Otherwise, set the value to the default + else { + editor.setValue(editor.getDefault(),initial); + } + }); + + $each(value, function(i,val) { + if(!self.cached_editors[i]) { + self.addObjectProperty(i); + if(self.editors[i]) self.editors[i].setValue(val,initial); + } + }); + + this.refreshValue(); + this.layoutEditors(); + this.onChange(); + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show error for the table row if this is inside a table + if(this.options.table_row) { + if(my_errors.length) { + this.theme.addTableRowError(this.container); + } + else { + this.theme.removeTableRowError(this.container); + } + } + + // Show errors for child editors + $each(this.editors, function(i,editor) { + editor.showValidationErrors(other_errors); + }); + } +}); + +JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return this.schema["default"] || []; + }, + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i= this.schema.items.length) { + if(this.schema.additionalItems===true) { + return {}; + } + else if(this.schema.additionalItems) { + return $extend({},this.schema.additionalItems); + } + } + else { + return $extend({},this.schema.items[i]); + } + } + else if(this.schema.items) { + return $extend({},this.schema.items); + } + else { + return {}; + } + }, + getItemInfo: function(i) { + var schema = this.getItemSchema(i); + + // Check if it's cached + this.item_info = this.item_info || {}; + var stringified = JSON.stringify(schema); + if(typeof this.item_info[stringified] !== "undefined") return this.item_info[stringified]; + + // Get the schema for this item + schema = this.jsoneditor.expandRefs(schema); + + this.item_info[stringified] = { + title: schema.title || "item", + 'default': schema["default"], + width: 12, + child_editors: schema.properties || schema.items + }; + + return this.item_info[stringified]; + }, + getElementEditor: function(i) { + var item_info = this.getItemInfo(i); + var schema = this.getItemSchema(i); + schema = this.jsoneditor.expandRefs(schema); + schema.title = item_info.title+' '+(i+1); + + var editor = this.jsoneditor.getEditorClass(schema); + + var holder; + if(this.tabs_holder) { + holder = this.theme.getTabContent(); + } + else if(item_info.child_editors) { + holder = this.theme.getChildEditorHolder(); + } + else { + holder = this.theme.getIndentedPanel(); + } + + this.row_holder.appendChild(holder); + + var ret = this.jsoneditor.createEditor(editor,{ + jsoneditor: this.jsoneditor, + schema: schema, + container: holder, + path: this.path+'.'+i, + parent: this, + required: true + }); + ret.preBuild(); + ret.build(); + ret.postBuild(); + + if(!ret.title_controls) { + ret.array_controls = this.theme.getButtonHolder(); + holder.appendChild(ret.array_controls); + } + + return ret; + }, + destroy: function() { + this.empty(true); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.row_holder && this.row_holder.parentNode) this.row_holder.parentNode.removeChild(this.row_holder); + if(this.controls && this.controls.parentNode) this.controls.parentNode.removeChild(this.controls); + if(this.panel && this.panel.parentNode) this.panel.parentNode.removeChild(this.panel); + + this.rows = this.row_cache = this.title = this.description = this.row_holder = this.panel = this.controls = null; + + this._super(); + }, + empty: function(hard) { + if(!this.rows) return; + var self = this; + $each(this.rows,function(i,row) { + if(hard) { + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + self.destroyRow(row,true); + self.row_cache[i] = null; + } + self.rows[i] = null; + }); + self.rows = []; + if(hard) self.row_cache = []; + }, + destroyRow: function(row,hard) { + var holder = row.container; + if(hard) { + row.destroy(); + if(holder.parentNode) holder.parentNode.removeChild(holder); + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + } + else { + if(row.tab) row.tab.style.display = 'none'; + holder.style.display = 'none'; + row.unregister(); + } + }, + getMax: function() { + if((Array.isArray(this.schema.items)) && this.schema.additionalItems === false) { + return Math.min(this.schema.items.length,this.schema.maxItems || Infinity); + } + else { + return this.schema.maxItems || Infinity; + } + }, + refreshTabs: function(refresh_headers) { + var self = this; + $each(this.rows, function(i,row) { + if(!row.tab) return; + + if(refresh_headers) { + row.tab_text.textContent = row.getHeaderText(); + } + else { + if(row.tab === self.active_tab) { + self.theme.markTabActive(row.tab); + row.container.style.display = ''; + } + else { + self.theme.markTabInactive(row.tab); + row.container.style.display = 'none'; + } + } + }); + }, + setValue: function(value, initial) { + // Update the array's value, adding/removing rows when necessary + value = value || []; + + if(!(Array.isArray(value))) value = [value]; + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + // Make sure value has between minItems and maxItems items in it + if(this.schema.minItems) { + while(value.length < this.schema.minItems) { + value.push(this.getItemInfo(value.length)["default"]); + } + } + if(this.getMax() && value.length > this.getMax()) { + value = value.slice(0,this.getMax()); + } + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val,initial); + } + else if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(val,initial); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(val,initial); + } + }); + + for(var j=value.length; j= this.rows.length; + + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + editor.delete_button.style.display = ''; + } + } + + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else if(this.value.length === 1) { + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + + if(minItems || this.hide_delete_all_rows_buttons) { + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.getMax() && this.getMax() <= this.rows.length) || this.hide_add_button){ + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!this.collapsed && controls_needed) { + this.controls.style.display = 'inline-block'; + } + else { + this.controls.style.display = 'none'; + } + } + }, + addRow: function(value, initial) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + self.row_cache[i] = self.rows[i]; + + if(self.tabs_holder) { + self.rows[i].tab_text = document.createElement('span'); + self.rows[i].tab_text.textContent = self.rows[i].getHeaderText(); + self.rows[i].tab = self.theme.getTab(self.rows[i].tab_text); + self.rows[i].tab.addEventListener('click', function(e) { + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + e.preventDefault(); + e.stopPropagation(); + }); + + self.theme.addTab(self.tabs_holder, self.rows[i].tab); + } + + var controls_holder = self.rows[i].title_controls || self.rows[i].array_controls; + + // Buttons to delete row, move row up, and move row down + if(!self.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete',this.translate('button_delete_row_title',[self.getItemTitle()])); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + var new_active_tab = null; + $each(value,function(j,row) { + if(j===i) { + // If the one we're deleting is the active tab + if(self.rows[j].tab === self.active_tab) { + // Make the next tab active if there is one + // Note: the next tab is going to be the current tab after deletion + if(self.rows[j+1]) new_active_tab = self.rows[j].tab; + // Otherwise, make the previous tab active if there is one + else if(j) new_active_tab = self.rows[j-1].tab; + } + + return; // If this is the one we're deleting + } + newval.push(row); + }); + self.setValue(newval); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].delete_button); + } + } + + if(i && !self.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title')); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i-1].tab; + self.refreshTabs(); + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].moveup_button); + } + } + + if(!self.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title')); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i+1].tab; + self.refreshTabs(); + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].movedown_button); + } + } + + if(value) self.rows[i].setValue(value, initial); + self.refreshTabs(); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); + this.title_controls.appendChild(this.toggle_button); + var row_holder_display = self.row_holder.style.display; + var controls_display = self.controls.style.display; + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + if(self.collapsed) { + self.collapsed = false; + if(self.panel) self.panel.style.display = ''; + self.row_holder.style.display = row_holder_display; + if(self.tabs_holder) self.tabs_holder.style.display = ''; + self.controls.style.display = controls_display; + self.setButtonText(this,'','collapse',self.translate('button_collapse')); + } + else { + self.collapsed = true; + self.row_holder.style.display = 'none'; + if(self.tabs_holder) self.tabs_holder.style.display = 'none'; + self.controls.style.display = 'none'; + if(self.panel) self.panel.style.display = 'none'; + self.setButtonText(this,'','expand',self.translate('button_expand')); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()])); + + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = self.rows.length; + if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(self.rows[i].getDefault(), true); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(); + } + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + self.refreshValue(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()])); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var rows = self.getValue(); + + var new_active_tab = null; + if(self.rows.length > 1 && self.rows[self.rows.length-1].tab === self.active_tab) new_active_tab = self.rows[self.rows.length-2].tab; + + rows.pop(); + self.setValue(rows); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title')); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + + if(self.tabs) { + this.add_row_button.style.width = '100%'; + this.add_row_button.style.textAlign = 'left'; + this.add_row_button.style.marginBottom = '3px'; + + this.delete_last_row_button.style.width = '100%'; + this.delete_last_row_button.style.textAlign = 'left'; + this.delete_last_row_button.style.marginBottom = '3px'; + + this.remove_all_rows_button.style.width = '100%'; + this.remove_all_rows_button.style.textAlign = 'left'; + this.remove_all_rows_button.style.marginBottom = '3px'; + } + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show errors for child editors + $each(this.rows, function(i,row) { + row.showValidationErrors(other_errors); + }); + } +}); + +JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({ + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i this.schema.maxItems) { + value = value.slice(0,this.schema.maxItems); + } + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + var numrows_changed = false; + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val); + } + else { + self.addRow(val); + numrows_changed = true; + } + }); + + for(var j=value.length; j= this.rows.length; + + var need_row_buttons = false; + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.delete_button.style.display = ''; + } + } + + if(editor.moveup_button) { + need_row_buttons = true; + } + }); + + // Show/hide controls column in table + $each(this.rows,function(i,editor) { + if(need_row_buttons) { + editor.controls_cell.style.display = ''; + } + else { + editor.controls_cell.style.display = 'none'; + } + }); + if(need_row_buttons) { + this.controls_header_cell.style.display = ''; + } + else { + this.controls_header_cell.style.display = 'none'; + } + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + this.table.style.display = 'none'; + } + else if(this.value.length === 1) { + this.table.style.display = ''; + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + this.table.style.display = ''; + + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + + if(minItems || this.hide_delete_all_rows_buttons) { + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.schema.maxItems && this.schema.maxItems <= this.rows.length) || this.hide_add_button) { + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!controls_needed) { + this.controls.style.display = 'none'; + } + else { + this.controls.style.display = ''; + } + }, + refreshValue: function() { + var self = this; + this.value = []; + + $each(this.rows,function(i,editor) { + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + this.serialized = JSON.stringify(this.value); + }, + addRow: function(value) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + + var controls_holder = self.rows[i].table_controls; + + // Buttons to delete row, move row up, and move row down + if(!this.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton('','delete',this.translate('button_delete_row_title_short')); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + $each(value,function(j,row) { + if(j===i) return; // If this is the one we're deleting + newval.push(row); + }); + self.setValue(newval); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].delete_button); + } + + + if(i && !this.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title')); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].moveup_button); + } + + if(!this.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title')); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].movedown_button); + } + + if(value) self.rows[i].setValue(value); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); + if(this.title_controls) { + this.title_controls.appendChild(this.toggle_button); + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(self.collapsed) { + self.collapsed = false; + self.panel.style.display = ''; + self.setButtonText(this,'','collapse',self.translate('button_collapse')); + } + else { + self.collapsed = true; + self.panel.style.display = 'none'; + self.setButtonText(this,'','expand',self.translate('button_expand')); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()])); + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.addRow(); + self.refreshValue(); + self.refreshRowButtons(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()])); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + var rows = self.getValue(); + rows.pop(); + self.setValue(rows); + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title')); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + } +}); + +// Multiple Editor (for when `type` is an array) +JSONEditor.defaults.editors.multiple = JSONEditor.AbstractEditor.extend({ + register: function() { + if(this.editors) { + for(var i=0; inull'; + } + // Array or Object + else if(typeof el === "object") { + // TODO: use theme + var ret = ''; + + $each(el,function(i,child) { + var html = self.getHTML(child); + + // Add the keys to object children + if(!(Array.isArray(el))) { + // TODO: use theme + html = '
'+i+': '+html+'
'; + } + + // TODO: use theme + ret += '
  • '+html+'
  • '; + }); + + if(Array.isArray(el)) ret = '
      '+ret+'
    '; + else ret = "
      "+ret+'
    '; + + return ret; + } + // Boolean + else if(typeof el === "boolean") { + return el? 'true' : 'false'; + } + // String + else if(typeof el === "string") { + return el.replace(/&/g,'&').replace(//g,'>'); + } + // Number + else { + return el; + } + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.refreshValue(); + this.onChange(); + } + }, + destroy: function() { + if(this.display_area && this.display_area.parentNode) this.display_area.parentNode.removeChild(this.display_area); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.switcher && this.switcher.parentNode) this.switcher.parentNode.removeChild(this.switcher); + + this._super(); + } +}); + +JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + value = this.typecast(value||''); + + // Sanitize value before setting it + var sanitized = value; + if(this.enum_values.indexOf(sanitized) < 0) { + sanitized = this.enum_values[0]; + } + + if(this.value === sanitized) { + return; + } + + this.input.value = this.enum_options[this.enum_values.indexOf(sanitized)]; + if(this.select2) this.select2.select2('val',this.input.value); + this.value = sanitized; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + if(!this.enum_options) return 3; + var longest_text = this.getTitle().length; + for(var i=0; i 2 || (this.enum_options.length && this.enumSource))) { + var options = $extend({},JSONEditor.plugins.select2); + if(this.schema.options && this.schema.options.select2_options) options = $extend(options,this.schema.options.select2_options); + this.select2 = window.jQuery(this.input).select2(options); + var self = this; + this.select2.on('select2-blur',function() { + self.input.value = self.select2.select2('val'); + self.onInputChange(); + }); + this.select2.on('change',function() { + self.input.value = self.select2.select2('val'); + self.onInputChange(); + }); + } + else { + this.select2 = null; + } + }, + postBuild: function() { + this._super(); + this.theme.afterInputReady(this.input); + this.setupSelect2(); + }, + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor uses a dynamic select box + if(this.enumSource) { + vars = this.getWatchedFieldValues(); + var select_options = []; + var select_titles = []; + + for(var i=0; i= 2 || (this.enum_options.length && this.enumSource))) { + var options = $extend({},JSONEditor.plugins.selectize); + if(this.schema.options && this.schema.options.selectize_options) options = $extend(options,this.schema.options.selectize_options); + this.selectize = window.jQuery(this.input).selectize($extend(options, + { + create: true, + onChange : function() { + self.onInputChange(); + } + })); + } + else { + this.selectize = null; + } + }, + postBuild: function() { + this._super(); + this.theme.afterInputReady(this.input); + this.setupSelectize(); + }, + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor uses a dynamic select box + if(this.enumSource) { + vars = this.getWatchedFieldValues(); + var select_options = []; + var select_titles = []; + + for(var i=0; iSize: '+Math.floor((this.value.length-this.value.split(',')[0].length-1)/1.33333)+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.value; + this.preview.appendChild(img); + } + } + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.refreshPreview(); + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); + +JSONEditor.defaults.editors.upload = JSONEditor.AbstractEditor.extend({ + getNumColumns: function() { + return 4; + }, + build: function() { + var self = this; + this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + + // Input that holds the base64 string + this.input = this.theme.getFormInputField('hidden'); + this.container.appendChild(this.input); + + // Don't show uploader if this is readonly + if(!this.schema.readOnly && !this.schema.readonly) { + + if(!this.jsoneditor.options.upload) throw "Upload handler required for upload editor"; + + // File uploader + this.uploader = this.theme.getFormInputField('file'); + + this.uploader.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(this.files && this.files.length) { + var fr = new FileReader(); + fr.onload = function(evt) { + self.preview_value = evt.target.result; + self.refreshPreview(); + self.onChange(true); + fr = null; + }; + fr.readAsDataURL(this.files[0]); + } + }); + } + + var description = this.schema.description; + if (!description) description = ''; + + this.preview = this.theme.getFormInputDescription(description); + this.container.appendChild(this.preview); + + this.control = this.theme.getFormControl(this.label, this.uploader||this.input, this.preview); + this.container.appendChild(this.control); + }, + refreshPreview: function() { + if(this.last_preview === this.preview_value) return; + this.last_preview = this.preview_value; + + this.preview.innerHTML = ''; + + if(!this.preview_value) return; + + var self = this; + + var mime = this.preview_value.match(/^data:([^;,]+)[;,]/); + if(mime) mime = mime[1]; + if(!mime) mime = 'unknown'; + + var file = this.uploader.files[0]; + + this.preview.innerHTML = 'Type: '+mime+', Size: '+file.size+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.preview_value; + this.preview.appendChild(img); + } + + this.preview.innerHTML += '
    '; + var uploadButton = this.getButton('Upload', 'upload', 'Upload'); + this.preview.appendChild(uploadButton); + uploadButton.addEventListener('click',function(event) { + event.preventDefault(); + + uploadButton.setAttribute("disabled", "disabled"); + self.theme.removeInputError(self.uploader); + + if (self.theme.getProgressBar) { + self.progressBar = self.theme.getProgressBar(); + self.preview.appendChild(self.progressBar); + } + + self.jsoneditor.options.upload(self.path, file, { + success: function(url) { + self.setValue(url); + + if(self.parent) self.parent.onChildEditorChange(self); + else self.jsoneditor.onChange(); + + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + failure: function(error) { + self.theme.addInputError(self.uploader, error); + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + updateProgress: function(progress) { + if (self.progressBar) { + if (progress) self.theme.updateProgressBar(self.progressBar, progress); + else self.theme.updateProgressBarUnknown(self.progressBar); + } + } + }); + }); + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); + +JSONEditor.defaults.editors.checkbox = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + this.value = !!value; + this.input.checked = this.value; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + return Math.min(12,Math.max(this.getTitle().length/7,2)); + }, + build: function() { + var self = this; + if(!this.options.compact) { + this.label = this.header = this.theme.getCheckboxLabel(this.getTitle()); + } + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + if(this.options.compact) this.container.className += ' compact'; + + this.input = this.theme.getCheckbox(); + this.control = this.theme.getFormControl(this.label, this.input, this.description); + + if(this.schema.readOnly || this.schema.readonly) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.value = this.checked; + self.onChange(true); + }); + + this.container.appendChild(this.control); + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + this._super(); + }, + destroy: function() { + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + this._super(); + } +}); + +JSONEditor.defaults.editors.arraySelectize = JSONEditor.AbstractEditor.extend({ + build: function() { + this.title = this.theme.getFormInputLabel(this.getTitle()); + + this.title_controls = this.theme.getHeaderButtonHolder(); + this.title.appendChild(this.title_controls); + this.error_holder = document.createElement('div'); + + if(this.schema.description) { + this.description = this.theme.getDescription(this.schema.description); + } + + this.input = document.createElement('select'); + this.input.setAttribute('multiple', 'multiple'); + + var group = this.theme.getFormControl(this.title, this.input, this.description); + + this.container.appendChild(group); + this.container.appendChild(this.error_holder); + + window.jQuery(this.input).selectize({ + delimiter: false, + createOnBlur: true, + create: true + }); + }, + postBuild: function() { + var self = this; + this.input.selectize.on('change', function(event) { + self.refreshValue(); + self.onChange(true); + }); + }, + destroy: function() { + this.empty(true); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + + this._super(); + }, + empty: function(hard) {}, + setValue: function(value, initial) { + var self = this; + // Update the array's value, adding/removing rows when necessary + value = value || []; + if(!(Array.isArray(value))) value = [value]; + + this.input.selectize.clearOptions(); + this.input.selectize.clear(true); + + value.forEach(function(item) { + self.input.selectize.addOption({text: item, value: item}); + }); + this.input.selectize.setValue(value); + + this.refreshValue(initial); + }, + refreshValue: function(force) { + this.value = this.input.selectize.getValue(); + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + } +}); + +var matchKey = (function () { + var elem = document.documentElement; + + if (elem.matches) return 'matches'; + else if (elem.webkitMatchesSelector) return 'webkitMatchesSelector'; + else if (elem.mozMatchesSelector) return 'mozMatchesSelector'; + else if (elem.msMatchesSelector) return 'msMatchesSelector'; + else if (elem.oMatchesSelector) return 'oMatchesSelector'; +})(); + +JSONEditor.AbstractTheme = Class.extend({ + getContainer: function() { + return document.createElement('div'); + }, + getFloatRightLinkHolder: function() { + var el = document.createElement('div'); + el.style = el.style || {}; + el.style.cssFloat = 'right'; + el.style.marginLeft = '10px'; + return el; + }, + getModal: function() { + var el = document.createElement('div'); + el.style.backgroundColor = 'white'; + el.style.border = '1px solid black'; + el.style.boxShadow = '3px 3px black'; + el.style.position = 'absolute'; + el.style.zIndex = '10'; + el.style.display = 'none'; + return el; + }, + getGridContainer: function() { + var el = document.createElement('div'); + return el; + }, + getGridRow: function() { + var el = document.createElement('div'); + el.className = 'row'; + return el; + }, + getGridColumn: function() { + var el = document.createElement('div'); + return el; + }, + setGridColumnSize: function(el,size) { + + }, + getLink: function(text) { + var el = document.createElement('a'); + el.setAttribute('href','#'); + el.appendChild(document.createTextNode(text)); + return el; + }, + disableHeader: function(header) { + header.style.color = '#ccc'; + }, + disableLabel: function(label) { + label.style.color = '#ccc'; + }, + enableHeader: function(header) { + header.style.color = ''; + }, + enableLabel: function(label) { + label.style.color = ''; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.appendChild(document.createTextNode(text)); + return el; + }, + getCheckboxLabel: function(text) { + var el = this.getFormInputLabel(text); + el.style.fontWeight = 'normal'; + return el; + }, + getHeader: function(text) { + var el = document.createElement('h3'); + if(typeof text === "string") { + el.textContent = text; + } + else { + el.appendChild(text); + } + + return el; + }, + getCheckbox: function() { + var el = this.getFormInputField('checkbox'); + el.style.display = 'inline-block'; + el.style.width = 'auto'; + return el; + }, + getMultiCheckboxHolder: function(controls,label,description) { + var el = document.createElement('div'); + + if(label) { + label.style.display = 'block'; + el.appendChild(label); + } + + for(var i in controls) { + if(!controls.hasOwnProperty(i)) continue; + controls[i].style.display = 'inline-block'; + controls[i].style.marginRight = '20px'; + el.appendChild(controls[i]); + } + + if(description) el.appendChild(description); + + return el; + }, + getSelectInput: function(options) { + var select = document.createElement('select'); + if(options) this.setSelectOptions(select, options); + return select; + }, + getSwitcher: function(options) { + var switcher = this.getSelectInput(options); + switcher.style.backgroundColor = 'transparent'; + switcher.style.display = 'inline-block'; + switcher.style.fontStyle = 'italic'; + switcher.style.fontWeight = 'normal'; + switcher.style.height = 'auto'; + switcher.style.marginBottom = 0; + switcher.style.marginLeft = '5px'; + switcher.style.padding = '0 0 0 3px'; + switcher.style.width = 'auto'; + return switcher; + }, + getSwitcherOptions: function(switcher) { + return switcher.getElementsByTagName('option'); + }, + setSwitcherOptions: function(switcher, options, titles) { + this.setSelectOptions(switcher, options, titles); + }, + setSelectOptions: function(select, options, titles) { + titles = titles || []; + select.innerHTML = ''; + for(var i=0; i'); + input.errmsg = input.parentNode.getElementsByClassName('error')[0]; + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.group.className = input.group.className.replace(/ error/g,''); + input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var progressBar = document.createElement('div'); + progressBar.className = 'progress'; + + var meter = document.createElement('span'); + meter.className = 'meter'; + meter.style.width = '0%'; + progressBar.appendChild(meter); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.firstChild.style.width = progress + '%'; + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.firstChild.style.width = '100%'; + } +}); + +// Foundation 3 Specific Theme +JSONEditor.defaults.themes.foundation3 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.className = 'row'; + el.innerHTML = "
    "; + return el; + }, + setGridColumnSize: function(el,size) { + var sizes = ['zero','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve']; + el.className = 'columns '+sizes[size]; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +// Foundation 4 Specific Theme +JSONEditor.defaults.themes.foundation4 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns large-'+size; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + } +}); + +// Foundation 5 Specific Theme +JSONEditor.defaults.themes.foundation5 = JSONEditor.defaults.themes.foundation.extend({ + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns medium-'+size; + }, + getButton: function(text, icon, title) { + var el = this._super(text,icon,title); + el.className = el.className.replace(/\s*small/g,'') + ' tiny'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.innerHTML = "
    "; + return el; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +JSONEditor.defaults.themes.foundation6 = JSONEditor.defaults.themes.foundation5.extend({ + getIndentedPanel: function() { + var el = document.createElement('div'); + el.className = 'callout secondary'; + return el; + }, + getButtonHolder: function() { + var el = document.createElement('div'); + el.className = 'button-group tiny'; + el.style.marginBottom = 0; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.display = 'block'; + return el; + }, + getFormControl: function(label, input, description) { + var el = document.createElement('div'); + el.className = 'form-control'; + if(label) el.appendChild(label); + if(input.type === 'checkbox') { + label.insertBefore(input,label.firstChild); + } + else if (label) { + label.appendChild(input); + } else { + el.appendChild(input); + } + + if(description) label.appendChild(description); + return el; + }, + addInputError: function(input,text) { + if(!input.group) return; + input.group.className += ' error'; + + if(!input.errmsg) { + var errorEl = document.createElement('span'); + errorEl.className = 'form-error is-visible'; + input.group.getElementsByTagName('label')[0].appendChild(errorEl); + + input.className = input.className + ' is-invalid-input'; + + input.errmsg = errorEl; + } + else { + input.errmsg.style.display = ''; + input.className = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.className = input.className.replace(/ is-invalid-input/g,''); + if(input.errmsg.parentNode) { + input.errmsg.parentNode.removeChild(input.errmsg); + } + }, +}); + +JSONEditor.defaults.themes.html = JSONEditor.AbstractTheme.extend({ + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.display = 'block'; + el.style.marginBottom = '3px'; + el.style.fontWeight = 'bold'; + return el; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8em'; + el.style.margin = 0; + el.style.display = 'inline-block'; + el.style.fontStyle = 'italic'; + return el; + }, + getIndentedPanel: function() { + var el = this._super(); + el.style.border = '1px solid #ddd'; + el.style.padding = '5px'; + el.style.margin = '5px'; + el.style.borderRadius = '3px'; + return el; + }, + getChildEditorHolder: function() { + var el = this._super(); + el.style.marginBottom = '8px'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.display = 'inline-block'; + el.style.marginLeft = '10px'; + el.style.fontSize = '.8em'; + el.style.verticalAlign = 'middle'; + return el; + }, + getTable: function() { + var el = this._super(); + el.style.borderBottom = '1px solid #ccc'; + el.style.marginBottom = '5px'; + return el; + }, + addInputError: function(input, text) { + input.style.borderColor = 'red'; + + if(!input.errmsg) { + var group = this.closest(input,'.form-control'); + input.errmsg = document.createElement('div'); + input.errmsg.setAttribute('class','errmsg'); + input.errmsg.style = input.errmsg.style || {}; + input.errmsg.style.color = 'red'; + group.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = 'block'; + } + + input.errmsg.innerHTML = ''; + input.errmsg.appendChild(document.createTextNode(text)); + }, + removeInputError: function(input) { + input.style.borderColor = ''; + if(input.errmsg) input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var max = 100, start = 0; + + var progressBar = document.createElement('progress'); + progressBar.setAttribute('max', max); + progressBar.setAttribute('value', start); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.setAttribute('value', progress); + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.removeAttribute('value'); + } +}); + +JSONEditor.defaults.themes.jqueryui = JSONEditor.AbstractTheme.extend({ + getTable: function() { + var el = this._super(); + el.setAttribute('cellpadding',5); + el.setAttribute('cellspacing',0); + return el; + }, + getTableHeaderCell: function(text) { + var el = this._super(text); + el.className = 'ui-state-active'; + el.style.fontWeight = 'bold'; + return el; + }, + getTableCell: function() { + var el = this._super(); + el.className = 'ui-widget-content'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.marginLeft = '10px'; + el.style.fontSize = '.6em'; + el.style.display = 'inline-block'; + return el; + }, + getFormInputDescription: function(text) { + var el = this.getDescription(text); + el.style.marginLeft = '10px'; + el.style.display = 'inline-block'; + return el; + }, + getFormControl: function(label, input, description) { + var el = this._super(label,input,description); + if(input.type === 'checkbox') { + el.style.lineHeight = '25px'; + + el.style.padding = '3px 0'; + } + else { + el.style.padding = '4px 0 8px 0'; + } + return el; + }, + getDescription: function(text) { + var el = document.createElement('span'); + el.style.fontSize = '.8em'; + el.style.fontStyle = 'italic'; + el.textContent = text; + return el; + }, + getButtonHolder: function() { + var el = document.createElement('div'); + el.className = 'ui-buttonset'; + el.style.fontSize = '.7em'; + return el; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.style.fontWeight = 'bold'; + el.style.display = 'block'; + el.textContent = text; + return el; + }, + getButton: function(text, icon, title) { + var button = document.createElement("button"); + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + + return button; + }, + setButtonText: function(button,text, icon, title) { + button.innerHTML = ''; + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + }, + getIndentedPanel: function() { + var el = document.createElement('div'); + el.className = 'ui-widget-content ui-corner-all'; + el.style.padding = '1em 1.4em'; + el.style.marginBottom = '20px'; + return el; + }, + afterInputReady: function(input) { + if(input.controls) return; + input.controls = this.closest(input,'.form-control'); + }, + addInputError: function(input,text) { + if(!input.controls) return; + if(!input.errmsg) { + input.errmsg = document.createElement('div'); + input.errmsg.className = 'ui-state-error'; + input.controls.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.errmsg.style.display = 'none'; + }, + markTabActive: function(tab) { + tab.className = tab.className.replace(/\s*ui-widget-header/g,'')+' ui-state-active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*ui-state-active/g,'')+' ui-widget-header'; + } +}); + +JSONEditor.defaults.themes.barebones = JSONEditor.AbstractTheme.extend({ + getFormInputLabel: function (text) { + var el = this._super(text); + return el; + }, + getFormInputDescription: function (text) { + var el = this._super(text); + return el; + }, + getIndentedPanel: function () { + var el = this._super(); + return el; + }, + getChildEditorHolder: function () { + var el = this._super(); + return el; + }, + getHeaderButtonHolder: function () { + var el = this.getButtonHolder(); + return el; + }, + getTable: function () { + var el = this._super(); + return el; + }, + addInputError: function (input, text) { + if (!input.errmsg) { + var group = this.closest(input, '.form-control'); + input.errmsg = document.createElement('div'); + input.errmsg.setAttribute('class', 'errmsg'); + group.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = 'block'; + } + + input.errmsg.innerHTML = ''; + input.errmsg.appendChild(document.createTextNode(text)); + }, + removeInputError: function (input) { + input.style.borderColor = ''; + if (input.errmsg) input.errmsg.style.display = 'none'; + }, + getProgressBar: function () { + var max = 100, start = 0; + + var progressBar = document.createElement('progress'); + progressBar.setAttribute('max', max); + progressBar.setAttribute('value', start); + return progressBar; + }, + updateProgressBar: function (progressBar, progress) { + if (!progressBar) return; + progressBar.setAttribute('value', progress); + }, + updateProgressBarUnknown: function (progressBar) { + if (!progressBar) return; + progressBar.removeAttribute('value'); + } +}); + +JSONEditor.AbstractIconLib = Class.extend({ + mapping: { + collapse: '', + expand: '', + "delete": '', + edit: '', + add: '', + cancel: '', + save: '', + moveup: '', + movedown: '' + }, + icon_prefix: '', + getIconClass: function(key) { + if(this.mapping[key]) return this.icon_prefix+this.mapping[key]; + else return null; + }, + getIcon: function(key) { + var iconclass = this.getIconClass(key); + + if(!iconclass) return null; + + var i = document.createElement('i'); + i.className = iconclass; + return i; + } +}); + +JSONEditor.defaults.iconlibs.bootstrap2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-up', + "delete": 'trash', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'ok', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); + +JSONEditor.defaults.iconlibs.bootstrap3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'floppy-remove', + save: 'floppy-saved', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'glyphicon glyphicon-' +}); + +JSONEditor.defaults.iconlibs.fontawesome3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); + +JSONEditor.defaults.iconlibs.fontawesome4 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'caret-square-o-down', + expand: 'caret-square-o-right', + "delete": 'times', + edit: 'pencil', + add: 'plus', + cancel: 'ban', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fa fa-' +}); + +JSONEditor.defaults.iconlibs.foundation2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'remove', + edit: 'edit', + add: 'add-doc', + cancel: 'error', + save: 'checkmark', + moveup: 'up-arrow', + movedown: 'down-arrow' + }, + icon_prefix: 'foundicon-' +}); + +JSONEditor.defaults.iconlibs.foundation3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'x', + edit: 'pencil', + add: 'page-add', + cancel: 'x-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fi-' +}); + +JSONEditor.defaults.iconlibs.jqueryui = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'triangle-1-s', + expand: 'triangle-1-e', + "delete": 'trash', + edit: 'pencil', + add: 'plusthick', + cancel: 'closethick', + save: 'disk', + moveup: 'arrowthick-1-n', + movedown: 'arrowthick-1-s' + }, + icon_prefix: 'ui-icon ui-icon-' +}); + +JSONEditor.defaults.templates["default"] = function() { + return { + compile: function(template) { + var matches = template.match(/{{\s*([a-zA-Z0-9\-_ \.]+)\s*}}/g); + var l = matches && matches.length; + + // Shortcut if the template contains no variables + if(!l) return function() { return template; }; + + // Pre-compute the search/replace functions + // This drastically speeds up template execution + var replacements = []; + var get_replacement = function(i) { + var p = matches[i].replace(/[{}]+/g,'').trim().split('.'); + var n = p.length; + var func; + + if(n > 1) { + var cur; + func = function(vars) { + cur = vars; + for(i=0; i= 0) { + // For enumerated strings, number, or integers + if(schema.items.enum) { + return 'multiselect'; + } + // For non-enumerated strings (tag editor) + else if(JSONEditor.plugins.selectize.enable && schema.items.type === "string") { + return 'arraySelectize'; + } + } +}); +// Use the multiple editor for schemas with `oneOf` set +JSONEditor.defaults.resolvers.unshift(function(schema) { + // If this schema uses `oneOf` or `anyOf` + if(schema.oneOf || schema.anyOf) return "multiple"; +}); + +/** + * This is a small wrapper for using JSON Editor like a typical jQuery plugin. + */ +(function() { + if(window.jQuery || window.Zepto) { + var $ = window.jQuery || window.Zepto; + $.jsoneditor = JSONEditor.defaults; + + $.fn.jsoneditor = function(options) { + var self = this; + var editor = this.data('jsoneditor'); + if(options === 'value') { + if(!editor) throw "Must initialize jsoneditor before getting/setting the value"; + + // Set value + if(arguments.length > 1) { + editor.setValue(arguments[1]); + } + // Get value + else { + return editor.getValue(); + } + } + else if(options === 'validate') { + if(!editor) throw "Must initialize jsoneditor before validating"; + + // Validate a specific value + if(arguments.length > 1) { + return editor.validate(arguments[1]); + } + // Validate current value + else { + return editor.validate(); + } + } + else if(options === 'destroy') { + if(editor) { + editor.destroy(); + this.data('jsoneditor',null); + } + } + else { + // Destroy first + if(editor) { + editor.destroy(); + } + + // Create editor + editor = new JSONEditor(this.get(0),options); + this.data('jsoneditor',editor); + + // Setup event listeners + editor.on('change',function() { + self.trigger('change'); + }); + editor.on('ready',function() { + self.trigger('ready'); + }); + } + + return this; + }; + } +})(); + + window.JSONEditor = JSONEditor; +})(); + +//# sourceMappingURL=jsoneditor.js.map \ No newline at end of file diff --git a/libs/json-editor/dist/jsoneditor.js.map b/libs/json-editor/dist/jsoneditor.js.map new file mode 100644 index 0000000..62be67b --- /dev/null +++ b/libs/json-editor/dist/jsoneditor.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/intro.js","../src/class.js","../src/ie9.js","../src/utilities.js","../src/core.js","../src/validator.js","../src/editor.js","../src/editors/null.js","../src/editors/string.js","../src/editors/number.js","../src/editors/integer.js","../src/editors/object.js","../src/editors/array.js","../src/editors/table.js","../src/editors/multiple.js","../src/editors/enum.js","../src/editors/select.js","../src/editors/selectize.js","../src/editors/multiselect.js","../src/editors/base64.js","../src/editors/upload.js","../src/editors/checkbox.js","../src/editors/array/selectize.js","../src/theme.js","../src/themes/bootstrap2.js","../src/themes/bootstrap3.js","../src/themes/foundation.js","../src/themes/html.js","../src/themes/jqueryui.js","../src/themes/jsoneditor.barebones-theme.js","../src/iconlib.js","../src/iconlibs/bootstrap2.js","../src/iconlibs/bootstrap3.js","../src/iconlibs/fontawesome3.js","../src/iconlibs/fontawesome4.js","../src/iconlibs/foundation2.js","../src/iconlibs/foundation3.js","../src/iconlibs/jqueryui.js","../src/templates/default.js","../src/templates/ejs.js","../src/templates/handlebars.js","../src/templates/hogan.js","../src/templates/markup.js","../src/templates/mustache.js","../src/templates/swig.js","../src/templates/underscore.js","../src/defaults.js","../src/jquery.js","../src/outro.js"],"names":[],"mappings":"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","file":"jsoneditor.js","sourcesContent":["/*! JSON Editor v0.7.28 - JSON Schema -> HTML Editor\n * By Jeremy Dorn - https://github.com/jdorn/json-editor/\n * Released under the MIT license\n *\n * Date: 2016-08-07\n */\n\n/**\n * See README.md for requirements and usage info\n */\n\n(function() {\n","/*jshint loopfunc: true */\n/* Simple JavaScript Inheritance\n * By John Resig http://ejohn.org/\n * MIT Licensed.\n */\n// Inspired by base2 and Prototype\nvar Class;\n(function(){\n var initializing = false, fnTest = /xyz/.test(function(){window.postMessage(\"xyz\");}) ? /\\b_super\\b/ : /.*/;\n \n // The base Class implementation (does nothing)\n Class = function(){};\n \n // Create a new Class that inherits from this class\n Class.extend = function extend(prop) {\n var _super = this.prototype;\n \n // Instantiate a base class (but only create the instance,\n // don't run the init constructor)\n initializing = true;\n var prototype = new this();\n initializing = false;\n \n // Copy the properties over onto the new prototype\n for (var name in prop) {\n // Check if we're overwriting an existing function\n prototype[name] = typeof prop[name] == \"function\" &&\n typeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n (function(name, fn){\n return function() {\n var tmp = this._super;\n \n // Add a new ._super() method that is the same method\n // but on the super-class\n this._super = _super[name];\n \n // The method only need to be bound temporarily, so we\n // remove it when we're done executing\n var ret = fn.apply(this, arguments); \n this._super = tmp;\n \n return ret;\n };\n })(name, prop[name]) :\n prop[name];\n }\n \n // The dummy class constructor\n function Class() {\n // All construction is actually done in the init method\n if ( !initializing && this.init )\n this.init.apply(this, arguments);\n }\n \n // Populate our constructed prototype object\n Class.prototype = prototype;\n \n // Enforce the constructor to be what we expect\n Class.prototype.constructor = Class;\n \n // And make this class extendable\n Class.extend = extend;\n \n return Class;\n };\n \n return Class;\n})();\n","// CustomEvent constructor polyfill\n// From MDN\n(function () {\n function CustomEvent ( event, params ) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent( 'CustomEvent' );\n evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n})();\n\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n// MIT license\n(function() {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || \n window[vendors[x]+'CancelRequestAnimationFrame'];\n }\n \n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function(callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function() { callback(currTime + timeToCall); }, \n timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n \n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n}());\n\n// Array.isArray polyfill\n// From MDN\n(function() {\n\tif(!Array.isArray) {\n\t Array.isArray = function(arg) {\n\t\treturn Object.prototype.toString.call(arg) === '[object Array]';\n\t };\n\t}\n}());","/**\n * Taken from jQuery 2.1.3\n *\n * @param obj\n * @returns {boolean}\n */\nvar $isplainobject = function( obj ) {\n // Not plain objects:\n // - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n // - DOM nodes\n // - window\n if (typeof obj !== \"object\" || obj.nodeType || (obj !== null && obj === obj.window)) {\n return false;\n }\n\n if (obj.constructor && !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, \"isPrototypeOf\")) {\n return false;\n }\n\n // If the function hasn't returned already, we're confident that\n // |obj| is a plain object, created by {} or constructed with new Object\n return true;\n};\n\nvar $extend = function(destination) {\n var source, i,property;\n for(i=1; i 0 && (obj.length - 1) in obj)) {\n for(i=0; i= waiting && !callback_fired) {\n callback_fired = true;\n callback();\n }\n });\n }\n // Request failed\n else {\n window.console.log(r);\n throw \"Failed to fetch ref via ajax- \"+url;\n }\n };\n r.send();\n });\n \n if(!waiting) {\n callback();\n }\n },\n expandRefs: function(schema) {\n schema = $extend({},schema);\n \n while (schema.$ref) {\n var ref = schema.$ref;\n delete schema.$ref;\n \n if(!this.refs[ref]) ref = decodeURIComponent(ref);\n \n schema = this.extendSchemas(schema,this.refs[ref]);\n }\n return schema;\n },\n expandSchema: function(schema) {\n var self = this;\n var extended = $extend({},schema);\n var i;\n\n // Version 3 `type`\n if(typeof schema.type === 'object') {\n // Array of types\n if(Array.isArray(schema.type)) {\n $each(schema.type, function(key,value) {\n // Schema\n if(typeof value === 'object') {\n schema.type[key] = self.expandSchema(value);\n }\n });\n }\n // Schema\n else {\n schema.type = self.expandSchema(schema.type);\n }\n }\n // Version 3 `disallow`\n if(typeof schema.disallow === 'object') {\n // Array of types\n if(Array.isArray(schema.disallow)) {\n $each(schema.disallow, function(key,value) {\n // Schema\n if(typeof value === 'object') {\n schema.disallow[key] = self.expandSchema(value);\n }\n });\n }\n // Schema\n else {\n schema.disallow = self.expandSchema(schema.disallow);\n }\n }\n // Version 4 `anyOf`\n if(schema.anyOf) {\n $each(schema.anyOf, function(key,value) {\n schema.anyOf[key] = self.expandSchema(value);\n });\n }\n // Version 4 `dependencies` (schema dependencies)\n if(schema.dependencies) {\n $each(schema.dependencies,function(key,value) {\n if(typeof value === \"object\" && !(Array.isArray(value))) {\n schema.dependencies[key] = self.expandSchema(value);\n }\n });\n }\n // Version 4 `not`\n if(schema.not) {\n schema.not = this.expandSchema(schema.not);\n }\n \n // allOf schemas should be merged into the parent\n if(schema.allOf) {\n for(i=0; i schema.minimum) : (value >= schema.minimum);\n\n // Use math.js is available\n if(window.math) {\n valid = window.math[schema.exclusiveMinimum?'larger':'largerEq'](\n window.math.bignumber(value),\n window.math.bignumber(schema.minimum)\n );\n }\n // Use Decimal.js if available\n else if(window.Decimal) {\n valid = (new window.Decimal(value))[schema.exclusiveMinimum?'gt':'gte'](new window.Decimal(schema.minimum));\n }\n\n if(!valid) {\n errors.push({\n path: path,\n property: 'minimum',\n message: this.translate(\n (schema.exclusiveMinimum?'error_minimum_excl':'error_minimum_incl'),\n [schema.minimum]\n )\n });\n }\n }\n }\n // String specific validation\n else if(typeof value === \"string\") {\n // `maxLength`\n if(schema.maxLength) {\n if((value+\"\").length > schema.maxLength) {\n errors.push({\n path: path,\n property: 'maxLength',\n message: this.translate('error_maxLength', [schema.maxLength])\n });\n }\n }\n\n // `minLength`\n if(schema.minLength) {\n if((value+\"\").length < schema.minLength) {\n errors.push({\n path: path,\n property: 'minLength',\n message: this.translate((schema.minLength===1?'error_notempty':'error_minLength'), [schema.minLength])\n });\n }\n }\n\n // `pattern`\n if(schema.pattern) {\n if(!(new RegExp(schema.pattern)).test(value)) {\n errors.push({\n path: path,\n property: 'pattern',\n message: this.translate('error_pattern', [schema.pattern])\n });\n }\n }\n }\n // Array specific validation\n else if(typeof value === \"object\" && value !== null && Array.isArray(value)) {\n // `items` and `additionalItems`\n if(schema.items) {\n // `items` is an array\n if(Array.isArray(schema.items)) {\n for(i=0; i schema.maxItems) {\n errors.push({\n path: path,\n property: 'maxItems',\n message: this.translate('error_maxItems', [schema.maxItems])\n });\n }\n }\n\n // `minItems`\n if(schema.minItems) {\n if(value.length < schema.minItems) {\n errors.push({\n path: path,\n property: 'minItems',\n message: this.translate('error_minItems', [schema.minItems])\n });\n }\n }\n\n // `uniqueItems`\n if(schema.uniqueItems) {\n var seen = {};\n for(i=0; i schema.maxProperties) {\n errors.push({\n path: path,\n property: 'maxProperties',\n message: this.translate('error_maxProperties', [schema.maxProperties])\n });\n }\n }\n\n // `minProperties`\n if(schema.minProperties) {\n valid = 0;\n for(i in value) {\n if(!value.hasOwnProperty(i)) continue;\n valid++;\n }\n if(valid < schema.minProperties) {\n errors.push({\n path: path,\n property: 'minProperties',\n message: this.translate('error_minProperties', [schema.minProperties])\n });\n }\n }\n\n // Version 4 `required`\n if(schema.required && Array.isArray(schema.required)) {\n for(i=0; i=0) {\n holder = this.theme.getBlockLinkHolder();\n \n link = this.theme.getBlockLink();\n link.setAttribute('target','_blank');\n \n var media = document.createElement(type);\n media.setAttribute('controls','controls');\n \n this.theme.createMediaLink(holder,link,media);\n \n // When a watched field changes, update the url \n this.link_watchers.push(function(vars) {\n var url = href(vars);\n link.setAttribute('href',url);\n link.textContent = data.rel || url;\n media.setAttribute('src',url);\n });\n }\n // Text links\n else {\n link = holder = this.theme.getBlockLink();\n holder.setAttribute('target','_blank');\n holder.textContent = data.rel;\n\n // When a watched field changes, update the url\n this.link_watchers.push(function(vars) {\n var url = href(vars);\n holder.setAttribute('href',url);\n holder.textContent = data.rel || url;\n });\n }\n\n if(download && link) {\n if(download === true) {\n link.setAttribute('download','');\n }\n else {\n this.link_watchers.push(function(vars) {\n link.setAttribute('download',download(vars));\n });\n }\n }\n \n if(data.class) link.className = link.className + ' ' + data.class;\n\n return holder;\n },\n refreshWatchedFieldValues: function() {\n if(!this.watched_values) return;\n var watched = {};\n var changed = false;\n var self = this;\n \n if(this.watched) {\n var val,editor;\n for(var name in this.watched) {\n if(!this.watched.hasOwnProperty(name)) continue;\n editor = self.jsoneditor.getEditor(this.watched[name]);\n val = editor? editor.getValue() : null;\n if(self.watched_values[name] !== val) changed = true;\n watched[name] = val;\n }\n }\n \n watched.self = this.getValue();\n if(this.watched_values.self !== watched.self) changed = true;\n \n this.watched_values = watched;\n \n return changed;\n },\n getWatchedFieldValues: function() {\n return this.watched_values;\n },\n updateHeaderText: function() {\n if(this.header) {\n // If the header has children, only update the text node's value\n if(this.header.children.length) {\n for(var i=0; i -1;\n else if(this.jsoneditor.options.required_by_default) return true;\n else return false;\n }, \n getDisplayText: function(arr) {\n var disp = [];\n var used = {};\n \n // Determine how many times each attribute name is used.\n // This helps us pick the most distinct display text for the schemas.\n $each(arr,function(i,el) {\n if(el.title) {\n used[el.title] = used[el.title] || 0;\n used[el.title]++;\n }\n if(el.description) {\n used[el.description] = used[el.description] || 0;\n used[el.description]++;\n }\n if(el.format) {\n used[el.format] = used[el.format] || 0;\n used[el.format]++;\n }\n if(el.type) {\n used[el.type] = used[el.type] || 0;\n used[el.type]++;\n }\n });\n \n // Determine display text for each element of the array\n $each(arr,function(i,el) {\n var name;\n \n // If it's a simple string\n if(typeof el === \"string\") name = el;\n // Object\n else if(el.title && used[el.title]<=1) name = el.title;\n else if(el.format && used[el.format]<=1) name = el.format;\n else if(el.type && used[el.type]<=1) name = el.type;\n else if(el.description && used[el.description]<=1) name = el.descripton;\n else if(el.title) name = el.title;\n else if(el.format) name = el.format;\n else if(el.type) name = el.type;\n else if(el.description) name = el.description;\n else if(JSON.stringify(el).length < 50) name = JSON.stringify(el);\n else name = \"type\";\n \n disp.push(name);\n });\n \n // Replace identical display text with \"text 1\", \"text 2\", etc.\n var inc = {};\n $each(disp,function(i,name) {\n inc[name] = inc[name] || 0;\n inc[name]++;\n \n if(used[name] > 1) disp[i] = name + \" \" + inc[name];\n });\n \n return disp;\n },\n getOption: function(key) {\n try {\n throw \"getOption is deprecated\";\n }\n catch(e) {\n window.console.error(e);\n }\n \n return this.options[key];\n },\n showValidationErrors: function(errors) {\n\n }\n});\n","JSONEditor.defaults.editors[\"null\"] = JSONEditor.AbstractEditor.extend({\n getValue: function() {\n return null;\n },\n setValue: function() {\n this.onChange();\n },\n getNumColumns: function() {\n return 2;\n }\n});\n","JSONEditor.defaults.editors.string = JSONEditor.AbstractEditor.extend({\n register: function() {\n this._super();\n if(!this.input) return;\n this.input.setAttribute('name',this.formname);\n },\n unregister: function() {\n this._super();\n if(!this.input) return;\n this.input.removeAttribute('name');\n },\n setValue: function(value,initial,from_template) {\n var self = this;\n \n if(this.template && !from_template) {\n return;\n }\n \n if(value === null || typeof value === 'undefined') value = \"\";\n else if(typeof value === \"object\") value = JSON.stringify(value);\n else if(typeof value !== \"string\") value = \"\"+value;\n \n if(value === this.serialized) return;\n\n // Sanitize value before setting it\n var sanitized = this.sanitize(value);\n\n if(this.input.value === sanitized) {\n return;\n }\n\n this.input.value = sanitized;\n \n // If using SCEditor, update the WYSIWYG\n if(this.sceditor_instance) {\n this.sceditor_instance.val(sanitized);\n }\n else if(this.epiceditor) {\n this.epiceditor.importFile(null,sanitized);\n }\n else if(this.ace_editor) {\n this.ace_editor.setValue(sanitized);\n }\n \n var changed = from_template || this.getValue() !== value;\n \n this.refreshValue();\n \n if(initial) this.is_dirty = false;\n else if(this.jsoneditor.options.show_errors === \"change\") this.is_dirty = true;\n \n if(this.adjust_height) this.adjust_height(this.input);\n\n // Bubble this setValue to parents if the value changed\n this.onChange(changed);\n },\n getNumColumns: function() {\n var min = Math.ceil(Math.max(this.getTitle().length,this.schema.maxLength||0,this.schema.minLength||0)/5);\n var num;\n \n if(this.input_type === 'textarea') num = 6;\n else if(['text','email'].indexOf(this.input_type) >= 0) num = 4;\n else num = 2;\n \n return Math.min(12,Math.max(min,num));\n },\n build: function() {\n var self = this, i;\n if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle());\n if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description);\n\n this.format = this.schema.format;\n if(!this.format && this.schema.media && this.schema.media.type) {\n this.format = this.schema.media.type.replace(/(^(application|text)\\/(x-)?(script\\.)?)|(-source$)/g,'');\n }\n if(!this.format && this.options.default_format) {\n this.format = this.options.default_format;\n }\n if(this.options.format) {\n this.format = this.options.format;\n }\n\n // Specific format\n if(this.format) {\n // Text Area\n if(this.format === 'textarea') {\n this.input_type = 'textarea';\n this.input = this.theme.getTextareaInput();\n }\n // Range Input\n else if(this.format === 'range') {\n this.input_type = 'range';\n var min = this.schema.minimum || 0;\n var max = this.schema.maximum || Math.max(100,min+1);\n var step = 1;\n if(this.schema.multipleOf) {\n if(min%this.schema.multipleOf) min = Math.ceil(min/this.schema.multipleOf)*this.schema.multipleOf;\n if(max%this.schema.multipleOf) max = Math.floor(max/this.schema.multipleOf)*this.schema.multipleOf;\n step = this.schema.multipleOf;\n }\n\n this.input = this.theme.getRangeInput(min,max,step);\n }\n // Source Code\n else if([\n 'actionscript',\n 'batchfile',\n 'bbcode',\n 'c',\n 'c++',\n 'cpp',\n 'coffee',\n 'csharp',\n 'css',\n 'dart',\n 'django',\n 'ejs',\n 'erlang',\n 'golang',\n 'groovy',\n 'handlebars',\n 'haskell',\n 'haxe',\n 'html',\n 'ini',\n 'jade',\n 'java',\n 'javascript',\n 'json',\n 'less',\n 'lisp',\n 'lua',\n 'makefile',\n 'markdown',\n 'matlab',\n 'mysql',\n 'objectivec',\n 'pascal',\n 'perl',\n 'pgsql',\n 'php',\n 'python',\n 'r',\n 'ruby',\n 'sass',\n 'scala',\n 'scss',\n 'smarty',\n 'sql',\n 'stylus',\n 'svg',\n 'twig',\n 'vbscript',\n 'xml',\n 'yaml'\n ].indexOf(this.format) >= 0\n ) {\n this.input_type = this.format;\n this.source_code = true;\n \n this.input = this.theme.getTextareaInput();\n }\n // HTML5 Input type\n else {\n this.input_type = this.format;\n this.input = this.theme.getFormInputField(this.input_type);\n }\n }\n // Normal text input\n else {\n this.input_type = 'text';\n this.input = this.theme.getFormInputField(this.input_type);\n }\n \n // minLength, maxLength, and pattern\n if(typeof this.schema.maxLength !== \"undefined\") this.input.setAttribute('maxlength',this.schema.maxLength);\n if(typeof this.schema.pattern !== \"undefined\") this.input.setAttribute('pattern',this.schema.pattern);\n else if(typeof this.schema.minLength !== \"undefined\") this.input.setAttribute('pattern','.{'+this.schema.minLength+',}');\n\n if(this.options.compact) {\n this.container.className += ' compact';\n }\n else {\n if(this.options.input_width) this.input.style.width = this.options.input_width;\n }\n\n if(this.schema.readOnly || this.schema.readonly || this.schema.template) {\n this.always_disabled = true;\n this.input.disabled = true;\n }\n\n this.input\n .addEventListener('change',function(e) { \n e.preventDefault();\n e.stopPropagation();\n \n // Don't allow changing if this field is a template\n if(self.schema.template) {\n this.value = self.value;\n return;\n }\n\n var val = this.value;\n \n // sanitize value\n var sanitized = self.sanitize(val);\n if(val !== sanitized) {\n this.value = sanitized;\n }\n \n self.is_dirty = true;\n\n self.refreshValue();\n self.onChange(true);\n });\n \n if(this.options.input_height) this.input.style.height = this.options.input_height;\n if(this.options.expand_height) {\n this.adjust_height = function(el) {\n if(!el) return;\n var i, ch=el.offsetHeight;\n // Input too short\n if(el.offsetHeight < el.scrollHeight) {\n i=0;\n while(el.offsetHeight < el.scrollHeight+3) {\n if(i>100) break;\n i++;\n ch++;\n el.style.height = ch+'px';\n }\n }\n else {\n i=0;\n while(el.offsetHeight >= el.scrollHeight+3) {\n if(i>100) break;\n i++;\n ch--;\n el.style.height = ch+'px';\n }\n el.style.height = (ch+1)+'px';\n }\n };\n \n this.input.addEventListener('keyup',function(e) {\n self.adjust_height(this);\n });\n this.input.addEventListener('change',function(e) {\n self.adjust_height(this);\n });\n this.adjust_height();\n }\n\n if(this.format) this.input.setAttribute('data-schemaformat',this.format);\n\n this.control = this.theme.getFormControl(this.label, this.input, this.description);\n this.container.appendChild(this.control);\n\n // Any special formatting that needs to happen after the input is added to the dom\n window.requestAnimationFrame(function() {\n // Skip in case the input is only a temporary editor,\n // otherwise, in the case of an ace_editor creation,\n // it will generate an error trying to append it to the missing parentNode\n if(self.input.parentNode) self.afterInputReady();\n if(self.adjust_height) self.adjust_height(self.input);\n });\n\n // Compile and store the template\n if(this.schema.template) {\n this.template = this.jsoneditor.compileTemplate(this.schema.template, this.template_engine);\n this.refreshValue();\n }\n else {\n this.refreshValue();\n }\n },\n enable: function() {\n if(!this.always_disabled) {\n this.input.disabled = false;\n // TODO: WYSIWYG and Markdown editors\n }\n this._super();\n },\n disable: function() {\n this.input.disabled = true;\n // TODO: WYSIWYG and Markdown editors\n this._super();\n },\n afterInputReady: function() {\n var self = this, options;\n \n // Code editor\n if(this.source_code) { \n // WYSIWYG html and bbcode editor\n if(this.options.wysiwyg && \n ['html','bbcode'].indexOf(this.input_type) >= 0 && \n window.jQuery && window.jQuery.fn && window.jQuery.fn.sceditor\n ) {\n options = $extend({},{\n plugins: self.input_type==='html'? 'xhtml' : 'bbcode',\n emoticonsEnabled: false,\n width: '100%',\n height: 300\n },JSONEditor.plugins.sceditor,self.options.sceditor_options||{});\n \n window.jQuery(self.input).sceditor(options);\n \n self.sceditor_instance = window.jQuery(self.input).sceditor('instance');\n \n self.sceditor_instance.blur(function() {\n // Get editor's value\n var val = window.jQuery(\"
    \"+self.sceditor_instance.val()+\"
    \");\n // Remove sceditor spans/divs\n window.jQuery('#sceditor-start-marker,#sceditor-end-marker,.sceditor-nlf',val).remove();\n // Set the value and update\n self.input.value = val.html();\n self.value = self.input.value;\n self.is_dirty = true;\n self.onChange(true);\n });\n }\n // EpicEditor for markdown (if it's loaded)\n else if (this.input_type === 'markdown' && window.EpicEditor) {\n this.epiceditor_container = document.createElement('div');\n this.input.parentNode.insertBefore(this.epiceditor_container,this.input);\n this.input.style.display = 'none';\n \n options = $extend({},JSONEditor.plugins.epiceditor,{\n container: this.epiceditor_container,\n clientSideStorage: false\n });\n \n this.epiceditor = new window.EpicEditor(options).load();\n \n this.epiceditor.importFile(null,this.getValue());\n \n this.epiceditor.on('update',function() {\n var val = self.epiceditor.exportFile();\n self.input.value = val;\n self.value = val;\n self.is_dirty = true;\n self.onChange(true);\n });\n }\n // ACE editor for everything else\n else if(window.ace) {\n var mode = this.input_type;\n // aliases for c/cpp\n if(mode === 'cpp' || mode === 'c++' || mode === 'c') {\n mode = 'c_cpp';\n }\n \n this.ace_container = document.createElement('div');\n this.ace_container.style.width = '100%';\n this.ace_container.style.position = 'relative';\n this.ace_container.style.height = '400px';\n this.input.parentNode.insertBefore(this.ace_container,this.input);\n this.input.style.display = 'none';\n this.ace_editor = window.ace.edit(this.ace_container);\n \n this.ace_editor.setValue(this.getValue());\n \n // The theme\n if(JSONEditor.plugins.ace.theme) this.ace_editor.setTheme('ace/theme/'+JSONEditor.plugins.ace.theme);\n // The mode\n mode = window.ace.require(\"ace/mode/\"+mode);\n if(mode) this.ace_editor.getSession().setMode(new mode.Mode());\n \n // Listen for changes\n this.ace_editor.on('change',function() {\n var val = self.ace_editor.getValue();\n self.input.value = val;\n self.refreshValue();\n self.is_dirty = true;\n self.onChange(true);\n });\n }\n }\n \n self.theme.afterInputReady(self.input);\n },\n refreshValue: function() {\n this.value = this.input.value;\n if(typeof this.value !== \"string\") this.value = '';\n this.serialized = this.value;\n },\n destroy: function() {\n // If using SCEditor, destroy the editor instance\n if(this.sceditor_instance) {\n this.sceditor_instance.destroy();\n }\n else if(this.epiceditor) {\n this.epiceditor.unload();\n }\n else if(this.ace_editor) {\n this.ace_editor.destroy();\n }\n \n \n this.template = null;\n if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input);\n if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label);\n if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description);\n\n this._super();\n },\n /**\n * This is overridden in derivative editors\n */\n sanitize: function(value) {\n return value;\n },\n /**\n * Re-calculates the value if needed\n */\n onWatchedFieldChange: function() { \n var self = this, vars, j;\n \n // If this editor needs to be rendered by a macro template\n if(this.template) {\n vars = this.getWatchedFieldValues();\n this.setValue(this.template(vars),false,true);\n }\n \n this._super();\n },\n showValidationErrors: function(errors) {\n var self = this;\n \n if(this.jsoneditor.options.show_errors === \"always\") {}\n else if(!this.is_dirty && this.previous_error_setting===this.jsoneditor.options.show_errors) return;\n \n this.previous_error_setting = this.jsoneditor.options.show_errors;\n\n var messages = [];\n $each(errors,function(i,error) {\n if(error.path === self.path) {\n messages.push(error.message);\n }\n });\n\n if(messages.length) {\n this.theme.addInputError(this.input, messages.join('. ')+'.');\n }\n else {\n this.theme.removeInputError(this.input);\n }\n }\n});\n","JSONEditor.defaults.editors.number = JSONEditor.defaults.editors.string.extend({\n sanitize: function(value) {\n return (value+\"\").replace(/[^0-9\\.\\-eE]/g,'');\n },\n getNumColumns: function() {\n return 2;\n },\n getValue: function() {\n return this.value*1;\n }\n});\n","JSONEditor.defaults.editors.integer = JSONEditor.defaults.editors.number.extend({\n sanitize: function(value) {\n value = value + \"\";\n return value.replace(/[^0-9\\-]/g,'');\n },\n getNumColumns: function() {\n return 2;\n }\n});\n","JSONEditor.defaults.editors.object = JSONEditor.AbstractEditor.extend({\n getDefault: function() {\n return $extend({},this.schema[\"default\"] || {});\n },\n getChildEditors: function() {\n return this.editors;\n },\n register: function() {\n this._super();\n if(this.editors) {\n for(var i in this.editors) {\n if(!this.editors.hasOwnProperty(i)) continue;\n this.editors[i].register();\n }\n }\n },\n unregister: function() {\n this._super();\n if(this.editors) {\n for(var i in this.editors) {\n if(!this.editors.hasOwnProperty(i)) continue;\n this.editors[i].unregister();\n }\n }\n },\n getNumColumns: function() {\n return Math.max(Math.min(12,this.maxwidth),3);\n },\n enable: function() {\n if(this.editjson_button) this.editjson_button.disabled = false;\n if(this.addproperty_button) this.addproperty_button.disabled = false;\n\n this._super();\n if(this.editors) {\n for(var i in this.editors) {\n if(!this.editors.hasOwnProperty(i)) continue;\n this.editors[i].enable();\n }\n }\n },\n disable: function() {\n if(this.editjson_button) this.editjson_button.disabled = true;\n if(this.addproperty_button) this.addproperty_button.disabled = true;\n this.hideEditJSON();\n\n this._super();\n if(this.editors) {\n for(var i in this.editors) {\n if(!this.editors.hasOwnProperty(i)) continue;\n this.editors[i].disable();\n }\n }\n },\n layoutEditors: function() {\n var self = this, i, j;\n\n if(!this.row_container) return;\n\n // Sort editors by propertyOrder\n this.property_order = Object.keys(this.editors);\n this.property_order = this.property_order.sort(function(a,b) {\n var ordera = self.editors[a].schema.propertyOrder;\n var orderb = self.editors[b].schema.propertyOrder;\n if(typeof ordera !== \"number\") ordera = 1000;\n if(typeof orderb !== \"number\") orderb = 1000;\n\n return ordera - orderb;\n });\n\n var container;\n\n if(this.format === 'grid') {\n var rows = [];\n $each(this.property_order, function(j,key) {\n var editor = self.editors[key];\n if(editor.property_removed) return;\n var found = false;\n var width = editor.options.hidden? 0 : (editor.options.grid_columns || editor.getNumColumns());\n var height = editor.options.hidden? 0 : editor.container.offsetHeight;\n // See if the editor will fit in any of the existing rows first\n for(var i=0; i height)) {\n found = i;\n }\n }\n }\n\n // If there isn't a spot in any of the existing rows, start a new row\n if(found === false) {\n rows.push({\n width: 0,\n minh: 999999,\n maxh: 0,\n editors: []\n });\n found = rows.length-1;\n }\n\n rows[found].editors.push({\n key: key,\n //editor: editor,\n width: width,\n height: height\n });\n rows[found].width += width;\n rows[found].minh = Math.min(rows[found].minh,height);\n rows[found].maxh = Math.max(rows[found].maxh,height);\n });\n\n // Make almost full rows width 12\n // Do this by increasing all editors' sizes proprotionately\n // Any left over space goes to the biggest editor\n // Don't touch rows with a width of 6 or less\n for(i=0; i rows[i].editors[biggest].width) biggest = j;\n rows[i].editors[j].width *= 12/rows[i].width;\n rows[i].editors[j].width = Math.floor(rows[i].editors[j].width);\n new_width += rows[i].editors[j].width;\n }\n if(new_width < 12) rows[i].editors[biggest].width += 12-new_width;\n rows[i].width = 12;\n }\n }\n\n // layout hasn't changed\n if(this.layout === JSON.stringify(rows)) return false;\n this.layout = JSON.stringify(rows);\n\n // Layout the form\n container = document.createElement('div');\n for(i=0; i= this.schema.maxProperties);\n\n if(this.addproperty_checkboxes) {\n this.addproperty_list.innerHTML = '';\n }\n this.addproperty_checkboxes = {};\n\n // Check for which editors can't be removed or added back\n for(i in this.cached_editors) {\n if(!this.cached_editors.hasOwnProperty(i)) continue;\n\n this.addPropertyCheckbox(i);\n\n if(this.isRequired(this.cached_editors[i]) && i in this.editors) {\n this.addproperty_checkboxes[i].disabled = true;\n }\n\n if(typeof this.schema.minProperties !== \"undefined\" && num_props <= this.schema.minProperties) {\n this.addproperty_checkboxes[i].disabled = this.addproperty_checkboxes[i].checked;\n if(!this.addproperty_checkboxes[i].checked) show_modal = true;\n }\n else if(!(i in this.editors)) {\n if(!can_add && !this.schema.properties.hasOwnProperty(i)) {\n this.addproperty_checkboxes[i].disabled = true;\n }\n else {\n this.addproperty_checkboxes[i].disabled = false;\n show_modal = true;\n }\n }\n else {\n show_modal = true;\n can_remove = true;\n }\n }\n\n if(this.canHaveAdditionalProperties()) {\n show_modal = true;\n }\n\n // Additional addproperty checkboxes not tied to a current editor\n for(i in this.schema.properties) {\n if(!this.schema.properties.hasOwnProperty(i)) continue;\n if(this.cached_editors[i]) continue;\n show_modal = true;\n this.addPropertyCheckbox(i);\n }\n\n // If no editors can be added or removed, hide the modal button\n if(!show_modal) {\n this.hideAddProperty();\n this.addproperty_controls.style.display = 'none';\n }\n // If additional properties are disabled\n else if(!this.canHaveAdditionalProperties()) {\n this.addproperty_add.style.display = 'none';\n this.addproperty_input.style.display = 'none';\n }\n // If no new properties can be added\n else if(!can_add) {\n this.addproperty_add.disabled = true;\n }\n // If new properties can be added\n else {\n this.addproperty_add.disabled = false;\n }\n },\n isRequired: function(editor) {\n if(typeof editor.schema.required === \"boolean\") return editor.schema.required;\n else if(Array.isArray(this.schema.required)) return this.schema.required.indexOf(editor.key) > -1;\n else if(this.jsoneditor.options.required_by_default) return true;\n else return false;\n },\n setValue: function(value, initial) {\n var self = this;\n value = value || {};\n\n if(typeof value !== \"object\" || Array.isArray(value)) value = {};\n\n // First, set the values for all of the defined properties\n $each(this.cached_editors, function(i,editor) {\n // Value explicitly set\n if(typeof value[i] !== \"undefined\") {\n self.addObjectProperty(i);\n editor.setValue(value[i],initial);\n }\n // Otherwise, remove value unless this is the initial set or it's required\n else if(!initial && !self.isRequired(editor)) {\n self.removeObjectProperty(i);\n }\n // Otherwise, set the value to the default\n else {\n editor.setValue(editor.getDefault(),initial);\n }\n });\n\n $each(value, function(i,val) {\n if(!self.cached_editors[i]) {\n self.addObjectProperty(i);\n if(self.editors[i]) self.editors[i].setValue(val,initial);\n }\n });\n\n this.refreshValue();\n this.layoutEditors();\n this.onChange();\n },\n showValidationErrors: function(errors) {\n var self = this;\n\n // Get all the errors that pertain to this editor\n var my_errors = [];\n var other_errors = [];\n $each(errors, function(i,error) {\n if(error.path === self.path) {\n my_errors.push(error);\n }\n else {\n other_errors.push(error);\n }\n });\n\n // Show errors for this editor\n if(this.error_holder) {\n if(my_errors.length) {\n var message = [];\n this.error_holder.innerHTML = '';\n this.error_holder.style.display = '';\n $each(my_errors, function(i,error) {\n self.error_holder.appendChild(self.theme.getErrorMessage(error.message));\n });\n }\n // Hide error area\n else {\n this.error_holder.style.display = 'none';\n }\n }\n\n // Show error for the table row if this is inside a table\n if(this.options.table_row) {\n if(my_errors.length) {\n this.theme.addTableRowError(this.container);\n }\n else {\n this.theme.removeTableRowError(this.container);\n }\n }\n\n // Show errors for child editors\n $each(this.editors, function(i,editor) {\n editor.showValidationErrors(other_errors);\n });\n }\n});\n","JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({\n getDefault: function() {\n return this.schema[\"default\"] || [];\n },\n register: function() {\n this._super();\n if(this.rows) {\n for(var i=0; i= this.schema.items.length) {\n if(this.schema.additionalItems===true) {\n return {};\n }\n else if(this.schema.additionalItems) {\n return $extend({},this.schema.additionalItems);\n }\n }\n else {\n return $extend({},this.schema.items[i]);\n }\n }\n else if(this.schema.items) {\n return $extend({},this.schema.items);\n }\n else {\n return {};\n }\n },\n getItemInfo: function(i) {\n var schema = this.getItemSchema(i);\n \n // Check if it's cached\n this.item_info = this.item_info || {};\n var stringified = JSON.stringify(schema);\n if(typeof this.item_info[stringified] !== \"undefined\") return this.item_info[stringified];\n \n // Get the schema for this item\n schema = this.jsoneditor.expandRefs(schema);\n \n this.item_info[stringified] = {\n title: schema.title || \"item\",\n 'default': schema[\"default\"],\n width: 12,\n child_editors: schema.properties || schema.items\n };\n \n return this.item_info[stringified];\n },\n getElementEditor: function(i) {\n var item_info = this.getItemInfo(i);\n var schema = this.getItemSchema(i);\n schema = this.jsoneditor.expandRefs(schema);\n schema.title = item_info.title+' '+(i+1);\n\n var editor = this.jsoneditor.getEditorClass(schema);\n\n var holder;\n if(this.tabs_holder) {\n holder = this.theme.getTabContent();\n }\n else if(item_info.child_editors) {\n holder = this.theme.getChildEditorHolder();\n }\n else {\n holder = this.theme.getIndentedPanel();\n }\n\n this.row_holder.appendChild(holder);\n\n var ret = this.jsoneditor.createEditor(editor,{\n jsoneditor: this.jsoneditor,\n schema: schema,\n container: holder,\n path: this.path+'.'+i,\n parent: this,\n required: true\n });\n ret.preBuild();\n ret.build();\n ret.postBuild();\n\n if(!ret.title_controls) {\n ret.array_controls = this.theme.getButtonHolder();\n holder.appendChild(ret.array_controls);\n }\n \n return ret;\n },\n destroy: function() {\n this.empty(true);\n if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title);\n if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description);\n if(this.row_holder && this.row_holder.parentNode) this.row_holder.parentNode.removeChild(this.row_holder);\n if(this.controls && this.controls.parentNode) this.controls.parentNode.removeChild(this.controls);\n if(this.panel && this.panel.parentNode) this.panel.parentNode.removeChild(this.panel);\n \n this.rows = this.row_cache = this.title = this.description = this.row_holder = this.panel = this.controls = null;\n\n this._super();\n },\n empty: function(hard) {\n if(!this.rows) return;\n var self = this;\n $each(this.rows,function(i,row) {\n if(hard) {\n if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab);\n self.destroyRow(row,true);\n self.row_cache[i] = null;\n }\n self.rows[i] = null;\n });\n self.rows = [];\n if(hard) self.row_cache = [];\n },\n destroyRow: function(row,hard) {\n var holder = row.container;\n if(hard) {\n row.destroy();\n if(holder.parentNode) holder.parentNode.removeChild(holder);\n if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab);\n }\n else {\n if(row.tab) row.tab.style.display = 'none';\n holder.style.display = 'none';\n row.unregister();\n }\n },\n getMax: function() {\n if((Array.isArray(this.schema.items)) && this.schema.additionalItems === false) {\n return Math.min(this.schema.items.length,this.schema.maxItems || Infinity);\n }\n else {\n return this.schema.maxItems || Infinity;\n }\n },\n refreshTabs: function(refresh_headers) {\n var self = this;\n $each(this.rows, function(i,row) {\n if(!row.tab) return;\n\n if(refresh_headers) {\n row.tab_text.textContent = row.getHeaderText();\n }\n else {\n if(row.tab === self.active_tab) {\n self.theme.markTabActive(row.tab);\n row.container.style.display = '';\n }\n else {\n self.theme.markTabInactive(row.tab);\n row.container.style.display = 'none';\n }\n }\n });\n },\n setValue: function(value, initial) {\n // Update the array's value, adding/removing rows when necessary\n value = value || [];\n \n if(!(Array.isArray(value))) value = [value];\n \n var serialized = JSON.stringify(value);\n if(serialized === this.serialized) return;\n\n // Make sure value has between minItems and maxItems items in it\n if(this.schema.minItems) {\n while(value.length < this.schema.minItems) {\n value.push(this.getItemInfo(value.length)[\"default\"]);\n }\n }\n if(this.getMax() && value.length > this.getMax()) {\n value = value.slice(0,this.getMax());\n }\n\n var self = this;\n $each(value,function(i,val) {\n if(self.rows[i]) {\n // TODO: don't set the row's value if it hasn't changed\n self.rows[i].setValue(val,initial);\n }\n else if(self.row_cache[i]) {\n self.rows[i] = self.row_cache[i];\n self.rows[i].setValue(val,initial);\n self.rows[i].container.style.display = '';\n if(self.rows[i].tab) self.rows[i].tab.style.display = '';\n self.rows[i].register();\n }\n else {\n self.addRow(val,initial);\n }\n });\n\n for(var j=value.length; j= this.rows.length;\n \n $each(this.rows,function(i,editor) {\n // Hide the move down button for the last row\n if(editor.movedown_button) {\n if(i === self.rows.length - 1) {\n editor.movedown_button.style.display = 'none';\n }\n else {\n editor.movedown_button.style.display = '';\n }\n }\n\n // Hide the delete button if we have minItems items\n if(editor.delete_button) {\n if(minItems) {\n editor.delete_button.style.display = 'none';\n }\n else {\n editor.delete_button.style.display = '';\n }\n }\n\n // Get the value for this editor\n self.value[i] = editor.getValue();\n });\n \n var controls_needed = false;\n \n if(!this.value.length) {\n this.delete_last_row_button.style.display = 'none';\n this.remove_all_rows_button.style.display = 'none';\n }\n else if(this.value.length === 1) { \n this.remove_all_rows_button.style.display = 'none'; \n\n // If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows\n if(minItems || this.hide_delete_last_row_buttons) {\n this.delete_last_row_button.style.display = 'none';\n }\n else {\n this.delete_last_row_button.style.display = '';\n controls_needed = true;\n }\n }\n else {\n if(minItems || this.hide_delete_last_row_buttons) {\n this.delete_last_row_button.style.display = 'none';\n }\n else {\n this.delete_last_row_button.style.display = '';\n controls_needed = true;\n }\n\n if(minItems || this.hide_delete_all_rows_buttons) {\n this.remove_all_rows_button.style.display = 'none';\n }\n else {\n this.remove_all_rows_button.style.display = '';\n controls_needed = true;\n }\n }\n\n // If there are maxItems in the array, hide the add button beneath the rows\n if((this.getMax() && this.getMax() <= this.rows.length) || this.hide_add_button){\n this.add_row_button.style.display = 'none';\n }\n else {\n this.add_row_button.style.display = '';\n controls_needed = true;\n } \n \n if(!this.collapsed && controls_needed) {\n this.controls.style.display = 'inline-block';\n }\n else {\n this.controls.style.display = 'none';\n }\n }\n },\n addRow: function(value, initial) {\n var self = this;\n var i = this.rows.length;\n \n self.rows[i] = this.getElementEditor(i);\n self.row_cache[i] = self.rows[i];\n\n if(self.tabs_holder) {\n self.rows[i].tab_text = document.createElement('span');\n self.rows[i].tab_text.textContent = self.rows[i].getHeaderText();\n self.rows[i].tab = self.theme.getTab(self.rows[i].tab_text);\n self.rows[i].tab.addEventListener('click', function(e) {\n self.active_tab = self.rows[i].tab;\n self.refreshTabs();\n e.preventDefault();\n e.stopPropagation();\n });\n\n self.theme.addTab(self.tabs_holder, self.rows[i].tab);\n }\n \n var controls_holder = self.rows[i].title_controls || self.rows[i].array_controls;\n \n // Buttons to delete row, move row up, and move row down\n if(!self.hide_delete_buttons) {\n self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete',this.translate('button_delete_row_title',[self.getItemTitle()]));\n self.rows[i].delete_button.className += ' delete';\n self.rows[i].delete_button.setAttribute('data-i',i);\n self.rows[i].delete_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = this.getAttribute('data-i')*1;\n\n var value = self.getValue();\n\n var newval = [];\n var new_active_tab = null;\n $each(value,function(j,row) {\n if(j===i) {\n // If the one we're deleting is the active tab\n if(self.rows[j].tab === self.active_tab) {\n // Make the next tab active if there is one\n // Note: the next tab is going to be the current tab after deletion\n if(self.rows[j+1]) new_active_tab = self.rows[j].tab;\n // Otherwise, make the previous tab active if there is one\n else if(j) new_active_tab = self.rows[j-1].tab;\n }\n \n return; // If this is the one we're deleting\n }\n newval.push(row);\n });\n self.setValue(newval);\n if(new_active_tab) {\n self.active_tab = new_active_tab;\n self.refreshTabs();\n }\n\n self.onChange(true);\n });\n \n if(controls_holder) {\n controls_holder.appendChild(self.rows[i].delete_button);\n }\n }\n \n if(i && !self.hide_move_buttons) {\n self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title'));\n self.rows[i].moveup_button.className += ' moveup';\n self.rows[i].moveup_button.setAttribute('data-i',i);\n self.rows[i].moveup_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = this.getAttribute('data-i')*1;\n\n if(i<=0) return;\n var rows = self.getValue();\n var tmp = rows[i-1];\n rows[i-1] = rows[i];\n rows[i] = tmp;\n\n self.setValue(rows);\n self.active_tab = self.rows[i-1].tab;\n self.refreshTabs();\n\n self.onChange(true);\n });\n \n if(controls_holder) {\n controls_holder.appendChild(self.rows[i].moveup_button);\n }\n }\n \n if(!self.hide_move_buttons) {\n self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title'));\n self.rows[i].movedown_button.className += ' movedown';\n self.rows[i].movedown_button.setAttribute('data-i',i);\n self.rows[i].movedown_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = this.getAttribute('data-i')*1;\n\n var rows = self.getValue();\n if(i>=rows.length-1) return;\n var tmp = rows[i+1];\n rows[i+1] = rows[i];\n rows[i] = tmp;\n\n self.setValue(rows);\n self.active_tab = self.rows[i+1].tab;\n self.refreshTabs();\n self.onChange(true);\n });\n \n if(controls_holder) {\n controls_holder.appendChild(self.rows[i].movedown_button);\n }\n }\n\n if(value) self.rows[i].setValue(value, initial);\n self.refreshTabs();\n },\n addControls: function() {\n var self = this;\n \n this.collapsed = false;\n this.toggle_button = this.getButton('','collapse',this.translate('button_collapse'));\n this.title_controls.appendChild(this.toggle_button);\n var row_holder_display = self.row_holder.style.display;\n var controls_display = self.controls.style.display;\n this.toggle_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n if(self.collapsed) {\n self.collapsed = false;\n if(self.panel) self.panel.style.display = '';\n self.row_holder.style.display = row_holder_display;\n if(self.tabs_holder) self.tabs_holder.style.display = '';\n self.controls.style.display = controls_display;\n self.setButtonText(this,'','collapse',self.translate('button_collapse'));\n }\n else {\n self.collapsed = true;\n self.row_holder.style.display = 'none';\n if(self.tabs_holder) self.tabs_holder.style.display = 'none';\n self.controls.style.display = 'none';\n if(self.panel) self.panel.style.display = 'none';\n self.setButtonText(this,'','expand',self.translate('button_expand'));\n }\n });\n\n // If it should start collapsed\n if(this.options.collapsed) {\n $trigger(this.toggle_button,'click');\n }\n \n // Collapse button disabled\n if(this.schema.options && typeof this.schema.options.disable_collapse !== \"undefined\") {\n if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none';\n }\n else if(this.jsoneditor.options.disable_collapse) {\n this.toggle_button.style.display = 'none';\n }\n \n // Add \"new row\" and \"delete last\" buttons below editor\n this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()]));\n \n this.add_row_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = self.rows.length;\n if(self.row_cache[i]) {\n self.rows[i] = self.row_cache[i];\n self.rows[i].setValue(self.rows[i].getDefault(), true);\n self.rows[i].container.style.display = '';\n if(self.rows[i].tab) self.rows[i].tab.style.display = '';\n self.rows[i].register();\n }\n else {\n self.addRow();\n }\n self.active_tab = self.rows[i].tab;\n self.refreshTabs();\n self.refreshValue();\n self.onChange(true);\n });\n self.controls.appendChild(this.add_row_button);\n\n this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()]));\n this.delete_last_row_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var rows = self.getValue();\n \n var new_active_tab = null;\n if(self.rows.length > 1 && self.rows[self.rows.length-1].tab === self.active_tab) new_active_tab = self.rows[self.rows.length-2].tab;\n \n rows.pop();\n self.setValue(rows);\n if(new_active_tab) {\n self.active_tab = new_active_tab;\n self.refreshTabs();\n }\n self.onChange(true);\n });\n self.controls.appendChild(this.delete_last_row_button);\n\n this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title'));\n this.remove_all_rows_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n self.setValue([]);\n self.onChange(true);\n });\n self.controls.appendChild(this.remove_all_rows_button);\n\n if(self.tabs) {\n this.add_row_button.style.width = '100%';\n this.add_row_button.style.textAlign = 'left';\n this.add_row_button.style.marginBottom = '3px';\n \n this.delete_last_row_button.style.width = '100%';\n this.delete_last_row_button.style.textAlign = 'left';\n this.delete_last_row_button.style.marginBottom = '3px';\n \n this.remove_all_rows_button.style.width = '100%';\n this.remove_all_rows_button.style.textAlign = 'left';\n this.remove_all_rows_button.style.marginBottom = '3px';\n }\n },\n showValidationErrors: function(errors) {\n var self = this;\n\n // Get all the errors that pertain to this editor\n var my_errors = [];\n var other_errors = [];\n $each(errors, function(i,error) {\n if(error.path === self.path) {\n my_errors.push(error);\n }\n else {\n other_errors.push(error);\n }\n });\n\n // Show errors for this editor\n if(this.error_holder) {\n if(my_errors.length) {\n var message = [];\n this.error_holder.innerHTML = '';\n this.error_holder.style.display = '';\n $each(my_errors, function(i,error) {\n self.error_holder.appendChild(self.theme.getErrorMessage(error.message));\n });\n }\n // Hide error area\n else {\n this.error_holder.style.display = 'none';\n }\n }\n\n // Show errors for child editors\n $each(this.rows, function(i,row) {\n row.showValidationErrors(other_errors);\n });\n }\n});\n","JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({\n register: function() {\n this._super();\n if(this.rows) {\n for(var i=0; i this.schema.maxItems) {\n value = value.slice(0,this.schema.maxItems);\n }\n\n var serialized = JSON.stringify(value);\n if(serialized === this.serialized) return;\n\n var numrows_changed = false;\n\n var self = this;\n $each(value,function(i,val) {\n if(self.rows[i]) {\n // TODO: don't set the row's value if it hasn't changed\n self.rows[i].setValue(val);\n }\n else {\n self.addRow(val);\n numrows_changed = true;\n }\n });\n\n for(var j=value.length; j= this.rows.length;\n\n var need_row_buttons = false;\n $each(this.rows,function(i,editor) {\n // Hide the move down button for the last row\n if(editor.movedown_button) {\n if(i === self.rows.length - 1) {\n editor.movedown_button.style.display = 'none';\n }\n else {\n need_row_buttons = true;\n editor.movedown_button.style.display = '';\n }\n }\n\n // Hide the delete button if we have minItems items\n if(editor.delete_button) {\n if(minItems) {\n editor.delete_button.style.display = 'none';\n }\n else {\n need_row_buttons = true;\n editor.delete_button.style.display = '';\n }\n }\n\n if(editor.moveup_button) {\n need_row_buttons = true;\n }\n });\n\n // Show/hide controls column in table\n $each(this.rows,function(i,editor) {\n if(need_row_buttons) {\n editor.controls_cell.style.display = '';\n }\n else {\n editor.controls_cell.style.display = 'none';\n }\n });\n if(need_row_buttons) {\n this.controls_header_cell.style.display = '';\n }\n else {\n this.controls_header_cell.style.display = 'none';\n }\n\n var controls_needed = false;\n\n if(!this.value.length) {\n this.delete_last_row_button.style.display = 'none';\n this.remove_all_rows_button.style.display = 'none';\n this.table.style.display = 'none';\n }\n else if(this.value.length === 1) {\n this.table.style.display = '';\n this.remove_all_rows_button.style.display = 'none';\n\n // If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows\n if(minItems || this.hide_delete_last_row_buttons) {\n this.delete_last_row_button.style.display = 'none';\n }\n else {\n this.delete_last_row_button.style.display = '';\n controls_needed = true;\n }\n }\n else {\n this.table.style.display = '';\n\n if(minItems || this.hide_delete_last_row_buttons) {\n this.delete_last_row_button.style.display = 'none';\n }\n else {\n this.delete_last_row_button.style.display = '';\n controls_needed = true;\n }\n\n if(minItems || this.hide_delete_all_rows_buttons) {\n this.remove_all_rows_button.style.display = 'none';\n }\n else {\n this.remove_all_rows_button.style.display = '';\n controls_needed = true;\n }\n }\n\n // If there are maxItems in the array, hide the add button beneath the rows\n if((this.schema.maxItems && this.schema.maxItems <= this.rows.length) || this.hide_add_button) {\n this.add_row_button.style.display = 'none';\n }\n else {\n this.add_row_button.style.display = '';\n controls_needed = true;\n }\n\n if(!controls_needed) {\n this.controls.style.display = 'none';\n }\n else {\n this.controls.style.display = '';\n }\n },\n refreshValue: function() {\n var self = this;\n this.value = [];\n\n $each(this.rows,function(i,editor) {\n // Get the value for this editor\n self.value[i] = editor.getValue();\n });\n this.serialized = JSON.stringify(this.value);\n },\n addRow: function(value) {\n var self = this;\n var i = this.rows.length;\n\n self.rows[i] = this.getElementEditor(i);\n\n var controls_holder = self.rows[i].table_controls;\n\n // Buttons to delete row, move row up, and move row down\n if(!this.hide_delete_buttons) {\n self.rows[i].delete_button = this.getButton('','delete',this.translate('button_delete_row_title_short'));\n self.rows[i].delete_button.className += ' delete';\n self.rows[i].delete_button.setAttribute('data-i',i);\n self.rows[i].delete_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = this.getAttribute('data-i')*1;\n\n var value = self.getValue();\n\n var newval = [];\n $each(value,function(j,row) {\n if(j===i) return; // If this is the one we're deleting\n newval.push(row);\n });\n self.setValue(newval);\n self.onChange(true);\n });\n controls_holder.appendChild(self.rows[i].delete_button);\n }\n\n\n if(i && !this.hide_move_buttons) {\n self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title'));\n self.rows[i].moveup_button.className += ' moveup';\n self.rows[i].moveup_button.setAttribute('data-i',i);\n self.rows[i].moveup_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = this.getAttribute('data-i')*1;\n\n if(i<=0) return;\n var rows = self.getValue();\n var tmp = rows[i-1];\n rows[i-1] = rows[i];\n rows[i] = tmp;\n\n self.setValue(rows);\n self.onChange(true);\n });\n controls_holder.appendChild(self.rows[i].moveup_button);\n }\n\n if(!this.hide_move_buttons) {\n self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title'));\n self.rows[i].movedown_button.className += ' movedown';\n self.rows[i].movedown_button.setAttribute('data-i',i);\n self.rows[i].movedown_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n var i = this.getAttribute('data-i')*1;\n var rows = self.getValue();\n if(i>=rows.length-1) return;\n var tmp = rows[i+1];\n rows[i+1] = rows[i];\n rows[i] = tmp;\n\n self.setValue(rows);\n self.onChange(true);\n });\n controls_holder.appendChild(self.rows[i].movedown_button);\n }\n\n if(value) self.rows[i].setValue(value);\n },\n addControls: function() {\n var self = this;\n\n this.collapsed = false;\n this.toggle_button = this.getButton('','collapse',this.translate('button_collapse'));\n if(this.title_controls) {\n this.title_controls.appendChild(this.toggle_button);\n this.toggle_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if(self.collapsed) {\n self.collapsed = false;\n self.panel.style.display = '';\n self.setButtonText(this,'','collapse',self.translate('button_collapse'));\n }\n else {\n self.collapsed = true;\n self.panel.style.display = 'none';\n self.setButtonText(this,'','expand',self.translate('button_expand'));\n }\n });\n\n // If it should start collapsed\n if(this.options.collapsed) {\n $trigger(this.toggle_button,'click');\n }\n\n // Collapse button disabled\n if(this.schema.options && typeof this.schema.options.disable_collapse !== \"undefined\") {\n if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none';\n }\n else if(this.jsoneditor.options.disable_collapse) {\n this.toggle_button.style.display = 'none';\n }\n }\n\n // Add \"new row\" and \"delete last\" buttons below editor\n this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()]));\n this.add_row_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n self.addRow();\n self.refreshValue();\n self.refreshRowButtons();\n self.onChange(true);\n });\n self.controls.appendChild(this.add_row_button);\n\n this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()]));\n this.delete_last_row_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n var rows = self.getValue();\n rows.pop();\n self.setValue(rows);\n self.onChange(true);\n });\n self.controls.appendChild(this.delete_last_row_button);\n\n this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title'));\n this.remove_all_rows_button.addEventListener('click',function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n self.setValue([]);\n self.onChange(true);\n });\n self.controls.appendChild(this.remove_all_rows_button);\n }\n});\n","// Multiple Editor (for when `type` is an array)\nJSONEditor.defaults.editors.multiple = JSONEditor.AbstractEditor.extend({\n register: function() {\n if(this.editors) {\n for(var i=0; inull';\n }\n // Array or Object\n else if(typeof el === \"object\") {\n // TODO: use theme\n var ret = '';\n\n $each(el,function(i,child) {\n var html = self.getHTML(child);\n\n // Add the keys to object children\n if(!(Array.isArray(el))) {\n // TODO: use theme\n html = '
    '+i+': '+html+'
    ';\n }\n\n // TODO: use theme\n ret += '
  • '+html+'
  • ';\n });\n\n if(Array.isArray(el)) ret = '
      '+ret+'
    ';\n else ret = \"
      \"+ret+'
    ';\n\n return ret;\n }\n // Boolean\n else if(typeof el === \"boolean\") {\n return el? 'true' : 'false';\n }\n // String\n else if(typeof el === \"string\") {\n return el.replace(/&/g,'&').replace(//g,'>');\n }\n // Number\n else {\n return el;\n }\n },\n setValue: function(val) {\n if(this.value !== val) {\n this.value = val;\n this.refreshValue();\n this.onChange();\n }\n },\n destroy: function() {\n if(this.display_area && this.display_area.parentNode) this.display_area.parentNode.removeChild(this.display_area);\n if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title);\n if(this.switcher && this.switcher.parentNode) this.switcher.parentNode.removeChild(this.switcher);\n\n this._super();\n }\n});\n","JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({\n setValue: function(value,initial) {\n value = this.typecast(value||'');\n\n // Sanitize value before setting it\n var sanitized = value;\n if(this.enum_values.indexOf(sanitized) < 0) {\n sanitized = this.enum_values[0];\n }\n\n if(this.value === sanitized) {\n return;\n }\n\n this.input.value = this.enum_options[this.enum_values.indexOf(sanitized)];\n if(this.select2) this.select2.select2('val',this.input.value);\n this.value = sanitized;\n this.onChange();\n },\n register: function() {\n this._super();\n if(!this.input) return;\n this.input.setAttribute('name',this.formname);\n },\n unregister: function() {\n this._super();\n if(!this.input) return;\n this.input.removeAttribute('name');\n },\n getNumColumns: function() {\n if(!this.enum_options) return 3;\n var longest_text = this.getTitle().length;\n for(var i=0; i 2 || (this.enum_options.length && this.enumSource))) {\n var options = $extend({},JSONEditor.plugins.select2);\n if(this.schema.options && this.schema.options.select2_options) options = $extend(options,this.schema.options.select2_options);\n this.select2 = window.jQuery(this.input).select2(options);\n var self = this;\n this.select2.on('select2-blur',function() {\n self.input.value = self.select2.select2('val');\n self.onInputChange();\n });\n this.select2.on('change',function() {\n self.input.value = self.select2.select2('val');\n self.onInputChange();\n });\n }\n else {\n this.select2 = null;\n }\n },\n postBuild: function() {\n this._super();\n this.theme.afterInputReady(this.input);\n this.setupSelect2();\n },\n onWatchedFieldChange: function() {\n var self = this, vars, j;\n \n // If this editor uses a dynamic select box\n if(this.enumSource) {\n vars = this.getWatchedFieldValues();\n var select_options = [];\n var select_titles = [];\n \n for(var i=0; i= 2 || (this.enum_options.length && this.enumSource))) {\n var options = $extend({},JSONEditor.plugins.selectize);\n if(this.schema.options && this.schema.options.selectize_options) options = $extend(options,this.schema.options.selectize_options);\n this.selectize = window.jQuery(this.input).selectize($extend(options,\n {\n create: true,\n onChange : function() {\n self.onInputChange();\n }\n }));\n }\n else {\n this.selectize = null;\n }\n },\n postBuild: function() {\n this._super();\n this.theme.afterInputReady(this.input);\n this.setupSelectize();\n },\n onWatchedFieldChange: function() {\n var self = this, vars, j;\n\n // If this editor uses a dynamic select box\n if(this.enumSource) {\n vars = this.getWatchedFieldValues();\n var select_options = [];\n var select_titles = [];\n\n for(var i=0; iSize: '+Math.floor((this.value.length-this.value.split(',')[0].length-1)/1.33333)+' bytes';\n if(mime.substr(0,5)===\"image\") {\n this.preview.innerHTML += '
    ';\n var img = document.createElement('img');\n img.style.maxWidth = '100%';\n img.style.maxHeight = '100px';\n img.src = this.value;\n this.preview.appendChild(img);\n }\n }\n },\n enable: function() {\n if(this.uploader) this.uploader.disabled = false;\n this._super();\n },\n disable: function() {\n if(this.uploader) this.uploader.disabled = true;\n this._super();\n },\n setValue: function(val) {\n if(this.value !== val) {\n this.value = val;\n this.input.value = this.value;\n this.refreshPreview();\n this.onChange();\n }\n },\n destroy: function() {\n if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview);\n if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title);\n if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input);\n if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader);\n\n this._super();\n }\n});\n","JSONEditor.defaults.editors.upload = JSONEditor.AbstractEditor.extend({\n getNumColumns: function() {\n return 4;\n },\n build: function() { \n var self = this;\n this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle());\n\n // Input that holds the base64 string\n this.input = this.theme.getFormInputField('hidden');\n this.container.appendChild(this.input);\n \n // Don't show uploader if this is readonly\n if(!this.schema.readOnly && !this.schema.readonly) {\n\n if(!this.jsoneditor.options.upload) throw \"Upload handler required for upload editor\";\n\n // File uploader\n this.uploader = this.theme.getFormInputField('file');\n \n this.uploader.addEventListener('change',function(e) {\n e.preventDefault();\n e.stopPropagation();\n \n if(this.files && this.files.length) {\n var fr = new FileReader();\n fr.onload = function(evt) {\n self.preview_value = evt.target.result;\n self.refreshPreview();\n self.onChange(true);\n fr = null;\n };\n fr.readAsDataURL(this.files[0]);\n }\n });\n }\n\n var description = this.schema.description;\n if (!description) description = '';\n\n this.preview = this.theme.getFormInputDescription(description);\n this.container.appendChild(this.preview);\n\n this.control = this.theme.getFormControl(this.label, this.uploader||this.input, this.preview);\n this.container.appendChild(this.control);\n },\n refreshPreview: function() {\n if(this.last_preview === this.preview_value) return;\n this.last_preview = this.preview_value;\n\n this.preview.innerHTML = '';\n \n if(!this.preview_value) return;\n\n var self = this;\n\n var mime = this.preview_value.match(/^data:([^;,]+)[;,]/);\n if(mime) mime = mime[1];\n if(!mime) mime = 'unknown';\n\n var file = this.uploader.files[0];\n\n this.preview.innerHTML = 'Type: '+mime+', Size: '+file.size+' bytes';\n if(mime.substr(0,5)===\"image\") {\n this.preview.innerHTML += '
    ';\n var img = document.createElement('img');\n img.style.maxWidth = '100%';\n img.style.maxHeight = '100px';\n img.src = this.preview_value;\n this.preview.appendChild(img);\n }\n\n this.preview.innerHTML += '
    ';\n var uploadButton = this.getButton('Upload', 'upload', 'Upload');\n this.preview.appendChild(uploadButton);\n uploadButton.addEventListener('click',function(event) {\n event.preventDefault();\n\n uploadButton.setAttribute(\"disabled\", \"disabled\");\n self.theme.removeInputError(self.uploader);\n\n if (self.theme.getProgressBar) {\n self.progressBar = self.theme.getProgressBar();\n self.preview.appendChild(self.progressBar);\n }\n\n self.jsoneditor.options.upload(self.path, file, {\n success: function(url) {\n self.setValue(url);\n\n if(self.parent) self.parent.onChildEditorChange(self);\n else self.jsoneditor.onChange();\n\n if (self.progressBar) self.preview.removeChild(self.progressBar);\n uploadButton.removeAttribute(\"disabled\");\n },\n failure: function(error) {\n self.theme.addInputError(self.uploader, error);\n if (self.progressBar) self.preview.removeChild(self.progressBar);\n uploadButton.removeAttribute(\"disabled\");\n },\n updateProgress: function(progress) {\n if (self.progressBar) {\n if (progress) self.theme.updateProgressBar(self.progressBar, progress);\n else self.theme.updateProgressBarUnknown(self.progressBar);\n }\n }\n });\n });\n },\n enable: function() {\n if(this.uploader) this.uploader.disabled = false;\n this._super();\n },\n disable: function() {\n if(this.uploader) this.uploader.disabled = true;\n this._super();\n },\n setValue: function(val) {\n if(this.value !== val) {\n this.value = val;\n this.input.value = this.value;\n this.onChange();\n }\n },\n destroy: function() {\n if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview);\n if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title);\n if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input);\n if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader);\n\n this._super();\n }\n});\n","JSONEditor.defaults.editors.checkbox = JSONEditor.AbstractEditor.extend({\n setValue: function(value,initial) {\n this.value = !!value;\n this.input.checked = this.value;\n this.onChange();\n },\n register: function() {\n this._super();\n if(!this.input) return;\n this.input.setAttribute('name',this.formname);\n },\n unregister: function() {\n this._super();\n if(!this.input) return;\n this.input.removeAttribute('name');\n },\n getNumColumns: function() {\n return Math.min(12,Math.max(this.getTitle().length/7,2));\n },\n build: function() {\n var self = this;\n if(!this.options.compact) {\n this.label = this.header = this.theme.getCheckboxLabel(this.getTitle());\n }\n if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description);\n if(this.options.compact) this.container.className += ' compact';\n\n this.input = this.theme.getCheckbox();\n this.control = this.theme.getFormControl(this.label, this.input, this.description);\n\n if(this.schema.readOnly || this.schema.readonly) {\n this.always_disabled = true;\n this.input.disabled = true;\n }\n\n this.input.addEventListener('change',function(e) {\n e.preventDefault();\n e.stopPropagation();\n self.value = this.checked;\n self.onChange(true);\n });\n\n this.container.appendChild(this.control);\n },\n enable: function() {\n if(!this.always_disabled) {\n this.input.disabled = false;\n }\n this._super();\n },\n disable: function() {\n this.input.disabled = true;\n this._super();\n },\n destroy: function() {\n if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label);\n if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description);\n if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input);\n this._super();\n }\n});\n","JSONEditor.defaults.editors.arraySelectize = JSONEditor.AbstractEditor.extend({\n build: function() {\n this.title = this.theme.getFormInputLabel(this.getTitle());\n\n this.title_controls = this.theme.getHeaderButtonHolder();\n this.title.appendChild(this.title_controls);\n this.error_holder = document.createElement('div');\n\n if(this.schema.description) {\n this.description = this.theme.getDescription(this.schema.description);\n }\n\n this.input = document.createElement('select');\n this.input.setAttribute('multiple', 'multiple');\n\n var group = this.theme.getFormControl(this.title, this.input, this.description);\n\n this.container.appendChild(group);\n this.container.appendChild(this.error_holder);\n\n window.jQuery(this.input).selectize({\n delimiter: false,\n createOnBlur: true,\n create: true\n });\n },\n postBuild: function() {\n var self = this;\n this.input.selectize.on('change', function(event) {\n self.refreshValue();\n self.onChange(true);\n });\n },\n destroy: function() {\n this.empty(true);\n if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title);\n if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description);\n if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input);\n\n this._super();\n },\n empty: function(hard) {},\n setValue: function(value, initial) {\n var self = this;\n // Update the array's value, adding/removing rows when necessary\n value = value || [];\n if(!(Array.isArray(value))) value = [value];\n\n this.input.selectize.clearOptions();\n this.input.selectize.clear(true);\n\n value.forEach(function(item) {\n self.input.selectize.addOption({text: item, value: item});\n });\n this.input.selectize.setValue(value);\n\n this.refreshValue(initial);\n },\n refreshValue: function(force) {\n this.value = this.input.selectize.getValue();\n },\n showValidationErrors: function(errors) {\n var self = this;\n\n // Get all the errors that pertain to this editor\n var my_errors = [];\n var other_errors = [];\n $each(errors, function(i,error) {\n if(error.path === self.path) {\n my_errors.push(error);\n }\n else {\n other_errors.push(error);\n }\n });\n\n // Show errors for this editor\n if(this.error_holder) {\n\n if(my_errors.length) {\n var message = [];\n this.error_holder.innerHTML = '';\n this.error_holder.style.display = '';\n $each(my_errors, function(i,error) {\n self.error_holder.appendChild(self.theme.getErrorMessage(error.message));\n });\n }\n // Hide error area\n else {\n this.error_holder.style.display = 'none';\n }\n }\n }\n});\n","var matchKey = (function () {\n var elem = document.documentElement;\n\n if (elem.matches) return 'matches';\n else if (elem.webkitMatchesSelector) return 'webkitMatchesSelector';\n else if (elem.mozMatchesSelector) return 'mozMatchesSelector';\n else if (elem.msMatchesSelector) return 'msMatchesSelector';\n else if (elem.oMatchesSelector) return 'oMatchesSelector';\n})();\n\nJSONEditor.AbstractTheme = Class.extend({\n getContainer: function() {\n return document.createElement('div');\n },\n getFloatRightLinkHolder: function() {\n var el = document.createElement('div');\n el.style = el.style || {};\n el.style.cssFloat = 'right';\n el.style.marginLeft = '10px';\n return el;\n },\n getModal: function() {\n var el = document.createElement('div');\n el.style.backgroundColor = 'white';\n el.style.border = '1px solid black';\n el.style.boxShadow = '3px 3px black';\n el.style.position = 'absolute';\n el.style.zIndex = '10';\n el.style.display = 'none';\n return el;\n },\n getGridContainer: function() {\n var el = document.createElement('div');\n return el;\n },\n getGridRow: function() {\n var el = document.createElement('div');\n el.className = 'row';\n return el;\n },\n getGridColumn: function() {\n var el = document.createElement('div');\n return el;\n },\n setGridColumnSize: function(el,size) {\n\n },\n getLink: function(text) {\n var el = document.createElement('a');\n el.setAttribute('href','#');\n el.appendChild(document.createTextNode(text));\n return el;\n },\n disableHeader: function(header) {\n header.style.color = '#ccc';\n },\n disableLabel: function(label) {\n label.style.color = '#ccc';\n },\n enableHeader: function(header) {\n header.style.color = '';\n },\n enableLabel: function(label) {\n label.style.color = '';\n },\n getFormInputLabel: function(text) {\n var el = document.createElement('label');\n el.appendChild(document.createTextNode(text));\n return el;\n },\n getCheckboxLabel: function(text) {\n var el = this.getFormInputLabel(text);\n el.style.fontWeight = 'normal';\n return el;\n },\n getHeader: function(text) {\n var el = document.createElement('h3');\n if(typeof text === \"string\") {\n el.textContent = text;\n }\n else {\n el.appendChild(text);\n }\n\n return el;\n },\n getCheckbox: function() {\n var el = this.getFormInputField('checkbox');\n el.style.display = 'inline-block';\n el.style.width = 'auto';\n return el;\n },\n getMultiCheckboxHolder: function(controls,label,description) {\n var el = document.createElement('div');\n\n if(label) {\n label.style.display = 'block';\n el.appendChild(label);\n }\n\n for(var i in controls) {\n if(!controls.hasOwnProperty(i)) continue;\n controls[i].style.display = 'inline-block';\n controls[i].style.marginRight = '20px';\n el.appendChild(controls[i]);\n }\n\n if(description) el.appendChild(description);\n\n return el;\n },\n getSelectInput: function(options) {\n var select = document.createElement('select');\n if(options) this.setSelectOptions(select, options);\n return select;\n },\n getSwitcher: function(options) {\n var switcher = this.getSelectInput(options);\n switcher.style.backgroundColor = 'transparent';\n switcher.style.display = 'inline-block';\n switcher.style.fontStyle = 'italic';\n switcher.style.fontWeight = 'normal';\n switcher.style.height = 'auto';\n switcher.style.marginBottom = 0;\n switcher.style.marginLeft = '5px';\n switcher.style.padding = '0 0 0 3px';\n switcher.style.width = 'auto';\n return switcher;\n },\n getSwitcherOptions: function(switcher) {\n return switcher.getElementsByTagName('option');\n },\n setSwitcherOptions: function(switcher, options, titles) {\n this.setSelectOptions(switcher, options, titles);\n },\n setSelectOptions: function(select, options, titles) {\n titles = titles || [];\n select.innerHTML = '';\n for(var i=0; i
    \";\n return el;\n },\n applyStyles: function(el,styles) {\n el.style = el.style || {};\n for(var i in styles) {\n if(!styles.hasOwnProperty(i)) continue;\n el.style[i] = styles[i];\n }\n },\n closest: function(elem, selector) {\n while (elem && elem !== document) {\n if (elem[matchKey]) {\n if (elem[matchKey](selector)) {\n return elem;\n } else {\n elem = elem.parentNode;\n }\n }\n else {\n return false;\n }\n }\n return false;\n },\n getTab: function(span) {\n var el = document.createElement('div');\n el.appendChild(span);\n el.style = el.style || {};\n this.applyStyles(el,{\n border: '1px solid #ccc',\n borderWidth: '1px 0 1px 1px',\n textAlign: 'center',\n lineHeight: '30px',\n borderRadius: '5px',\n borderBottomRightRadius: 0,\n borderTopRightRadius: 0,\n fontWeight: 'bold',\n cursor: 'pointer'\n });\n return el;\n },\n getTabContentHolder: function(tab_holder) {\n return tab_holder.children[1];\n },\n getTabContent: function() {\n return this.getIndentedPanel();\n },\n markTabActive: function(tab) {\n this.applyStyles(tab,{\n opacity: 1,\n background: 'white'\n });\n },\n markTabInactive: function(tab) {\n this.applyStyles(tab,{\n opacity:0.5,\n background: ''\n });\n },\n addTab: function(holder, tab) {\n holder.children[0].appendChild(tab);\n },\n getBlockLink: function() {\n var link = document.createElement('a');\n link.style.display = 'block';\n return link;\n },\n getBlockLinkHolder: function() {\n var el = document.createElement('div');\n return el;\n },\n getLinksHolder: function() {\n var el = document.createElement('div');\n return el;\n },\n createMediaLink: function(holder,link,media) {\n holder.appendChild(link);\n media.style.width='100%';\n holder.appendChild(media);\n },\n createImageLink: function(holder,link,image) {\n holder.appendChild(link);\n link.appendChild(image);\n }\n});\n","JSONEditor.defaults.themes.bootstrap2 = JSONEditor.AbstractTheme.extend({\n getRangeInput: function(min, max, step) {\n // TODO: use bootstrap slider\n return this._super(min, max, step);\n },\n getGridContainer: function() {\n var el = document.createElement('div');\n el.className = 'container-fluid';\n return el;\n },\n getGridRow: function() {\n var el = document.createElement('div');\n el.className = 'row-fluid';\n return el;\n },\n getFormInputLabel: function(text) {\n var el = this._super(text);\n el.style.display = 'inline-block';\n el.style.fontWeight = 'bold';\n return el;\n },\n setGridColumnSize: function(el,size) {\n el.className = 'span'+size;\n },\n getSelectInput: function(options) {\n var input = this._super(options);\n input.style.width = 'auto';\n input.style.maxWidth = '98%';\n return input;\n },\n getFormInputField: function(type) {\n var el = this._super(type);\n el.style.width = '98%';\n return el;\n },\n afterInputReady: function(input) {\n if(input.controlgroup) return;\n input.controlgroup = this.closest(input,'.control-group');\n input.controls = this.closest(input,'.controls');\n if(this.closest(input,'.compact')) {\n input.controlgroup.className = input.controlgroup.className.replace(/control-group/g,'').replace(/[ ]{2,}/g,' ');\n input.controls.className = input.controlgroup.className.replace(/controls/g,'').replace(/[ ]{2,}/g,' ');\n input.style.marginBottom = 0;\n }\n\n // TODO: use bootstrap slider\n },\n getIndentedPanel: function() {\n var el = document.createElement('div');\n el.className = 'well well-small';\n el.style.paddingBottom = 0;\n return el;\n },\n getFormInputDescription: function(text) {\n var el = document.createElement('p');\n el.className = 'help-inline';\n el.textContent = text;\n return el;\n },\n getFormControl: function(label, input, description) {\n var ret = document.createElement('div');\n ret.className = 'control-group';\n\n var controls = document.createElement('div');\n controls.className = 'controls';\n\n if(label && input.getAttribute('type') === 'checkbox') {\n ret.appendChild(controls);\n label.className += ' checkbox';\n label.appendChild(input);\n controls.appendChild(label);\n controls.style.height = '30px';\n }\n else {\n if(label) {\n label.className += ' control-label';\n ret.appendChild(label);\n }\n controls.appendChild(input);\n ret.appendChild(controls);\n }\n\n if(description) controls.appendChild(description);\n\n return ret;\n },\n getHeaderButtonHolder: function() {\n var el = this.getButtonHolder();\n el.style.marginLeft = '10px';\n return el;\n },\n getButtonHolder: function() {\n var el = document.createElement('div');\n el.className = 'btn-group';\n return el;\n },\n getButton: function(text, icon, title) {\n var el = this._super(text, icon, title);\n el.className += ' btn btn-default';\n return el;\n },\n getTable: function() {\n var el = document.createElement('table');\n el.className = 'table table-bordered';\n el.style.width = 'auto';\n el.style.maxWidth = 'none';\n return el;\n },\n addInputError: function(input,text) {\n if(!input.controlgroup || !input.controls) return;\n input.controlgroup.className += ' error';\n if(!input.errmsg) {\n input.errmsg = document.createElement('p');\n input.errmsg.className = 'help-block errormsg';\n input.controls.appendChild(input.errmsg);\n }\n else {\n input.errmsg.style.display = '';\n }\n\n input.errmsg.textContent = text;\n },\n removeInputError: function(input) {\n if(!input.errmsg) return;\n input.errmsg.style.display = 'none';\n input.controlgroup.className = input.controlgroup.className.replace(/\\s?error/g,'');\n },\n getTabHolder: function() {\n var el = document.createElement('div');\n el.className = 'tabbable tabs-left';\n el.innerHTML = \"
    \";\n return el;\n },\n getTab: function(text) {\n var el = document.createElement('li');\n var a = document.createElement('a');\n a.setAttribute('href','#');\n a.appendChild(text);\n el.appendChild(a);\n return el;\n },\n getTabContentHolder: function(tab_holder) {\n return tab_holder.children[1];\n },\n getTabContent: function() {\n var el = document.createElement('div');\n el.className = 'tab-pane active';\n return el;\n },\n markTabActive: function(tab) {\n tab.className += ' active';\n },\n markTabInactive: function(tab) {\n tab.className = tab.className.replace(/\\s?active/g,'');\n },\n addTab: function(holder, tab) {\n holder.children[0].appendChild(tab);\n },\n getProgressBar: function() {\n var container = document.createElement('div');\n container.className = 'progress';\n\n var bar = document.createElement('div');\n bar.className = 'bar';\n bar.style.width = '0%';\n container.appendChild(bar);\n\n return container;\n },\n updateProgressBar: function(progressBar, progress) {\n if (!progressBar) return;\n\n progressBar.firstChild.style.width = progress + \"%\";\n },\n updateProgressBarUnknown: function(progressBar) {\n if (!progressBar) return;\n\n progressBar.className = 'progress progress-striped active';\n progressBar.firstChild.style.width = '100%';\n }\n});\n","JSONEditor.defaults.themes.bootstrap3 = JSONEditor.AbstractTheme.extend({\n getSelectInput: function(options) {\n var el = this._super(options);\n el.className += 'form-control';\n //el.style.width = 'auto';\n return el;\n },\n setGridColumnSize: function(el,size) {\n el.className = 'col-md-'+size;\n },\n afterInputReady: function(input) {\n if(input.controlgroup) return;\n input.controlgroup = this.closest(input,'.form-group');\n if(this.closest(input,'.compact')) {\n input.controlgroup.style.marginBottom = 0;\n }\n\n // TODO: use bootstrap slider\n },\n getTextareaInput: function() {\n var el = document.createElement('textarea');\n el.className = 'form-control';\n return el;\n },\n getRangeInput: function(min, max, step) {\n // TODO: use better slider\n return this._super(min, max, step);\n },\n getFormInputField: function(type) {\n var el = this._super(type);\n if(type !== 'checkbox') {\n el.className += 'form-control';\n }\n return el;\n },\n getFormControl: function(label, input, description) {\n var group = document.createElement('div');\n\n if(label && input.type === 'checkbox') {\n group.className += ' checkbox';\n label.appendChild(input);\n label.style.fontSize = '14px';\n group.style.marginTop = '0';\n group.appendChild(label);\n input.style.position = 'relative';\n input.style.cssFloat = 'left';\n } \n else {\n group.className += ' form-group';\n if(label) {\n label.className += ' control-label';\n group.appendChild(label);\n }\n group.appendChild(input);\n }\n\n if(description) group.appendChild(description);\n\n return group;\n },\n getIndentedPanel: function() {\n var el = document.createElement('div');\n el.className = 'well well-sm';\n el.style.paddingBottom = 0;\n return el;\n },\n getFormInputDescription: function(text) {\n var el = document.createElement('p');\n el.className = 'help-block';\n el.innerHTML = text;\n return el;\n },\n getHeaderButtonHolder: function() {\n var el = this.getButtonHolder();\n el.style.marginLeft = '10px';\n return el;\n },\n getButtonHolder: function() {\n var el = document.createElement('div');\n el.className = 'btn-group';\n return el;\n },\n getButton: function(text, icon, title) {\n var el = this._super(text, icon, title);\n el.className += 'btn btn-default';\n return el;\n },\n getTable: function() {\n var el = document.createElement('table');\n el.className = 'table table-bordered';\n el.style.width = 'auto';\n el.style.maxWidth = 'none';\n return el;\n },\n\n addInputError: function(input,text) {\n if(!input.controlgroup) return;\n input.controlgroup.className += ' has-error';\n if(!input.errmsg) {\n input.errmsg = document.createElement('p');\n input.errmsg.className = 'help-block errormsg';\n input.controlgroup.appendChild(input.errmsg);\n }\n else {\n input.errmsg.style.display = '';\n }\n\n input.errmsg.textContent = text;\n },\n removeInputError: function(input) {\n if(!input.errmsg) return;\n input.errmsg.style.display = 'none';\n input.controlgroup.className = input.controlgroup.className.replace(/\\s?has-error/g,'');\n },\n getTabHolder: function() {\n var el = document.createElement('div');\n el.innerHTML = \"
    \";\n el.className = 'rows';\n return el;\n },\n getTab: function(text) {\n var el = document.createElement('a');\n el.className = 'list-group-item';\n el.setAttribute('href','#');\n el.appendChild(text);\n return el;\n },\n markTabActive: function(tab) {\n tab.className += ' active';\n },\n markTabInactive: function(tab) {\n tab.className = tab.className.replace(/\\s?active/g,'');\n },\n getProgressBar: function() {\n var min = 0, max = 100, start = 0;\n\n var container = document.createElement('div');\n container.className = 'progress';\n\n var bar = document.createElement('div');\n bar.className = 'progress-bar';\n bar.setAttribute('role', 'progressbar');\n bar.setAttribute('aria-valuenow', start);\n bar.setAttribute('aria-valuemin', min);\n bar.setAttribute('aria-valuenax', max);\n bar.innerHTML = start + \"%\";\n container.appendChild(bar);\n\n return container;\n },\n updateProgressBar: function(progressBar, progress) {\n if (!progressBar) return;\n\n var bar = progressBar.firstChild;\n var percentage = progress + \"%\";\n bar.setAttribute('aria-valuenow', progress);\n bar.style.width = percentage;\n bar.innerHTML = percentage;\n },\n updateProgressBarUnknown: function(progressBar) {\n if (!progressBar) return;\n\n var bar = progressBar.firstChild;\n progressBar.className = 'progress progress-striped active';\n bar.removeAttribute('aria-valuenow');\n bar.style.width = '100%';\n bar.innerHTML = '';\n }\n});\n","// Base Foundation theme\nJSONEditor.defaults.themes.foundation = JSONEditor.AbstractTheme.extend({\n getChildEditorHolder: function() {\n var el = document.createElement('div');\n el.style.marginBottom = '15px';\n return el;\n },\n getSelectInput: function(options) {\n var el = this._super(options);\n el.style.minWidth = 'none';\n el.style.padding = '5px';\n el.style.marginTop = '3px';\n return el;\n },\n getSwitcher: function(options) {\n var el = this._super(options);\n el.style.paddingRight = '8px';\n return el;\n },\n afterInputReady: function(input) {\n if(this.closest(input,'.compact')) {\n input.style.marginBottom = 0;\n }\n input.group = this.closest(input,'.form-control');\n },\n getFormInputLabel: function(text) {\n var el = this._super(text);\n el.style.display = 'inline-block';\n return el;\n },\n getFormInputField: function(type) {\n var el = this._super(type);\n el.style.width = '100%';\n el.style.marginBottom = type==='checkbox'? '0' : '12px';\n return el;\n },\n getFormInputDescription: function(text) {\n var el = document.createElement('p');\n el.textContent = text;\n el.style.marginTop = '-10px';\n el.style.fontStyle = 'italic';\n return el;\n },\n getIndentedPanel: function() {\n var el = document.createElement('div');\n el.className = 'panel';\n el.style.paddingBottom = 0;\n return el;\n },\n getHeaderButtonHolder: function() {\n var el = this.getButtonHolder();\n el.style.display = 'inline-block';\n el.style.marginLeft = '10px';\n el.style.verticalAlign = 'middle';\n return el;\n },\n getButtonHolder: function() {\n var el = document.createElement('div');\n el.className = 'button-group';\n return el;\n },\n getButton: function(text, icon, title) {\n var el = this._super(text, icon, title);\n el.className += ' small button';\n return el;\n },\n addInputError: function(input,text) {\n if(!input.group) return;\n input.group.className += ' error';\n\n if(!input.errmsg) {\n input.insertAdjacentHTML('afterend','');\n input.errmsg = input.parentNode.getElementsByClassName('error')[0];\n }\n else {\n input.errmsg.style.display = '';\n }\n\n input.errmsg.textContent = text;\n },\n removeInputError: function(input) {\n if(!input.errmsg) return;\n input.group.className = input.group.className.replace(/ error/g,'');\n input.errmsg.style.display = 'none';\n },\n getProgressBar: function() {\n var progressBar = document.createElement('div');\n progressBar.className = 'progress';\n\n var meter = document.createElement('span');\n meter.className = 'meter';\n meter.style.width = '0%';\n progressBar.appendChild(meter);\n return progressBar;\n },\n updateProgressBar: function(progressBar, progress) {\n if (!progressBar) return;\n progressBar.firstChild.style.width = progress + '%';\n },\n updateProgressBarUnknown: function(progressBar) {\n if (!progressBar) return;\n progressBar.firstChild.style.width = '100%';\n }\n});\n\n// Foundation 3 Specific Theme\nJSONEditor.defaults.themes.foundation3 = JSONEditor.defaults.themes.foundation.extend({\n getHeaderButtonHolder: function() {\n var el = this._super();\n el.style.fontSize = '.6em';\n return el;\n },\n getFormInputLabel: function(text) {\n var el = this._super(text);\n el.style.fontWeight = 'bold';\n return el;\n },\n getTabHolder: function() {\n var el = document.createElement('div');\n el.className = 'row';\n el.innerHTML = \"
    \";\n return el;\n },\n setGridColumnSize: function(el,size) {\n var sizes = ['zero','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve'];\n el.className = 'columns '+sizes[size];\n },\n getTab: function(text) {\n var el = document.createElement('dd');\n var a = document.createElement('a');\n a.setAttribute('href','#');\n a.appendChild(text);\n el.appendChild(a);\n return el;\n },\n getTabContentHolder: function(tab_holder) {\n return tab_holder.children[1];\n },\n getTabContent: function() {\n var el = document.createElement('div');\n el.className = 'content active';\n el.style.paddingLeft = '5px';\n return el;\n },\n markTabActive: function(tab) {\n tab.className += ' active';\n },\n markTabInactive: function(tab) {\n tab.className = tab.className.replace(/\\s*active/g,'');\n },\n addTab: function(holder, tab) {\n holder.children[0].appendChild(tab);\n }\n});\n\n// Foundation 4 Specific Theme\nJSONEditor.defaults.themes.foundation4 = JSONEditor.defaults.themes.foundation.extend({\n getHeaderButtonHolder: function() {\n var el = this._super();\n el.style.fontSize = '.6em';\n return el;\n },\n setGridColumnSize: function(el,size) {\n el.className = 'columns large-'+size;\n },\n getFormInputDescription: function(text) {\n var el = this._super(text);\n el.style.fontSize = '.8rem';\n return el;\n },\n getFormInputLabel: function(text) {\n var el = this._super(text);\n el.style.fontWeight = 'bold';\n return el;\n }\n});\n\n// Foundation 5 Specific Theme\nJSONEditor.defaults.themes.foundation5 = JSONEditor.defaults.themes.foundation.extend({\n getFormInputDescription: function(text) {\n var el = this._super(text);\n el.style.fontSize = '.8rem';\n return el;\n },\n setGridColumnSize: function(el,size) {\n el.className = 'columns medium-'+size;\n },\n getButton: function(text, icon, title) {\n var el = this._super(text,icon,title);\n el.className = el.className.replace(/\\s*small/g,'') + ' tiny';\n return el;\n },\n getTabHolder: function() {\n var el = document.createElement('div');\n el.innerHTML = \"
    \";\n return el;\n },\n getTab: function(text) {\n var el = document.createElement('dd');\n var a = document.createElement('a');\n a.setAttribute('href','#');\n a.appendChild(text);\n el.appendChild(a);\n return el;\n },\n getTabContentHolder: function(tab_holder) {\n return tab_holder.children[1];\n },\n getTabContent: function() {\n var el = document.createElement('div');\n el.className = 'content active';\n el.style.paddingLeft = '5px';\n return el;\n },\n markTabActive: function(tab) {\n tab.className += ' active';\n },\n markTabInactive: function(tab) {\n tab.className = tab.className.replace(/\\s*active/g,'');\n },\n addTab: function(holder, tab) {\n holder.children[0].appendChild(tab);\n }\n});\n\nJSONEditor.defaults.themes.foundation6 = JSONEditor.defaults.themes.foundation5.extend({\n getIndentedPanel: function() {\n var el = document.createElement('div');\n el.className = 'callout secondary';\n return el;\n },\n getButtonHolder: function() {\n var el = document.createElement('div');\n el.className = 'button-group tiny';\n el.style.marginBottom = 0;\n return el;\n },\n getFormInputLabel: function(text) {\n var el = this._super(text);\n el.style.display = 'block';\n return el;\n },\n getFormControl: function(label, input, description) {\n var el = document.createElement('div');\n el.className = 'form-control';\n if(label) el.appendChild(label);\n if(input.type === 'checkbox') {\n label.insertBefore(input,label.firstChild);\n }\n else if (label) {\n label.appendChild(input);\n } else {\n el.appendChild(input);\n }\n\n if(description) label.appendChild(description);\n return el;\n },\n addInputError: function(input,text) {\n if(!input.group) return;\n input.group.className += ' error';\n\n if(!input.errmsg) {\n var errorEl = document.createElement('span');\n errorEl.className = 'form-error is-visible';\n input.group.getElementsByTagName('label')[0].appendChild(errorEl);\n\n input.className = input.className + ' is-invalid-input';\n\n input.errmsg = errorEl;\n }\n else {\n input.errmsg.style.display = '';\n input.className = '';\n }\n\n input.errmsg.textContent = text;\n },\n removeInputError: function(input) {\n if(!input.errmsg) return;\n input.className = input.className.replace(/ is-invalid-input/g,'');\n if(input.errmsg.parentNode) {\n input.errmsg.parentNode.removeChild(input.errmsg);\n }\n },\n});\n","JSONEditor.defaults.themes.html = JSONEditor.AbstractTheme.extend({\n getFormInputLabel: function(text) {\n var el = this._super(text);\n el.style.display = 'block';\n el.style.marginBottom = '3px';\n el.style.fontWeight = 'bold';\n return el;\n },\n getFormInputDescription: function(text) {\n var el = this._super(text);\n el.style.fontSize = '.8em';\n el.style.margin = 0;\n el.style.display = 'inline-block';\n el.style.fontStyle = 'italic';\n return el;\n },\n getIndentedPanel: function() {\n var el = this._super();\n el.style.border = '1px solid #ddd';\n el.style.padding = '5px';\n el.style.margin = '5px';\n el.style.borderRadius = '3px';\n return el;\n },\n getChildEditorHolder: function() {\n var el = this._super();\n el.style.marginBottom = '8px';\n return el;\n },\n getHeaderButtonHolder: function() {\n var el = this.getButtonHolder();\n el.style.display = 'inline-block';\n el.style.marginLeft = '10px';\n el.style.fontSize = '.8em';\n el.style.verticalAlign = 'middle';\n return el;\n },\n getTable: function() {\n var el = this._super();\n el.style.borderBottom = '1px solid #ccc';\n el.style.marginBottom = '5px';\n return el;\n },\n addInputError: function(input, text) {\n input.style.borderColor = 'red';\n \n if(!input.errmsg) {\n var group = this.closest(input,'.form-control');\n input.errmsg = document.createElement('div');\n input.errmsg.setAttribute('class','errmsg');\n input.errmsg.style = input.errmsg.style || {};\n input.errmsg.style.color = 'red';\n group.appendChild(input.errmsg);\n }\n else {\n input.errmsg.style.display = 'block';\n }\n \n input.errmsg.innerHTML = '';\n input.errmsg.appendChild(document.createTextNode(text));\n },\n removeInputError: function(input) {\n input.style.borderColor = '';\n if(input.errmsg) input.errmsg.style.display = 'none';\n },\n getProgressBar: function() {\n var max = 100, start = 0;\n\n var progressBar = document.createElement('progress');\n progressBar.setAttribute('max', max);\n progressBar.setAttribute('value', start);\n return progressBar;\n },\n updateProgressBar: function(progressBar, progress) {\n if (!progressBar) return;\n progressBar.setAttribute('value', progress);\n },\n updateProgressBarUnknown: function(progressBar) {\n if (!progressBar) return;\n progressBar.removeAttribute('value');\n }\n});\n","JSONEditor.defaults.themes.jqueryui = JSONEditor.AbstractTheme.extend({\n getTable: function() {\n var el = this._super();\n el.setAttribute('cellpadding',5);\n el.setAttribute('cellspacing',0);\n return el;\n },\n getTableHeaderCell: function(text) {\n var el = this._super(text);\n el.className = 'ui-state-active';\n el.style.fontWeight = 'bold';\n return el;\n },\n getTableCell: function() {\n var el = this._super();\n el.className = 'ui-widget-content';\n return el;\n },\n getHeaderButtonHolder: function() {\n var el = this.getButtonHolder();\n el.style.marginLeft = '10px';\n el.style.fontSize = '.6em';\n el.style.display = 'inline-block';\n return el;\n },\n getFormInputDescription: function(text) {\n var el = this.getDescription(text);\n el.style.marginLeft = '10px';\n el.style.display = 'inline-block';\n return el;\n },\n getFormControl: function(label, input, description) {\n var el = this._super(label,input,description);\n if(input.type === 'checkbox') {\n el.style.lineHeight = '25px';\n \n el.style.padding = '3px 0';\n }\n else {\n el.style.padding = '4px 0 8px 0';\n }\n return el;\n },\n getDescription: function(text) {\n var el = document.createElement('span');\n el.style.fontSize = '.8em';\n el.style.fontStyle = 'italic';\n el.textContent = text;\n return el;\n },\n getButtonHolder: function() {\n var el = document.createElement('div');\n el.className = 'ui-buttonset';\n el.style.fontSize = '.7em';\n return el;\n },\n getFormInputLabel: function(text) {\n var el = document.createElement('label');\n el.style.fontWeight = 'bold';\n el.style.display = 'block';\n el.textContent = text;\n return el;\n },\n getButton: function(text, icon, title) {\n var button = document.createElement(\"button\");\n button.className = 'ui-button ui-widget ui-state-default ui-corner-all';\n\n // Icon only\n if(icon && !text) {\n button.className += ' ui-button-icon-only';\n icon.className += ' ui-button-icon-primary ui-icon-primary';\n button.appendChild(icon);\n }\n // Icon and Text\n else if(icon) {\n button.className += ' ui-button-text-icon-primary';\n icon.className += ' ui-button-icon-primary ui-icon-primary';\n button.appendChild(icon);\n }\n // Text only\n else {\n button.className += ' ui-button-text-only';\n }\n\n var el = document.createElement('span');\n el.className = 'ui-button-text';\n el.textContent = text||title||\".\";\n button.appendChild(el);\n\n button.setAttribute('title',title);\n \n return button;\n },\n setButtonText: function(button,text, icon, title) {\n button.innerHTML = '';\n button.className = 'ui-button ui-widget ui-state-default ui-corner-all';\n\n // Icon only\n if(icon && !text) {\n button.className += ' ui-button-icon-only';\n icon.className += ' ui-button-icon-primary ui-icon-primary';\n button.appendChild(icon);\n }\n // Icon and Text\n else if(icon) {\n button.className += ' ui-button-text-icon-primary';\n icon.className += ' ui-button-icon-primary ui-icon-primary';\n button.appendChild(icon);\n }\n // Text only\n else {\n button.className += ' ui-button-text-only';\n }\n\n var el = document.createElement('span');\n el.className = 'ui-button-text';\n el.textContent = text||title||\".\";\n button.appendChild(el);\n\n button.setAttribute('title',title);\n },\n getIndentedPanel: function() {\n var el = document.createElement('div');\n el.className = 'ui-widget-content ui-corner-all';\n el.style.padding = '1em 1.4em';\n el.style.marginBottom = '20px';\n return el;\n },\n afterInputReady: function(input) {\n if(input.controls) return;\n input.controls = this.closest(input,'.form-control');\n },\n addInputError: function(input,text) {\n if(!input.controls) return;\n if(!input.errmsg) {\n input.errmsg = document.createElement('div');\n input.errmsg.className = 'ui-state-error';\n input.controls.appendChild(input.errmsg);\n }\n else {\n input.errmsg.style.display = '';\n }\n\n input.errmsg.textContent = text;\n },\n removeInputError: function(input) {\n if(!input.errmsg) return;\n input.errmsg.style.display = 'none';\n },\n markTabActive: function(tab) {\n tab.className = tab.className.replace(/\\s*ui-widget-header/g,'')+' ui-state-active';\n },\n markTabInactive: function(tab) {\n tab.className = tab.className.replace(/\\s*ui-state-active/g,'')+' ui-widget-header';\n }\n});\n","JSONEditor.defaults.themes.barebones = JSONEditor.AbstractTheme.extend({\n getFormInputLabel: function (text) {\n var el = this._super(text);\n return el;\n },\n getFormInputDescription: function (text) {\n var el = this._super(text);\n return el;\n },\n getIndentedPanel: function () {\n var el = this._super();\n return el;\n },\n getChildEditorHolder: function () {\n var el = this._super();\n return el;\n },\n getHeaderButtonHolder: function () {\n var el = this.getButtonHolder();\n return el;\n },\n getTable: function () {\n var el = this._super();\n return el;\n },\n addInputError: function (input, text) {\n if (!input.errmsg) {\n var group = this.closest(input, '.form-control');\n input.errmsg = document.createElement('div');\n input.errmsg.setAttribute('class', 'errmsg');\n group.appendChild(input.errmsg);\n }\n else {\n input.errmsg.style.display = 'block';\n }\n\n input.errmsg.innerHTML = '';\n input.errmsg.appendChild(document.createTextNode(text));\n },\n removeInputError: function (input) {\n input.style.borderColor = '';\n if (input.errmsg) input.errmsg.style.display = 'none';\n },\n getProgressBar: function () {\n var max = 100, start = 0;\n\n var progressBar = document.createElement('progress');\n progressBar.setAttribute('max', max);\n progressBar.setAttribute('value', start);\n return progressBar;\n },\n updateProgressBar: function (progressBar, progress) {\n if (!progressBar) return;\n progressBar.setAttribute('value', progress);\n },\n updateProgressBarUnknown: function (progressBar) {\n if (!progressBar) return;\n progressBar.removeAttribute('value');\n }\n});\n","JSONEditor.AbstractIconLib = Class.extend({\n mapping: {\n collapse: '',\n expand: '',\n \"delete\": '',\n edit: '',\n add: '',\n cancel: '',\n save: '',\n moveup: '',\n movedown: ''\n },\n icon_prefix: '',\n getIconClass: function(key) {\n if(this.mapping[key]) return this.icon_prefix+this.mapping[key];\n else return null;\n },\n getIcon: function(key) {\n var iconclass = this.getIconClass(key);\n \n if(!iconclass) return null;\n \n var i = document.createElement('i');\n i.className = iconclass;\n return i;\n }\n});\n","JSONEditor.defaults.iconlibs.bootstrap2 = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'chevron-down',\n expand: 'chevron-up',\n \"delete\": 'trash',\n edit: 'pencil',\n add: 'plus',\n cancel: 'ban-circle',\n save: 'ok',\n moveup: 'arrow-up',\n movedown: 'arrow-down'\n },\n icon_prefix: 'icon-'\n});\n","JSONEditor.defaults.iconlibs.bootstrap3 = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'chevron-down',\n expand: 'chevron-right',\n \"delete\": 'remove',\n edit: 'pencil',\n add: 'plus',\n cancel: 'floppy-remove',\n save: 'floppy-saved',\n moveup: 'arrow-up',\n movedown: 'arrow-down'\n },\n icon_prefix: 'glyphicon glyphicon-'\n});\n","JSONEditor.defaults.iconlibs.fontawesome3 = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'chevron-down',\n expand: 'chevron-right',\n \"delete\": 'remove',\n edit: 'pencil',\n add: 'plus',\n cancel: 'ban-circle',\n save: 'save',\n moveup: 'arrow-up',\n movedown: 'arrow-down'\n },\n icon_prefix: 'icon-'\n});\n","JSONEditor.defaults.iconlibs.fontawesome4 = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'caret-square-o-down',\n expand: 'caret-square-o-right',\n \"delete\": 'times',\n edit: 'pencil',\n add: 'plus',\n cancel: 'ban',\n save: 'save',\n moveup: 'arrow-up',\n movedown: 'arrow-down'\n },\n icon_prefix: 'fa fa-'\n});\n","JSONEditor.defaults.iconlibs.foundation2 = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'minus',\n expand: 'plus',\n \"delete\": 'remove',\n edit: 'edit',\n add: 'add-doc',\n cancel: 'error',\n save: 'checkmark',\n moveup: 'up-arrow',\n movedown: 'down-arrow'\n },\n icon_prefix: 'foundicon-'\n});\n","JSONEditor.defaults.iconlibs.foundation3 = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'minus',\n expand: 'plus',\n \"delete\": 'x',\n edit: 'pencil',\n add: 'page-add',\n cancel: 'x-circle',\n save: 'save',\n moveup: 'arrow-up',\n movedown: 'arrow-down'\n },\n icon_prefix: 'fi-'\n});\n","JSONEditor.defaults.iconlibs.jqueryui = JSONEditor.AbstractIconLib.extend({\n mapping: {\n collapse: 'triangle-1-s',\n expand: 'triangle-1-e',\n \"delete\": 'trash',\n edit: 'pencil',\n add: 'plusthick',\n cancel: 'closethick',\n save: 'disk',\n moveup: 'arrowthick-1-n',\n movedown: 'arrowthick-1-s'\n },\n icon_prefix: 'ui-icon ui-icon-'\n});\n","JSONEditor.defaults.templates[\"default\"] = function() {\n return {\n compile: function(template) {\n var matches = template.match(/{{\\s*([a-zA-Z0-9\\-_ \\.]+)\\s*}}/g);\n var l = matches && matches.length;\n\n // Shortcut if the template contains no variables\n if(!l) return function() { return template; };\n\n // Pre-compute the search/replace functions\n // This drastically speeds up template execution\n var replacements = [];\n var get_replacement = function(i) {\n var p = matches[i].replace(/[{}]+/g,'').trim().split('.');\n var n = p.length;\n var func;\n \n if(n > 1) {\n var cur;\n func = function(vars) {\n cur = vars;\n for(i=0; i= 0) {\n // For enumerated strings, number, or integers\n if(schema.items.enum) {\n return 'multiselect';\n }\n // For non-enumerated strings (tag editor)\n else if(JSONEditor.plugins.selectize.enable && schema.items.type === \"string\") {\n return 'arraySelectize';\n }\n }\n});\n// Use the multiple editor for schemas with `oneOf` set\nJSONEditor.defaults.resolvers.unshift(function(schema) {\n // If this schema uses `oneOf` or `anyOf`\n if(schema.oneOf || schema.anyOf) return \"multiple\";\n});\n","/**\n * This is a small wrapper for using JSON Editor like a typical jQuery plugin.\n */\n(function() {\n if(window.jQuery || window.Zepto) {\n var $ = window.jQuery || window.Zepto;\n $.jsoneditor = JSONEditor.defaults;\n \n $.fn.jsoneditor = function(options) {\n var self = this;\n var editor = this.data('jsoneditor');\n if(options === 'value') {\n if(!editor) throw \"Must initialize jsoneditor before getting/setting the value\";\n \n // Set value\n if(arguments.length > 1) {\n editor.setValue(arguments[1]);\n }\n // Get value\n else {\n return editor.getValue();\n }\n }\n else if(options === 'validate') {\n if(!editor) throw \"Must initialize jsoneditor before validating\";\n \n // Validate a specific value\n if(arguments.length > 1) {\n return editor.validate(arguments[1]);\n }\n // Validate current value\n else {\n return editor.validate();\n }\n }\n else if(options === 'destroy') {\n if(editor) {\n editor.destroy();\n this.data('jsoneditor',null);\n }\n }\n else {\n // Destroy first\n if(editor) {\n editor.destroy();\n }\n \n // Create editor\n editor = new JSONEditor(this.get(0),options);\n this.data('jsoneditor',editor);\n \n // Setup event listeners\n editor.on('change',function() {\n self.trigger('change');\n });\n editor.on('ready',function() {\n self.trigger('ready');\n });\n }\n \n return this;\n };\n }\n})();\n"," window.JSONEditor = JSONEditor;\n})();\n"]} \ No newline at end of file diff --git a/libs/json-editor/dist/jsoneditor.min.js b/libs/json-editor/dist/jsoneditor.min.js new file mode 100644 index 0000000..e396783 --- /dev/null +++ b/libs/json-editor/dist/jsoneditor.min.js @@ -0,0 +1,859 @@ +/*! JSON Editor v0.7.28 - JSON Schema -> HTML Editor + * By Jeremy Dorn - https://github.com/jdorn/json-editor/ + * Released under the MIT license + * + * Date: 2016-08-07 + */ +/** + * See README.md for requirements and usage info + */ +!function(){/*jshint loopfunc: true */ +/* Simple JavaScript Inheritance + * By John Resig http://ejohn.org/ + * MIT Licensed. + */ +// Inspired by base2 and Prototype +var a;!function(){var b=!1,c=/xyz/.test(function(){window.postMessage("xyz")})?/\b_super\b/:/.*/; +// The base Class implementation (does nothing) +// Create a new Class that inherits from this class +return a=function(){},a.extend=function d(a){ +// The dummy class constructor +function e(){ +// All construction is actually done in the init method +!b&&this.init&&this.init.apply(this,arguments)}var f=this.prototype; +// Instantiate a base class (but only create the instance, +// don't run the init constructor) +b=!0;var g=new this;b=!1; +// Copy the properties over onto the new prototype +for(var h in a) +// Check if we're overwriting an existing function +g[h]="function"==typeof a[h]&&"function"==typeof f[h]&&c.test(a[h])?function(a,b){return function(){var c=this._super; +// Add a new ._super() method that is the same method +// but on the super-class +this._super=f[a]; +// The method only need to be bound temporarily, so we +// remove it when we're done executing +var d=b.apply(this,arguments);return this._super=c,d}}(h,a[h]):a[h]; +// Populate our constructed prototype object +// Enforce the constructor to be what we expect +// And make this class extendable +return e.prototype=g,e.prototype.constructor=e,e.extend=d,e},a}(), +// CustomEvent constructor polyfill +// From MDN +function(){function a(a,b){b=b||{bubbles:!1,cancelable:!1,detail:void 0};var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,b.bubbles,b.cancelable,b.detail),c}a.prototype=window.Event.prototype,window.CustomEvent=a}(), +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel +// MIT license +function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c0&&a.length-1 in a){for(c=0;c=g&&!h&&(h=!0,b())})}},d.send()}}),g||b()},expandRefs:function(a){for(a=c({},a);a.$ref;){var b=a.$ref;delete a.$ref,this.refs[b]||(b=decodeURIComponent(b)),a=this.extendSchemas(a,this.refs[b])}return a},expandSchema:function(a){var b,e=this,f=c({},a); +// allOf schemas should be merged into the parent +if( +// Version 3 `type` +"object"==typeof a.type&&( +// Array of types +Array.isArray(a.type)?d(a.type,function(b,c){ +// Schema +"object"==typeof c&&(a.type[b]=e.expandSchema(c))}):a.type=e.expandSchema(a.type)), +// Version 3 `disallow` +"object"==typeof a.disallow&&( +// Array of types +Array.isArray(a.disallow)?d(a.disallow,function(b,c){ +// Schema +"object"==typeof c&&(a.disallow[b]=e.expandSchema(c))}):a.disallow=e.expandSchema(a.disallow)), +// Version 4 `anyOf` +a.anyOf&&d(a.anyOf,function(b,c){a.anyOf[b]=e.expandSchema(c)}), +// Version 4 `dependencies` (schema dependencies) +a.dependencies&&d(a.dependencies,function(b,c){"object"!=typeof c||Array.isArray(c)||(a.dependencies[b]=e.expandSchema(c))}), +// Version 4 `not` +a.not&&(a.not=this.expandSchema(a.not)),a.allOf){for(b=0;ba.minimum:b>=a.minimum, +// Use math.js is available +window.math?g=window.math[a.exclusiveMinimum?"larger":"largerEq"](window.math.bignumber(b),window.math.bignumber(a.minimum)):window.Decimal&&(g=new window.Decimal(b)[a.exclusiveMinimum?"gt":"gte"](new window.Decimal(a.minimum))),g||k.push({path:e,property:"minimum",message:this.translate(a.exclusiveMinimum?"error_minimum_excl":"error_minimum_incl",[a.minimum])}))}else if("string"==typeof b) +// `maxLength` +a.maxLength&&(b+"").length>a.maxLength&&k.push({path:e,property:"maxLength",message:this.translate("error_maxLength",[a.maxLength])}), +// `minLength` +a.minLength&&(b+"").lengtha.maxItems&&k.push({path:e,property:"maxItems",message:this.translate("error_maxItems",[a.maxItems])}), +// `minItems` +a.minItems&&b.lengtha.maxProperties&&k.push({path:e,property:"maxProperties",message:this.translate("error_maxProperties",[a.maxProperties])})} +// `minProperties` +if(a.minProperties){g=0;for(h in b)b.hasOwnProperty(h)&&g++;g=0){b=this.theme.getBlockLinkHolder(),c=this.theme.getBlockLink(),c.setAttribute("target","_blank");var i=document.createElement(e);i.setAttribute("controls","controls"),this.theme.createMediaLink(b,c,i), +// When a watched field changes, update the url +this.link_watchers.push(function(b){var d=f(b);c.setAttribute("href",d),c.textContent=a.rel||d,i.setAttribute("src",d)})}else c=b=this.theme.getBlockLink(),b.setAttribute("target","_blank"),b.textContent=a.rel, +// When a watched field changes, update the url +this.link_watchers.push(function(c){var d=f(c);b.setAttribute("href",d),b.textContent=a.rel||d});return g&&c&&(g===!0?c.setAttribute("download",""):this.link_watchers.push(function(a){c.setAttribute("download",g(a))})),a["class"]&&(c.className=c.className+" "+a["class"]),b},refreshWatchedFieldValues:function(){if(this.watched_values){var a={},b=!1,c=this;if(this.watched){var d,e;for(var f in this.watched)this.watched.hasOwnProperty(f)&&(e=c.jsoneditor.getEditor(this.watched[f]),d=e?e.getValue():null,c.watched_values[f]!==d&&(b=!0),a[f]=d)}return a.self=this.getValue(),this.watched_values.self!==a.self&&(b=!0),this.watched_values=a,b}},getWatchedFieldValues:function(){return this.watched_values},updateHeaderText:function(){if(this.header) +// If the header has children, only update the text node's value +if(this.header.children.length){for(var a=0;a-1:!!this.jsoneditor.options.required_by_default},getDisplayText:function(a){var b=[],c={}; +// Determine how many times each attribute name is used. +// This helps us pick the most distinct display text for the schemas. +d(a,function(a,b){b.title&&(c[b.title]=c[b.title]||0,c[b.title]++),b.description&&(c[b.description]=c[b.description]||0,c[b.description]++),b.format&&(c[b.format]=c[b.format]||0,c[b.format]++),b.type&&(c[b.type]=c[b.type]||0,c[b.type]++)}), +// Determine display text for each element of the array +d(a,function(a,d){var e; +// If it's a simple string +e="string"==typeof d?d:d.title&&c[d.title]<=1?d.title:d.format&&c[d.format]<=1?d.format:d.type&&c[d.type]<=1?d.type:d.description&&c[d.description]<=1?d.descripton:d.title?d.title:d.format?d.format:d.type?d.type:d.description?d.description:JSON.stringify(d).length<50?JSON.stringify(d):"type",b.push(e)}); +// Replace identical display text with "text 1", "text 2", etc. +var e={};return d(b,function(a,d){e[d]=e[d]||0,e[d]++,c[d]>1&&(b[a]=d+" "+e[d])}),b},getOption:function(a){try{throw"getOption is deprecated"}catch(b){window.console.error(b)}return this.options[a]},showValidationErrors:function(a){}}),f.defaults.editors["null"]=f.AbstractEditor.extend({getValue:function(){return null},setValue:function(){this.onChange()},getNumColumns:function(){return 2}}),f.defaults.editors.string=f.AbstractEditor.extend({register:function(){this._super(),this.input&&this.input.setAttribute("name",this.formname)},unregister:function(){this._super(),this.input&&this.input.removeAttribute("name")},setValue:function(a,b,c){if((!this.template||c)&&(null===a||"undefined"==typeof a?a="":"object"==typeof a?a=JSON.stringify(a):"string"!=typeof a&&(a=""+a),a!==this.serialized)){ +// Sanitize value before setting it +var d=this.sanitize(a);if(this.input.value!==d){this.input.value=d, +// If using SCEditor, update the WYSIWYG +this.sceditor_instance?this.sceditor_instance.val(d):this.epiceditor?this.epiceditor.importFile(null,d):this.ace_editor&&this.ace_editor.setValue(d);var e=c||this.getValue()!==a;this.refreshValue(),b?this.is_dirty=!1:"change"===this.jsoneditor.options.show_errors&&(this.is_dirty=!0),this.adjust_height&&this.adjust_height(this.input), +// Bubble this setValue to parents if the value changed +this.onChange(e)}}},getNumColumns:function(){var a,b=Math.ceil(Math.max(this.getTitle().length,this.schema.maxLength||0,this.schema.minLength||0)/5);return a="textarea"===this.input_type?6:["text","email"].indexOf(this.input_type)>=0?4:2,Math.min(12,Math.max(b,a))},build:function(){var a=this; +// Specific format +if(this.options.compact||(this.header=this.label=this.theme.getFormInputLabel(this.getTitle())),this.schema.description&&(this.description=this.theme.getFormInputDescription(this.schema.description)),this.format=this.schema.format,!this.format&&this.schema.media&&this.schema.media.type&&(this.format=this.schema.media.type.replace(/(^(application|text)\/(x-)?(script\.)?)|(-source$)/g,"")),!this.format&&this.options.default_format&&(this.format=this.options.default_format),this.options.format&&(this.format=this.options.format),this.format) +// Text Area +if("textarea"===this.format)this.input_type="textarea",this.input=this.theme.getTextareaInput();else if("range"===this.format){this.input_type="range";var b=this.schema.minimum||0,c=this.schema.maximum||Math.max(100,b+1),d=1;this.schema.multipleOf&&(b%this.schema.multipleOf&&(b=Math.ceil(b/this.schema.multipleOf)*this.schema.multipleOf),c%this.schema.multipleOf&&(c=Math.floor(c/this.schema.multipleOf)*this.schema.multipleOf),d=this.schema.multipleOf),this.input=this.theme.getRangeInput(b,c,d)}else["actionscript","batchfile","bbcode","c","c++","cpp","coffee","csharp","css","dart","django","ejs","erlang","golang","groovy","handlebars","haskell","haxe","html","ini","jade","java","javascript","json","less","lisp","lua","makefile","markdown","matlab","mysql","objectivec","pascal","perl","pgsql","php","python","r","ruby","sass","scala","scss","smarty","sql","stylus","svg","twig","vbscript","xml","yaml"].indexOf(this.format)>=0?(this.input_type=this.format,this.source_code=!0,this.input=this.theme.getTextareaInput()):(this.input_type=this.format,this.input=this.theme.getFormInputField(this.input_type));else this.input_type="text",this.input=this.theme.getFormInputField(this.input_type); +// minLength, maxLength, and pattern +"undefined"!=typeof this.schema.maxLength&&this.input.setAttribute("maxlength",this.schema.maxLength),"undefined"!=typeof this.schema.pattern?this.input.setAttribute("pattern",this.schema.pattern):"undefined"!=typeof this.schema.minLength&&this.input.setAttribute("pattern",".{"+this.schema.minLength+",}"),this.options.compact?this.container.className+=" compact":this.options.input_width&&(this.input.style.width=this.options.input_width),(this.schema.readOnly||this.schema.readonly||this.schema.template)&&(this.always_disabled=!0,this.input.disabled=!0),this.input.addEventListener("change",function(b){ +// Don't allow changing if this field is a template +if(b.preventDefault(),b.stopPropagation(),a.schema.template)return void(this.value=a.value);var c=this.value,d=a.sanitize(c);c!==d&&(this.value=d),a.is_dirty=!0,a.refreshValue(),a.onChange(!0)}),this.options.input_height&&(this.input.style.height=this.options.input_height),this.options.expand_height&&(this.adjust_height=function(a){if(a){var b,c=a.offsetHeight; +// Input too short +if(a.offsetHeight100);)b++,c++,a.style.height=c+"px";else{for(b=0;a.offsetHeight>=a.scrollHeight+3&&!(b>100);)b++,c--,a.style.height=c+"px";a.style.height=c+1+"px"}}},this.input.addEventListener("keyup",function(b){a.adjust_height(this)}),this.input.addEventListener("change",function(b){a.adjust_height(this)}),this.adjust_height()),this.format&&this.input.setAttribute("data-schemaformat",this.format),this.control=this.theme.getFormControl(this.label,this.input,this.description),this.container.appendChild(this.control), +// Any special formatting that needs to happen after the input is added to the dom +window.requestAnimationFrame(function(){ +// Skip in case the input is only a temporary editor, +// otherwise, in the case of an ace_editor creation, +// it will generate an error trying to append it to the missing parentNode +a.input.parentNode&&a.afterInputReady(),a.adjust_height&&a.adjust_height(a.input)}), +// Compile and store the template +this.schema.template?(this.template=this.jsoneditor.compileTemplate(this.schema.template,this.template_engine),this.refreshValue()):this.refreshValue()},enable:function(){this.always_disabled||(this.input.disabled=!1),this._super()},disable:function(){this.input.disabled=!0, +// TODO: WYSIWYG and Markdown editors +this._super()},afterInputReady:function(){var a,b=this; +// Code editor +if(this.source_code) +// WYSIWYG html and bbcode editor +if(this.options.wysiwyg&&["html","bbcode"].indexOf(this.input_type)>=0&&window.jQuery&&window.jQuery.fn&&window.jQuery.fn.sceditor)a=c({},{plugins:"html"===b.input_type?"xhtml":"bbcode",emoticonsEnabled:!1,width:"100%",height:300},f.plugins.sceditor,b.options.sceditor_options||{}),window.jQuery(b.input).sceditor(a),b.sceditor_instance=window.jQuery(b.input).sceditor("instance"),b.sceditor_instance.blur(function(){ +// Get editor's value +var a=window.jQuery("
    "+b.sceditor_instance.val()+"
    "); +// Remove sceditor spans/divs +window.jQuery("#sceditor-start-marker,#sceditor-end-marker,.sceditor-nlf",a).remove(), +// Set the value and update +b.input.value=a.html(),b.value=b.input.value,b.is_dirty=!0,b.onChange(!0)});else if("markdown"===this.input_type&&window.EpicEditor)this.epiceditor_container=document.createElement("div"),this.input.parentNode.insertBefore(this.epiceditor_container,this.input),this.input.style.display="none",a=c({},f.plugins.epiceditor,{container:this.epiceditor_container,clientSideStorage:!1}),this.epiceditor=new window.EpicEditor(a).load(),this.epiceditor.importFile(null,this.getValue()),this.epiceditor.on("update",function(){var a=b.epiceditor.exportFile();b.input.value=a,b.value=a,b.is_dirty=!0,b.onChange(!0)});else if(window.ace){var d=this.input_type; +// aliases for c/cpp +"cpp"!==d&&"c++"!==d&&"c"!==d||(d="c_cpp"),this.ace_container=document.createElement("div"),this.ace_container.style.width="100%",this.ace_container.style.position="relative",this.ace_container.style.height="400px",this.input.parentNode.insertBefore(this.ace_container,this.input),this.input.style.display="none",this.ace_editor=window.ace.edit(this.ace_container),this.ace_editor.setValue(this.getValue()), +// The theme +f.plugins.ace.theme&&this.ace_editor.setTheme("ace/theme/"+f.plugins.ace.theme), +// The mode +d=window.ace.require("ace/mode/"+d),d&&this.ace_editor.getSession().setMode(new d.Mode), +// Listen for changes +this.ace_editor.on("change",function(){var a=b.ace_editor.getValue();b.input.value=a,b.refreshValue(),b.is_dirty=!0,b.onChange(!0)})}b.theme.afterInputReady(b.input)},refreshValue:function(){this.value=this.input.value,"string"!=typeof this.value&&(this.value=""),this.serialized=this.value},destroy:function(){ +// If using SCEditor, destroy the editor instance +this.sceditor_instance?this.sceditor_instance.destroy():this.epiceditor?this.epiceditor.unload():this.ace_editor&&this.ace_editor.destroy(),this.template=null,this.input&&this.input.parentNode&&this.input.parentNode.removeChild(this.input),this.label&&this.label.parentNode&&this.label.parentNode.removeChild(this.label),this.description&&this.description.parentNode&&this.description.parentNode.removeChild(this.description),this._super()},/** + * This is overridden in derivative editors + */ +sanitize:function(a){return a},/** + * Re-calculates the value if needed + */ +onWatchedFieldChange:function(){var a; +// If this editor needs to be rendered by a macro template +this.template&&(a=this.getWatchedFieldValues(),this.setValue(this.template(a),!1,!0)),this._super()},showValidationErrors:function(a){var b=this;if("always"===this.jsoneditor.options.show_errors);else if(!this.is_dirty&&this.previous_error_setting===this.jsoneditor.options.show_errors)return;this.previous_error_setting=this.jsoneditor.options.show_errors;var c=[];d(a,function(a,d){d.path===b.path&&c.push(d.message)}),c.length?this.theme.addInputError(this.input,c.join(". ")+"."):this.theme.removeInputError(this.input)}}),f.defaults.editors.number=f.defaults.editors.string.extend({sanitize:function(a){return(a+"").replace(/[^0-9\.\-eE]/g,"")},getNumColumns:function(){return 2},getValue:function(){return 1*this.value}}),f.defaults.editors.integer=f.defaults.editors.number.extend({sanitize:function(a){return a+="",a.replace(/[^0-9\-]/g,"")},getNumColumns:function(){return 2}}),f.defaults.editors.object=f.AbstractEditor.extend({getDefault:function(){return c({},this.schema["default"]||{})},getChildEditors:function(){return this.editors},register:function(){if(this._super(),this.editors)for(var a in this.editors)this.editors.hasOwnProperty(a)&&this.editors[a].register()},unregister:function(){if(this._super(),this.editors)for(var a in this.editors)this.editors.hasOwnProperty(a)&&this.editors[a].unregister()},getNumColumns:function(){return Math.max(Math.min(12,this.maxwidth),3)},enable:function(){if(this.editjson_button&&(this.editjson_button.disabled=!1),this.addproperty_button&&(this.addproperty_button.disabled=!1),this._super(),this.editors)for(var a in this.editors)this.editors.hasOwnProperty(a)&&this.editors[a].enable()},disable:function(){if(this.editjson_button&&(this.editjson_button.disabled=!0),this.addproperty_button&&(this.addproperty_button.disabled=!0),this.hideEditJSON(),this._super(),this.editors)for(var a in this.editors)this.editors.hasOwnProperty(a)&&this.editors[a].disable()},layoutEditors:function(){var a,b,c=this;if(this.row_container){ +// Sort editors by propertyOrder +this.property_order=Object.keys(this.editors),this.property_order=this.property_order.sort(function(a,b){var d=c.editors[a].schema.propertyOrder,e=c.editors[b].schema.propertyOrder;return"number"!=typeof d&&(d=1e3),"number"!=typeof e&&(e=1e3),d-e});var e;if("grid"===this.format){var f=[]; +// Make almost full rows width 12 +// Do this by increasing all editors' sizes proprotionately +// Any left over space goes to the biggest editor +// Don't touch rows with a width of 6 or less +for(d(this.property_order,function(a,b){var d=c.editors[b];if(!d.property_removed){ +// See if the editor will fit in any of the existing rows first +for(var e=!1,g=d.options.hidden?0:d.options.grid_columns||d.getNumColumns(),h=d.options.hidden?0:d.container.offsetHeight,i=0;ih)&&(e=i); +// If there isn't a spot in any of the existing rows, start a new row +e===!1&&(f.push({width:0,minh:999999,maxh:0,editors:[]}),e=f.length-1),f[e].editors.push({key:b, +//editor: editor, +width:g,height:h}),f[e].width+=g,f[e].minh=Math.min(f[e].minh,h),f[e].maxh=Math.max(f[e].maxh,h)}}),a=0;af[a].editors[g].width&&(g=b),f[a].editors[b].width*=12/f[a].width,f[a].editors[b].width=Math.floor(f[a].editors[b].width),h+=f[a].editors[b].width;h<12&&(f[a].editors[g].width+=12-h),f[a].width=12} +// layout hasn't changed +if(this.layout===JSON.stringify(f))return!1;for(this.layout=JSON.stringify(f), +// Layout the form +e=document.createElement("div"),a=0;a=this.schema.maxProperties),this.addproperty_checkboxes&&(this.addproperty_list.innerHTML=""),this.addproperty_checkboxes={}; +// Check for which editors can't be removed or added back +for(a in this.cached_editors)this.cached_editors.hasOwnProperty(a)&&(this.addPropertyCheckbox(a),this.isRequired(this.cached_editors[a])&&a in this.editors&&(this.addproperty_checkboxes[a].disabled=!0),"undefined"!=typeof this.schema.minProperties&&d<=this.schema.minProperties?(this.addproperty_checkboxes[a].disabled=this.addproperty_checkboxes[a].checked,this.addproperty_checkboxes[a].checked||(e=!0)):a in this.editors?(e=!0,c=!0):b||this.schema.properties.hasOwnProperty(a)?(this.addproperty_checkboxes[a].disabled=!1,e=!0):this.addproperty_checkboxes[a].disabled=!0);this.canHaveAdditionalProperties()&&(e=!0); +// Additional addproperty checkboxes not tied to a current editor +for(a in this.schema.properties)this.schema.properties.hasOwnProperty(a)&&(this.cached_editors[a]||(e=!0,this.addPropertyCheckbox(a))); +// If no editors can be added or removed, hide the modal button +e?this.canHaveAdditionalProperties()?b?this.addproperty_add.disabled=!1:this.addproperty_add.disabled=!0:(this.addproperty_add.style.display="none",this.addproperty_input.style.display="none"):(this.hideAddProperty(),this.addproperty_controls.style.display="none")},isRequired:function(a){return"boolean"==typeof a.schema.required?a.schema.required:Array.isArray(this.schema.required)?this.schema.required.indexOf(a.key)>-1:!!this.jsoneditor.options.required_by_default},setValue:function(a,b){var c=this;a=a||{},("object"!=typeof a||Array.isArray(a))&&(a={}), +// First, set the values for all of the defined properties +d(this.cached_editors,function(d,e){ +// Value explicitly set +"undefined"!=typeof a[d]?(c.addObjectProperty(d),e.setValue(a[d],b)):b||c.isRequired(e)?e.setValue(e.getDefault(),b):c.removeObjectProperty(d)}),d(a,function(a,d){c.cached_editors[a]||(c.addObjectProperty(a),c.editors[a]&&c.editors[a].setValue(d,b))}),this.refreshValue(),this.layoutEditors(),this.onChange()},showValidationErrors:function(a){var b=this,c=[],e=[]; +// Show errors for this editor +if(d(a,function(a,d){d.path===b.path?c.push(d):e.push(d)}),this.error_holder)if(c.length){this.error_holder.innerHTML="",this.error_holder.style.display="",d(c,function(a,c){b.error_holder.appendChild(b.theme.getErrorMessage(c.message))})}else this.error_holder.style.display="none"; +// Show error for the table row if this is inside a table +this.options.table_row&&(c.length?this.theme.addTableRowError(this.container):this.theme.removeTableRowError(this.container)), +// Show errors for child editors +d(this.editors,function(a,b){b.showValidationErrors(e)})}}),f.defaults.editors.array=f.AbstractEditor.extend({getDefault:function(){return this.schema["default"]||[]},register:function(){if(this._super(),this.rows)for(var a=0;a=this.schema.items.length?this.schema.additionalItems===!0?{}:this.schema.additionalItems?c({},this.schema.additionalItems):void 0:c({},this.schema.items[a]):this.schema.items?c({},this.schema.items):{}},getItemInfo:function(a){var b=this.getItemSchema(a); +// Check if it's cached +this.item_info=this.item_info||{};var c=JSON.stringify(b); +// Get the schema for this item +return"undefined"!=typeof this.item_info[c]?this.item_info[c]:(b=this.jsoneditor.expandRefs(b),this.item_info[c]={title:b.title||"item","default":b["default"],width:12,child_editors:b.properties||b.items},this.item_info[c])},getElementEditor:function(a){var b=this.getItemInfo(a),c=this.getItemSchema(a);c=this.jsoneditor.expandRefs(c),c.title=b.title+" "+(a+1);var d,e=this.jsoneditor.getEditorClass(c);d=this.tabs_holder?this.theme.getTabContent():b.child_editors?this.theme.getChildEditorHolder():this.theme.getIndentedPanel(),this.row_holder.appendChild(d);var f=this.jsoneditor.createEditor(e,{jsoneditor:this.jsoneditor,schema:c,container:d,path:this.path+"."+a,parent:this,required:!0});return f.preBuild(),f.build(),f.postBuild(),f.title_controls||(f.array_controls=this.theme.getButtonHolder(),d.appendChild(f.array_controls)),f},destroy:function(){this.empty(!0),this.title&&this.title.parentNode&&this.title.parentNode.removeChild(this.title),this.description&&this.description.parentNode&&this.description.parentNode.removeChild(this.description),this.row_holder&&this.row_holder.parentNode&&this.row_holder.parentNode.removeChild(this.row_holder),this.controls&&this.controls.parentNode&&this.controls.parentNode.removeChild(this.controls),this.panel&&this.panel.parentNode&&this.panel.parentNode.removeChild(this.panel),this.rows=this.row_cache=this.title=this.description=this.row_holder=this.panel=this.controls=null,this._super()},empty:function(a){if(this.rows){var b=this;d(this.rows,function(c,d){a&&(d.tab&&d.tab.parentNode&&d.tab.parentNode.removeChild(d.tab),b.destroyRow(d,!0),b.row_cache[c]=null),b.rows[c]=null}),b.rows=[],a&&(b.row_cache=[])}},destroyRow:function(a,b){var c=a.container;b?(a.destroy(),c.parentNode&&c.parentNode.removeChild(c),a.tab&&a.tab.parentNode&&a.tab.parentNode.removeChild(a.tab)):(a.tab&&(a.tab.style.display="none"),c.style.display="none",a.unregister())},getMax:function(){return Array.isArray(this.schema.items)&&this.schema.additionalItems===!1?Math.min(this.schema.items.length,this.schema.maxItems||1/0):this.schema.maxItems||1/0},refreshTabs:function(a){var b=this;d(this.rows,function(c,d){d.tab&&(a?d.tab_text.textContent=d.getHeaderText():d.tab===b.active_tab?(b.theme.markTabActive(d.tab),d.container.style.display=""):(b.theme.markTabInactive(d.tab),d.container.style.display="none"))})},setValue:function(a,b){ +// Update the array's value, adding/removing rows when necessary +a=a||[],Array.isArray(a)||(a=[a]);var c=JSON.stringify(a);if(c!==this.serialized){ +// Make sure value has between minItems and maxItems items in it +if(this.schema.minItems)for(;a.lengththis.getMax()&&(a=a.slice(0,this.getMax()));var e=this;d(a,function(a,c){e.rows[a]? +// TODO: don't set the row's value if it hasn't changed +e.rows[a].setValue(c,b):e.row_cache[a]?(e.rows[a]=e.row_cache[a],e.rows[a].setValue(c,b),e.rows[a].container.style.display="",e.rows[a].tab&&(e.rows[a].tab.style.display=""),e.rows[a].register()):e.addRow(c,b)});for(var f=a.length;f=this.rows.length;d(this.rows,function(a,c){ +// Hide the move down button for the last row +c.movedown_button&&(a===b.rows.length-1?c.movedown_button.style.display="none":c.movedown_button.style.display=""), +// Hide the delete button if we have minItems items +c.delete_button&&(e?c.delete_button.style.display="none":c.delete_button.style.display=""), +// Get the value for this editor +b.value[a]=c.getValue()});var f=!1;this.value.length?1===this.value.length?(this.remove_all_rows_button.style.display="none", +// If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows +e||this.hide_delete_last_row_buttons?this.delete_last_row_button.style.display="none":(this.delete_last_row_button.style.display="",f=!0)):(e||this.hide_delete_last_row_buttons?this.delete_last_row_button.style.display="none":(this.delete_last_row_button.style.display="",f=!0),e||this.hide_delete_all_rows_buttons?this.remove_all_rows_button.style.display="none":(this.remove_all_rows_button.style.display="",f=!0)):(this.delete_last_row_button.style.display="none",this.remove_all_rows_button.style.display="none"), +// If there are maxItems in the array, hide the add button beneath the rows +this.getMax()&&this.getMax()<=this.rows.length||this.hide_add_button?this.add_row_button.style.display="none":(this.add_row_button.style.display="",f=!0),!this.collapsed&&f?this.controls.style.display="inline-block":this.controls.style.display="none"}},addRow:function(a,b){var c=this,e=this.rows.length;c.rows[e]=this.getElementEditor(e),c.row_cache[e]=c.rows[e],c.tabs_holder&&(c.rows[e].tab_text=document.createElement("span"),c.rows[e].tab_text.textContent=c.rows[e].getHeaderText(),c.rows[e].tab=c.theme.getTab(c.rows[e].tab_text),c.rows[e].tab.addEventListener("click",function(a){c.active_tab=c.rows[e].tab,c.refreshTabs(),a.preventDefault(),a.stopPropagation()}),c.theme.addTab(c.tabs_holder,c.rows[e].tab));var f=c.rows[e].title_controls||c.rows[e].array_controls; +// Buttons to delete row, move row up, and move row down +c.hide_delete_buttons||(c.rows[e].delete_button=this.getButton(c.getItemTitle(),"delete",this.translate("button_delete_row_title",[c.getItemTitle()])),c.rows[e].delete_button.className+=" delete",c.rows[e].delete_button.setAttribute("data-i",e),c.rows[e].delete_button.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation();var b=1*this.getAttribute("data-i"),e=c.getValue(),f=[],g=null;d(e,function(a,d){ +// If the one we're deleting is the active tab +// Make the next tab active if there is one +// Note: the next tab is going to be the current tab after deletion +return a===b?void(c.rows[a].tab===c.active_tab&&(c.rows[a+1]?g=c.rows[a].tab:a&&(g=c.rows[a-1].tab))):void f.push(d)}),c.setValue(f),g&&(c.active_tab=g,c.refreshTabs()),c.onChange(!0)}),f&&f.appendChild(c.rows[e].delete_button)),e&&!c.hide_move_buttons&&(c.rows[e].moveup_button=this.getButton("","moveup",this.translate("button_move_up_title")),c.rows[e].moveup_button.className+=" moveup",c.rows[e].moveup_button.setAttribute("data-i",e),c.rows[e].moveup_button.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation();var b=1*this.getAttribute("data-i");if(!(b<=0)){var d=c.getValue(),e=d[b-1];d[b-1]=d[b],d[b]=e,c.setValue(d),c.active_tab=c.rows[b-1].tab,c.refreshTabs(),c.onChange(!0)}}),f&&f.appendChild(c.rows[e].moveup_button)),c.hide_move_buttons||(c.rows[e].movedown_button=this.getButton("","movedown",this.translate("button_move_down_title")),c.rows[e].movedown_button.className+=" movedown",c.rows[e].movedown_button.setAttribute("data-i",e),c.rows[e].movedown_button.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation();var b=1*this.getAttribute("data-i"),d=c.getValue();if(!(b>=d.length-1)){var e=d[b+1];d[b+1]=d[b],d[b]=e,c.setValue(d),c.active_tab=c.rows[b+1].tab,c.refreshTabs(),c.onChange(!0)}}),f&&f.appendChild(c.rows[e].movedown_button)),a&&c.rows[e].setValue(a,b),c.refreshTabs()},addControls:function(){var a=this;this.collapsed=!1,this.toggle_button=this.getButton("","collapse",this.translate("button_collapse")),this.title_controls.appendChild(this.toggle_button);var b=a.row_holder.style.display,c=a.controls.style.display;this.toggle_button.addEventListener("click",function(d){d.preventDefault(),d.stopPropagation(),a.collapsed?(a.collapsed=!1,a.panel&&(a.panel.style.display=""),a.row_holder.style.display=b,a.tabs_holder&&(a.tabs_holder.style.display=""),a.controls.style.display=c,a.setButtonText(this,"","collapse",a.translate("button_collapse"))):(a.collapsed=!0,a.row_holder.style.display="none",a.tabs_holder&&(a.tabs_holder.style.display="none"),a.controls.style.display="none",a.panel&&(a.panel.style.display="none"),a.setButtonText(this,"","expand",a.translate("button_expand")))}), +// If it should start collapsed +this.options.collapsed&&e(this.toggle_button,"click"), +// Collapse button disabled +this.schema.options&&"undefined"!=typeof this.schema.options.disable_collapse?this.schema.options.disable_collapse&&(this.toggle_button.style.display="none"):this.jsoneditor.options.disable_collapse&&(this.toggle_button.style.display="none"), +// Add "new row" and "delete last" buttons below editor +this.add_row_button=this.getButton(this.getItemTitle(),"add",this.translate("button_add_row_title",[this.getItemTitle()])),this.add_row_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation();var c=a.rows.length;a.row_cache[c]?(a.rows[c]=a.row_cache[c],a.rows[c].setValue(a.rows[c].getDefault(),!0),a.rows[c].container.style.display="",a.rows[c].tab&&(a.rows[c].tab.style.display=""),a.rows[c].register()):a.addRow(),a.active_tab=a.rows[c].tab,a.refreshTabs(),a.refreshValue(),a.onChange(!0)}),a.controls.appendChild(this.add_row_button),this.delete_last_row_button=this.getButton(this.translate("button_delete_last",[this.getItemTitle()]),"delete",this.translate("button_delete_last_title",[this.getItemTitle()])),this.delete_last_row_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation();var c=a.getValue(),d=null;a.rows.length>1&&a.rows[a.rows.length-1].tab===a.active_tab&&(d=a.rows[a.rows.length-2].tab),c.pop(),a.setValue(c),d&&(a.active_tab=d,a.refreshTabs()),a.onChange(!0)}),a.controls.appendChild(this.delete_last_row_button),this.remove_all_rows_button=this.getButton(this.translate("button_delete_all"),"delete",this.translate("button_delete_all_title")),this.remove_all_rows_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation(),a.setValue([]),a.onChange(!0)}),a.controls.appendChild(this.remove_all_rows_button),a.tabs&&(this.add_row_button.style.width="100%",this.add_row_button.style.textAlign="left",this.add_row_button.style.marginBottom="3px",this.delete_last_row_button.style.width="100%",this.delete_last_row_button.style.textAlign="left",this.delete_last_row_button.style.marginBottom="3px",this.remove_all_rows_button.style.width="100%",this.remove_all_rows_button.style.textAlign="left",this.remove_all_rows_button.style.marginBottom="3px")},showValidationErrors:function(a){var b=this,c=[],e=[]; +// Show errors for this editor +if(d(a,function(a,d){d.path===b.path?c.push(d):e.push(d)}),this.error_holder)if(c.length){this.error_holder.innerHTML="",this.error_holder.style.display="",d(c,function(a,c){b.error_holder.appendChild(b.theme.getErrorMessage(c.message))})}else this.error_holder.style.display="none"; +// Show errors for child editors +d(this.rows,function(a,b){b.showValidationErrors(e)})}}),f.defaults.editors.table=f.defaults.editors.array.extend({register:function(){if(this._super(),this.rows)for(var a=0;athis.schema.maxItems&&(a=a.slice(0,this.schema.maxItems));var c=JSON.stringify(a);if(c!==this.serialized){var e=!1,f=this;d(a,function(a,b){f.rows[a]? +// TODO: don't set the row's value if it hasn't changed +f.rows[a].setValue(b):(f.addRow(b),e=!0)});for(var g=a.length;g=this.rows.length,c=!1;d(this.rows,function(d,e){ +// Hide the move down button for the last row +e.movedown_button&&(d===a.rows.length-1?e.movedown_button.style.display="none":(c=!0,e.movedown_button.style.display="")), +// Hide the delete button if we have minItems items +e.delete_button&&(b?e.delete_button.style.display="none":(c=!0,e.delete_button.style.display="")),e.moveup_button&&(c=!0)}), +// Show/hide controls column in table +d(this.rows,function(a,b){c?b.controls_cell.style.display="":b.controls_cell.style.display="none"}),c?this.controls_header_cell.style.display="":this.controls_header_cell.style.display="none";var e=!1;this.value.length?1===this.value.length?(this.table.style.display="",this.remove_all_rows_button.style.display="none", +// If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows +b||this.hide_delete_last_row_buttons?this.delete_last_row_button.style.display="none":(this.delete_last_row_button.style.display="",e=!0)):(this.table.style.display="",b||this.hide_delete_last_row_buttons?this.delete_last_row_button.style.display="none":(this.delete_last_row_button.style.display="",e=!0),b||this.hide_delete_all_rows_buttons?this.remove_all_rows_button.style.display="none":(this.remove_all_rows_button.style.display="",e=!0)):(this.delete_last_row_button.style.display="none",this.remove_all_rows_button.style.display="none",this.table.style.display="none"), +// If there are maxItems in the array, hide the add button beneath the rows +this.schema.maxItems&&this.schema.maxItems<=this.rows.length||this.hide_add_button?this.add_row_button.style.display="none":(this.add_row_button.style.display="",e=!0),e?this.controls.style.display="":this.controls.style.display="none"},refreshValue:function(){var a=this;this.value=[],d(this.rows,function(b,c){ +// Get the value for this editor +a.value[b]=c.getValue()}),this.serialized=JSON.stringify(this.value)},addRow:function(a){var b=this,c=this.rows.length;b.rows[c]=this.getElementEditor(c);var e=b.rows[c].table_controls; +// Buttons to delete row, move row up, and move row down +this.hide_delete_buttons||(b.rows[c].delete_button=this.getButton("","delete",this.translate("button_delete_row_title_short")),b.rows[c].delete_button.className+=" delete",b.rows[c].delete_button.setAttribute("data-i",c),b.rows[c].delete_button.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation();var c=1*this.getAttribute("data-i"),e=b.getValue(),f=[];d(e,function(a,b){a!==c&&// If this is the one we're deleting +f.push(b)}),b.setValue(f),b.onChange(!0)}),e.appendChild(b.rows[c].delete_button)),c&&!this.hide_move_buttons&&(b.rows[c].moveup_button=this.getButton("","moveup",this.translate("button_move_up_title")),b.rows[c].moveup_button.className+=" moveup",b.rows[c].moveup_button.setAttribute("data-i",c),b.rows[c].moveup_button.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation();var c=1*this.getAttribute("data-i");if(!(c<=0)){var d=b.getValue(),e=d[c-1];d[c-1]=d[c],d[c]=e,b.setValue(d),b.onChange(!0)}}),e.appendChild(b.rows[c].moveup_button)),this.hide_move_buttons||(b.rows[c].movedown_button=this.getButton("","movedown",this.translate("button_move_down_title")),b.rows[c].movedown_button.className+=" movedown",b.rows[c].movedown_button.setAttribute("data-i",c),b.rows[c].movedown_button.addEventListener("click",function(a){a.preventDefault(),a.stopPropagation();var c=1*this.getAttribute("data-i"),d=b.getValue();if(!(c>=d.length-1)){var e=d[c+1];d[c+1]=d[c],d[c]=e,b.setValue(d),b.onChange(!0)}}),e.appendChild(b.rows[c].movedown_button)),a&&b.rows[c].setValue(a)},addControls:function(){var a=this;this.collapsed=!1,this.toggle_button=this.getButton("","collapse",this.translate("button_collapse")),this.title_controls&&(this.title_controls.appendChild(this.toggle_button),this.toggle_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation(),a.collapsed?(a.collapsed=!1,a.panel.style.display="",a.setButtonText(this,"","collapse",a.translate("button_collapse"))):(a.collapsed=!0,a.panel.style.display="none",a.setButtonText(this,"","expand",a.translate("button_expand")))}), +// If it should start collapsed +this.options.collapsed&&e(this.toggle_button,"click"), +// Collapse button disabled +this.schema.options&&"undefined"!=typeof this.schema.options.disable_collapse?this.schema.options.disable_collapse&&(this.toggle_button.style.display="none"):this.jsoneditor.options.disable_collapse&&(this.toggle_button.style.display="none")), +// Add "new row" and "delete last" buttons below editor +this.add_row_button=this.getButton(this.getItemTitle(),"add",this.translate("button_add_row_title",[this.getItemTitle()])),this.add_row_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation(),a.addRow(),a.refreshValue(),a.refreshRowButtons(),a.onChange(!0)}),a.controls.appendChild(this.add_row_button),this.delete_last_row_button=this.getButton(this.translate("button_delete_last",[this.getItemTitle()]),"delete",this.translate("button_delete_last_title",[this.getItemTitle()])),this.delete_last_row_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation();var c=a.getValue();c.pop(),a.setValue(c),a.onChange(!0)}),a.controls.appendChild(this.delete_last_row_button),this.remove_all_rows_button=this.getButton(this.translate("button_delete_all"),"delete",this.translate("button_delete_all_title")),this.remove_all_rows_button.addEventListener("click",function(b){b.preventDefault(),b.stopPropagation(),a.setValue([]),a.onChange(!0)}),a.controls.appendChild(this.remove_all_rows_button)}}), +// Multiple Editor (for when `type` is an array) +f.defaults.editors.multiple=f.AbstractEditor.extend({register:function(){if(this.editors){for(var a=0;anull";if("object"==typeof a){ +// TODO: use theme +var c="";return d(a,function(d,e){var f=b.getHTML(e); +// Add the keys to object children +Array.isArray(a)||( +// TODO: use theme +f="
    "+d+": "+f+"
    "), +// TODO: use theme +c+="
  • "+f+"
  • "}),c=Array.isArray(a)?"
      "+c+"
    ":"
      "+c+"
    "}return"boolean"==typeof a?a?"true":"false":"string"==typeof a?a.replace(/&/g,"&").replace(//g,">"):a},setValue:function(a){this.value!==a&&(this.value=a,this.refreshValue(),this.onChange())},destroy:function(){this.display_area&&this.display_area.parentNode&&this.display_area.parentNode.removeChild(this.display_area),this.title&&this.title.parentNode&&this.title.parentNode.removeChild(this.title),this.switcher&&this.switcher.parentNode&&this.switcher.parentNode.removeChild(this.switcher),this._super()}}),f.defaults.editors.select=f.AbstractEditor.extend({setValue:function(a,b){a=this.typecast(a||""); +// Sanitize value before setting it +var c=a;this.enum_values.indexOf(c)<0&&(c=this.enum_values[0]),this.value!==c&&(this.input.value=this.enum_options[this.enum_values.indexOf(c)],this.select2&&this.select2.select2("val",this.input.value),this.value=c,this.onChange())},register:function(){this._super(),this.input&&this.input.setAttribute("name",this.formname)},unregister:function(){this._super(),this.input&&this.input.removeAttribute("name")},getNumColumns:function(){if(!this.enum_options)return 3;for(var a=this.getTitle().length,b=0;b2||this.enum_options.length&&this.enumSource)){var a=c({},f.plugins.select2);this.schema.options&&this.schema.options.select2_options&&(a=c(a,this.schema.options.select2_options)),this.select2=window.jQuery(this.input).select2(a);var b=this;this.select2.on("select2-blur",function(){b.input.value=b.select2.select2("val"),b.onInputChange()}),this.select2.on("change",function(){b.input.value=b.select2.select2("val"),b.onInputChange()})}else this.select2=null},postBuild:function(){this._super(),this.theme.afterInputReady(this.input),this.setupSelect2()},onWatchedFieldChange:function(){var a,b; +// If this editor uses a dynamic select box +if(this.enumSource){a=this.getWatchedFieldValues();for(var c=[],d=[],e=0;e=2||this.enum_options.length&&this.enumSource)){var b=c({},f.plugins.selectize);this.schema.options&&this.schema.options.selectize_options&&(b=c(b,this.schema.options.selectize_options)),this.selectize=window.jQuery(this.input).selectize(c(b,{create:!0,onChange:function(){a.onInputChange()}}))}else this.selectize=null},postBuild:function(){this._super(),this.theme.afterInputReady(this.input),this.setupSelectize()},onWatchedFieldChange:function(){var a,b; +// If this editor uses a dynamic select box +if(this.enumSource){a=this.getWatchedFieldValues();for(var c=[],d=[],e=0;eType: "+a+", Size: "+Math.floor((this.value.length-this.value.split(",")[0].length-1)/1.33333)+" bytes","image"===a.substr(0,5)){this.preview.innerHTML+="
    ";var b=document.createElement("img");b.style.maxWidth="100%",b.style.maxHeight="100px",b.src=this.value,this.preview.appendChild(b)}}else this.preview.innerHTML="Invalid data URI"}},enable:function(){this.uploader&&(this.uploader.disabled=!1),this._super()},disable:function(){this.uploader&&(this.uploader.disabled=!0),this._super()},setValue:function(a){this.value!==a&&(this.value=a,this.input.value=this.value,this.refreshPreview(),this.onChange())},destroy:function(){this.preview&&this.preview.parentNode&&this.preview.parentNode.removeChild(this.preview),this.title&&this.title.parentNode&&this.title.parentNode.removeChild(this.title),this.input&&this.input.parentNode&&this.input.parentNode.removeChild(this.input),this.uploader&&this.uploader.parentNode&&this.uploader.parentNode.removeChild(this.uploader),this._super()}}),f.defaults.editors.upload=f.AbstractEditor.extend({getNumColumns:function(){return 4},build:function(){var a=this; +// Don't show uploader if this is readonly +if(this.title=this.header=this.label=this.theme.getFormInputLabel(this.getTitle()), +// Input that holds the base64 string +this.input=this.theme.getFormInputField("hidden"),this.container.appendChild(this.input),!this.schema.readOnly&&!this.schema.readonly){if(!this.jsoneditor.options.upload)throw"Upload handler required for upload editor"; +// File uploader +this.uploader=this.theme.getFormInputField("file"),this.uploader.addEventListener("change",function(b){if(b.preventDefault(),b.stopPropagation(),this.files&&this.files.length){var c=new FileReader;c.onload=function(b){a.preview_value=b.target.result,a.refreshPreview(),a.onChange(!0),c=null},c.readAsDataURL(this.files[0])}})}var b=this.schema.description;b||(b=""),this.preview=this.theme.getFormInputDescription(b),this.container.appendChild(this.preview),this.control=this.theme.getFormControl(this.label,this.uploader||this.input,this.preview),this.container.appendChild(this.control)},refreshPreview:function(){if(this.last_preview!==this.preview_value&&(this.last_preview=this.preview_value,this.preview.innerHTML="",this.preview_value)){var a=this,b=this.preview_value.match(/^data:([^;,]+)[;,]/);b&&(b=b[1]),b||(b="unknown");var c=this.uploader.files[0];if(this.preview.innerHTML="Type: "+b+", Size: "+c.size+" bytes","image"===b.substr(0,5)){this.preview.innerHTML+="
    ";var d=document.createElement("img");d.style.maxWidth="100%",d.style.maxHeight="100px",d.src=this.preview_value,this.preview.appendChild(d)}this.preview.innerHTML+="
    ";var e=this.getButton("Upload","upload","Upload");this.preview.appendChild(e),e.addEventListener("click",function(b){b.preventDefault(),e.setAttribute("disabled","disabled"),a.theme.removeInputError(a.uploader),a.theme.getProgressBar&&(a.progressBar=a.theme.getProgressBar(),a.preview.appendChild(a.progressBar)),a.jsoneditor.options.upload(a.path,c,{success:function(b){a.setValue(b),a.parent?a.parent.onChildEditorChange(a):a.jsoneditor.onChange(),a.progressBar&&a.preview.removeChild(a.progressBar),e.removeAttribute("disabled")},failure:function(b){a.theme.addInputError(a.uploader,b),a.progressBar&&a.preview.removeChild(a.progressBar),e.removeAttribute("disabled")},updateProgress:function(b){a.progressBar&&(b?a.theme.updateProgressBar(a.progressBar,b):a.theme.updateProgressBarUnknown(a.progressBar))}})})}},enable:function(){this.uploader&&(this.uploader.disabled=!1),this._super()},disable:function(){this.uploader&&(this.uploader.disabled=!0),this._super()},setValue:function(a){this.value!==a&&(this.value=a,this.input.value=this.value,this.onChange())},destroy:function(){this.preview&&this.preview.parentNode&&this.preview.parentNode.removeChild(this.preview),this.title&&this.title.parentNode&&this.title.parentNode.removeChild(this.title),this.input&&this.input.parentNode&&this.input.parentNode.removeChild(this.input),this.uploader&&this.uploader.parentNode&&this.uploader.parentNode.removeChild(this.uploader),this._super()}}),f.defaults.editors.checkbox=f.AbstractEditor.extend({setValue:function(a,b){this.value=!!a,this.input.checked=this.value,this.onChange()},register:function(){this._super(),this.input&&this.input.setAttribute("name",this.formname)},unregister:function(){this._super(),this.input&&this.input.removeAttribute("name")},getNumColumns:function(){return Math.min(12,Math.max(this.getTitle().length/7,2))},build:function(){var a=this;this.options.compact||(this.label=this.header=this.theme.getCheckboxLabel(this.getTitle())),this.schema.description&&(this.description=this.theme.getFormInputDescription(this.schema.description)),this.options.compact&&(this.container.className+=" compact"),this.input=this.theme.getCheckbox(),this.control=this.theme.getFormControl(this.label,this.input,this.description),(this.schema.readOnly||this.schema.readonly)&&(this.always_disabled=!0,this.input.disabled=!0),this.input.addEventListener("change",function(b){b.preventDefault(),b.stopPropagation(),a.value=this.checked,a.onChange(!0)}),this.container.appendChild(this.control)},enable:function(){this.always_disabled||(this.input.disabled=!1),this._super()},disable:function(){this.input.disabled=!0,this._super()},destroy:function(){this.label&&this.label.parentNode&&this.label.parentNode.removeChild(this.label),this.description&&this.description.parentNode&&this.description.parentNode.removeChild(this.description),this.input&&this.input.parentNode&&this.input.parentNode.removeChild(this.input),this._super()}}),f.defaults.editors.arraySelectize=f.AbstractEditor.extend({build:function(){this.title=this.theme.getFormInputLabel(this.getTitle()),this.title_controls=this.theme.getHeaderButtonHolder(),this.title.appendChild(this.title_controls),this.error_holder=document.createElement("div"),this.schema.description&&(this.description=this.theme.getDescription(this.schema.description)),this.input=document.createElement("select"),this.input.setAttribute("multiple","multiple");var a=this.theme.getFormControl(this.title,this.input,this.description);this.container.appendChild(a),this.container.appendChild(this.error_holder),window.jQuery(this.input).selectize({delimiter:!1,createOnBlur:!0,create:!0})},postBuild:function(){var a=this;this.input.selectize.on("change",function(b){a.refreshValue(),a.onChange(!0)})},destroy:function(){this.empty(!0),this.title&&this.title.parentNode&&this.title.parentNode.removeChild(this.title),this.description&&this.description.parentNode&&this.description.parentNode.removeChild(this.description),this.input&&this.input.parentNode&&this.input.parentNode.removeChild(this.input),this._super()},empty:function(a){},setValue:function(a,b){var c=this; +// Update the array's value, adding/removing rows when necessary +a=a||[],Array.isArray(a)||(a=[a]),this.input.selectize.clearOptions(),this.input.selectize.clear(!0),a.forEach(function(a){c.input.selectize.addOption({text:a,value:a})}),this.input.selectize.setValue(a),this.refreshValue(b)},refreshValue:function(a){this.value=this.input.selectize.getValue()},showValidationErrors:function(a){var b=this,c=[],e=[]; +// Show errors for this editor +if(d(a,function(a,d){d.path===b.path?c.push(d):e.push(d)}),this.error_holder)if(c.length){this.error_holder.innerHTML="",this.error_holder.style.display="",d(c,function(a,c){b.error_holder.appendChild(b.theme.getErrorMessage(c.message))})}else this.error_holder.style.display="none"}});var g=function(){var a=document.documentElement;return a.matches?"matches":a.webkitMatchesSelector?"webkitMatchesSelector":a.mozMatchesSelector?"mozMatchesSelector":a.msMatchesSelector?"msMatchesSelector":a.oMatchesSelector?"oMatchesSelector":void 0}();f.AbstractTheme=a.extend({getContainer:function(){return document.createElement("div")},getFloatRightLinkHolder:function(){var a=document.createElement("div");return a.style=a.style||{},a.style.cssFloat="right",a.style.marginLeft="10px",a},getModal:function(){var a=document.createElement("div");return a.style.backgroundColor="white",a.style.border="1px solid black",a.style.boxShadow="3px 3px black",a.style.position="absolute",a.style.zIndex="10",a.style.display="none",a},getGridContainer:function(){var a=document.createElement("div");return a},getGridRow:function(){var a=document.createElement("div");return a.className="row",a},getGridColumn:function(){var a=document.createElement("div");return a},setGridColumnSize:function(a,b){},getLink:function(a){var b=document.createElement("a");return b.setAttribute("href","#"),b.appendChild(document.createTextNode(a)),b},disableHeader:function(a){a.style.color="#ccc"},disableLabel:function(a){a.style.color="#ccc"},enableHeader:function(a){a.style.color=""},enableLabel:function(a){a.style.color=""},getFormInputLabel:function(a){var b=document.createElement("label");return b.appendChild(document.createTextNode(a)),b},getCheckboxLabel:function(a){var b=this.getFormInputLabel(a);return b.style.fontWeight="normal",b},getHeader:function(a){var b=document.createElement("h3");return"string"==typeof a?b.textContent=a:b.appendChild(a),b},getCheckbox:function(){var a=this.getFormInputField("checkbox");return a.style.display="inline-block",a.style.width="auto",a},getMultiCheckboxHolder:function(a,b,c){var d=document.createElement("div");b&&(b.style.display="block",d.appendChild(b));for(var e in a)a.hasOwnProperty(e)&&(a[e].style.display="inline-block",a[e].style.marginRight="20px",d.appendChild(a[e]));return c&&d.appendChild(c),d},getSelectInput:function(a){var b=document.createElement("select");return a&&this.setSelectOptions(b,a),b},getSwitcher:function(a){var b=this.getSelectInput(a);return b.style.backgroundColor="transparent",b.style.display="inline-block",b.style.fontStyle="italic",b.style.fontWeight="normal",b.style.height="auto",b.style.marginBottom=0,b.style.marginLeft="5px",b.style.padding="0 0 0 3px",b.style.width="auto",b},getSwitcherOptions:function(a){return a.getElementsByTagName("option")},setSwitcherOptions:function(a,b,c){this.setSelectOptions(a,b,c)},setSelectOptions:function(a,b,c){c=c||[],a.innerHTML="";for(var d=0;d'),a.errmsg=a.parentNode.getElementsByClassName("error")[0]),a.errmsg.textContent=b)},removeInputError:function(a){a.errmsg&&(a.group.className=a.group.className.replace(/ error/g,""),a.errmsg.style.display="none")},getProgressBar:function(){var a=document.createElement("div");a.className="progress";var b=document.createElement("span");return b.className="meter",b.style.width="0%",a.appendChild(b),a},updateProgressBar:function(a,b){a&&(a.firstChild.style.width=b+"%")},updateProgressBarUnknown:function(a){a&&(a.firstChild.style.width="100%")}}), +// Foundation 3 Specific Theme +f.defaults.themes.foundation3=f.defaults.themes.foundation.extend({getHeaderButtonHolder:function(){var a=this._super();return a.style.fontSize=".6em",a},getFormInputLabel:function(a){var b=this._super(a);return b.style.fontWeight="bold",b},getTabHolder:function(){var a=document.createElement("div");return a.className="row",a.innerHTML="
    ",a},setGridColumnSize:function(a,b){var c=["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve"];a.className="columns "+c[b]},getTab:function(a){var b=document.createElement("dd"),c=document.createElement("a");return c.setAttribute("href","#"),c.appendChild(a),b.appendChild(c),b},getTabContentHolder:function(a){return a.children[1]},getTabContent:function(){var a=document.createElement("div");return a.className="content active",a.style.paddingLeft="5px",a},markTabActive:function(a){a.className+=" active"},markTabInactive:function(a){a.className=a.className.replace(/\s*active/g,"")},addTab:function(a,b){a.children[0].appendChild(b)}}), +// Foundation 4 Specific Theme +f.defaults.themes.foundation4=f.defaults.themes.foundation.extend({getHeaderButtonHolder:function(){var a=this._super();return a.style.fontSize=".6em",a},setGridColumnSize:function(a,b){a.className="columns large-"+b},getFormInputDescription:function(a){var b=this._super(a);return b.style.fontSize=".8rem",b},getFormInputLabel:function(a){var b=this._super(a);return b.style.fontWeight="bold",b}}), +// Foundation 5 Specific Theme +f.defaults.themes.foundation5=f.defaults.themes.foundation.extend({getFormInputDescription:function(a){var b=this._super(a);return b.style.fontSize=".8rem",b},setGridColumnSize:function(a,b){a.className="columns medium-"+b},getButton:function(a,b,c){var d=this._super(a,b,c);return d.className=d.className.replace(/\s*small/g,"")+" tiny",d},getTabHolder:function(){var a=document.createElement("div");return a.innerHTML="
    ",a},getTab:function(a){var b=document.createElement("dd"),c=document.createElement("a");return c.setAttribute("href","#"),c.appendChild(a),b.appendChild(c),b},getTabContentHolder:function(a){return a.children[1]},getTabContent:function(){var a=document.createElement("div");return a.className="content active",a.style.paddingLeft="5px",a},markTabActive:function(a){a.className+=" active"},markTabInactive:function(a){a.className=a.className.replace(/\s*active/g,"")},addTab:function(a,b){a.children[0].appendChild(b)}}),f.defaults.themes.foundation6=f.defaults.themes.foundation5.extend({getIndentedPanel:function(){var a=document.createElement("div");return a.className="callout secondary",a},getButtonHolder:function(){var a=document.createElement("div");return a.className="button-group tiny",a.style.marginBottom=0,a},getFormInputLabel:function(a){var b=this._super(a);return b.style.display="block",b},getFormControl:function(a,b,c){var d=document.createElement("div");return d.className="form-control",a&&d.appendChild(a),"checkbox"===b.type?a.insertBefore(b,a.firstChild):a?a.appendChild(b):d.appendChild(b),c&&a.appendChild(c),d},addInputError:function(a,b){if(a.group){if(a.group.className+=" error",a.errmsg)a.errmsg.style.display="",a.className="";else{var c=document.createElement("span");c.className="form-error is-visible",a.group.getElementsByTagName("label")[0].appendChild(c),a.className=a.className+" is-invalid-input",a.errmsg=c}a.errmsg.textContent=b}},removeInputError:function(a){a.errmsg&&(a.className=a.className.replace(/ is-invalid-input/g,""),a.errmsg.parentNode&&a.errmsg.parentNode.removeChild(a.errmsg))}}),f.defaults.themes.html=f.AbstractTheme.extend({getFormInputLabel:function(a){var b=this._super(a);return b.style.display="block",b.style.marginBottom="3px",b.style.fontWeight="bold",b},getFormInputDescription:function(a){var b=this._super(a);return b.style.fontSize=".8em",b.style.margin=0,b.style.display="inline-block",b.style.fontStyle="italic",b},getIndentedPanel:function(){var a=this._super();return a.style.border="1px solid #ddd",a.style.padding="5px",a.style.margin="5px",a.style.borderRadius="3px",a},getChildEditorHolder:function(){var a=this._super();return a.style.marginBottom="8px",a},getHeaderButtonHolder:function(){var a=this.getButtonHolder();return a.style.display="inline-block",a.style.marginLeft="10px",a.style.fontSize=".8em",a.style.verticalAlign="middle",a},getTable:function(){var a=this._super();return a.style.borderBottom="1px solid #ccc",a.style.marginBottom="5px",a},addInputError:function(a,b){if(a.style.borderColor="red",a.errmsg)a.errmsg.style.display="block";else{var c=this.closest(a,".form-control");a.errmsg=document.createElement("div"),a.errmsg.setAttribute("class","errmsg"),a.errmsg.style=a.errmsg.style||{},a.errmsg.style.color="red",c.appendChild(a.errmsg)}a.errmsg.innerHTML="",a.errmsg.appendChild(document.createTextNode(b))},removeInputError:function(a){a.style.borderColor="",a.errmsg&&(a.errmsg.style.display="none")},getProgressBar:function(){var a=100,b=0,c=document.createElement("progress");return c.setAttribute("max",a),c.setAttribute("value",b),c},updateProgressBar:function(a,b){a&&a.setAttribute("value",b)},updateProgressBarUnknown:function(a){a&&a.removeAttribute("value")}}),f.defaults.themes.jqueryui=f.AbstractTheme.extend({getTable:function(){var a=this._super();return a.setAttribute("cellpadding",5),a.setAttribute("cellspacing",0),a},getTableHeaderCell:function(a){var b=this._super(a);return b.className="ui-state-active",b.style.fontWeight="bold",b},getTableCell:function(){var a=this._super();return a.className="ui-widget-content",a},getHeaderButtonHolder:function(){var a=this.getButtonHolder();return a.style.marginLeft="10px",a.style.fontSize=".6em",a.style.display="inline-block",a},getFormInputDescription:function(a){var b=this.getDescription(a);return b.style.marginLeft="10px",b.style.display="inline-block",b},getFormControl:function(a,b,c){var d=this._super(a,b,c);return"checkbox"===b.type?(d.style.lineHeight="25px",d.style.padding="3px 0"):d.style.padding="4px 0 8px 0",d},getDescription:function(a){var b=document.createElement("span");return b.style.fontSize=".8em",b.style.fontStyle="italic",b.textContent=a,b},getButtonHolder:function(){var a=document.createElement("div");return a.className="ui-buttonset",a.style.fontSize=".7em",a},getFormInputLabel:function(a){var b=document.createElement("label");return b.style.fontWeight="bold",b.style.display="block",b.textContent=a,b},getButton:function(a,b,c){var d=document.createElement("button");d.className="ui-button ui-widget ui-state-default ui-corner-all", +// Icon only +b&&!a?(d.className+=" ui-button-icon-only",b.className+=" ui-button-icon-primary ui-icon-primary",d.appendChild(b)):b?(d.className+=" ui-button-text-icon-primary",b.className+=" ui-button-icon-primary ui-icon-primary",d.appendChild(b)):d.className+=" ui-button-text-only";var e=document.createElement("span");return e.className="ui-button-text",e.textContent=a||c||".",d.appendChild(e),d.setAttribute("title",c),d},setButtonText:function(a,b,c,d){a.innerHTML="",a.className="ui-button ui-widget ui-state-default ui-corner-all", +// Icon only +c&&!b?(a.className+=" ui-button-icon-only",c.className+=" ui-button-icon-primary ui-icon-primary",a.appendChild(c)):c?(a.className+=" ui-button-text-icon-primary",c.className+=" ui-button-icon-primary ui-icon-primary",a.appendChild(c)):a.className+=" ui-button-text-only";var e=document.createElement("span");e.className="ui-button-text",e.textContent=b||d||".",a.appendChild(e),a.setAttribute("title",d)},getIndentedPanel:function(){var a=document.createElement("div");return a.className="ui-widget-content ui-corner-all",a.style.padding="1em 1.4em",a.style.marginBottom="20px",a},afterInputReady:function(a){a.controls||(a.controls=this.closest(a,".form-control"))},addInputError:function(a,b){a.controls&&(a.errmsg?a.errmsg.style.display="":(a.errmsg=document.createElement("div"),a.errmsg.className="ui-state-error",a.controls.appendChild(a.errmsg)),a.errmsg.textContent=b)},removeInputError:function(a){a.errmsg&&(a.errmsg.style.display="none")},markTabActive:function(a){a.className=a.className.replace(/\s*ui-widget-header/g,"")+" ui-state-active"},markTabInactive:function(a){a.className=a.className.replace(/\s*ui-state-active/g,"")+" ui-widget-header"}}),f.defaults.themes.barebones=f.AbstractTheme.extend({getFormInputLabel:function(a){var b=this._super(a);return b},getFormInputDescription:function(a){var b=this._super(a);return b},getIndentedPanel:function(){var a=this._super();return a},getChildEditorHolder:function(){var a=this._super();return a},getHeaderButtonHolder:function(){var a=this.getButtonHolder();return a},getTable:function(){var a=this._super();return a},addInputError:function(a,b){if(a.errmsg)a.errmsg.style.display="block";else{var c=this.closest(a,".form-control");a.errmsg=document.createElement("div"),a.errmsg.setAttribute("class","errmsg"),c.appendChild(a.errmsg)}a.errmsg.innerHTML="",a.errmsg.appendChild(document.createTextNode(b))},removeInputError:function(a){a.style.borderColor="",a.errmsg&&(a.errmsg.style.display="none")},getProgressBar:function(){var a=100,b=0,c=document.createElement("progress");return c.setAttribute("max",a),c.setAttribute("value",b),c},updateProgressBar:function(a,b){a&&a.setAttribute("value",b)},updateProgressBarUnknown:function(a){a&&a.removeAttribute("value")}}),f.AbstractIconLib=a.extend({mapping:{collapse:"",expand:"","delete":"",edit:"",add:"",cancel:"",save:"",moveup:"",movedown:""},icon_prefix:"",getIconClass:function(a){return this.mapping[a]?this.icon_prefix+this.mapping[a]:null},getIcon:function(a){var b=this.getIconClass(a);if(!b)return null;var c=document.createElement("i");return c.className=b,c}}),f.defaults.iconlibs.bootstrap2=f.AbstractIconLib.extend({mapping:{collapse:"chevron-down",expand:"chevron-up","delete":"trash",edit:"pencil",add:"plus",cancel:"ban-circle",save:"ok",moveup:"arrow-up",movedown:"arrow-down"},icon_prefix:"icon-"}),f.defaults.iconlibs.bootstrap3=f.AbstractIconLib.extend({mapping:{collapse:"chevron-down",expand:"chevron-right","delete":"remove",edit:"pencil",add:"plus",cancel:"floppy-remove",save:"floppy-saved",moveup:"arrow-up",movedown:"arrow-down"},icon_prefix:"glyphicon glyphicon-"}),f.defaults.iconlibs.fontawesome3=f.AbstractIconLib.extend({mapping:{collapse:"chevron-down",expand:"chevron-right","delete":"remove",edit:"pencil",add:"plus",cancel:"ban-circle",save:"save",moveup:"arrow-up",movedown:"arrow-down"},icon_prefix:"icon-"}),f.defaults.iconlibs.fontawesome4=f.AbstractIconLib.extend({mapping:{collapse:"caret-square-o-down",expand:"caret-square-o-right","delete":"times",edit:"pencil",add:"plus",cancel:"ban",save:"save",moveup:"arrow-up",movedown:"arrow-down"},icon_prefix:"fa fa-"}),f.defaults.iconlibs.foundation2=f.AbstractIconLib.extend({mapping:{collapse:"minus",expand:"plus","delete":"remove",edit:"edit",add:"add-doc",cancel:"error",save:"checkmark",moveup:"up-arrow",movedown:"down-arrow"},icon_prefix:"foundicon-"}),f.defaults.iconlibs.foundation3=f.AbstractIconLib.extend({mapping:{collapse:"minus",expand:"plus","delete":"x",edit:"pencil",add:"page-add",cancel:"x-circle",save:"save",moveup:"arrow-up",movedown:"arrow-down"},icon_prefix:"fi-"}),f.defaults.iconlibs.jqueryui=f.AbstractIconLib.extend({mapping:{collapse:"triangle-1-s",expand:"triangle-1-e","delete":"trash",edit:"pencil",add:"plusthick",cancel:"closethick",save:"disk",moveup:"arrowthick-1-n",movedown:"arrowthick-1-s"},icon_prefix:"ui-icon ui-icon-"}),f.defaults.templates["default"]=function(){return{compile:function(a){var b=a.match(/{{\s*([a-zA-Z0-9\-_ \.]+)\s*}}/g),c=b&&b.length; +// Shortcut if the template contains no variables +if(!c)return function(){return a};for(var d=[],e=function(a){var c,e=b[a].replace(/[{}]+/g,"").trim().split("."),f=e.length;if(f>1){var g;c=function(b){for(g=b,a=0;a=0){ +// For enumerated strings, number, or integers +if(a.items["enum"])return"multiselect";if(f.plugins.selectize.enable&&"string"===a.items.type)return"arraySelectize"}}), +// Use the multiple editor for schemas with `oneOf` set +f.defaults.resolvers.unshift(function(a){ +// If this schema uses `oneOf` or `anyOf` +if(a.oneOf||a.anyOf)return"multiple"}),/** + * This is a small wrapper for using JSON Editor like a typical jQuery plugin. + */ +function(){if(window.jQuery||window.Zepto){var a=window.jQuery||window.Zepto;a.jsoneditor=f.defaults,a.fn.jsoneditor=function(a){var b=this,c=this.data("jsoneditor");if("value"===a){if(!c)throw"Must initialize jsoneditor before getting/setting the value"; +// Set value +if(!(arguments.length>1))return c.getValue();c.setValue(arguments[1])}else{if("validate"===a){if(!c)throw"Must initialize jsoneditor before validating"; +// Validate a specific value +// Validate a specific value +return arguments.length>1?c.validate(arguments[1]):c.validate()}"destroy"===a?c&&(c.destroy(),this.data("jsoneditor",null)):( +// Destroy first +c&&c.destroy(), +// Create editor +c=new f(this.get(0),a),this.data("jsoneditor",c), +// Setup event listeners +c.on("change",function(){b.trigger("change")}),c.on("ready",function(){b.trigger("ready")}))}return this}}}(),window.JSONEditor=f}(); +//# sourceMappingURL=jsoneditor.min.js.map \ No newline at end of file diff --git a/libs/json-editor/dist/jsoneditor.min.js.map b/libs/json-editor/dist/jsoneditor.min.js.map new file mode 100644 index 0000000..2af76a3 --- /dev/null +++ b/libs/json-editor/dist/jsoneditor.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["jsoneditor.js"],"names":["Class","initializing","fnTest","test","window","postMessage","extend","prop","this","init","apply","arguments","_super","prototype","name","fn","tmp","ret","constructor","CustomEvent","event","params","bubbles","cancelable","detail","undefined","evt","document","createEvent","initCustomEvent","Event","lastTime","vendors","x","length","requestAnimationFrame","cancelAnimationFrame","callback","element","currTime","Date","getTime","timeToCall","Math","max","id","setTimeout","clearTimeout","Array","isArray","arg","Object","toString","call","$isplainobject","obj","nodeType","hasOwnProperty","$extend","destination","source","i","property","$each","keys","$trigger","el","e","initEvent","dispatchEvent","JSONEditor","options","Element","Error","defaults","self","ready","theme_class","themes","theme","schema","template","refs","uuid","__data","icon_class","iconlibs","iconlib","root_container","getContainer","appendChild","translate","_loadExternalRefs","_getDefinitions","validator_options","custom_validators","validator","Validator","editor_class","getEditorClass","root","createEditor","jsoneditor","required","container","preBuild","build","postBuild","startval","setValue","validation_results","validate","getValue","showValidationErrors","trigger","value","destroy","destroyed","innerHTML","on","callbacks","push","off","newcallbacks","setOption","option","show_errors","onChange","classname","expandSchema","resolvers","resolver","editors","JSON","stringify","firing_change","compileTemplate","engine","templates","compile","_data","key","hasAttribute","getAttribute","setAttribute","registerEditor","editor","path","unregisterEditor","getEditor","watch","watchlist","unwatch","newlist","notifyWatchers","isEnabled","enable","disable","definitions","_getExternalRefs","merge_refs","newrefs","$ref","substr","j","done","waiting","callback_fired","url","ajax","r","XMLHttpRequest","open","onreadystatechange","readyState","status","console","log","response","parse","responseText","send","expandRefs","ref","decodeURIComponent","extendSchemas","extended","type","disallow","anyOf","dependencies","not","allOf","oneOf","obj1","obj2","val","filter","n","indexOf","concat","reduce","p","c","languages","_validateSchema","valid","errors","stringified","message","required_by_default","oneof_errors","_checkType","multipleOf","divisibleBy","divisor","floor","math","mod","bignumber","equals","Decimal","exclusiveMaximum","maximum","exclusiveMinimum","minimum","maxLength","minLength","pattern","RegExp","items","additionalItems","maxItems","minItems","uniqueItems","seen","maxProperties","minProperties","validated_properties","properties","patternProperties","regex","additionalProperties","no_additional_properties","AbstractEditor","onChildEditorChange","notify","change","parent","bubble","watch_listener","register","unregister","getNumColumns","template_engine","original_schema","formname","replace","form_name_root","split","pop","link_watchers","setContainer","setupWatchListeners","addLinks","getDefault","updateHeaderText","onWatchedFieldChange","watched","vars","watched_values","refreshWatchedFieldValues","path_parts","first","adjusted_path","closest","unshift","shift","join","headerTemplate","header_template","no_link_holder","link_holder","getLinksHolder","links","addLink","getLink","getButton","text","icon","title","btnClass","getIcon","btn","className","setButtonText","button","link","data","holder","mime","mediaType","href","download","getBlockLinkHolder","createElement","image","createImageLink","rel","getBlockLink","media","createMediaLink","textContent","changed","getWatchedFieldValues","header","children","childNodes","nodeValue","getHeaderText","title_only","header_text","getTitle","i0","i1","refreshValue","getChildEditors","parentNode","removeChild","disabled","isRequired","getDisplayText","arr","disp","used","description","format","descripton","inc","getOption","error","string","input","removeAttribute","initial","from_template","serialized","sanitized","sanitize","sceditor_instance","epiceditor","importFile","ace_editor","is_dirty","adjust_height","num","min","ceil","input_type","compact","label","getFormInputLabel","getFormInputDescription","default_format","getTextareaInput","step","getRangeInput","source_code","getFormInputField","input_width","style","width","readOnly","readonly","always_disabled","addEventListener","preventDefault","stopPropagation","input_height","height","expand_height","ch","offsetHeight","scrollHeight","control","getFormControl","afterInputReady","wysiwyg","jQuery","sceditor","plugins","emoticonsEnabled","sceditor_options","blur","remove","html","EpicEditor","epiceditor_container","insertBefore","display","clientSideStorage","load","exportFile","ace","mode","ace_container","position","edit","setTheme","require","getSession","setMode","Mode","unload","previous_error_setting","messages","addInputError","removeInputError","number","integer","object","maxwidth","editjson_button","addproperty_button","hideEditJSON","layoutEditors","row_container","property_order","sort","a","b","ordera","propertyOrder","orderb","rows","property_removed","found","hidden","grid_columns","minh","maxh","biggest","new_width","layout","row","getGridRow","setGridColumnSize","getPropertySchema","matched","cached_editors","object_layout","minwidth","table_row","table","defaultProperties","display_required_only","k","s","addObjectProperty","editor_holder","getTableCell","getHeader","editjson_holder","getModal","editjson_textarea","editjson_save","saveJSON","editjson_cancel","addproperty_holder","addproperty_list","maxHeight","padding","overflowY","overflowX","paddingLeft","addproperty_add","addproperty_input","marginBottom","alert","spacer","clear","getDescription","error_holder","getIndentedPanel","getGridContainer","getGridColumn","title_controls","getHeaderButtonHolder","editjson_controls","addproperty_controls","collapsed","toggle_button","disable_collapse","toggleEditJSON","disable_edit_json","toggleAddProperty","refreshAddProperties","showEditJSON","hideAddProperty","left","offsetLeft","top","offsetTop","editing_json","json","insertPropertyControlUsingPropertyOrder","child","addPropertyCheckbox","checkbox","labelText","getCheckbox","getCheckboxLabel","paddingBottom","paddingTop","marginTop","checked","removeObjectProperty","addproperty_checkboxes","showAddProperty","adding_property","prebuild_only","canHaveAdditionalProperties","getChildEditorHolder","result","remove_empty_properties","disable_properties","can_add","can_remove","num_props","show_modal","my_errors","other_errors","getErrorMessage","addTableRowError","removeTableRowError","array","info","getItemInfo","tabs_holder","add_row_button","remove_all_rows_button","delete_last_row_button","moveup_button","movedown_button","delete_button","row_cache","hide_delete_buttons","disable_array_delete","hide_delete_all_rows_buttons","disable_array_delete_all_rows","hide_delete_last_row_buttons","disable_array_delete_last_row","hide_move_buttons","disable_array_reorder","hide_add_button","disable_array_add","panel","controls","getButtonHolder","row_holder","getTabHolder","getTabContentHolder","active_tab","addControls","refreshTabs","getItemTitle","item_title","getItemSchema","item_info","default","child_editors","getElementEditor","getTabContent","array_controls","empty","hard","tab","destroyRow","getMax","Infinity","refresh_headers","tab_text","markTabActive","markTabInactive","slice","addRow","new_active_tab","force","oldi","controls_needed","getTab","addTab","controls_holder","newval","row_holder_display","controls_display","tabs","textAlign","item_schema","item_default","item_has_child_editors","getTable","thead","getTableHead","header_row","getTableRow","getTableBody","ce","order","th","getTableHeaderCell","controls_header_cell","getItemDefault","ignore","schema_copy","controls_cell","table_controls","margin","numrows_changed","refreshRowButtons","need_row_buttons","multiple","switcher","switchEditor","buildChildEditor","current_value","keep_values","refreshHeaderText","types","switcher_options","validators","keep_oneof_values","allowed_types","display_text","getSwitcher","getSwitcherOptions","check_part","check","new_errors","new_error","enum_titles","selected","select_options","html_values","getHTML","display_area","hide_display","select","typecast","enum_values","enum_options","select2","longest_text","enum_display","enumSource","enumValue","getSelectInput","setSelectOptions","onInputChange","new_val","setupSelect2","select2_options","select_titles","new_items","item","item_titles","item_values","prev_value","selectize","addItem","setupSelectize","selectize_options","create","updateSelectizeOptions","selectized","clearOptions","addOption","unlock","lock","multiselect","select_values","items_schema","t","option_keys","option_titles","inputs","getMultiCheckboxHolder","size","new_value","updateValue","base64","FileReader","uploader","files","fr","onload","target","refreshPreview","readAsDataURL","preview","last_preview","match","img","maxWidth","src","upload","preview_value","file","uploadButton","getProgressBar","progressBar","success","failure","updateProgress","progress","updateProgressBar","updateProgressBarUnknown","arraySelectize","group","delimiter","createOnBlur","forEach","matchKey","elem","documentElement","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","AbstractTheme","getFloatRightLinkHolder","cssFloat","marginLeft","backgroundColor","border","boxShadow","zIndex","createTextNode","disableHeader","color","disableLabel","enableHeader","enableLabel","fontWeight","marginRight","fontStyle","getElementsByTagName","setSwitcherOptions","titles","boxSizing","firstChild","borderLeft","getCheckboxDescription","applyStyles","styles","selector","span","borderWidth","lineHeight","borderRadius","borderBottomRightRadius","borderTopRightRadius","cursor","tab_holder","opacity","background","bootstrap2","controlgroup","errmsg","bar","bootstrap3","fontSize","start","percentage","foundation","minWidth","paddingRight","verticalAlign","insertAdjacentHTML","getElementsByClassName","meter","foundation3","sizes","foundation4","foundation5","foundation6","errorEl","borderBottom","borderColor","jqueryui","barebones","AbstractIconLib","mapping","collapse","expand","delete","add","cancel","save","moveup","movedown","icon_prefix","getIconClass","iconclass","fontawesome3","fontawesome4","foundation2","l","replacements","get_replacement","func","trim","cur","ejs","EJS","compiled","context","render","handlebars","Handlebars","hogan","Hogan","markup","Mark","up","mustache","Mustache","view","swig","underscore","_","variables","lang","language","default_language","en","error_notset","error_notempty","error_enum","error_anyOf","error_oneOf","error_not","error_type_union","error_type","error_disallow_union","error_disallow","error_multipleOf","error_maximum_excl","error_maximum_incl","error_minimum_excl","error_minimum_incl","error_maxLength","error_minLength","error_pattern","error_additionalItems","error_maxItems","error_minItems","error_uniqueItems","error_maxProperties","error_minProperties","error_required","error_additional_properties","error_dependency","button_delete_all","button_delete_all_title","button_delete_last","button_delete_last_title","button_add_row_title","button_move_down_title","button_move_up_title","button_delete_row_title","button_delete_row_title_short","button_collapse","button_expand","binaryEncoding","Zepto","$","get"],"mappings":"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","file":"jsoneditor.min.js"} \ No newline at end of file diff --git a/libs/json-editor/examples/advanced.html b/libs/json-editor/examples/advanced.html new file mode 100644 index 0000000..352b387 --- /dev/null +++ b/libs/json-editor/examples/advanced.html @@ -0,0 +1,137 @@ + + + + + Advanced JSON Editor Example + + + + +

    Advanced JSON Editor Example

    + +

    This example demonstrates the following:

    +
      +
    • Loading external schemas via ajax (using $ref)
    • +
    • Setting the editor's value from javascript (try the Restore to Default button)
    • +
    • Validating the editor's contents (try setting name to an empty string)
    • +
    • Macro templates (try changing the city or state fields and watch the citystate field update automatically)
    • +
    • Enabling and disabling editor fields
    • +
    + + + + + + +
    + + + + diff --git a/libs/json-editor/examples/basic.html b/libs/json-editor/examples/basic.html new file mode 100644 index 0000000..6505025 --- /dev/null +++ b/libs/json-editor/examples/basic.html @@ -0,0 +1,56 @@ + + + + + Basic JSON Editor Example + + + +

    Basic JSON Editor Example

    + +
    + + + + + diff --git a/libs/json-editor/examples/basic_person.json b/libs/json-editor/examples/basic_person.json new file mode 100644 index 0000000..05f53fa --- /dev/null +++ b/libs/json-editor/examples/basic_person.json @@ -0,0 +1,25 @@ +{ + "title": "Person", + "type": "object", + "id": "person", + "properties": { + "name": { + "type": "string", + "description": "First and Last name", + "minLength": 4 + }, + "age": { + "type": "integer", + "default": 21, + "minimum": 18, + "maximum": 99 + }, + "gender": { + "type": "string", + "enum": [ + "male", + "female" + ] + } + } +} diff --git a/libs/json-editor/examples/css_integration.html b/libs/json-editor/examples/css_integration.html new file mode 100644 index 0000000..eb3a256 --- /dev/null +++ b/libs/json-editor/examples/css_integration.html @@ -0,0 +1,135 @@ + + + + + CSS Integration JSON Editor Example + + + + + + + + + + + +
    +
    +

    CSS Integration JSON Editor Example

    +
    +
    +
    +
    +

    JSON Editor supports these popular CSS frameworks:

    +
      +
    • Bootstrap 2
    • +
    • Bootstrap 3
    • +
    • Foundation 3
    • +
    • Foundation 4
    • +
    • Foundation 5 (shown here)
    • +
    • jQuery UI
    • +
    +
    +
    +

    JSON Editor supports these popular icon libraries:

    +
      +
    • Bootstrap 2 Glyphicons
    • +
    • Bootstrap 3 Glyphicons
    • +
    • Foundicons 2
    • +
    • Foundicons 3
    • +
    • jQueryUI
    • +
    • Font Awesome 3
    • +
    • Font Awesome 4 (shown here)
    • +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    + + + + diff --git a/libs/json-editor/examples/meta_schema.json b/libs/json-editor/examples/meta_schema.json new file mode 100644 index 0000000..bb387f8 --- /dev/null +++ b/libs/json-editor/examples/meta_schema.json @@ -0,0 +1,678 @@ +{ + "definitions":{ + "schemaArray":{ + "type":"array", + "minItems":1, + "items":{ + "$ref":"#/definitions/schema", + "title":"schema" + } + }, + "null":{ + "type":{ + "enum":[ + "null" + ] + }, + "enum":{ + "items":{ + "type":"null" + } + } + }, + "boolean":{ + "properties":{ + "default":{ + "type":"boolean" + }, + "type":{ + "enum":[ + "boolean" + ] + }, + "enum":{ + "items":{ + "type":"boolean" + } + }, + "format":{ + "type":"string", + "enum":[ + "select", + "checkbox" + ] + } + } + }, + "string":{ + "properties":{ + "options":{ + "properties":{ + "input_width":{ + "type":"string" + }, + "input_height":{ + "type":"string" + }, + "expand_height":{ + "type":"boolean" + }, + "wysiwyg":{ + "type":"boolean" + } + } + }, + "format":{ + "type":"string", + "propertyOrder":20, + "enum":[ + "color", + "date", + "datetime", + "datetime-local", + "email", + "month", + "number", + "range", + "tel", + "text", + "textarea", + "time", + "url", + "week", + "actionscript", + "batchfile", + "c", + "c++", + "cpp", + "coffee", + "cshart", + "css", + "dart", + "django", + "ejs", + "erlang", + "golang", + "groovy", + "handlebars", + "haskell", + "haxe", + "html", + "ini", + "jade", + "java", + "javascript", + "json", + "less", + "lisp", + "lua", + "makefile", + "markdown", + "matlab", + "mysql", + "objectivec", + "pascal", + "perl", + "pgsql", + "php", + "python", + "r", + "ruby", + "sass", + "scala", + "scss", + "smarty", + "sql", + "stylus", + "svg", + "twig", + "vbscript", + "xml", + "yaml" + ] + }, + "default":{ + "type":"string" + }, + "minLength":{ + "type":"integer", + "minimum":0, + "propertyOrder":25 + }, + "maxLength":{ + "type":"integer", + "minimum":0, + "propertyOrder":30 + }, + "pattern":{ + "type":"string", + "format":"regex", + "propertyOrder":35 + }, + "type":{ + "enum":[ + "string" + ] + }, + "enum":{ + "items":{ + "type":"string" + } + }, + "media":{ + "type":"object", + "additionalProperties":false, + "properties":{ + "type":{ + "type":"string" + } + } + }, + "template":{ + "type":"string" + } + } + }, + "number":{ + "properties":{ + "options":{ + "properties":{ + "input_width":{ + "type":"string" + }, + "input_height":{ + "type":"string" + }, + "expand_height":{ + "type":"boolean" + } + } + }, + "type":{ + "enum":[ + "number" + ] + }, + "enum":{ + "items":{ + "type":"number" + } + }, + "default":{ + "type":"number" + }, + "minimum":{ + "type":"number", + "propertyOrder":25 + }, + "maximum":{ + "type":"number", + "propertyOrder":30 + }, + "multipleOf":{ + "type":"number", + "propertyOrder":35 + } + } + }, + "integer":{ + "properties":{ + "options":{ + "properties":{ + "input_width":{ + "type":"string" + }, + "input_height":{ + "type":"string" + }, + "expand_height":{ + "type":"boolean" + } + } + }, + "default":{ + "type":"integer" + }, + "minimum":{ + "type":"number", + "propertyOrder":25 + }, + "maximum":{ + "type":"number", + "propertyOrder":30 + }, + "multipleOf":{ + "type":"number", + "propertyOrder":35 + }, + "type":{ + "enum":[ + "integer" + ] + }, + "enum":{ + "items":{ + "type":"integer" + } + } + } + }, + "schemaBase":{ + "type":"object", + "additionalProperties":false, + "defaultProperties":[ + "title", + "type" + ], + "options":{ + "type":"object", + "options":{ + "keep_oneof_values":false + }, + "default":{ + + }, + "properties":{ + "enum_titles":{ + "type":"array", + "uniqueItems":true, + "format":"table", + "items":{ + "type":"string", + "tilte":"title" + } + }, + "grid_columns":{ + "type":"integer", + "minimum":1, + "maximum":12 + }, + "hidden":{ + "type":"boolean" + }, + "keep_oneof_values":{ + "type":"boolean" + } + } + }, + "properties":{ + "type":{ + "propertyOrder":1, + "type":"string", + "options":{ + "hidden":true + } + }, + "id":{ + "type":"string", + "format":"uri" + }, + "$schema":{ + "type":"string", + "format":"uri" + }, + "title":{ + "type":"string", + "propertyOrder":2 + }, + "description":{ + "type":"string", + "propertyOrder":4 + }, + "default":{ + "propertyOrder":10 + }, + "enum":{ + "type":"array", + "minItems":1, + "uniqueItems":true, + "propertyOrder":50 + }, + "enumSource":{ + "oneOf":[ + { + "title":"Simple Source", + "type":"string" + }, + { + "title":"Complex Source", + "type":"array", + "format":"tabs", + "minItems":1, + "items":{ + "oneOf":[ + { + "title":"Constant Values", + "type":"array", + "format":"table", + "uniqueItems":true, + "items":{ + "type":"string" + } + }, + { + "title":"Source", + "type":"object", + "additionalProperties":false, + "required":[ + "source" + ], + "defaultProperties":[ + "source" + ], + "properties":{ + "source":{ + "oneOf":[ + { + "title":"Watched Field", + "type":"string" + }, + { + "title":"Constant Values", + "type":"array", + "format":"table", + "minItems":1, + "items":{ + "title":"value", + "type":"object", + "additionalProperties":false, + "properties":{ + "value":{ + "type":"string" + }, + "title":{ + "type":"string" + } + } + } + } + ] + }, + "slice":{ + "type":"array", + "format":"table", + "minItems":2, + "maxItems":2, + "items":{ + "type":"integer" + } + }, + "filter":{ + "type":"string" + }, + "title":{ + "type":"string" + }, + "value":{ + "type":"string" + } + } + } + ] + } + } + ] + }, + "$ref":{ + "type":"string" + }, + "oneOf":{ + "$ref":"#/definitions/schemaArray" + }, + "anyOf":{ + "$ref":"#/definitions/schemaArray" + }, + "allOf":{ + "$ref":"#/definitions/schemaArray" + }, + "not":{ + "$ref":"#/definitions/schema" + }, + "propertyOrder":{ + "type":"number", + "default":1000 + }, + "links":{ + "type":"array", + "items":{ + "type":"object", + "title":"link", + "additionalProperties":false, + "properties":{ + "rel":{ + "type":"string" + }, + "href":{ + "type":"string", + "format":"url" + }, + "class":{ + "type":"string" + }, + "download":{ + "oneOf":[ + { + "type":"boolean" + }, + { + "type":"string" + } + ] + }, + "mediaType":{ + "type":"string" + } + } + } + }, + "watch":{ + "type":"object", + "patternProperties":{ + ".*":{ + "type":"string" + } + } + }, + "headerTemplate":{ + "type":"string" + } + } + }, + "object":{ + "defaultProperties":[ + "properties" + ], + "properties":{ + "options":{ + "properties":{ + "collapsed":{ + "type":"boolean" + }, + "disable_collapse":{ + "type":"boolean" + }, + "disable_edit_json":{ + "type":"boolean" + }, + "disable_properties":{ + "type":"boolean" + }, + "remove_empty_properties":{ + "type":"boolean" + }, + "layout":{ + "type":"string", + "enum":[ + "grid" + ] + } + } + }, + "type":{ + "enum":[ + "object" + ] + }, + "default":{ + "type":"object" + }, + "properties":{ + "type":"object", + "patternProperties":{ + ".*":{ + "$ref":"#/definitions/schema" + } + } + }, + "patternProperties":{ + "type":"object", + "patternProperties":{ + ".*":{ + "$ref":"#/definitions/schema" + } + } + }, + "additionalProperties":{ + "type":"boolean" + }, + "required":{ + "type":"array", + "uniqueItems":true, + "format":"table", + "items":{ + "type":"string", + "title":"property" + } + }, + "format":{ + "type":"string", + "enum":[ + "grid" + ] + } + } + }, + "array":{ + "defaultProperties":[ + "items" + ], + "properties":{ + "options":{ + "properties":{ + "collapsed":{ + "type":"boolean" + }, + "disable_array_add":{ + "type":"boolean" + }, + "disable_array_delete":{ + "type":"boolean" + }, + "disable_array_delete_all_rows":{ + "type":"boolean" + }, + "disable_array_delete_last_row":{ + "type":"boolean" + }, + "disable_array_reorder":{ + "type":"boolean" + }, + "disable_collapse":{ + "type":"boolean" + } + } + }, + "type":{ + "enum":[ + "array" + ] + }, + "default":{ + "type":"array" + }, + "items":{ + "$ref":"#/definitions/schema" + }, + "uniqueItems":{ + "type":"boolean" + }, + "minItems":{ + "type":"integer", + "minimum":0 + }, + "maxItems":{ + "type":"integer", + "minimum":0 + }, + "additionalItems":{ + "$ref":"#/definitions/schema" + }, + "format":{ + "type":"string", + "enum":[ + "array", + "table", + "tabs", + "checkbox", + "select" + ] + } + } + }, + "schema":{ + "$ref":"#/definitions/schemaBase", + "options":{ + "keep_oneof_values":false + }, + "default":{ + "type":"object" + }, + "oneOf":[ + { + "title":"String", + "$ref":"#/definitions/string" + }, + { + "title":"Number", + "$ref":"#/definitions/number" + }, + { + "title":"Integer", + "$ref":"#/definitions/integer" + }, + { + "title":"Boolean", + "$ref":"#/definitions/boolean" + }, + { + "title":"Object", + "$ref":"#/definitions/object" + }, + { + "title":"Array", + "$ref":"#/definitions/array" + }, + { + "title":"Null", + "$ref":"#/definitions/null" + }, + { + "title":"No Type", + "$ref":"#/definitions/schemaBase" + } + ] + } + }, + "title":"JSON Schema", + "$ref":"#/definitions/schema", + "properties":{ + "definitions":{ + "type":"object", + "patternProperties":{ + ".*":{ + "$ref":"#/definitions/schema" + } + } + } + } +} diff --git a/libs/json-editor/examples/person.json b/libs/json-editor/examples/person.json new file mode 100644 index 0000000..d6d4971 --- /dev/null +++ b/libs/json-editor/examples/person.json @@ -0,0 +1,55 @@ +{ + "$ref": "basic_person.json", + "properties": { + "location": { + "type": "object", + "title": "Location", + "properties": { + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "citystate": { + "type": "string", + "description": "This is generated automatically from the previous two fields", + "template": "{{city}}, {{state}}", + "watch": { + "city": "person.location.city", + "state": "person.location.state" + } + } + } + }, + "pets": { + "type": "array", + "format": "table", + "title": "Pets", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "cat", + "dog", + "bird", + "reptile", + "other" + ], + "default": "dog" + }, + "name": { + "type": "string" + }, + "fixed": { + "type": "boolean", + "title": "spayed / neutered" + } + } + } + } + } +} diff --git a/libs/json-editor/examples/recursive.html b/libs/json-editor/examples/recursive.html new file mode 100644 index 0000000..01e9bdd --- /dev/null +++ b/libs/json-editor/examples/recursive.html @@ -0,0 +1,172 @@ + + + + + Recursive JSON Editor Example + + + + + + + + + + + + + + + +
    +
    +
    +

    Recursive JSON Editor Example

    + +

    + This example demonstrates the many ways you can use recursive schemas (aka self-referential or circular schemas). +

    +
      +
    • Within array items as long as minLength is 0. See "coworkers" below.
    • +
    • In non-default properties. See "mother" below (click the "object properties" button and check "mother")
    • +
    • In oneOf as long as it's not the 1st choice. See "bestFriend" below.
    • +
    • In patternProperties. Try adding the property "cousin_1" using the "object properties" button.
    • +
    +
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/libs/json-editor/examples/select2.html b/libs/json-editor/examples/select2.html new file mode 100644 index 0000000..96ab8ab --- /dev/null +++ b/libs/json-editor/examples/select2.html @@ -0,0 +1,93 @@ + + + + + JSON Editor Select2 Integration Example + + + + + + +

    JSON Editor Select2 Integration Example

    + +

    This example demonstrates JSONEditor's integration with Select2

    + +
    + + + + + diff --git a/libs/json-editor/examples/selectize.html b/libs/json-editor/examples/selectize.html new file mode 100644 index 0000000..8fbdb1a --- /dev/null +++ b/libs/json-editor/examples/selectize.html @@ -0,0 +1,82 @@ + + + + + JSON Editor Selectize Integration Example + + + + + + +

    JSON Editor Selectize Integration Example

    + +

    This example demonstrates JSONEditor's integration with Selectize

    + +
    + + + + + diff --git a/libs/json-editor/examples/upload.html b/libs/json-editor/examples/upload.html new file mode 100644 index 0000000..27dfe0c --- /dev/null +++ b/libs/json-editor/examples/upload.html @@ -0,0 +1,121 @@ + + + + + JSON Editor Upload Example + + + +

    JSON Editor Upload Example

    + +
    + + + + + diff --git a/libs/json-editor/examples/wysiwyg.html b/libs/json-editor/examples/wysiwyg.html new file mode 100644 index 0000000..aecf975 --- /dev/null +++ b/libs/json-editor/examples/wysiwyg.html @@ -0,0 +1,49 @@ + + + + + JSON Editor WYSIWYG Example + + + + + + + + +

    JSON Editor WYSIWYG Example

    + +

    This example demonstrates JSONEditor's integration with SCEditor

    + +
    + + + + + diff --git a/libs/json-editor/jsoneditor.png b/libs/json-editor/jsoneditor.png new file mode 100644 index 0000000..84fa961 Binary files /dev/null and b/libs/json-editor/jsoneditor.png differ diff --git a/libs/json-editor/package.json b/libs/json-editor/package.json new file mode 100644 index 0000000..c2f07ed --- /dev/null +++ b/libs/json-editor/package.json @@ -0,0 +1,41 @@ +{ + "name": "json-editor", + "title": "JSONEditor", + "description": "JSON Schema based editor", + "version": "0.7.28", + "main": "dist/jsoneditor.js", + "author": { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "url": "http://jeremydorn.com" + }, + "bugs": { + "url": "https://github.com/jdorn/json-editor/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/jdorn/json-editor.git" + }, + "keywords": [ + "json", + "schema", + "jsonschema", + "editor" + ], + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + }, + "devDependencies": { + "grunt": "~1.0.1", + "grunt-contrib-concat": "~1.0.0", + "grunt-contrib-jshint": "~1.0.0", + "grunt-contrib-uglify": "~1.0.0", + "grunt-contrib-watch": "~1.0.0" + }, + "scripts": { + "build": "npm install && grunt", + "start": "grunt watch", + "test": "grunt" + } +} diff --git a/libs/json-editor/questions.json b/libs/json-editor/questions.json new file mode 100644 index 0000000..5cfe158 --- /dev/null +++ b/libs/json-editor/questions.json @@ -0,0 +1,1133 @@ +{ + "TechQuestions": { + "category": [ + { + "idC": "C1", + "catname": "General", + "question": [ + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q1", + "idQ": "Q1", + "ID": "Q1", + "name": "Find the most frequent integer in an array" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q2", + "idQ": "Q2", + "ID": "Q2", + "name": "Find pairs in an integer array whose sum is equal to 10 (bonus; do it in linear time)" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q3", + "idQ": "Q3", + "ID": "Q3", + "name": "Given 2 integer arrays, determine if the 2nd array is a rotated version of the 1st array.", + "notes": "```Ex. Original Array A={1,2,3,5,6,7,8} Rotated Array B={5,6,7,8,1,2,3}```" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q4", + "idQ": "Q4", + "ID": "Q4", + "name": "Write fibbonaci iteratively and recursively (bonus; use dynamic programming)" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q5", + "idQ": "Q5", + "ID": "Q5", + "name": "Find the only element in an array that only occurs once." + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q6", + "idQ": "Q6", + "ID": "Q6", + "name": "Find the common elements of 2 int arrays" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q7", + "idQ": "Q7", + "ID": "Q7", + "name": "Implement binary search of a sorted array of integers" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q8", + "idQ": "Q8", + "ID": "Q8", + "name": "Implement binary search in a rotated array (ex. {5,6,7,8,1,2,3})" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q9", + "idQ": "Q9", + "ID": "Q9", + "name": "Use dynamic programming to find the first X prime numbers" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q10", + "idQ": "Q10", + "ID": "Q10", + "name": "Write a function that prints out the binary form of an int" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q11", + "idQ": "Q11", + "ID": "Q11", + "name": "Implement parseInt" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q12", + "idQ": "Q12", + "ID": "Q12", + "name": "Implement squareroot function" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q13", + "idQ": "Q13", + "ID": "Q13", + "name": "Implement an exponent function (bonus; now try in log(n) time)" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q14", + "idQ": "Q14", + "ID": "Q14", + "name": "Write a multiply function that multiples 2 integers without using *" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q15", + "idQ": "Q15", + "ID": "Q15", + "name": "Given n points, return the top k points that are closest to the origin" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q16", + "idQ": "Q16", + "ID": "Q16", + "name": "We’re going to find “Word Twins”, which are pairs of English words, at least 4 letters long, where the first three letters of one are the last three letters of another. For example, “strategy” and “Egypt”." + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q17", + "idQ": "Q17", + "ID": "Q17", + "name": "Given a 3*3 matrix, and 1-8 numbers in random order, 1 place as space.", + "notes": "Write code to find the min exchange of numbers to make the matrix in order.5 4 1 1 2 33 2 ---> 8 47 8 6 7 6 5" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q18", + "idQ": "Q18", + "ID": "Q18", + "name": "There is k parenthesis, write code to calculate how many permutations could have.", + "notes": "For 2 parenthesis, there is 2 permutations: ()() and (())." + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q19", + "idQ": "Q19", + "ID": "Q19", + "name": "**HARD**; Given a function rand5() that returns a random int between 0 and 5, implement rand7()" + }, + { + "categoryname": "General", + "idC": "C1", + "idCQ": "C1Q20", + "idQ": "Q20", + "ID": "Q20", + "name": "**HARD**; Given a 2D array of 1s and 0s, count the number of ``islands of 1s`` (e.g. groups of connecting 1s)" + } + ] + }, + { + "idC": "C2", + "catname": "Strings", + "question": [ + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q1", + "idQ": "Q1", + "ID": "Q21", + "name": "Find the first non-repeated character in a String" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q2", + "idQ": "Q2", + "ID": "Q22", + "name": "Reverse a String iteratively and recursively" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q3", + "idQ": "Q3", + "ID": "Q23", + "name": "Determine if 2 Strings are anagrams" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q4", + "idQ": "Q4", + "ID": "Q24", + "name": "Check if String is a palindrome" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q5", + "idQ": "Q5", + "ID": "Q25", + "name": "Check if a String is composed of all unique characters" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q6", + "idQ": "Q6", + "ID": "Q26", + "name": "Determine if a String is an int or a double" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q7", + "idQ": "Q7", + "ID": "Q27", + "name": "**HARD**; Find the longest palindrome in a String" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q8", + "idQ": "Q8", + "ID": "Q28", + "name": "**HARD**; Print all permutations of a String" + }, + { + "categoryname": "Strings", + "idC": "C2", + "idCQ": "C2Q9", + "idQ": "Q9", + "ID": "Q29", + "name": "**HARD**; Given a single-line text String and a maximum width value, write the function 'String justify(String text, int maxWidth)' that formats the input text using full-justification, i.e., extra spaces on each line are equally distributed between the words; the first word on each line is flushed left and the last word on each line is flushed right" + } + ] + }, + { + "idC": "C3", + "catname": "Trees", + "question": [ + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q1", + "idQ": "Q1", + "ID": "Q30", + "name": "Implement a BST with insert and delete functions" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q2", + "idQ": "Q2", + "ID": "Q31", + "name": "Print a tree using BFS and DFS" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q3", + "idQ": "Q3", + "ID": "Q32", + "name": "Write a function that determines if a tree is a BST" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q4", + "idQ": "Q4", + "ID": "Q33", + "name": "Find the smallest element in a BST" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q5", + "idQ": "Q5", + "ID": "Q34", + "name": "Find the 2nd largest number in a BST" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q6", + "idQ": "Q6", + "ID": "Q35", + "name": "Given a binary tree which is a sum tree (child nodes add to parent), write an algorithm to determine whether the tree is a valid sum tree" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q7", + "idQ": "Q7", + "ID": "Q36", + "name": "Find the distance between 2 nodes in a BST and a normal binary tree" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q8", + "idQ": "Q8", + "ID": "Q37", + "name": "Print the coordinates of every node in a binary tree, where root is 0,0" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q9", + "idQ": "Q9", + "ID": "Q38", + "name": "Print a tree by levels" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q10", + "idQ": "Q10", + "ID": "Q39", + "name": "Given a binary tree which is a sum tree, write an algorithm to determine whether the tree is a valid sum tree" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q11", + "idQ": "Q11", + "ID": "Q40", + "name": "Given a tree, verify that it contains a subtree." + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q12", + "idQ": "Q12", + "ID": "Q41", + "name": "Convert binary tree to doubly linked list" + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q13", + "idQ": "Q13", + "ID": "Q42", + "name": "**HARD**; Find the max distance between 2 nodes in a BST." + }, + { + "categoryname": "Trees", + "idC": "C3", + "idCQ": "C3Q14", + "idQ": "Q14", + "ID": "Q43", + "name": "**HARD**; Construct a BST given the pre-order and in-order traversal Strings" + } + ] + }, + { + "idC": "C4", + "catname": "Stacks, Queues, and Heaps", + "question": [ + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q1", + "idQ": "Q1", + "ID": "Q44", + "name": "Implement a stack with push and pop functions" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q2", + "idQ": "Q2", + "ID": "Q45", + "name": "Implement a queue with queue and dequeue functions" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q3", + "idQ": "Q3", + "ID": "Q46", + "name": "Find the minimum element in a stack in O(1) time" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q4", + "idQ": "Q4", + "ID": "Q47", + "name": "Write a function that sorts a stack (bonus; sort the stack in place without extra memory)" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q5", + "idQ": "Q5", + "ID": "Q48", + "name": "Implement a binary min heap. Turn it into a binary max heap" + }, + { + "categoryname": "Stacks, Queues, and Heaps", + "idC": "C4", + "idCQ": "C4Q6", + "idQ": "Q6", + "ID": "Q49", + "name": "**HARD**; Implement a queue using two stacks" + } + ] + }, + { + "idC": "C5", + "catname": "Linked Lists", + "question": [ + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q1", + "idQ": "Q1", + "ID": "Q50", + "name": "Implement a linked list (with insert and delete functions)" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q2", + "idQ": "Q2", + "ID": "Q51", + "name": "Find the Nth element in a linked list" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q3", + "idQ": "Q3", + "ID": "Q52", + "name": "Remove the Nth element of a linked list" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q4", + "idQ": "Q4", + "ID": "Q53", + "name": "Check if a linked list has cycles" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q5", + "idQ": "Q5", + "ID": "Q54", + "name": "Given a circular linked list, find the node at the beginning of the loop.", + "notes": "```Ex. A-->B-->C --> D-->E -->C, C is the node that begins the loop```" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q6", + "idQ": "Q6", + "ID": "Q55", + "name": "Check whether a link list is a palindrome" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q7", + "idQ": "Q7", + "ID": "Q56", + "name": "Reverse a linked list iteratively and recursively" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q8", + "idQ": "Q8", + "ID": "Q57", + "name": "Given a linked list, where each node has a link to a random node in the list, make a copy of the entire list" + }, + { + "categoryname": "Linked Lists", + "idC": "C5", + "idCQ": "C5Q9", + "idQ": "Q9", + "ID": "Q58", + "name": "Given a singly LL A->B->C->D->E->F... convert to B->A->D->C->F->E..." + } + ] + }, + { + "idC": "C6", + "catname": "Sorting", + "question": [ + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q1", + "idQ": "Q1", + "ID": "Q59", + "name": "Implement bubble sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q2", + "idQ": "Q2", + "ID": "Q60", + "name": "Implement selection sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q3", + "idQ": "Q3", + "ID": "Q61", + "name": "Implement insertion sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q4", + "idQ": "Q4", + "ID": "Q62", + "name": "Implement merge sort" + }, + { + "categoryname": "Sorting", + "idC": "C6", + "idCQ": "C6Q5", + "idQ": "Q5", + "ID": "Q63", + "name": "Implement quick sort" + } + ] + }, + { + "idC": "C7", + "catname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "question": [ + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q1", + "idQ": "Q1", + "ID": "Q64", + "name": "Basic bitwise operations" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q2", + "idQ": "Q2", + "ID": "Q65", + "name": "How do you program a min heap using Nodes" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q3", + "idQ": "Q3", + "ID": "Q66", + "name": "Find the max value in an array. The array is ``semi-sorted``.", + "notes": "```Ex. { 1 3 4 7 9 10 12 13 12 6 3 }```" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q4", + "idQ": "Q4", + "ID": "Q67", + "name": "Write a code that accepts integers as arrays and outputs the multiplication result as an array." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q5", + "idQ": "Q5", + "ID": "Q68", + "name": "Write a code that takes the coordinates of multiple rectangles as input and returns as output the coordinates of the rectangle that is the intersection of all the rectangles." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q6", + "idQ": "Q6", + "ID": "Q69", + "name": "Typical low level CS questions about sorting algorithms and operational cost." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q7", + "idQ": "Q7", + "ID": "Q70", + "name": "Median finding algorithm - find the median of 'n' numbers and a little bit of binary search tree implementation" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q8", + "idQ": "Q8", + "ID": "Q71", + "name": "Find the largest rectangle with all 0s in an matrix with only 0 and 1." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q9", + "idQ": "Q9", + "ID": "Q72", + "name": "Convert char string to integer." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q10", + "idQ": "Q10", + "ID": "Q73", + "name": "Find occurrences of a number in sorted array (allow duplicates)." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q11", + "idQ": "Q11", + "ID": "Q74", + "name": "If integer array used to store big integers (one integer store one digit), implement arithmetic operations." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q12", + "idQ": "Q12", + "ID": "Q75", + "name": "How to build a heap?" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q13", + "idQ": "Q13", + "ID": "Q76", + "name": "What is the optimized version of the knn algorithm?" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q14", + "idQ": "Q14", + "ID": "Q77", + "name": "Write a recursive function to calculate pascal's pyramid numbers." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q15", + "idQ": "Q15", + "ID": "Q78", + "name": "A question related to binary search, which is a kind of weak spot and I always avoid using it." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q16", + "idQ": "Q16", + "ID": "Q79", + "name": "Explain Singleton structure, how to create" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q17", + "idQ": "Q17", + "ID": "Q80", + "name": "Given k sorted pivots, write procedure partition in quicksort" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q18", + "idQ": "Q18", + "ID": "Q81", + "name": "Find the median of three numbers." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q19", + "idQ": "Q19", + "ID": "Q82", + "name": "Generate all balanced parentheses combinations of given length." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q20", + "idQ": "Q20", + "ID": "Q83", + "name": "The second question asked, how to find two missing integers in an unsorted array" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q21", + "idQ": "Q21", + "ID": "Q84", + "name": "Given an array of characters in it, how would you reverse it?" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q22", + "idQ": "Q22", + "ID": "Q85", + "name": "Write a program to comparing two array, one being very large" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q23", + "idQ": "Q23", + "ID": "Q86", + "name": "To generate a fibonacci number sequence, and discuss its time and space complexity" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q24", + "idQ": "Q24", + "ID": "Q87", + "name": "To merge two sorted integer arrays." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q25", + "idQ": "Q25", + "ID": "Q88", + "name": "Returning the n-th element of a linked list." + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q26", + "idQ": "Q26", + "ID": "Q89", + "name": "How to randomly select a number with equal probability from an array with unknown size?", + "notes": "Write an algorithm to find the 3rd highest number from an array of random integers" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q27", + "idQ": "Q27", + "ID": "Q90", + "name": "Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. Sorted in increasing order", + "notes": "```Input: find 5 in (15, 16, 19, 20, 25, 1, 3, 4, 5, 6, 10, 14) Output 8```" + }, + { + "categoryname": "BSTs, Heaps, Search Algorithms, Sort Algorithms, Intersection, median, hashmap, caching system, basic algorithms** ", + "idC": "C7", + "idCQ": "C7Q28", + "idQ": "Q28", + "ID": "Q91", + "name": "Implement a simple regular expression matching function" + } + ] + }, + { + "idC": "C8", + "catname": "Uncategorized", + "question": [ + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q1", + "idQ": "Q1", + "ID": "Q92", + "name": "Given a max-heap, how do I find the top k items?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q2", + "idQ": "Q2", + "ID": "Q93", + "name": "Find the border length created from a conglomeration of various 2D rectangles." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q3", + "idQ": "Q3", + "ID": "Q94", + "name": "Write a minPeak function for a stack (function that returns the minimum element in the stack)." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q4", + "idQ": "Q4", + "ID": "Q95", + "name": "Find the nth fib number" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q5", + "idQ": "Q5", + "ID": "Q96", + "name": "Design a function in your favorite programming language to convert a camelCase string to all lowercase." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q6", + "idQ": "Q6", + "ID": "Q97", + "name": "Implement a hashset" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q7", + "idQ": "Q7", + "ID": "Q98", + "name": "Given a corpus of valid words, design a function that takes a word as input and outputs all valid anagrams of that word." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q8", + "idQ": "Q8", + "ID": "Q99", + "name": "Given an input of a 3D matrix of ones and zeros, count the number of contiguous 1-filled regions (as separated by 0-filled regions), as well as the size of the largest one (I think; doesn't really change the problem much)." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q9", + "idQ": "Q9", + "ID": "Q100", + "name": "You have two sets. How would you know that they converge." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q10", + "idQ": "Q10", + "ID": "Q101", + "name": "Given a bag of nuts and a bag of bolts, each having a different size within a bag but exactly one match in the other bag, give a fast algorithm to find all matches" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q11", + "idQ": "Q11", + "ID": "Q102", + "name": "Preorder traversal without recursion" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q12", + "idQ": "Q12", + "ID": "Q103", + "name": "Find the largest possible difference in an array of integers, such that the smaller integer occurs earlier in the array." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q13", + "idQ": "Q13", + "ID": "Q104", + "name": "How to find if n numbers in a list sum up to an integer k?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q14", + "idQ": "Q14", + "ID": "Q105", + "name": "Find largest palindrome in string" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q15", + "idQ": "Q15", + "ID": "Q106", + "name": "Make an anagram solver that returns all valid dictionary words given a set of characters." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q16", + "idQ": "Q16", + "ID": "Q107", + "name": "Sort a string by the order it's characters appear in another string" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q17", + "idQ": "Q17", + "ID": "Q108", + "name": "Given a value k and an array , design an efficient algorithm that should output the number of pairs that sum up to k." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q18", + "idQ": "Q18", + "ID": "Q109", + "name": "How do you find three numbers that sum to 0? (in a list). Now can you do it under O(n^3)?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q19", + "idQ": "Q19", + "ID": "Q110", + "name": "Given a Fibonacci number, tell us which index it occurs at." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q20", + "idQ": "Q20", + "ID": "Q111", + "name": "Describe an algorithm that would find n numbers in a list that sum to 0." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q21", + "idQ": "Q21", + "ID": "Q112", + "name": "Given an array of n unsorted ints, with the condition that each number is at most k positions away from its final sorted position, give an efficient sorting algorithm" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q22", + "idQ": "Q22", + "ID": "Q113", + "name": "Give an efficient solution for subset sum." + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q23", + "idQ": "Q23", + "ID": "Q114", + "name": "Given two (i,j) coordinates of a cell in two dimensional matrix. These coordinates are the lower left and upper right corner of a rectangle contained within the matrix. Sum all the elements in the matrix. Time and space?" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q24", + "idQ": "Q24", + "ID": "Q115", + "name": "String has all unique characters" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q25", + "idQ": "Q25", + "ID": "Q116", + "name": "Two strings to see if one is a permutation" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q26", + "idQ": "Q26", + "ID": "Q117", + "name": "Remove dups from an unsorted linked list" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q27", + "idQ": "Q27", + "ID": "Q118", + "name": "Find kth algorithm of singly linked list" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q28", + "idQ": "Q28", + "ID": "Q119", + "name": "Delete a node in the middle of a singly linked list given access to that node" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q29", + "idQ": "Q29", + "ID": "Q120", + "name": "Write code to partition a linked list around a value x such that all nodes less than x come before all nodes greater than or equal to x" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q30", + "idQ": "Q30", + "ID": "Q121", + "name": "Single array to implement three stacks" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q31", + "idQ": "Q31", + "ID": "Q122", + "name": "Stack with min element" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q32", + "idQ": "Q32", + "ID": "Q123", + "name": "Towers of Hanoi" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q33", + "idQ": "Q33", + "ID": "Q124", + "name": "Sort a stack in ascending order using at most one additional stack to hold items but you may not copy the elements into any other data structure" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q34", + "idQ": "Q34", + "ID": "Q125", + "name": "Function to see if a tree is balanced" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q35", + "idQ": "Q35", + "ID": "Q126", + "name": "Graph algorithm, route between two nodes" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q36", + "idQ": "Q36", + "ID": "Q127", + "name": "Create bst from sorted array with minimal height" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q37", + "idQ": "Q37", + "ID": "Q128", + "name": "Binary tree is a bst" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q38", + "idQ": "Q38", + "ID": "Q129", + "name": "A child is running up a staircase with n steps, and cah hop either 1 step, 2 steps, or 3 steps at a time. Implement a method to count how many possible ways the child can run up the stairs" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q39", + "idQ": "Q39", + "ID": "Q130", + "name": "Two sorted arrays, A has a large enough buffer at the end to hold B, merge B into A in sorted order" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q40", + "idQ": "Q40", + "ID": "Q131", + "name": "Write a method to sort an array of strings so that all the anagrams are next to each other" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q41", + "idQ": "Q41", + "ID": "Q132", + "name": "Find an element in a sorted array that has been rotated an unknown number of times" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q42", + "idQ": "Q42", + "ID": "Q133", + "name": "Implement a method that returns true if the edit distance between two strings is less than 2 (1 or 0) or false otherwise" + }, + { + "categoryname": "Uncategorized", + "idC": "C8", + "idCQ": "C8Q43", + "idQ": "Q43", + "ID": "Q134", + "name": "Given two lists of chars, return the first with removed characters that appear in the second list." + } + ] + } + ] + } +} diff --git a/libs/json-editor/src/class.js b/libs/json-editor/src/class.js new file mode 100644 index 0000000..5e1a4c4 --- /dev/null +++ b/libs/json-editor/src/class.js @@ -0,0 +1,68 @@ +/*jshint loopfunc: true */ +/* Simple JavaScript Inheritance + * By John Resig http://ejohn.org/ + * MIT Licensed. + */ +// Inspired by base2 and Prototype +var Class; +(function(){ + var initializing = false, fnTest = /xyz/.test(function(){window.postMessage("xyz");}) ? /\b_super\b/ : /.*/; + + // The base Class implementation (does nothing) + Class = function(){}; + + // Create a new Class that inherits from this class + Class.extend = function extend(prop) { + var _super = this.prototype; + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + var prototype = new this(); + initializing = false; + + // Copy the properties over onto the new prototype + for (var name in prop) { + // Check if we're overwriting an existing function + prototype[name] = typeof prop[name] == "function" && + typeof _super[name] == "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { + var tmp = this._super; + + // Add a new ._super() method that is the same method + // but on the super-class + this._super = _super[name]; + + // The method only need to be bound temporarily, so we + // remove it when we're done executing + var ret = fn.apply(this, arguments); + this._super = tmp; + + return ret; + }; + })(name, prop[name]) : + prop[name]; + } + + // The dummy class constructor + function Class() { + // All construction is actually done in the init method + if ( !initializing && this.init ) + this.init.apply(this, arguments); + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.prototype.constructor = Class; + + // And make this class extendable + Class.extend = extend; + + return Class; + }; + + return Class; +})(); diff --git a/libs/json-editor/src/core.js b/libs/json-editor/src/core.js new file mode 100644 index 0000000..b982416 --- /dev/null +++ b/libs/json-editor/src/core.js @@ -0,0 +1,596 @@ +var JSONEditor = function(element,options) { + if (!(element instanceof Element)) { + throw new Error('element should be an instance of Element'); + } + options = $extend({},JSONEditor.defaults.options,options||{}); + this.element = element; + this.options = options; + this.init(); +}; +JSONEditor.prototype = { + // necessary since we remove the ctor property by doing a literal assignment. Without this + // the $isplainobject function will think that this is a plain object. + constructor: JSONEditor, + init: function() { + var self = this; + + this.ready = false; + + var theme_class = JSONEditor.defaults.themes[this.options.theme || JSONEditor.defaults.theme]; + if(!theme_class) throw "Unknown theme " + (this.options.theme || JSONEditor.defaults.theme); + + this.schema = this.options.schema; + this.theme = new theme_class(); + this.template = this.options.template; + this.refs = this.options.refs || {}; + this.uuid = 0; + this.__data = {}; + + var icon_class = JSONEditor.defaults.iconlibs[this.options.iconlib || JSONEditor.defaults.iconlib]; + if(icon_class) this.iconlib = new icon_class(); + + this.root_container = this.theme.getContainer(); + this.element.appendChild(this.root_container); + + this.translate = this.options.translate || JSONEditor.defaults.translate; + + // Fetch all external refs via ajax + this._loadExternalRefs(this.schema, function() { + self._getDefinitions(self.schema); + + // Validator options + var validator_options = {}; + if(self.options.custom_validators) { + validator_options.custom_validators = self.options.custom_validators; + } + self.validator = new JSONEditor.Validator(self,null,validator_options); + + // Create the root editor + var editor_class = self.getEditorClass(self.schema); + self.root = self.createEditor(editor_class, { + jsoneditor: self, + schema: self.schema, + required: true, + container: self.root_container + }); + + self.root.preBuild(); + self.root.build(); + self.root.postBuild(); + + // Starting data + if(self.options.startval) self.root.setValue(self.options.startval); + + self.validation_results = self.validator.validate(self.root.getValue()); + self.root.showValidationErrors(self.validation_results); + self.ready = true; + + // Fire ready event asynchronously + window.requestAnimationFrame(function() { + if(!self.ready) return; + self.validation_results = self.validator.validate(self.root.getValue()); + self.root.showValidationErrors(self.validation_results); + self.trigger('ready'); + self.trigger('change'); + }); + }); + }, + getValue: function() { + if(!this.ready) throw "JSON Editor not ready yet. Listen for 'ready' event before getting the value"; + + return this.root.getValue(); + }, + setValue: function(value) { + if(!this.ready) throw "JSON Editor not ready yet. Listen for 'ready' event before setting the value"; + + this.root.setValue(value); + return this; + }, + validate: function(value) { + if(!this.ready) throw "JSON Editor not ready yet. Listen for 'ready' event before validating"; + + // Custom value + if(arguments.length === 1) { + return this.validator.validate(value); + } + // Current value (use cached result) + else { + return this.validation_results; + } + }, + destroy: function() { + if(this.destroyed) return; + if(!this.ready) return; + + this.schema = null; + this.options = null; + this.root.destroy(); + this.root = null; + this.root_container = null; + this.validator = null; + this.validation_results = null; + this.theme = null; + this.iconlib = null; + this.template = null; + this.__data = null; + this.ready = false; + this.element.innerHTML = ''; + + this.destroyed = true; + }, + on: function(event, callback) { + this.callbacks = this.callbacks || {}; + this.callbacks[event] = this.callbacks[event] || []; + this.callbacks[event].push(callback); + + return this; + }, + off: function(event, callback) { + // Specific callback + if(event && callback) { + this.callbacks = this.callbacks || {}; + this.callbacks[event] = this.callbacks[event] || []; + var newcallbacks = []; + for(var i=0; i= waiting && !callback_fired) { + callback_fired = true; + callback(); + } + }); + } + // Request failed + else { + window.console.log(r); + throw "Failed to fetch ref via ajax- "+url; + } + }; + r.send(); + }); + + if(!waiting) { + callback(); + } + }, + expandRefs: function(schema) { + schema = $extend({},schema); + + while (schema.$ref) { + var ref = schema.$ref; + delete schema.$ref; + + if(!this.refs[ref]) ref = decodeURIComponent(ref); + + schema = this.extendSchemas(schema,this.refs[ref]); + } + return schema; + }, + expandSchema: function(schema) { + var self = this; + var extended = $extend({},schema); + var i; + + // Version 3 `type` + if(typeof schema.type === 'object') { + // Array of types + if(Array.isArray(schema.type)) { + $each(schema.type, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.type[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.type = self.expandSchema(schema.type); + } + } + // Version 3 `disallow` + if(typeof schema.disallow === 'object') { + // Array of types + if(Array.isArray(schema.disallow)) { + $each(schema.disallow, function(key,value) { + // Schema + if(typeof value === 'object') { + schema.disallow[key] = self.expandSchema(value); + } + }); + } + // Schema + else { + schema.disallow = self.expandSchema(schema.disallow); + } + } + // Version 4 `anyOf` + if(schema.anyOf) { + $each(schema.anyOf, function(key,value) { + schema.anyOf[key] = self.expandSchema(value); + }); + } + // Version 4 `dependencies` (schema dependencies) + if(schema.dependencies) { + $each(schema.dependencies,function(key,value) { + if(typeof value === "object" && !(Array.isArray(value))) { + schema.dependencies[key] = self.expandSchema(value); + } + }); + } + // Version 4 `not` + if(schema.not) { + schema.not = this.expandSchema(schema.not); + } + + // allOf schemas should be merged into the parent + if(schema.allOf) { + for(i=0; i= 0) { + // For enumerated strings, number, or integers + if(schema.items.enum) { + return 'multiselect'; + } + // For non-enumerated strings (tag editor) + else if(JSONEditor.plugins.selectize.enable && schema.items.type === "string") { + return 'arraySelectize'; + } + } +}); +// Use the multiple editor for schemas with `oneOf` set +JSONEditor.defaults.resolvers.unshift(function(schema) { + // If this schema uses `oneOf` or `anyOf` + if(schema.oneOf || schema.anyOf) return "multiple"; +}); diff --git a/libs/json-editor/src/editor.js b/libs/json-editor/src/editor.js new file mode 100644 index 0000000..7993f78 --- /dev/null +++ b/libs/json-editor/src/editor.js @@ -0,0 +1,471 @@ +/** + * All editors should extend from this class + */ +JSONEditor.AbstractEditor = Class.extend({ + onChildEditorChange: function(editor) { + this.onChange(true); + }, + notify: function() { + this.jsoneditor.notifyWatchers(this.path); + }, + change: function() { + if(this.parent) this.parent.onChildEditorChange(this); + else this.jsoneditor.onChange(); + }, + onChange: function(bubble) { + this.notify(); + if(this.watch_listener) this.watch_listener(); + if(bubble) this.change(); + }, + register: function() { + this.jsoneditor.registerEditor(this); + this.onChange(); + }, + unregister: function() { + if(!this.jsoneditor) return; + this.jsoneditor.unregisterEditor(this); + }, + getNumColumns: function() { + return 12; + }, + init: function(options) { + this.jsoneditor = options.jsoneditor; + + this.theme = this.jsoneditor.theme; + this.template_engine = this.jsoneditor.template; + this.iconlib = this.jsoneditor.iconlib; + + this.translate = this.jsoneditor.translate || JSONEditor.defaults.translate; + + this.original_schema = options.schema; + this.schema = this.jsoneditor.expandSchema(this.original_schema); + + this.options = $extend({}, (this.options || {}), (options.schema.options || {}), options); + + if(!options.path && !this.schema.id) this.schema.id = 'root'; + this.path = options.path || 'root'; + this.formname = options.formname || this.path.replace(/\.([^.]+)/g,'[$1]'); + if(this.jsoneditor.options.form_name_root) this.formname = this.formname.replace(/^root\[/,this.jsoneditor.options.form_name_root+'['); + this.key = this.path.split('.').pop(); + this.parent = options.parent; + + this.link_watchers = []; + + if(options.container) this.setContainer(options.container); + }, + setContainer: function(container) { + this.container = container; + if(this.schema.id) this.container.setAttribute('data-schemaid',this.schema.id); + if(this.schema.type && typeof this.schema.type === "string") this.container.setAttribute('data-schematype',this.schema.type); + this.container.setAttribute('data-schemapath',this.path); + }, + + preBuild: function() { + + }, + build: function() { + + }, + postBuild: function() { + this.setupWatchListeners(); + this.addLinks(); + this.setValue(this.getDefault(), true); + this.updateHeaderText(); + this.register(); + this.onWatchedFieldChange(); + }, + + setupWatchListeners: function() { + var self = this; + + // Watched fields + this.watched = {}; + if(this.schema.vars) this.schema.watch = this.schema.vars; + this.watched_values = {}; + this.watch_listener = function() { + if(self.refreshWatchedFieldValues()) { + self.onWatchedFieldChange(); + } + }; + + this.register(); + if(this.schema.hasOwnProperty('watch')) { + var path,path_parts,first,root,adjusted_path; + + for(var name in this.schema.watch) { + if(!this.schema.watch.hasOwnProperty(name)) continue; + path = this.schema.watch[name]; + + if(Array.isArray(path)) { + if(path.length<2) continue; + path_parts = [path[0]].concat(path[1].split('.')); + } + else { + path_parts = path.split('.'); + if(!self.theme.closest(self.container,'[data-schemaid="'+path_parts[0]+'"]')) path_parts.unshift('#'); + } + first = path_parts.shift(); + + if(first === '#') first = self.jsoneditor.schema.id || 'root'; + + // Find the root node for this template variable + root = self.theme.closest(self.container,'[data-schemaid="'+first+'"]'); + if(!root) throw "Could not find ancestor node with id "+first; + + // Keep track of the root node and path for use when rendering the template + adjusted_path = root.getAttribute('data-schemapath') + '.' + path_parts.join('.'); + + self.jsoneditor.watch(adjusted_path,self.watch_listener); + + self.watched[name] = adjusted_path; + } + } + + // Dynamic header + if(this.schema.headerTemplate) { + this.header_template = this.jsoneditor.compileTemplate(this.schema.headerTemplate, this.template_engine); + } + }, + + addLinks: function() { + // Add links + if(!this.no_link_holder) { + this.link_holder = this.theme.getLinksHolder(); + this.container.appendChild(this.link_holder); + if(this.schema.links) { + for(var i=0; i=0) { + holder = this.theme.getBlockLinkHolder(); + + link = this.theme.getBlockLink(); + link.setAttribute('target','_blank'); + + var media = document.createElement(type); + media.setAttribute('controls','controls'); + + this.theme.createMediaLink(holder,link,media); + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + link.setAttribute('href',url); + link.textContent = data.rel || url; + media.setAttribute('src',url); + }); + } + // Text links + else { + link = holder = this.theme.getBlockLink(); + holder.setAttribute('target','_blank'); + holder.textContent = data.rel; + + // When a watched field changes, update the url + this.link_watchers.push(function(vars) { + var url = href(vars); + holder.setAttribute('href',url); + holder.textContent = data.rel || url; + }); + } + + if(download && link) { + if(download === true) { + link.setAttribute('download',''); + } + else { + this.link_watchers.push(function(vars) { + link.setAttribute('download',download(vars)); + }); + } + } + + if(data.class) link.className = link.className + ' ' + data.class; + + return holder; + }, + refreshWatchedFieldValues: function() { + if(!this.watched_values) return; + var watched = {}; + var changed = false; + var self = this; + + if(this.watched) { + var val,editor; + for(var name in this.watched) { + if(!this.watched.hasOwnProperty(name)) continue; + editor = self.jsoneditor.getEditor(this.watched[name]); + val = editor? editor.getValue() : null; + if(self.watched_values[name] !== val) changed = true; + watched[name] = val; + } + } + + watched.self = this.getValue(); + if(this.watched_values.self !== watched.self) changed = true; + + this.watched_values = watched; + + return changed; + }, + getWatchedFieldValues: function() { + return this.watched_values; + }, + updateHeaderText: function() { + if(this.header) { + // If the header has children, only update the text node's value + if(this.header.children.length) { + for(var i=0; i -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + getDisplayText: function(arr) { + var disp = []; + var used = {}; + + // Determine how many times each attribute name is used. + // This helps us pick the most distinct display text for the schemas. + $each(arr,function(i,el) { + if(el.title) { + used[el.title] = used[el.title] || 0; + used[el.title]++; + } + if(el.description) { + used[el.description] = used[el.description] || 0; + used[el.description]++; + } + if(el.format) { + used[el.format] = used[el.format] || 0; + used[el.format]++; + } + if(el.type) { + used[el.type] = used[el.type] || 0; + used[el.type]++; + } + }); + + // Determine display text for each element of the array + $each(arr,function(i,el) { + var name; + + // If it's a simple string + if(typeof el === "string") name = el; + // Object + else if(el.title && used[el.title]<=1) name = el.title; + else if(el.format && used[el.format]<=1) name = el.format; + else if(el.type && used[el.type]<=1) name = el.type; + else if(el.description && used[el.description]<=1) name = el.descripton; + else if(el.title) name = el.title; + else if(el.format) name = el.format; + else if(el.type) name = el.type; + else if(el.description) name = el.description; + else if(JSON.stringify(el).length < 50) name = JSON.stringify(el); + else name = "type"; + + disp.push(name); + }); + + // Replace identical display text with "text 1", "text 2", etc. + var inc = {}; + $each(disp,function(i,name) { + inc[name] = inc[name] || 0; + inc[name]++; + + if(used[name] > 1) disp[i] = name + " " + inc[name]; + }); + + return disp; + }, + getOption: function(key) { + try { + throw "getOption is deprecated"; + } + catch(e) { + window.console.error(e); + } + + return this.options[key]; + }, + showValidationErrors: function(errors) { + + } +}); diff --git a/libs/json-editor/src/editors/array.js b/libs/json-editor/src/editors/array.js new file mode 100644 index 0000000..ca05e10 --- /dev/null +++ b/libs/json-editor/src/editors/array.js @@ -0,0 +1,708 @@ +JSONEditor.defaults.editors.array = JSONEditor.AbstractEditor.extend({ + getDefault: function() { + return this.schema["default"] || []; + }, + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i= this.schema.items.length) { + if(this.schema.additionalItems===true) { + return {}; + } + else if(this.schema.additionalItems) { + return $extend({},this.schema.additionalItems); + } + } + else { + return $extend({},this.schema.items[i]); + } + } + else if(this.schema.items) { + return $extend({},this.schema.items); + } + else { + return {}; + } + }, + getItemInfo: function(i) { + var schema = this.getItemSchema(i); + + // Check if it's cached + this.item_info = this.item_info || {}; + var stringified = JSON.stringify(schema); + if(typeof this.item_info[stringified] !== "undefined") return this.item_info[stringified]; + + // Get the schema for this item + schema = this.jsoneditor.expandRefs(schema); + + this.item_info[stringified] = { + title: schema.title || "item", + 'default': schema["default"], + width: 12, + child_editors: schema.properties || schema.items + }; + + return this.item_info[stringified]; + }, + getElementEditor: function(i) { + var item_info = this.getItemInfo(i); + var schema = this.getItemSchema(i); + schema = this.jsoneditor.expandRefs(schema); + schema.title = item_info.title+' '+(i+1); + + var editor = this.jsoneditor.getEditorClass(schema); + + var holder; + if(this.tabs_holder) { + holder = this.theme.getTabContent(); + } + else if(item_info.child_editors) { + holder = this.theme.getChildEditorHolder(); + } + else { + holder = this.theme.getIndentedPanel(); + } + + this.row_holder.appendChild(holder); + + var ret = this.jsoneditor.createEditor(editor,{ + jsoneditor: this.jsoneditor, + schema: schema, + container: holder, + path: this.path+'.'+i, + parent: this, + required: true + }); + ret.preBuild(); + ret.build(); + ret.postBuild(); + + if(!ret.title_controls) { + ret.array_controls = this.theme.getButtonHolder(); + holder.appendChild(ret.array_controls); + } + + return ret; + }, + destroy: function() { + this.empty(true); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.row_holder && this.row_holder.parentNode) this.row_holder.parentNode.removeChild(this.row_holder); + if(this.controls && this.controls.parentNode) this.controls.parentNode.removeChild(this.controls); + if(this.panel && this.panel.parentNode) this.panel.parentNode.removeChild(this.panel); + + this.rows = this.row_cache = this.title = this.description = this.row_holder = this.panel = this.controls = null; + + this._super(); + }, + empty: function(hard) { + if(!this.rows) return; + var self = this; + $each(this.rows,function(i,row) { + if(hard) { + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + self.destroyRow(row,true); + self.row_cache[i] = null; + } + self.rows[i] = null; + }); + self.rows = []; + if(hard) self.row_cache = []; + }, + destroyRow: function(row,hard) { + var holder = row.container; + if(hard) { + row.destroy(); + if(holder.parentNode) holder.parentNode.removeChild(holder); + if(row.tab && row.tab.parentNode) row.tab.parentNode.removeChild(row.tab); + } + else { + if(row.tab) row.tab.style.display = 'none'; + holder.style.display = 'none'; + row.unregister(); + } + }, + getMax: function() { + if((Array.isArray(this.schema.items)) && this.schema.additionalItems === false) { + return Math.min(this.schema.items.length,this.schema.maxItems || Infinity); + } + else { + return this.schema.maxItems || Infinity; + } + }, + refreshTabs: function(refresh_headers) { + var self = this; + $each(this.rows, function(i,row) { + if(!row.tab) return; + + if(refresh_headers) { + row.tab_text.textContent = row.getHeaderText(); + } + else { + if(row.tab === self.active_tab) { + self.theme.markTabActive(row.tab); + row.container.style.display = ''; + } + else { + self.theme.markTabInactive(row.tab); + row.container.style.display = 'none'; + } + } + }); + }, + setValue: function(value, initial) { + // Update the array's value, adding/removing rows when necessary + value = value || []; + + if(!(Array.isArray(value))) value = [value]; + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + // Make sure value has between minItems and maxItems items in it + if(this.schema.minItems) { + while(value.length < this.schema.minItems) { + value.push(this.getItemInfo(value.length)["default"]); + } + } + if(this.getMax() && value.length > this.getMax()) { + value = value.slice(0,this.getMax()); + } + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val,initial); + } + else if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(val,initial); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(val,initial); + } + }); + + for(var j=value.length; j= this.rows.length; + + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + editor.delete_button.style.display = ''; + } + } + + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + } + else if(this.value.length === 1) { + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + + if(minItems || this.hide_delete_all_rows_buttons) { + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.getMax() && this.getMax() <= this.rows.length) || this.hide_add_button){ + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!this.collapsed && controls_needed) { + this.controls.style.display = 'inline-block'; + } + else { + this.controls.style.display = 'none'; + } + } + }, + addRow: function(value, initial) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + self.row_cache[i] = self.rows[i]; + + if(self.tabs_holder) { + self.rows[i].tab_text = document.createElement('span'); + self.rows[i].tab_text.textContent = self.rows[i].getHeaderText(); + self.rows[i].tab = self.theme.getTab(self.rows[i].tab_text); + self.rows[i].tab.addEventListener('click', function(e) { + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + e.preventDefault(); + e.stopPropagation(); + }); + + self.theme.addTab(self.tabs_holder, self.rows[i].tab); + } + + var controls_holder = self.rows[i].title_controls || self.rows[i].array_controls; + + // Buttons to delete row, move row up, and move row down + if(!self.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton(self.getItemTitle(),'delete',this.translate('button_delete_row_title',[self.getItemTitle()])); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + var new_active_tab = null; + $each(value,function(j,row) { + if(j===i) { + // If the one we're deleting is the active tab + if(self.rows[j].tab === self.active_tab) { + // Make the next tab active if there is one + // Note: the next tab is going to be the current tab after deletion + if(self.rows[j+1]) new_active_tab = self.rows[j].tab; + // Otherwise, make the previous tab active if there is one + else if(j) new_active_tab = self.rows[j-1].tab; + } + + return; // If this is the one we're deleting + } + newval.push(row); + }); + self.setValue(newval); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].delete_button); + } + } + + if(i && !self.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title')); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i-1].tab; + self.refreshTabs(); + + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].moveup_button); + } + } + + if(!self.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title')); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.active_tab = self.rows[i+1].tab; + self.refreshTabs(); + self.onChange(true); + }); + + if(controls_holder) { + controls_holder.appendChild(self.rows[i].movedown_button); + } + } + + if(value) self.rows[i].setValue(value, initial); + self.refreshTabs(); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); + this.title_controls.appendChild(this.toggle_button); + var row_holder_display = self.row_holder.style.display; + var controls_display = self.controls.style.display; + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + if(self.collapsed) { + self.collapsed = false; + if(self.panel) self.panel.style.display = ''; + self.row_holder.style.display = row_holder_display; + if(self.tabs_holder) self.tabs_holder.style.display = ''; + self.controls.style.display = controls_display; + self.setButtonText(this,'','collapse',self.translate('button_collapse')); + } + else { + self.collapsed = true; + self.row_holder.style.display = 'none'; + if(self.tabs_holder) self.tabs_holder.style.display = 'none'; + self.controls.style.display = 'none'; + if(self.panel) self.panel.style.display = 'none'; + self.setButtonText(this,'','expand',self.translate('button_expand')); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()])); + + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = self.rows.length; + if(self.row_cache[i]) { + self.rows[i] = self.row_cache[i]; + self.rows[i].setValue(self.rows[i].getDefault(), true); + self.rows[i].container.style.display = ''; + if(self.rows[i].tab) self.rows[i].tab.style.display = ''; + self.rows[i].register(); + } + else { + self.addRow(); + } + self.active_tab = self.rows[i].tab; + self.refreshTabs(); + self.refreshValue(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()])); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var rows = self.getValue(); + + var new_active_tab = null; + if(self.rows.length > 1 && self.rows[self.rows.length-1].tab === self.active_tab) new_active_tab = self.rows[self.rows.length-2].tab; + + rows.pop(); + self.setValue(rows); + if(new_active_tab) { + self.active_tab = new_active_tab; + self.refreshTabs(); + } + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title')); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + + if(self.tabs) { + this.add_row_button.style.width = '100%'; + this.add_row_button.style.textAlign = 'left'; + this.add_row_button.style.marginBottom = '3px'; + + this.delete_last_row_button.style.width = '100%'; + this.delete_last_row_button.style.textAlign = 'left'; + this.delete_last_row_button.style.marginBottom = '3px'; + + this.remove_all_rows_button.style.width = '100%'; + this.remove_all_rows_button.style.textAlign = 'left'; + this.remove_all_rows_button.style.marginBottom = '3px'; + } + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show errors for child editors + $each(this.rows, function(i,row) { + row.showValidationErrors(other_errors); + }); + } +}); diff --git a/libs/json-editor/src/editors/array/selectize.js b/libs/json-editor/src/editors/array/selectize.js new file mode 100644 index 0000000..8059037 --- /dev/null +++ b/libs/json-editor/src/editors/array/selectize.js @@ -0,0 +1,94 @@ +JSONEditor.defaults.editors.arraySelectize = JSONEditor.AbstractEditor.extend({ + build: function() { + this.title = this.theme.getFormInputLabel(this.getTitle()); + + this.title_controls = this.theme.getHeaderButtonHolder(); + this.title.appendChild(this.title_controls); + this.error_holder = document.createElement('div'); + + if(this.schema.description) { + this.description = this.theme.getDescription(this.schema.description); + } + + this.input = document.createElement('select'); + this.input.setAttribute('multiple', 'multiple'); + + var group = this.theme.getFormControl(this.title, this.input, this.description); + + this.container.appendChild(group); + this.container.appendChild(this.error_holder); + + window.jQuery(this.input).selectize({ + delimiter: false, + createOnBlur: true, + create: true + }); + }, + postBuild: function() { + var self = this; + this.input.selectize.on('change', function(event) { + self.refreshValue(); + self.onChange(true); + }); + }, + destroy: function() { + this.empty(true); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + + this._super(); + }, + empty: function(hard) {}, + setValue: function(value, initial) { + var self = this; + // Update the array's value, adding/removing rows when necessary + value = value || []; + if(!(Array.isArray(value))) value = [value]; + + this.input.selectize.clearOptions(); + this.input.selectize.clear(true); + + value.forEach(function(item) { + self.input.selectize.addOption({text: item, value: item}); + }); + this.input.selectize.setValue(value); + + this.refreshValue(initial); + }, + refreshValue: function(force) { + this.value = this.input.selectize.getValue(); + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + } +}); diff --git a/libs/json-editor/src/editors/base64.js b/libs/json-editor/src/editors/base64.js new file mode 100644 index 0000000..70bc37e --- /dev/null +++ b/libs/json-editor/src/editors/base64.js @@ -0,0 +1,93 @@ +JSONEditor.defaults.editors.base64 = JSONEditor.AbstractEditor.extend({ + getNumColumns: function() { + return 4; + }, + build: function() { + var self = this; + this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + + // Input that holds the base64 string + this.input = this.theme.getFormInputField('hidden'); + this.container.appendChild(this.input); + + // Don't show uploader if this is readonly + if(!this.schema.readOnly && !this.schema.readonly) { + if(!window.FileReader) throw "FileReader required for base64 editor"; + + // File uploader + this.uploader = this.theme.getFormInputField('file'); + + this.uploader.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(this.files && this.files.length) { + var fr = new FileReader(); + fr.onload = function(evt) { + self.value = evt.target.result; + self.refreshPreview(); + self.onChange(true); + fr = null; + }; + fr.readAsDataURL(this.files[0]); + } + }); + } + + this.preview = this.theme.getFormInputDescription(this.schema.description); + this.container.appendChild(this.preview); + + this.control = this.theme.getFormControl(this.label, this.uploader||this.input, this.preview); + this.container.appendChild(this.control); + }, + refreshPreview: function() { + if(this.last_preview === this.value) return; + this.last_preview = this.value; + + this.preview.innerHTML = ''; + + if(!this.value) return; + + var mime = this.value.match(/^data:([^;,]+)[;,]/); + if(mime) mime = mime[1]; + + if(!mime) { + this.preview.innerHTML = 'Invalid data URI'; + } + else { + this.preview.innerHTML = 'Type: '+mime+', Size: '+Math.floor((this.value.length-this.value.split(',')[0].length-1)/1.33333)+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.value; + this.preview.appendChild(img); + } + } + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.refreshPreview(); + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); diff --git a/libs/json-editor/src/editors/checkbox.js b/libs/json-editor/src/editors/checkbox.js new file mode 100644 index 0000000..ee26cf6 --- /dev/null +++ b/libs/json-editor/src/editors/checkbox.js @@ -0,0 +1,61 @@ +JSONEditor.defaults.editors.checkbox = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + this.value = !!value; + this.input.checked = this.value; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + return Math.min(12,Math.max(this.getTitle().length/7,2)); + }, + build: function() { + var self = this; + if(!this.options.compact) { + this.label = this.header = this.theme.getCheckboxLabel(this.getTitle()); + } + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + if(this.options.compact) this.container.className += ' compact'; + + this.input = this.theme.getCheckbox(); + this.control = this.theme.getFormControl(this.label, this.input, this.description); + + if(this.schema.readOnly || this.schema.readonly) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + self.value = this.checked; + self.onChange(true); + }); + + this.container.appendChild(this.control); + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + this._super(); + }, + destroy: function() { + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + this._super(); + } +}); diff --git a/libs/json-editor/src/editors/enum.js b/libs/json-editor/src/editors/enum.js new file mode 100644 index 0000000..367a3ab --- /dev/null +++ b/libs/json-editor/src/editors/enum.js @@ -0,0 +1,128 @@ +// Enum Editor (used for objects and arrays with enumerated values) +JSONEditor.defaults.editors["enum"] = JSONEditor.AbstractEditor.extend({ + getNumColumns: function() { + return 4; + }, + build: function() { + var container = this.container; + this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + this.container.appendChild(this.title); + + this.options.enum_titles = this.options.enum_titles || []; + + this["enum"] = this.schema["enum"]; + this.selected = 0; + this.select_options = []; + this.html_values = []; + + var self = this; + for(var i=0; inull'; + } + // Array or Object + else if(typeof el === "object") { + // TODO: use theme + var ret = ''; + + $each(el,function(i,child) { + var html = self.getHTML(child); + + // Add the keys to object children + if(!(Array.isArray(el))) { + // TODO: use theme + html = '
    '+i+': '+html+'
    '; + } + + // TODO: use theme + ret += '
  • '+html+'
  • '; + }); + + if(Array.isArray(el)) ret = '
      '+ret+'
    '; + else ret = "
      "+ret+'
    '; + + return ret; + } + // Boolean + else if(typeof el === "boolean") { + return el? 'true' : 'false'; + } + // String + else if(typeof el === "string") { + return el.replace(/&/g,'&').replace(//g,'>'); + } + // Number + else { + return el; + } + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.refreshValue(); + this.onChange(); + } + }, + destroy: function() { + if(this.display_area && this.display_area.parentNode) this.display_area.parentNode.removeChild(this.display_area); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.switcher && this.switcher.parentNode) this.switcher.parentNode.removeChild(this.switcher); + + this._super(); + } +}); diff --git a/libs/json-editor/src/editors/integer.js b/libs/json-editor/src/editors/integer.js new file mode 100644 index 0000000..6634d4a --- /dev/null +++ b/libs/json-editor/src/editors/integer.js @@ -0,0 +1,9 @@ +JSONEditor.defaults.editors.integer = JSONEditor.defaults.editors.number.extend({ + sanitize: function(value) { + value = value + ""; + return value.replace(/[^0-9\-]/g,''); + }, + getNumColumns: function() { + return 2; + } +}); diff --git a/libs/json-editor/src/editors/multiple.js b/libs/json-editor/src/editors/multiple.js new file mode 100644 index 0000000..71279e0 --- /dev/null +++ b/libs/json-editor/src/editors/multiple.js @@ -0,0 +1,287 @@ +// Multiple Editor (for when `type` is an array) +JSONEditor.defaults.editors.multiple = JSONEditor.AbstractEditor.extend({ + register: function() { + if(this.editors) { + for(var i=0; i height)) { + found = i; + } + } + } + + // If there isn't a spot in any of the existing rows, start a new row + if(found === false) { + rows.push({ + width: 0, + minh: 999999, + maxh: 0, + editors: [] + }); + found = rows.length-1; + } + + rows[found].editors.push({ + key: key, + //editor: editor, + width: width, + height: height + }); + rows[found].width += width; + rows[found].minh = Math.min(rows[found].minh,height); + rows[found].maxh = Math.max(rows[found].maxh,height); + }); + + // Make almost full rows width 12 + // Do this by increasing all editors' sizes proprotionately + // Any left over space goes to the biggest editor + // Don't touch rows with a width of 6 or less + for(i=0; i rows[i].editors[biggest].width) biggest = j; + rows[i].editors[j].width *= 12/rows[i].width; + rows[i].editors[j].width = Math.floor(rows[i].editors[j].width); + new_width += rows[i].editors[j].width; + } + if(new_width < 12) rows[i].editors[biggest].width += 12-new_width; + rows[i].width = 12; + } + } + + // layout hasn't changed + if(this.layout === JSON.stringify(rows)) return false; + this.layout = JSON.stringify(rows); + + // Layout the form + container = document.createElement('div'); + for(i=0; i= this.schema.maxProperties); + + if(this.addproperty_checkboxes) { + this.addproperty_list.innerHTML = ''; + } + this.addproperty_checkboxes = {}; + + // Check for which editors can't be removed or added back + for(i in this.cached_editors) { + if(!this.cached_editors.hasOwnProperty(i)) continue; + + this.addPropertyCheckbox(i); + + if(this.isRequired(this.cached_editors[i]) && i in this.editors) { + this.addproperty_checkboxes[i].disabled = true; + } + + if(typeof this.schema.minProperties !== "undefined" && num_props <= this.schema.minProperties) { + this.addproperty_checkboxes[i].disabled = this.addproperty_checkboxes[i].checked; + if(!this.addproperty_checkboxes[i].checked) show_modal = true; + } + else if(!(i in this.editors)) { + if(!can_add && !this.schema.properties.hasOwnProperty(i)) { + this.addproperty_checkboxes[i].disabled = true; + } + else { + this.addproperty_checkboxes[i].disabled = false; + show_modal = true; + } + } + else { + show_modal = true; + can_remove = true; + } + } + + if(this.canHaveAdditionalProperties()) { + show_modal = true; + } + + // Additional addproperty checkboxes not tied to a current editor + for(i in this.schema.properties) { + if(!this.schema.properties.hasOwnProperty(i)) continue; + if(this.cached_editors[i]) continue; + show_modal = true; + this.addPropertyCheckbox(i); + } + + // If no editors can be added or removed, hide the modal button + if(!show_modal) { + this.hideAddProperty(); + this.addproperty_controls.style.display = 'none'; + } + // If additional properties are disabled + else if(!this.canHaveAdditionalProperties()) { + this.addproperty_add.style.display = 'none'; + this.addproperty_input.style.display = 'none'; + } + // If no new properties can be added + else if(!can_add) { + this.addproperty_add.disabled = true; + } + // If new properties can be added + else { + this.addproperty_add.disabled = false; + } + }, + isRequired: function(editor) { + if(typeof editor.schema.required === "boolean") return editor.schema.required; + else if(Array.isArray(this.schema.required)) return this.schema.required.indexOf(editor.key) > -1; + else if(this.jsoneditor.options.required_by_default) return true; + else return false; + }, + setValue: function(value, initial) { + var self = this; + value = value || {}; + + if(typeof value !== "object" || Array.isArray(value)) value = {}; + + // First, set the values for all of the defined properties + $each(this.cached_editors, function(i,editor) { + // Value explicitly set + if(typeof value[i] !== "undefined") { + self.addObjectProperty(i); + editor.setValue(value[i],initial); + } + // Otherwise, remove value unless this is the initial set or it's required + else if(!initial && !self.isRequired(editor)) { + self.removeObjectProperty(i); + } + // Otherwise, set the value to the default + else { + editor.setValue(editor.getDefault(),initial); + } + }); + + $each(value, function(i,val) { + if(!self.cached_editors[i]) { + self.addObjectProperty(i); + if(self.editors[i]) self.editors[i].setValue(val,initial); + } + }); + + this.refreshValue(); + this.layoutEditors(); + this.onChange(); + }, + showValidationErrors: function(errors) { + var self = this; + + // Get all the errors that pertain to this editor + var my_errors = []; + var other_errors = []; + $each(errors, function(i,error) { + if(error.path === self.path) { + my_errors.push(error); + } + else { + other_errors.push(error); + } + }); + + // Show errors for this editor + if(this.error_holder) { + if(my_errors.length) { + var message = []; + this.error_holder.innerHTML = ''; + this.error_holder.style.display = ''; + $each(my_errors, function(i,error) { + self.error_holder.appendChild(self.theme.getErrorMessage(error.message)); + }); + } + // Hide error area + else { + this.error_holder.style.display = 'none'; + } + } + + // Show error for the table row if this is inside a table + if(this.options.table_row) { + if(my_errors.length) { + this.theme.addTableRowError(this.container); + } + else { + this.theme.removeTableRowError(this.container); + } + } + + // Show errors for child editors + $each(this.editors, function(i,editor) { + editor.showValidationErrors(other_errors); + }); + } +}); diff --git a/libs/json-editor/src/editors/select.js b/libs/json-editor/src/editors/select.js new file mode 100644 index 0000000..ee5473b --- /dev/null +++ b/libs/json-editor/src/editors/select.js @@ -0,0 +1,355 @@ +JSONEditor.defaults.editors.select = JSONEditor.AbstractEditor.extend({ + setValue: function(value,initial) { + value = this.typecast(value||''); + + // Sanitize value before setting it + var sanitized = value; + if(this.enum_values.indexOf(sanitized) < 0) { + sanitized = this.enum_values[0]; + } + + if(this.value === sanitized) { + return; + } + + this.input.value = this.enum_options[this.enum_values.indexOf(sanitized)]; + if(this.select2) this.select2.select2('val',this.input.value); + this.value = sanitized; + this.onChange(); + }, + register: function() { + this._super(); + if(!this.input) return; + this.input.setAttribute('name',this.formname); + }, + unregister: function() { + this._super(); + if(!this.input) return; + this.input.removeAttribute('name'); + }, + getNumColumns: function() { + if(!this.enum_options) return 3; + var longest_text = this.getTitle().length; + for(var i=0; i 2 || (this.enum_options.length && this.enumSource))) { + var options = $extend({},JSONEditor.plugins.select2); + if(this.schema.options && this.schema.options.select2_options) options = $extend(options,this.schema.options.select2_options); + this.select2 = window.jQuery(this.input).select2(options); + var self = this; + this.select2.on('select2-blur',function() { + self.input.value = self.select2.select2('val'); + self.onInputChange(); + }); + this.select2.on('change',function() { + self.input.value = self.select2.select2('val'); + self.onInputChange(); + }); + } + else { + this.select2 = null; + } + }, + postBuild: function() { + this._super(); + this.theme.afterInputReady(this.input); + this.setupSelect2(); + }, + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor uses a dynamic select box + if(this.enumSource) { + vars = this.getWatchedFieldValues(); + var select_options = []; + var select_titles = []; + + for(var i=0; i= 2 || (this.enum_options.length && this.enumSource))) { + var options = $extend({},JSONEditor.plugins.selectize); + if(this.schema.options && this.schema.options.selectize_options) options = $extend(options,this.schema.options.selectize_options); + this.selectize = window.jQuery(this.input).selectize($extend(options, + { + create: true, + onChange : function() { + self.onInputChange(); + } + })); + } + else { + this.selectize = null; + } + }, + postBuild: function() { + this._super(); + this.theme.afterInputReady(this.input); + this.setupSelectize(); + }, + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor uses a dynamic select box + if(this.enumSource) { + vars = this.getWatchedFieldValues(); + var select_options = []; + var select_titles = []; + + for(var i=0; i= 0) num = 4; + else num = 2; + + return Math.min(12,Math.max(min,num)); + }, + build: function() { + var self = this, i; + if(!this.options.compact) this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + if(this.schema.description) this.description = this.theme.getFormInputDescription(this.schema.description); + + this.format = this.schema.format; + if(!this.format && this.schema.media && this.schema.media.type) { + this.format = this.schema.media.type.replace(/(^(application|text)\/(x-)?(script\.)?)|(-source$)/g,''); + } + if(!this.format && this.options.default_format) { + this.format = this.options.default_format; + } + if(this.options.format) { + this.format = this.options.format; + } + + // Specific format + if(this.format) { + // Text Area + if(this.format === 'textarea') { + this.input_type = 'textarea'; + this.input = this.theme.getTextareaInput(); + } + // Range Input + else if(this.format === 'range') { + this.input_type = 'range'; + var min = this.schema.minimum || 0; + var max = this.schema.maximum || Math.max(100,min+1); + var step = 1; + if(this.schema.multipleOf) { + if(min%this.schema.multipleOf) min = Math.ceil(min/this.schema.multipleOf)*this.schema.multipleOf; + if(max%this.schema.multipleOf) max = Math.floor(max/this.schema.multipleOf)*this.schema.multipleOf; + step = this.schema.multipleOf; + } + + this.input = this.theme.getRangeInput(min,max,step); + } + // Source Code + else if([ + 'actionscript', + 'batchfile', + 'bbcode', + 'c', + 'c++', + 'cpp', + 'coffee', + 'csharp', + 'css', + 'dart', + 'django', + 'ejs', + 'erlang', + 'golang', + 'groovy', + 'handlebars', + 'haskell', + 'haxe', + 'html', + 'ini', + 'jade', + 'java', + 'javascript', + 'json', + 'less', + 'lisp', + 'lua', + 'makefile', + 'markdown', + 'matlab', + 'mysql', + 'objectivec', + 'pascal', + 'perl', + 'pgsql', + 'php', + 'python', + 'r', + 'ruby', + 'sass', + 'scala', + 'scss', + 'smarty', + 'sql', + 'stylus', + 'svg', + 'twig', + 'vbscript', + 'xml', + 'yaml' + ].indexOf(this.format) >= 0 + ) { + this.input_type = this.format; + this.source_code = true; + + this.input = this.theme.getTextareaInput(); + } + // HTML5 Input type + else { + this.input_type = this.format; + this.input = this.theme.getFormInputField(this.input_type); + } + } + // Normal text input + else { + this.input_type = 'text'; + this.input = this.theme.getFormInputField(this.input_type); + } + + // minLength, maxLength, and pattern + if(typeof this.schema.maxLength !== "undefined") this.input.setAttribute('maxlength',this.schema.maxLength); + if(typeof this.schema.pattern !== "undefined") this.input.setAttribute('pattern',this.schema.pattern); + else if(typeof this.schema.minLength !== "undefined") this.input.setAttribute('pattern','.{'+this.schema.minLength+',}'); + + if(this.options.compact) { + this.container.className += ' compact'; + } + else { + if(this.options.input_width) this.input.style.width = this.options.input_width; + } + + if(this.schema.readOnly || this.schema.readonly || this.schema.template) { + this.always_disabled = true; + this.input.disabled = true; + } + + this.input + .addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + // Don't allow changing if this field is a template + if(self.schema.template) { + this.value = self.value; + return; + } + + var val = this.value; + + // sanitize value + var sanitized = self.sanitize(val); + if(val !== sanitized) { + this.value = sanitized; + } + + self.is_dirty = true; + + self.refreshValue(); + self.onChange(true); + }); + + if(this.options.input_height) this.input.style.height = this.options.input_height; + if(this.options.expand_height) { + this.adjust_height = function(el) { + if(!el) return; + var i, ch=el.offsetHeight; + // Input too short + if(el.offsetHeight < el.scrollHeight) { + i=0; + while(el.offsetHeight < el.scrollHeight+3) { + if(i>100) break; + i++; + ch++; + el.style.height = ch+'px'; + } + } + else { + i=0; + while(el.offsetHeight >= el.scrollHeight+3) { + if(i>100) break; + i++; + ch--; + el.style.height = ch+'px'; + } + el.style.height = (ch+1)+'px'; + } + }; + + this.input.addEventListener('keyup',function(e) { + self.adjust_height(this); + }); + this.input.addEventListener('change',function(e) { + self.adjust_height(this); + }); + this.adjust_height(); + } + + if(this.format) this.input.setAttribute('data-schemaformat',this.format); + + this.control = this.theme.getFormControl(this.label, this.input, this.description); + this.container.appendChild(this.control); + + // Any special formatting that needs to happen after the input is added to the dom + window.requestAnimationFrame(function() { + // Skip in case the input is only a temporary editor, + // otherwise, in the case of an ace_editor creation, + // it will generate an error trying to append it to the missing parentNode + if(self.input.parentNode) self.afterInputReady(); + if(self.adjust_height) self.adjust_height(self.input); + }); + + // Compile and store the template + if(this.schema.template) { + this.template = this.jsoneditor.compileTemplate(this.schema.template, this.template_engine); + this.refreshValue(); + } + else { + this.refreshValue(); + } + }, + enable: function() { + if(!this.always_disabled) { + this.input.disabled = false; + // TODO: WYSIWYG and Markdown editors + } + this._super(); + }, + disable: function() { + this.input.disabled = true; + // TODO: WYSIWYG and Markdown editors + this._super(); + }, + afterInputReady: function() { + var self = this, options; + + // Code editor + if(this.source_code) { + // WYSIWYG html and bbcode editor + if(this.options.wysiwyg && + ['html','bbcode'].indexOf(this.input_type) >= 0 && + window.jQuery && window.jQuery.fn && window.jQuery.fn.sceditor + ) { + options = $extend({},{ + plugins: self.input_type==='html'? 'xhtml' : 'bbcode', + emoticonsEnabled: false, + width: '100%', + height: 300 + },JSONEditor.plugins.sceditor,self.options.sceditor_options||{}); + + window.jQuery(self.input).sceditor(options); + + self.sceditor_instance = window.jQuery(self.input).sceditor('instance'); + + self.sceditor_instance.blur(function() { + // Get editor's value + var val = window.jQuery("
    "+self.sceditor_instance.val()+"
    "); + // Remove sceditor spans/divs + window.jQuery('#sceditor-start-marker,#sceditor-end-marker,.sceditor-nlf',val).remove(); + // Set the value and update + self.input.value = val.html(); + self.value = self.input.value; + self.is_dirty = true; + self.onChange(true); + }); + } + // EpicEditor for markdown (if it's loaded) + else if (this.input_type === 'markdown' && window.EpicEditor) { + this.epiceditor_container = document.createElement('div'); + this.input.parentNode.insertBefore(this.epiceditor_container,this.input); + this.input.style.display = 'none'; + + options = $extend({},JSONEditor.plugins.epiceditor,{ + container: this.epiceditor_container, + clientSideStorage: false + }); + + this.epiceditor = new window.EpicEditor(options).load(); + + this.epiceditor.importFile(null,this.getValue()); + + this.epiceditor.on('update',function() { + var val = self.epiceditor.exportFile(); + self.input.value = val; + self.value = val; + self.is_dirty = true; + self.onChange(true); + }); + } + // ACE editor for everything else + else if(window.ace) { + var mode = this.input_type; + // aliases for c/cpp + if(mode === 'cpp' || mode === 'c++' || mode === 'c') { + mode = 'c_cpp'; + } + + this.ace_container = document.createElement('div'); + this.ace_container.style.width = '100%'; + this.ace_container.style.position = 'relative'; + this.ace_container.style.height = '400px'; + this.input.parentNode.insertBefore(this.ace_container,this.input); + this.input.style.display = 'none'; + this.ace_editor = window.ace.edit(this.ace_container); + + this.ace_editor.setValue(this.getValue()); + + // The theme + if(JSONEditor.plugins.ace.theme) this.ace_editor.setTheme('ace/theme/'+JSONEditor.plugins.ace.theme); + // The mode + mode = window.ace.require("ace/mode/"+mode); + if(mode) this.ace_editor.getSession().setMode(new mode.Mode()); + + // Listen for changes + this.ace_editor.on('change',function() { + var val = self.ace_editor.getValue(); + self.input.value = val; + self.refreshValue(); + self.is_dirty = true; + self.onChange(true); + }); + } + } + + self.theme.afterInputReady(self.input); + }, + refreshValue: function() { + this.value = this.input.value; + if(typeof this.value !== "string") this.value = ''; + this.serialized = this.value; + }, + destroy: function() { + // If using SCEditor, destroy the editor instance + if(this.sceditor_instance) { + this.sceditor_instance.destroy(); + } + else if(this.epiceditor) { + this.epiceditor.unload(); + } + else if(this.ace_editor) { + this.ace_editor.destroy(); + } + + + this.template = null; + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.label && this.label.parentNode) this.label.parentNode.removeChild(this.label); + if(this.description && this.description.parentNode) this.description.parentNode.removeChild(this.description); + + this._super(); + }, + /** + * This is overridden in derivative editors + */ + sanitize: function(value) { + return value; + }, + /** + * Re-calculates the value if needed + */ + onWatchedFieldChange: function() { + var self = this, vars, j; + + // If this editor needs to be rendered by a macro template + if(this.template) { + vars = this.getWatchedFieldValues(); + this.setValue(this.template(vars),false,true); + } + + this._super(); + }, + showValidationErrors: function(errors) { + var self = this; + + if(this.jsoneditor.options.show_errors === "always") {} + else if(!this.is_dirty && this.previous_error_setting===this.jsoneditor.options.show_errors) return; + + this.previous_error_setting = this.jsoneditor.options.show_errors; + + var messages = []; + $each(errors,function(i,error) { + if(error.path === self.path) { + messages.push(error.message); + } + }); + + if(messages.length) { + this.theme.addInputError(this.input, messages.join('. ')+'.'); + } + else { + this.theme.removeInputError(this.input); + } + } +}); diff --git a/libs/json-editor/src/editors/table.js b/libs/json-editor/src/editors/table.js new file mode 100644 index 0000000..48528b2 --- /dev/null +++ b/libs/json-editor/src/editors/table.js @@ -0,0 +1,463 @@ +JSONEditor.defaults.editors.table = JSONEditor.defaults.editors.array.extend({ + register: function() { + this._super(); + if(this.rows) { + for(var i=0; i this.schema.maxItems) { + value = value.slice(0,this.schema.maxItems); + } + + var serialized = JSON.stringify(value); + if(serialized === this.serialized) return; + + var numrows_changed = false; + + var self = this; + $each(value,function(i,val) { + if(self.rows[i]) { + // TODO: don't set the row's value if it hasn't changed + self.rows[i].setValue(val); + } + else { + self.addRow(val); + numrows_changed = true; + } + }); + + for(var j=value.length; j= this.rows.length; + + var need_row_buttons = false; + $each(this.rows,function(i,editor) { + // Hide the move down button for the last row + if(editor.movedown_button) { + if(i === self.rows.length - 1) { + editor.movedown_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.movedown_button.style.display = ''; + } + } + + // Hide the delete button if we have minItems items + if(editor.delete_button) { + if(minItems) { + editor.delete_button.style.display = 'none'; + } + else { + need_row_buttons = true; + editor.delete_button.style.display = ''; + } + } + + if(editor.moveup_button) { + need_row_buttons = true; + } + }); + + // Show/hide controls column in table + $each(this.rows,function(i,editor) { + if(need_row_buttons) { + editor.controls_cell.style.display = ''; + } + else { + editor.controls_cell.style.display = 'none'; + } + }); + if(need_row_buttons) { + this.controls_header_cell.style.display = ''; + } + else { + this.controls_header_cell.style.display = 'none'; + } + + var controls_needed = false; + + if(!this.value.length) { + this.delete_last_row_button.style.display = 'none'; + this.remove_all_rows_button.style.display = 'none'; + this.table.style.display = 'none'; + } + else if(this.value.length === 1) { + this.table.style.display = ''; + this.remove_all_rows_button.style.display = 'none'; + + // If there are minItems items in the array, or configured to hide the delete_last_row button, hide the delete button beneath the rows + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + } + else { + this.table.style.display = ''; + + if(minItems || this.hide_delete_last_row_buttons) { + this.delete_last_row_button.style.display = 'none'; + } + else { + this.delete_last_row_button.style.display = ''; + controls_needed = true; + } + + if(minItems || this.hide_delete_all_rows_buttons) { + this.remove_all_rows_button.style.display = 'none'; + } + else { + this.remove_all_rows_button.style.display = ''; + controls_needed = true; + } + } + + // If there are maxItems in the array, hide the add button beneath the rows + if((this.schema.maxItems && this.schema.maxItems <= this.rows.length) || this.hide_add_button) { + this.add_row_button.style.display = 'none'; + } + else { + this.add_row_button.style.display = ''; + controls_needed = true; + } + + if(!controls_needed) { + this.controls.style.display = 'none'; + } + else { + this.controls.style.display = ''; + } + }, + refreshValue: function() { + var self = this; + this.value = []; + + $each(this.rows,function(i,editor) { + // Get the value for this editor + self.value[i] = editor.getValue(); + }); + this.serialized = JSON.stringify(this.value); + }, + addRow: function(value) { + var self = this; + var i = this.rows.length; + + self.rows[i] = this.getElementEditor(i); + + var controls_holder = self.rows[i].table_controls; + + // Buttons to delete row, move row up, and move row down + if(!this.hide_delete_buttons) { + self.rows[i].delete_button = this.getButton('','delete',this.translate('button_delete_row_title_short')); + self.rows[i].delete_button.className += ' delete'; + self.rows[i].delete_button.setAttribute('data-i',i); + self.rows[i].delete_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + var value = self.getValue(); + + var newval = []; + $each(value,function(j,row) { + if(j===i) return; // If this is the one we're deleting + newval.push(row); + }); + self.setValue(newval); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].delete_button); + } + + + if(i && !this.hide_move_buttons) { + self.rows[i].moveup_button = this.getButton('','moveup',this.translate('button_move_up_title')); + self.rows[i].moveup_button.className += ' moveup'; + self.rows[i].moveup_button.setAttribute('data-i',i); + self.rows[i].moveup_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + + if(i<=0) return; + var rows = self.getValue(); + var tmp = rows[i-1]; + rows[i-1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].moveup_button); + } + + if(!this.hide_move_buttons) { + self.rows[i].movedown_button = this.getButton('','movedown',this.translate('button_move_down_title')); + self.rows[i].movedown_button.className += ' movedown'; + self.rows[i].movedown_button.setAttribute('data-i',i); + self.rows[i].movedown_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + var i = this.getAttribute('data-i')*1; + var rows = self.getValue(); + if(i>=rows.length-1) return; + var tmp = rows[i+1]; + rows[i+1] = rows[i]; + rows[i] = tmp; + + self.setValue(rows); + self.onChange(true); + }); + controls_holder.appendChild(self.rows[i].movedown_button); + } + + if(value) self.rows[i].setValue(value); + }, + addControls: function() { + var self = this; + + this.collapsed = false; + this.toggle_button = this.getButton('','collapse',this.translate('button_collapse')); + if(this.title_controls) { + this.title_controls.appendChild(this.toggle_button); + this.toggle_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(self.collapsed) { + self.collapsed = false; + self.panel.style.display = ''; + self.setButtonText(this,'','collapse',self.translate('button_collapse')); + } + else { + self.collapsed = true; + self.panel.style.display = 'none'; + self.setButtonText(this,'','expand',self.translate('button_expand')); + } + }); + + // If it should start collapsed + if(this.options.collapsed) { + $trigger(this.toggle_button,'click'); + } + + // Collapse button disabled + if(this.schema.options && typeof this.schema.options.disable_collapse !== "undefined") { + if(this.schema.options.disable_collapse) this.toggle_button.style.display = 'none'; + } + else if(this.jsoneditor.options.disable_collapse) { + this.toggle_button.style.display = 'none'; + } + } + + // Add "new row" and "delete last" buttons below editor + this.add_row_button = this.getButton(this.getItemTitle(),'add',this.translate('button_add_row_title',[this.getItemTitle()])); + this.add_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.addRow(); + self.refreshValue(); + self.refreshRowButtons(); + self.onChange(true); + }); + self.controls.appendChild(this.add_row_button); + + this.delete_last_row_button = this.getButton(this.translate('button_delete_last',[this.getItemTitle()]),'delete',this.translate('button_delete_last_title',[this.getItemTitle()])); + this.delete_last_row_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + var rows = self.getValue(); + rows.pop(); + self.setValue(rows); + self.onChange(true); + }); + self.controls.appendChild(this.delete_last_row_button); + + this.remove_all_rows_button = this.getButton(this.translate('button_delete_all'),'delete',this.translate('button_delete_all_title')); + this.remove_all_rows_button.addEventListener('click',function(e) { + e.preventDefault(); + e.stopPropagation(); + + self.setValue([]); + self.onChange(true); + }); + self.controls.appendChild(this.remove_all_rows_button); + } +}); diff --git a/libs/json-editor/src/editors/upload.js b/libs/json-editor/src/editors/upload.js new file mode 100644 index 0000000..88de8a9 --- /dev/null +++ b/libs/json-editor/src/editors/upload.js @@ -0,0 +1,134 @@ +JSONEditor.defaults.editors.upload = JSONEditor.AbstractEditor.extend({ + getNumColumns: function() { + return 4; + }, + build: function() { + var self = this; + this.title = this.header = this.label = this.theme.getFormInputLabel(this.getTitle()); + + // Input that holds the base64 string + this.input = this.theme.getFormInputField('hidden'); + this.container.appendChild(this.input); + + // Don't show uploader if this is readonly + if(!this.schema.readOnly && !this.schema.readonly) { + + if(!this.jsoneditor.options.upload) throw "Upload handler required for upload editor"; + + // File uploader + this.uploader = this.theme.getFormInputField('file'); + + this.uploader.addEventListener('change',function(e) { + e.preventDefault(); + e.stopPropagation(); + + if(this.files && this.files.length) { + var fr = new FileReader(); + fr.onload = function(evt) { + self.preview_value = evt.target.result; + self.refreshPreview(); + self.onChange(true); + fr = null; + }; + fr.readAsDataURL(this.files[0]); + } + }); + } + + var description = this.schema.description; + if (!description) description = ''; + + this.preview = this.theme.getFormInputDescription(description); + this.container.appendChild(this.preview); + + this.control = this.theme.getFormControl(this.label, this.uploader||this.input, this.preview); + this.container.appendChild(this.control); + }, + refreshPreview: function() { + if(this.last_preview === this.preview_value) return; + this.last_preview = this.preview_value; + + this.preview.innerHTML = ''; + + if(!this.preview_value) return; + + var self = this; + + var mime = this.preview_value.match(/^data:([^;,]+)[;,]/); + if(mime) mime = mime[1]; + if(!mime) mime = 'unknown'; + + var file = this.uploader.files[0]; + + this.preview.innerHTML = 'Type: '+mime+', Size: '+file.size+' bytes'; + if(mime.substr(0,5)==="image") { + this.preview.innerHTML += '
    '; + var img = document.createElement('img'); + img.style.maxWidth = '100%'; + img.style.maxHeight = '100px'; + img.src = this.preview_value; + this.preview.appendChild(img); + } + + this.preview.innerHTML += '
    '; + var uploadButton = this.getButton('Upload', 'upload', 'Upload'); + this.preview.appendChild(uploadButton); + uploadButton.addEventListener('click',function(event) { + event.preventDefault(); + + uploadButton.setAttribute("disabled", "disabled"); + self.theme.removeInputError(self.uploader); + + if (self.theme.getProgressBar) { + self.progressBar = self.theme.getProgressBar(); + self.preview.appendChild(self.progressBar); + } + + self.jsoneditor.options.upload(self.path, file, { + success: function(url) { + self.setValue(url); + + if(self.parent) self.parent.onChildEditorChange(self); + else self.jsoneditor.onChange(); + + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + failure: function(error) { + self.theme.addInputError(self.uploader, error); + if (self.progressBar) self.preview.removeChild(self.progressBar); + uploadButton.removeAttribute("disabled"); + }, + updateProgress: function(progress) { + if (self.progressBar) { + if (progress) self.theme.updateProgressBar(self.progressBar, progress); + else self.theme.updateProgressBarUnknown(self.progressBar); + } + } + }); + }); + }, + enable: function() { + if(this.uploader) this.uploader.disabled = false; + this._super(); + }, + disable: function() { + if(this.uploader) this.uploader.disabled = true; + this._super(); + }, + setValue: function(val) { + if(this.value !== val) { + this.value = val; + this.input.value = this.value; + this.onChange(); + } + }, + destroy: function() { + if(this.preview && this.preview.parentNode) this.preview.parentNode.removeChild(this.preview); + if(this.title && this.title.parentNode) this.title.parentNode.removeChild(this.title); + if(this.input && this.input.parentNode) this.input.parentNode.removeChild(this.input); + if(this.uploader && this.uploader.parentNode) this.uploader.parentNode.removeChild(this.uploader); + + this._super(); + } +}); diff --git a/libs/json-editor/src/iconlib.js b/libs/json-editor/src/iconlib.js new file mode 100644 index 0000000..05ab209 --- /dev/null +++ b/libs/json-editor/src/iconlib.js @@ -0,0 +1,27 @@ +JSONEditor.AbstractIconLib = Class.extend({ + mapping: { + collapse: '', + expand: '', + "delete": '', + edit: '', + add: '', + cancel: '', + save: '', + moveup: '', + movedown: '' + }, + icon_prefix: '', + getIconClass: function(key) { + if(this.mapping[key]) return this.icon_prefix+this.mapping[key]; + else return null; + }, + getIcon: function(key) { + var iconclass = this.getIconClass(key); + + if(!iconclass) return null; + + var i = document.createElement('i'); + i.className = iconclass; + return i; + } +}); diff --git a/libs/json-editor/src/iconlibs/bootstrap2.js b/libs/json-editor/src/iconlibs/bootstrap2.js new file mode 100644 index 0000000..7e7c382 --- /dev/null +++ b/libs/json-editor/src/iconlibs/bootstrap2.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.bootstrap2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-up', + "delete": 'trash', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'ok', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); diff --git a/libs/json-editor/src/iconlibs/bootstrap3.js b/libs/json-editor/src/iconlibs/bootstrap3.js new file mode 100644 index 0000000..c70c244 --- /dev/null +++ b/libs/json-editor/src/iconlibs/bootstrap3.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.bootstrap3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'floppy-remove', + save: 'floppy-saved', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'glyphicon glyphicon-' +}); diff --git a/libs/json-editor/src/iconlibs/fontawesome3.js b/libs/json-editor/src/iconlibs/fontawesome3.js new file mode 100644 index 0000000..6143e89 --- /dev/null +++ b/libs/json-editor/src/iconlibs/fontawesome3.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.fontawesome3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'chevron-down', + expand: 'chevron-right', + "delete": 'remove', + edit: 'pencil', + add: 'plus', + cancel: 'ban-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'icon-' +}); diff --git a/libs/json-editor/src/iconlibs/fontawesome4.js b/libs/json-editor/src/iconlibs/fontawesome4.js new file mode 100644 index 0000000..9c6d8c4 --- /dev/null +++ b/libs/json-editor/src/iconlibs/fontawesome4.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.fontawesome4 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'caret-square-o-down', + expand: 'caret-square-o-right', + "delete": 'times', + edit: 'pencil', + add: 'plus', + cancel: 'ban', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fa fa-' +}); diff --git a/libs/json-editor/src/iconlibs/foundation2.js b/libs/json-editor/src/iconlibs/foundation2.js new file mode 100644 index 0000000..b7fc69d --- /dev/null +++ b/libs/json-editor/src/iconlibs/foundation2.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.foundation2 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'remove', + edit: 'edit', + add: 'add-doc', + cancel: 'error', + save: 'checkmark', + moveup: 'up-arrow', + movedown: 'down-arrow' + }, + icon_prefix: 'foundicon-' +}); diff --git a/libs/json-editor/src/iconlibs/foundation3.js b/libs/json-editor/src/iconlibs/foundation3.js new file mode 100644 index 0000000..58d9de9 --- /dev/null +++ b/libs/json-editor/src/iconlibs/foundation3.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.foundation3 = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'minus', + expand: 'plus', + "delete": 'x', + edit: 'pencil', + add: 'page-add', + cancel: 'x-circle', + save: 'save', + moveup: 'arrow-up', + movedown: 'arrow-down' + }, + icon_prefix: 'fi-' +}); diff --git a/libs/json-editor/src/iconlibs/jqueryui.js b/libs/json-editor/src/iconlibs/jqueryui.js new file mode 100644 index 0000000..7e5e09f --- /dev/null +++ b/libs/json-editor/src/iconlibs/jqueryui.js @@ -0,0 +1,14 @@ +JSONEditor.defaults.iconlibs.jqueryui = JSONEditor.AbstractIconLib.extend({ + mapping: { + collapse: 'triangle-1-s', + expand: 'triangle-1-e', + "delete": 'trash', + edit: 'pencil', + add: 'plusthick', + cancel: 'closethick', + save: 'disk', + moveup: 'arrowthick-1-n', + movedown: 'arrowthick-1-s' + }, + icon_prefix: 'ui-icon ui-icon-' +}); diff --git a/libs/json-editor/src/ie9.js b/libs/json-editor/src/ie9.js new file mode 100644 index 0000000..6d7e701 --- /dev/null +++ b/libs/json-editor/src/ie9.js @@ -0,0 +1,51 @@ +// CustomEvent constructor polyfill +// From MDN +(function () { + function CustomEvent ( event, params ) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent( 'CustomEvent' ); + evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); + return evt; + } + + CustomEvent.prototype = window.Event.prototype; + + window.CustomEvent = CustomEvent; +})(); + +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel +// MIT license +(function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || + window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; +}()); + +// Array.isArray polyfill +// From MDN +(function() { + if(!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; + } +}()); \ No newline at end of file diff --git a/libs/json-editor/src/intro.js b/libs/json-editor/src/intro.js new file mode 100644 index 0000000..3ae77b5 --- /dev/null +++ b/libs/json-editor/src/intro.js @@ -0,0 +1,12 @@ +/*! JSON Editor v0.7.28 - JSON Schema -> HTML Editor + * By Jeremy Dorn - https://github.com/jdorn/json-editor/ + * Released under the MIT license + * + * Date: 2016-08-07 + */ + +/** + * See README.md for requirements and usage info + */ + +(function() { diff --git a/libs/json-editor/src/jquery.js b/libs/json-editor/src/jquery.js new file mode 100644 index 0000000..1ca541d --- /dev/null +++ b/libs/json-editor/src/jquery.js @@ -0,0 +1,64 @@ +/** + * This is a small wrapper for using JSON Editor like a typical jQuery plugin. + */ +(function() { + if(window.jQuery || window.Zepto) { + var $ = window.jQuery || window.Zepto; + $.jsoneditor = JSONEditor.defaults; + + $.fn.jsoneditor = function(options) { + var self = this; + var editor = this.data('jsoneditor'); + if(options === 'value') { + if(!editor) throw "Must initialize jsoneditor before getting/setting the value"; + + // Set value + if(arguments.length > 1) { + editor.setValue(arguments[1]); + } + // Get value + else { + return editor.getValue(); + } + } + else if(options === 'validate') { + if(!editor) throw "Must initialize jsoneditor before validating"; + + // Validate a specific value + if(arguments.length > 1) { + return editor.validate(arguments[1]); + } + // Validate current value + else { + return editor.validate(); + } + } + else if(options === 'destroy') { + if(editor) { + editor.destroy(); + this.data('jsoneditor',null); + } + } + else { + // Destroy first + if(editor) { + editor.destroy(); + } + + // Create editor + editor = new JSONEditor(this.get(0),options); + this.data('jsoneditor',editor); + + // Setup event listeners + editor.on('change',function() { + self.trigger('change'); + }); + editor.on('ready',function() { + self.trigger('ready'); + }); + } + + return this; + }; + } +})(); diff --git a/libs/json-editor/src/outro.js b/libs/json-editor/src/outro.js new file mode 100644 index 0000000..3c2a58a --- /dev/null +++ b/libs/json-editor/src/outro.js @@ -0,0 +1,2 @@ + window.JSONEditor = JSONEditor; +})(); diff --git a/libs/json-editor/src/templates/default.js b/libs/json-editor/src/templates/default.js new file mode 100644 index 0000000..1381074 --- /dev/null +++ b/libs/json-editor/src/templates/default.js @@ -0,0 +1,57 @@ +JSONEditor.defaults.templates["default"] = function() { + return { + compile: function(template) { + var matches = template.match(/{{\s*([a-zA-Z0-9\-_ \.]+)\s*}}/g); + var l = matches && matches.length; + + // Shortcut if the template contains no variables + if(!l) return function() { return template; }; + + // Pre-compute the search/replace functions + // This drastically speeds up template execution + var replacements = []; + var get_replacement = function(i) { + var p = matches[i].replace(/[{}]+/g,'').trim().split('.'); + var n = p.length; + var func; + + if(n > 1) { + var cur; + func = function(vars) { + cur = vars; + for(i=0; i'); + input.errmsg = input.parentNode.getElementsByClassName('error')[0]; + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.group.className = input.group.className.replace(/ error/g,''); + input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var progressBar = document.createElement('div'); + progressBar.className = 'progress'; + + var meter = document.createElement('span'); + meter.className = 'meter'; + meter.style.width = '0%'; + progressBar.appendChild(meter); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.firstChild.style.width = progress + '%'; + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.firstChild.style.width = '100%'; + } +}); + +// Foundation 3 Specific Theme +JSONEditor.defaults.themes.foundation3 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.className = 'row'; + el.innerHTML = "
    "; + return el; + }, + setGridColumnSize: function(el,size) { + var sizes = ['zero','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve']; + el.className = 'columns '+sizes[size]; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +// Foundation 4 Specific Theme +JSONEditor.defaults.themes.foundation4 = JSONEditor.defaults.themes.foundation.extend({ + getHeaderButtonHolder: function() { + var el = this._super(); + el.style.fontSize = '.6em'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns large-'+size; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.fontWeight = 'bold'; + return el; + } +}); + +// Foundation 5 Specific Theme +JSONEditor.defaults.themes.foundation5 = JSONEditor.defaults.themes.foundation.extend({ + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8rem'; + return el; + }, + setGridColumnSize: function(el,size) { + el.className = 'columns medium-'+size; + }, + getButton: function(text, icon, title) { + var el = this._super(text,icon,title); + el.className = el.className.replace(/\s*small/g,'') + ' tiny'; + return el; + }, + getTabHolder: function() { + var el = document.createElement('div'); + el.innerHTML = "
    "; + return el; + }, + getTab: function(text) { + var el = document.createElement('dd'); + var a = document.createElement('a'); + a.setAttribute('href','#'); + a.appendChild(text); + el.appendChild(a); + return el; + }, + getTabContentHolder: function(tab_holder) { + return tab_holder.children[1]; + }, + getTabContent: function() { + var el = document.createElement('div'); + el.className = 'content active'; + el.style.paddingLeft = '5px'; + return el; + }, + markTabActive: function(tab) { + tab.className += ' active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*active/g,''); + }, + addTab: function(holder, tab) { + holder.children[0].appendChild(tab); + } +}); + +JSONEditor.defaults.themes.foundation6 = JSONEditor.defaults.themes.foundation5.extend({ + getIndentedPanel: function() { + var el = document.createElement('div'); + el.className = 'callout secondary'; + return el; + }, + getButtonHolder: function() { + var el = document.createElement('div'); + el.className = 'button-group tiny'; + el.style.marginBottom = 0; + return el; + }, + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.display = 'block'; + return el; + }, + getFormControl: function(label, input, description) { + var el = document.createElement('div'); + el.className = 'form-control'; + if(label) el.appendChild(label); + if(input.type === 'checkbox') { + label.insertBefore(input,label.firstChild); + } + else if (label) { + label.appendChild(input); + } else { + el.appendChild(input); + } + + if(description) label.appendChild(description); + return el; + }, + addInputError: function(input,text) { + if(!input.group) return; + input.group.className += ' error'; + + if(!input.errmsg) { + var errorEl = document.createElement('span'); + errorEl.className = 'form-error is-visible'; + input.group.getElementsByTagName('label')[0].appendChild(errorEl); + + input.className = input.className + ' is-invalid-input'; + + input.errmsg = errorEl; + } + else { + input.errmsg.style.display = ''; + input.className = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.className = input.className.replace(/ is-invalid-input/g,''); + if(input.errmsg.parentNode) { + input.errmsg.parentNode.removeChild(input.errmsg); + } + }, +}); diff --git a/libs/json-editor/src/themes/html.js b/libs/json-editor/src/themes/html.js new file mode 100644 index 0000000..b122b0d --- /dev/null +++ b/libs/json-editor/src/themes/html.js @@ -0,0 +1,82 @@ +JSONEditor.defaults.themes.html = JSONEditor.AbstractTheme.extend({ + getFormInputLabel: function(text) { + var el = this._super(text); + el.style.display = 'block'; + el.style.marginBottom = '3px'; + el.style.fontWeight = 'bold'; + return el; + }, + getFormInputDescription: function(text) { + var el = this._super(text); + el.style.fontSize = '.8em'; + el.style.margin = 0; + el.style.display = 'inline-block'; + el.style.fontStyle = 'italic'; + return el; + }, + getIndentedPanel: function() { + var el = this._super(); + el.style.border = '1px solid #ddd'; + el.style.padding = '5px'; + el.style.margin = '5px'; + el.style.borderRadius = '3px'; + return el; + }, + getChildEditorHolder: function() { + var el = this._super(); + el.style.marginBottom = '8px'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.display = 'inline-block'; + el.style.marginLeft = '10px'; + el.style.fontSize = '.8em'; + el.style.verticalAlign = 'middle'; + return el; + }, + getTable: function() { + var el = this._super(); + el.style.borderBottom = '1px solid #ccc'; + el.style.marginBottom = '5px'; + return el; + }, + addInputError: function(input, text) { + input.style.borderColor = 'red'; + + if(!input.errmsg) { + var group = this.closest(input,'.form-control'); + input.errmsg = document.createElement('div'); + input.errmsg.setAttribute('class','errmsg'); + input.errmsg.style = input.errmsg.style || {}; + input.errmsg.style.color = 'red'; + group.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = 'block'; + } + + input.errmsg.innerHTML = ''; + input.errmsg.appendChild(document.createTextNode(text)); + }, + removeInputError: function(input) { + input.style.borderColor = ''; + if(input.errmsg) input.errmsg.style.display = 'none'; + }, + getProgressBar: function() { + var max = 100, start = 0; + + var progressBar = document.createElement('progress'); + progressBar.setAttribute('max', max); + progressBar.setAttribute('value', start); + return progressBar; + }, + updateProgressBar: function(progressBar, progress) { + if (!progressBar) return; + progressBar.setAttribute('value', progress); + }, + updateProgressBarUnknown: function(progressBar) { + if (!progressBar) return; + progressBar.removeAttribute('value'); + } +}); diff --git a/libs/json-editor/src/themes/jqueryui.js b/libs/json-editor/src/themes/jqueryui.js new file mode 100644 index 0000000..5c050ec --- /dev/null +++ b/libs/json-editor/src/themes/jqueryui.js @@ -0,0 +1,156 @@ +JSONEditor.defaults.themes.jqueryui = JSONEditor.AbstractTheme.extend({ + getTable: function() { + var el = this._super(); + el.setAttribute('cellpadding',5); + el.setAttribute('cellspacing',0); + return el; + }, + getTableHeaderCell: function(text) { + var el = this._super(text); + el.className = 'ui-state-active'; + el.style.fontWeight = 'bold'; + return el; + }, + getTableCell: function() { + var el = this._super(); + el.className = 'ui-widget-content'; + return el; + }, + getHeaderButtonHolder: function() { + var el = this.getButtonHolder(); + el.style.marginLeft = '10px'; + el.style.fontSize = '.6em'; + el.style.display = 'inline-block'; + return el; + }, + getFormInputDescription: function(text) { + var el = this.getDescription(text); + el.style.marginLeft = '10px'; + el.style.display = 'inline-block'; + return el; + }, + getFormControl: function(label, input, description) { + var el = this._super(label,input,description); + if(input.type === 'checkbox') { + el.style.lineHeight = '25px'; + + el.style.padding = '3px 0'; + } + else { + el.style.padding = '4px 0 8px 0'; + } + return el; + }, + getDescription: function(text) { + var el = document.createElement('span'); + el.style.fontSize = '.8em'; + el.style.fontStyle = 'italic'; + el.textContent = text; + return el; + }, + getButtonHolder: function() { + var el = document.createElement('div'); + el.className = 'ui-buttonset'; + el.style.fontSize = '.7em'; + return el; + }, + getFormInputLabel: function(text) { + var el = document.createElement('label'); + el.style.fontWeight = 'bold'; + el.style.display = 'block'; + el.textContent = text; + return el; + }, + getButton: function(text, icon, title) { + var button = document.createElement("button"); + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + + return button; + }, + setButtonText: function(button,text, icon, title) { + button.innerHTML = ''; + button.className = 'ui-button ui-widget ui-state-default ui-corner-all'; + + // Icon only + if(icon && !text) { + button.className += ' ui-button-icon-only'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Icon and Text + else if(icon) { + button.className += ' ui-button-text-icon-primary'; + icon.className += ' ui-button-icon-primary ui-icon-primary'; + button.appendChild(icon); + } + // Text only + else { + button.className += ' ui-button-text-only'; + } + + var el = document.createElement('span'); + el.className = 'ui-button-text'; + el.textContent = text||title||"."; + button.appendChild(el); + + button.setAttribute('title',title); + }, + getIndentedPanel: function() { + var el = document.createElement('div'); + el.className = 'ui-widget-content ui-corner-all'; + el.style.padding = '1em 1.4em'; + el.style.marginBottom = '20px'; + return el; + }, + afterInputReady: function(input) { + if(input.controls) return; + input.controls = this.closest(input,'.form-control'); + }, + addInputError: function(input,text) { + if(!input.controls) return; + if(!input.errmsg) { + input.errmsg = document.createElement('div'); + input.errmsg.className = 'ui-state-error'; + input.controls.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = ''; + } + + input.errmsg.textContent = text; + }, + removeInputError: function(input) { + if(!input.errmsg) return; + input.errmsg.style.display = 'none'; + }, + markTabActive: function(tab) { + tab.className = tab.className.replace(/\s*ui-widget-header/g,'')+' ui-state-active'; + }, + markTabInactive: function(tab) { + tab.className = tab.className.replace(/\s*ui-state-active/g,'')+' ui-widget-header'; + } +}); diff --git a/libs/json-editor/src/themes/jsoneditor.barebones-theme.js b/libs/json-editor/src/themes/jsoneditor.barebones-theme.js new file mode 100644 index 0000000..cf702a6 --- /dev/null +++ b/libs/json-editor/src/themes/jsoneditor.barebones-theme.js @@ -0,0 +1,60 @@ +JSONEditor.defaults.themes.barebones = JSONEditor.AbstractTheme.extend({ + getFormInputLabel: function (text) { + var el = this._super(text); + return el; + }, + getFormInputDescription: function (text) { + var el = this._super(text); + return el; + }, + getIndentedPanel: function () { + var el = this._super(); + return el; + }, + getChildEditorHolder: function () { + var el = this._super(); + return el; + }, + getHeaderButtonHolder: function () { + var el = this.getButtonHolder(); + return el; + }, + getTable: function () { + var el = this._super(); + return el; + }, + addInputError: function (input, text) { + if (!input.errmsg) { + var group = this.closest(input, '.form-control'); + input.errmsg = document.createElement('div'); + input.errmsg.setAttribute('class', 'errmsg'); + group.appendChild(input.errmsg); + } + else { + input.errmsg.style.display = 'block'; + } + + input.errmsg.innerHTML = ''; + input.errmsg.appendChild(document.createTextNode(text)); + }, + removeInputError: function (input) { + input.style.borderColor = ''; + if (input.errmsg) input.errmsg.style.display = 'none'; + }, + getProgressBar: function () { + var max = 100, start = 0; + + var progressBar = document.createElement('progress'); + progressBar.setAttribute('max', max); + progressBar.setAttribute('value', start); + return progressBar; + }, + updateProgressBar: function (progressBar, progress) { + if (!progressBar) return; + progressBar.setAttribute('value', progress); + }, + updateProgressBarUnknown: function (progressBar) { + if (!progressBar) return; + progressBar.removeAttribute('value'); + } +}); diff --git a/libs/json-editor/src/utilities.js b/libs/json-editor/src/utilities.js new file mode 100644 index 0000000..03d0119 --- /dev/null +++ b/libs/json-editor/src/utilities.js @@ -0,0 +1,79 @@ +/** + * Taken from jQuery 2.1.3 + * + * @param obj + * @returns {boolean} + */ +var $isplainobject = function( obj ) { + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if (typeof obj !== "object" || obj.nodeType || (obj !== null && obj === obj.window)) { + return false; + } + + if (obj.constructor && !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; +}; + +var $extend = function(destination) { + var source, i,property; + for(i=1; i 0 && (obj.length - 1) in obj)) { + for(i=0; i schema.minimum) : (value >= schema.minimum); + + // Use math.js is available + if(window.math) { + valid = window.math[schema.exclusiveMinimum?'larger':'largerEq']( + window.math.bignumber(value), + window.math.bignumber(schema.minimum) + ); + } + // Use Decimal.js if available + else if(window.Decimal) { + valid = (new window.Decimal(value))[schema.exclusiveMinimum?'gt':'gte'](new window.Decimal(schema.minimum)); + } + + if(!valid) { + errors.push({ + path: path, + property: 'minimum', + message: this.translate( + (schema.exclusiveMinimum?'error_minimum_excl':'error_minimum_incl'), + [schema.minimum] + ) + }); + } + } + } + // String specific validation + else if(typeof value === "string") { + // `maxLength` + if(schema.maxLength) { + if((value+"").length > schema.maxLength) { + errors.push({ + path: path, + property: 'maxLength', + message: this.translate('error_maxLength', [schema.maxLength]) + }); + } + } + + // `minLength` + if(schema.minLength) { + if((value+"").length < schema.minLength) { + errors.push({ + path: path, + property: 'minLength', + message: this.translate((schema.minLength===1?'error_notempty':'error_minLength'), [schema.minLength]) + }); + } + } + + // `pattern` + if(schema.pattern) { + if(!(new RegExp(schema.pattern)).test(value)) { + errors.push({ + path: path, + property: 'pattern', + message: this.translate('error_pattern', [schema.pattern]) + }); + } + } + } + // Array specific validation + else if(typeof value === "object" && value !== null && Array.isArray(value)) { + // `items` and `additionalItems` + if(schema.items) { + // `items` is an array + if(Array.isArray(schema.items)) { + for(i=0; i schema.maxItems) { + errors.push({ + path: path, + property: 'maxItems', + message: this.translate('error_maxItems', [schema.maxItems]) + }); + } + } + + // `minItems` + if(schema.minItems) { + if(value.length < schema.minItems) { + errors.push({ + path: path, + property: 'minItems', + message: this.translate('error_minItems', [schema.minItems]) + }); + } + } + + // `uniqueItems` + if(schema.uniqueItems) { + var seen = {}; + for(i=0; i schema.maxProperties) { + errors.push({ + path: path, + property: 'maxProperties', + message: this.translate('error_maxProperties', [schema.maxProperties]) + }); + } + } + + // `minProperties` + if(schema.minProperties) { + valid = 0; + for(i in value) { + if(!value.hasOwnProperty(i)) continue; + valid++; + } + if(valid < schema.minProperties) { + errors.push({ + path: path, + property: 'minProperties', + message: this.translate('error_minProperties', [schema.minProperties]) + }); + } + } + + // Version 4 `required` + if(schema.required && Array.isArray(schema.required)) { + for(i=0; i + + + + JSON Editor Validation Example + + + + + +
    + + + diff --git a/python_solutions/MostFrequentInt.py b/python_solutions/MostFrequentInt.py deleted file mode 100644 index f722724..0000000 --- a/python_solutions/MostFrequentInt.py +++ /dev/null @@ -1,24 +0,0 @@ -#caltonji 10/31/2015 -lista = [0, 1, 3, 2, 23, 43, 2, 1, 5, 2, 5, 2, 56, 23, 0, -1, 2, 2] -listb = [4, 0, 1, 0, 4, 4, 4, 4, 0, 1, 1, 1,-6, 7] -def mostFrequent(nums): - freq = {} - for i in nums: - if i in freq: - freq[i] += 1 - else: - freq[i] = 0 - maxKey = None - maxVal = 0 - for key, value in freq.iteritems(): - if value > maxVal: - maxVal = value - maxKey = key - return maxKey - -if __name__ == "__main__": - print "Most Frequent for a: " + str(mostFrequent(lista)) - print "Most Frequent for b: " + str(mostFrequent(listb)) - - -# http://stackoverflow.com/questions/1602934/check-if-a-given-key-already-exists-in-a-dictionary` diff --git a/python_solutions/PairsEqualToTen.py b/python_solutions/PairsEqualToTen.py deleted file mode 100644 index 07dfa8e..0000000 --- a/python_solutions/PairsEqualToTen.py +++ /dev/null @@ -1,24 +0,0 @@ -#caltonji 10/31/2015 -def pairsEqualToK(nums, k): - tupleList = [] - for i in nums: - if (k - i) in nums: - tupleList.append((k-i, i)) - return tupleList -def moreEfficient(nums, k): - tupleList = [] - hashMap = {} - for i, num in enumerate(nums): - if not num in hashMap: - hashMap[num] = i - for i, num in enumerate(nums): - if (k - num) in hashMap: - if ( not hashMap[k-num] == -1 and not hashMap[k-num] == i ): - hashMap[num] = -1 - tupleList.append((k-i, i)) - return tupleList -testa = [2,3,2,-1, 11, 7] -testb = [2, 5, 3,2,-1, 5, 11, 7] -if __name__ == "__main__": - print moreEfficient(testb, 10) - diff --git a/python_solutions/Q1_MostFrequentInt.py b/python_solutions/Q1_MostFrequentInt.py new file mode 100644 index 0000000..75542e2 --- /dev/null +++ b/python_solutions/Q1_MostFrequentInt.py @@ -0,0 +1,81 @@ +#caltonji 10/31/2015 +# +import random + +lista = [0, 1, 3, 2, 23, 43, 2, 1, 5, 2, 5, 2, 56, 23, 0, -1, 2, 2] +listb = [4, 0, 1, 0, 4, 4, 4, 4, 0, 1, 1, 1,-6, 7] +listc = [3, 5, 10, 3, 5, 1, 5, 3, 2, 3, 8, 4, 5, 1, 2, 7, 4, 6, 5, 8, 1, 1, 7, 10, 4, 5, 10, 5, 9, 1, 2, 10, 3, 9, 5, 10, 6, 10, 10, 8, 7, 2, 10, 7, 8, 10, 10, 7, 5, 10] +def mostFrequent(nums): + freq = {} + for i in nums: + if i in freq: + freq[i] += 1 + else: + freq[i] = 0 + maxKey = None + maxVal = 0 + for key, value in freq.iteritems(): + if value > maxVal: + maxVal = value + maxKey = key + return maxKey + +def mostFrequentV02(nums): + """ + Maybe more pythonic, just an alternative. Indeed it runs on a single loop, + But with the sort addition. It might compete on different vector sizes. + As the above, it doesn't handle multiple max values: it gets the first it finds. + """ + + nums.sort() + + maxFreq = 1 + mostFreq = nums[0] + prevFreq = 1 + cFreq = 1 + pInt = nums[0] + nums = nums[1:] + for i in nums: + if i == pInt: + cFreq+=1 + else: + if cFreq > maxFreq: + maxFreq = cFreq + mostFreq = pInt + prevFreq=cFreq + pInt = i + cFreq = 0 + + if cFreq > maxFreq: + maxFreq = cFreq #not required, just consistency for the future: if to return the freq + mostFreq = pInt + + return mostFreq + +if __name__ == "__main__": + + dostress = False + print "A list:", lista + print "B list:", listb + print "C list:", listc + print "Most Frequent for a V0: " + str(mostFrequent(lista)) + print "Most Frequent for b V0: " + str(mostFrequent(listb)) + print "Most Frequent for c V0: " + str(mostFrequent(listc)) + print "Most Frequent for a V1: " + str(mostFrequentV02(lista)) + print "Most Frequent for b V1: " + str(mostFrequentV02(listb)) + print "Most Frequent for c V1: " + str(mostFrequentV02(listc)) + + print "C list Sorted:", listc + + listr = [] + if (dostress): + listr = my_randoms=[random.randrange(1,11,1) for _ in range (50000000)] #takes few minutes + else: + listr = my_randoms=[random.randrange(1,11,1) for _ in range (500)] + print "R list:", listr + + print "Most Frequent for r V0: " + str(mostFrequent(listr)) + print "Most Frequent for r V1: " + str(mostFrequentV02(listr)) + + +# http://stackoverflow.com/questions/1602934/check-if-a-given-key-already-exists-in-a-dictionary` diff --git a/python_solutions/Q2_PairsEqualToTen.py b/python_solutions/Q2_PairsEqualToTen.py new file mode 100644 index 0000000..e1f31c2 --- /dev/null +++ b/python_solutions/Q2_PairsEqualToTen.py @@ -0,0 +1,57 @@ +#caltonji 10/31/2015 + +import timeit +import time +import random + +def pairsEqualToK(nums, k): + tupleList = [] + for i in nums: + if (k - i) in nums: + tupleList.append((k-i, i)) + return tupleList + +def moreEfficient(nums, k): + tupleList = [] + hashMap = {} + for i, num in enumerate(nums): + if not num in hashMap: + hashMap[num] = i + for i, num in enumerate(nums): + if (k - num) in hashMap: + if ( not hashMap[k-num] == -1 and not hashMap[k-num] == i ): + hashMap[num] = -1 + tupleList.append((k-i, i)) + return tupleList + +testa = [2,3,2,-1, 11, 7] +testb = [2, 5, 3,2,-1, 5, 11, 7] +testc = [3, 5, 10, 3, 5, 1, 5, 3, 2, 3, 8, 4, 5, 1, 2, 7, 4, 6, 5, 8, 1, 1, 7, 10, 4, 5, 10, 5, 9, 1, 2, 10, 3, 9, 5, 10, 6, 10, 10, 8, 7, 2, 10, 7, 8, 10, 10, 7, 5, 10] + +if __name__ == "__main__": + + testr = my_randoms=[random.randrange(1,11,1) for _ in range (20)] + dataset = [testa, testb, testc, testr] + algset = [pairsEqualToK, moreEfficient] + + t0 = time.time() + di = 0 + for data in dataset: + di += 1 + dataname = "D"+str(di) + print dataname, data + ai = 0 + for alg in algset: + ai += 1 + algname = "A"+str(ai) + print "timeit", timeit.timeit('alg(data, 10)','from __main__ import alg, data', number=10) + ts = time.time() + print "-- Res:", dataname, algname, alg(data, 10) + alg(data, 10) + te = time.time() + print "--", "Time:", dataname, algname, te-ts + + + + + diff --git a/python_solutions/IsRotatedArray.py b/python_solutions/Q3_IsRotatedArray.py similarity index 100% rename from python_solutions/IsRotatedArray.py rename to python_solutions/Q3_IsRotatedArray.py diff --git a/python_solutions/Q3_isRotated.py b/python_solutions/Q3_isRotated.py new file mode 100644 index 0000000..01d9eb9 --- /dev/null +++ b/python_solutions/Q3_isRotated.py @@ -0,0 +1,45 @@ +# Fabio Mariotti - Copyright: Most recent GPL +# +listA = [3, 4, 5, 6, 7, 8, 9, 0, 1, 2] +listB = [7, 8, 9, 0, 1, 2, 3, 4, 5, 6] +# +A = [1,2,3,5,6,7,8] +B = [5,6,7,8,1,2,3] + +C = [1,2,3] +D = [6,7,5,8,1,2,3] +# +def isRotated(la,lb): + # This function will not work if duplicates are alowed + # But can be used in principle also in this case + # if you test each found index from lb[0] + spos = la.index(lb[0]) + + demo = False + if (demo): + if (len(la) != len(lb)): + return False + print spos + print la[spos:] + print lb[0:len(la)-spos] + print la[:spos] + print lb[len(la)-spos:] + + if (la[spos:] == lb[0:len(la)-spos]): + print "First part true" + if (la[:spos] == lb[len(la)-spos:]): + print "Second part true" + + if (la[spos:] == lb[0:len(la)-spos] and la[:spos] == lb[len(la)-spos:]): + return True + else: + return False + +if __name__ == "__main__": + print "A list:", listA + print "B list:", listB + + print isRotated(listA, listB) + print isRotated(A, B) + print isRotated(B, C) + print isRotated(B, D) diff --git a/python_solutions/Q5_SingleFrequentInt.py b/python_solutions/Q5_SingleFrequentInt.py new file mode 100644 index 0000000..30c1878 --- /dev/null +++ b/python_solutions/Q5_SingleFrequentInt.py @@ -0,0 +1,80 @@ +#caltonji 10/31/2015 +# +import random + +lista = [0, 1, 3, 2, 23, 43, 2, 1, 5, 2, 5, 2, 56, 23, 0, -1, 2, 2] +listb = [4, 0, 1, 0, 4, 4, 4, 4, 0, 1, 1, 1,-6, 7] +listc = [3, 5, 10, 3, 5, 1, 5, 3, 2, 3, 8, 4, 5, 1, 2, 7, 4, 6, 5, 8, 1, 1, 7, 10, 4, 5, 10, 5, 9, 1, 2, 10, 3, 9, 5, 10, 6, 10, 10, 8, 7, 2, 10, 7, 8, 10, 10, 7, 5, 10] + +def singleFrequent(nums): + freq = {} + for i in nums: + if i in freq: + freq[i] += 1 + else: + freq[i] = 0 + minKey = None + minVal = len(nums) + for key, value in freq.iteritems(): + if value < minVal: + minVal = value + minKey = key + return minKey, minVal+1 + +def singleFrequentV02(nums): + """ + Maybe more pythonic, just an alternative. Indeed it runs on a single loop, + But with the sort addition. It might compete on different vector sizes. + As the above, it doesn't handle multiple single values: it gets the first it finds. + """ + + nums.sort() + + minFreq = len(nums) + mostFreq = nums[0] + prevFreq = minFreq + cFreq = minFreq + pInt = nums[0] + nums = nums[1:] + for i in nums: + if i == pInt: + cFreq+=1 + else: + if cFreq < minFreq: + minFreq = cFreq + mostFreq = pInt + prevFreq=cFreq + pInt = i + cFreq = 0 + + if cFreq < minFreq: + minFreq = cFreq #not required, just consistency for the future: if to return the freq + mostFreq = pInt + + return mostFreq, minFreq+1 + +if __name__ == "__main__": + + dostress = False + print "DATA" + print "A list:", lista + print "B list:", listb + print "C list:", listc + print "RESULT" + print "Single Frequent for a V0: " + str(singleFrequent(lista)) + print "Single Frequent for a V1: " + str(singleFrequentV02(lista)) + print "Single Frequent for b V0: " + str(singleFrequent(listb)) + print "Single Frequent for b V1: " + str(singleFrequentV02(listb)) + print "Single Frequent for c V0: " + str(singleFrequent(listc)) + print "Single Frequent for c V1: " + str(singleFrequentV02(listc)) + + listr = [] + if (dostress): + listr = my_randoms=[random.randrange(1,11,1) for _ in range (5000000)] #takes few minutes + else: + listr = my_randoms=[random.randrange(1,11,1) for _ in range (500)] + + print "Single Frequent for r V0: " + str(singleFrequent(listr)) + print "Single Frequent for r V1: " + str(singleFrequentV02(listr)) + + diff --git a/scala_solutions/Q1_MostFrequentInt.scala b/scala_solutions/Q1_MostFrequentInt.scala new file mode 100644 index 0000000..2e22349 --- /dev/null +++ b/scala_solutions/Q1_MostFrequentInt.scala @@ -0,0 +1,32 @@ +/* +# This is almost a copy paste from: +# http://stackoverflow.com/questions/13878104/finding-the-most-frequent-common-element-in-a-collection +# which is in principle under the MIT licence, See for example the discussion here: +# https://meta.stackexchange.com/questions/271080/the-mit-license-clarity-on-using-code-on-stack-overflow-and-stack-exchange +# +*/ +object MostFrequentInt extends App { +val lista = List(0, 1, 3, 2, 23, 43, 2, 1, 5, 2, 5, 2, 56, 23, 0, -1, 2, 2) +val listb = List(4, 0, 1, 0, 4, 4, 4, 4, 0, 1, 1, 1,-6, 7) +val listc = List(3, 5, 10, 3, 5, 1, 5, 3, 2, 3, 8, 4, 5, 1, 2, 7, 4, 6, 5, 8, 1, 1, 7, 10, 4, 5, 10, 5, 9, 1, 2, 10, 3, 9, 5, 10, 6, 10, 10, 8, 7, 2, 10, 7, 8, 10, 10, 7, 5, 10) + println("Start") + println(lista.groupBy(identity).maxBy(_._2.size)._1) + println(listb.groupBy(identity).maxBy(_._2.size)._1) + println(listc.groupBy(identity).maxBy(_._2.size)._1) +} + +/* +As I am new to scala, to understand the code above... if you know python and/or java and/or perl... +groupBy returns a Map (hashkey, dictionary, or similar) like: + +scala> lista.groupBy(identity) +res3: scala.collection.immutable.Map[Int,List[Int]] = Map(0 -> List(0, 0), 5 -> List(5, 5), 56 -> List(56), 1 -> List(1, 1), 2 -> List(2, 2, 2, 2, 2, 2), 3 -> List(3), -1 -> List(-1), 43 -> List(43), 23 -> List(23, 23)) + +MaxBy argument means: _ get the coming objects (the Map), + _._2 use the second argument (the List), + _._2.size of it consider the size and find the max. + + +The REPL seems to be one of the nice things of scala ;) + +*/ \ No newline at end of file diff --git a/scala_solutions/Q2_PairsEqualToTen.scala b/scala_solutions/Q2_PairsEqualToTen.scala new file mode 100644 index 0000000..9a59f21 --- /dev/null +++ b/scala_solutions/Q2_PairsEqualToTen.scala @@ -0,0 +1,52 @@ +/* +Adapted from the tutorial at: +http://docs.scala-lang.org/tutorials/tour/sequence-comprehensions.html +*/ + +object PairsEqualToTen extends App { + val lista = List(0, 1, 3, 2, 23, 43, 2, 1, 5, 2, 5, 2, 56, 23, 0, -1, 2, 2) + val listb = List(4, 0, 1, 0, 4, 4, 4, 4, 0, 1, 1, 1,-6, 7) + val listc = List(3, 5, 10, 3, 5, 1, 5, 3, 2, 3, 8, 4, 5, 1, 2, 7, 4, 6, 5, 8, 1, 1, 7, 10, 4, 5, 10, 5, 9, 1, 2, 10, 3, 9, 5, 10, 6, 10, 10, 8, 7, 2, 10, 7, 8, 10, 10, 7, 5, 10) + val listd = List(0, 1, 3, 2, 7, 43, 2, 1, 5, 2, 5, 2, 8, 23, 0, -1, 2, 2) + val liste = List(0, 1, 3, 10, 9, 7, 5, 5) + +def foo(lst: List[Int], v: Int) = + for ((i, idx) <- lst.view.zipWithIndex; + j <- lst.slice(idx+1, lst.size) if i + j == v) yield{ + //Console.println(i, j, idx, lst.slice(idx+1, lst.size)) + (i, j) + } + + Console.println(lista) + foo(lista, 10) foreach { + case (i, j) => + println(s"($i, $j)") + } + + Console.println(listb) + foo(listb, 10) foreach { + case (i, j) => + println(s"($i, $j)") + } + + Console.println(listc) + foo(listc, 10) foreach { + case (i, j) => + println(s"($i, $j)") + } + + Console.println(listd) + foo(listd, 10) foreach { + case (i, j) => + println(s"($i, $j)") + } + + Console.println(liste) + foo(liste, 10) foreach { + case (i, j) => + println(s"($i, $j)") + } + + +} + diff --git a/shell_solutions/Q1_MostFrequentInt.sh b/shell_solutions/Q1_MostFrequentInt.sh new file mode 100755 index 0000000..67bd731 --- /dev/null +++ b/shell_solutions/Q1_MostFrequentInt.sh @@ -0,0 +1,6 @@ +#! /bin/sh +# +./RandIntGen.sh | tee x.$$.data | awk '{printf("%s ",$1)} END {print}' +time cat x.$$.data | sort -n | uniq -c | sort -n | tail -3 +rm -rf x.$$.data +# diff --git a/shell_solutions/Q1_MostFrequentInt_BGI.sh b/shell_solutions/Q1_MostFrequentInt_BGI.sh new file mode 100755 index 0000000..6663dbf --- /dev/null +++ b/shell_solutions/Q1_MostFrequentInt_BGI.sh @@ -0,0 +1,4 @@ +#! /bin/sh +# +time cat x.REMOVEME.dat | sort -n | uniq -c | sort -n | tail -3 +# diff --git a/shell_solutions/RandIntGen.sh b/shell_solutions/RandIntGen.sh new file mode 100755 index 0000000..545fa55 --- /dev/null +++ b/shell_solutions/RandIntGen.sh @@ -0,0 +1,20 @@ +#! /bin/sh +# +# From: http://unix.stackexchange.com/questions/140750/generate-random-numbers-in-specific-range +# +# We just get one as example.. +awk -v min=0 -v max=9 -v rep=10 'BEGIN{srand(); ncount=0; while (ncount < rep) {ncount++; print int(min+rand()*(max-min+1))}}' +exit 0 +# On mac example +jot -r 1000 0 10 +exit 0 +# +# One more example +MACOS=1 +if [ $MACOS == 1 ]; then + gshuf -i 1-100 -n 10; +else + shuf -i 1-100 -n 10; +fi +# + diff --git a/shell_solutions/RandIntGen_BIG.sh b/shell_solutions/RandIntGen_BIG.sh new file mode 100755 index 0000000..31441f6 --- /dev/null +++ b/shell_solutions/RandIntGen_BIG.sh @@ -0,0 +1,7 @@ +#! /bin/sh +# +# See RantIntGen.sh for references +# +awk -v min=0 -v max=9 -v rep=100000000 'BEGIN{srand(); ncount=0; while (ncount < rep) {ncount++; print int(min+rand()*(max-min+1))}}' > x.REMOVEME.dat +# +