1/**
2 * Text extraction plugin.
3 */
4Draw.loadPlugin(function(ui)
5{
6	// Adds resource for action
7	mxResources.parse('page=Reorder pages...');
8
9	// Adds action
10	ui.actions.addAction('page', function()
11	{
12		var graph = ui.editor.graph;
13		var pages = ui.pages;
14
15		if (pages.length > 1)
16		{
17
18			var counter = 0;
19			var max = parseInt(prompt('Cycles', '100'));
20
21			function schedule()
22			{
23				var jitter = 1 + 0.3 * (Math.random() - 0.5);
24
25				window.setTimeout(function()
26				{
27					graph.getModel().beginUpdate();
28					try
29					{
30						// permute pages
31						var number = pages.length;
32
33						var passes = Math.floor(Math.random() * number) + 1;
34						console.log(counter + " - page reordering in " + passes + " passes");
35
36						for (var i = 0; i < passes; i++)
37						{
38							var k = Math.floor(Math.random() * number);
39							var l = Math.floor(Math.random() * number);
40							ui.movePage(k, l);
41						}
42					}
43					finally
44					{
45						graph.getModel().endUpdate();
46					}
47
48					if (counter++ < max && ui.dialog == null)
49					{
50						schedule();
51					}
52				}, 15000 * jitter);
53			}
54
55			schedule();
56		}
57		else
58		{
59			ui.alert(mxResources.get('nothingIsSelected'));
60		}
61	});
62
63	// Adds resource for action
64	mxResources.parse('place=Place pages...');
65
66	// Adds action
67	ui.actions.addAction('place', function()
68	{
69		var graph = ui.editor.graph;
70		var pages = ui.pages;
71
72		if (pages.length > 1)
73		{
74
75			var counter = 0;
76			var max = parseInt(prompt('Cycles', '100'));
77
78			function schedule()
79			{
80				var jitter = 1 + 0.3 * (Math.random() - 0.5);
81
82				window.setTimeout(function()
83				{
84					graph.getModel().beginUpdate();
85					try
86					{
87						// first insert some pages (at most 3 at a time)
88						var n = Math.floor(Math.random() * 4); // how many to insert?
89						console.log(counter + " - inserting " + n + " pages");
90						for (var i = 0; i < n; i++)
91						{
92							var k = Math.floor(Math.random() * 4000);
93							var page = ui.createPage("Page " + k);
94							var change = new ChangePage(ui, page, page, ui.pages.length);
95							graph.model.execute(change);
96						}
97
98						// next delete some pages (at most 3 at a time)
99						n = Math.floor(Math.random() * 4); // how many to delete? at least 1 should remain
100						n = Math.min(n, ui.pages.length - 1);
101						console.log(counter + " - removing " + n + " pages");
102						for (var i = 0; i < n; i++)
103						{
104							var number = ui.pages.length;
105							var k = Math.floor(Math.random() * number); // which one to delete?
106							ui.removePage(ui.pages[k]);
107						}
108
109						// permute remaining pages
110						pages = ui.pages;
111						var number = pages.length;
112
113						var passes = Math.floor(Math.random() * number) + 1;
114						console.log(counter + " - moving " + passes + " pages");
115
116						for (var i = 0; i < passes; i++)
117						{
118							var k = Math.floor(Math.random() * number);
119							var l = Math.floor(Math.random() * number);
120							ui.movePage(k, l);
121						}
122					}
123					finally
124					{
125						graph.getModel().endUpdate();
126					}
127
128					if (counter++ < max && ui.dialog == null)
129					{
130						schedule();
131					}
132				}, 15000 * jitter);
133			}
134
135			schedule();
136		}
137		else
138		{
139			ui.alert(mxResources.get('nothingIsSelected'));
140		}
141	});
142
143	var menu = ui.menus.get('extras');
144	var oldFunct = menu.funct;
145
146	menu.funct = function(menu, parent)
147	{
148		oldFunct.apply(this, arguments);
149
150		ui.menus.addMenuItems(menu, ['-', 'page', 'place'], parent);
151	};
152});
153